From 9551b0c7e51d8851b423570e2930a2b15920e241 Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Fri, 23 Sep 2016 11:55:23 +0200 Subject: [PATCH] Regen docsite --- docs/build/html/.buildinfo | 2 +- docs/build/html/_images/network-simulator.png | Bin 0 -> 928380 bytes docs/build/html/_images/visualiser.png | Bin 86049 -> 0 bytes docs/build/html/_sources/clientrpc.txt | 75 + .../_sources/corda-configuration-files.txt | 93 +- .../html/_sources/creating-a-cordapp.txt | 8 +- docs/build/html/_sources/index.txt | 23 +- .../build/html/_sources/network-simulator.txt | 41 + .../html/_sources/protocol-state-machines.txt | 6 +- docs/build/html/_sources/release-notes.txt | 13 + .../_sources/secure-coding-guidelines.txt | 47 + .../_sources/tutorial-contract-clauses.txt | 10 +- .../build/html/_sources/tutorial-contract.txt | 12 +- docs/build/html/_sources/visualiser.txt | 78 - docs/build/html/_static/basic.css | 4 + docs/build/html/api/alltypes/index.html | 808 +- .../-aggregated-list/-init-.html | 41 + .../-aggregated-list/assemble.html | 15 + .../-aggregated-list/get-source-index.html | 16 + .../-aggregated-list/get.html | 15 + .../-aggregated-list/index.html | 149 + .../-aggregated-list/size.html | 15 + .../-aggregated-list/source-changed.html | 15 + .../-aggregated-list/to-key.html | 15 + .../-amount-bindings/exchange.html | 15 + .../-amount-bindings/index.html | 38 + .../-amount-bindings/sum-amount-exchange.html | 15 + .../-amount-bindings/sum.html | 15 + .../-chosen-list/-init-.html | 26 + .../-chosen-list/get.html | 15 + .../-chosen-list/index.html | 109 + .../-chosen-list/size.html | 15 + .../-flattened-list/-init-.html | 16 + .../-wrapped-observable-value/-init-.html | 23 + .../-wrapped-observable-value/index.html | 48 + .../observable-value.html | 15 + .../-flattened-list/get-source-index.html | 15 + .../-flattened-list/get.html | 15 + .../-flattened-list/index-map.html | 15 + .../-flattened-list/index.html | 137 + .../-flattened-list/size.html | 15 + .../-flattened-list/source-changed.html | 15 + .../-flattened-list/source-list.html | 15 + .../fold-to-observable-list.html | 15 + .../fold-to-observable-value.html | 16 + .../api/com.r3corda.client.fxutils/index.html | 115 + .../bind.html | 18 + .../index.html | 32 + .../map.html | 17 + .../filter.html | 22 + .../flatten.html | 18 + .../fold.html | 18 + .../index.html | 51 + .../map.html | 17 + .../kotlin.-function1/index.html | 21 + .../kotlin.-function1/lift.html | 15 + .../kotlin.-function2/index.html | 21 + .../kotlin.-function2/lift.html | 15 + .../kotlin.-function3/index.html | 21 + .../kotlin.-function3/lift.html | 15 + .../kotlin.-function4/index.html | 21 + .../kotlin.-function4/lift.html | 15 + .../api/com.r3corda.client.fxutils/lift.html | 22 + .../-event-generator/-init-.html | 16 + .../-event-generator/amount-generator.html | 15 + .../amount-issued-generator.html | 15 + .../cash-state-generator.html | 15 + .../client-to-service-command-generator.html | 15 + .../-event-generator/consumed-generator.html | 15 + .../-event-generator/currencies.html | 15 + .../-event-generator/currency-generator.html | 15 + .../-event-generator/exit-cash-generator.html | 15 + .../-event-generator/index.html | 148 + .../issue-cash-generator.html | 15 + .../-event-generator/issue-ref-generator.html | 15 + .../-event-generator/issuer-generator.html | 15 + .../-event-generator/move-cash-generator.html | 15 + .../-event-generator}/notary.html | 8 +- .../output-state-generator.html | 15 + .../-event-generator/parties.html | 15 + .../-event-generator/party-generator.html | 15 + .../-event-generator/produced-generator.html | 15 + .../public-key-generator.html | 15 + .../service-to-client-event-generator.html | 15 + .../-generator/-init-.html | 36 + .../-generator/bind.html | 15 + .../-generator/choice.html | 15 + .../-generator/combine.html | 21 + .../-generator/fail.html | 15 + .../-generator/frequency.html | 15 + .../-generator/generate.html | 15 + .../-generator/impure.html | 15 + .../-generator/index.html | 209 + .../-generator/map.html | 15 + .../-generator/product.html | 15 + .../-generator/pure.html | 15 + .../-generator/sequence.html | 15 + .../-generator/success.html | 15 + .../com.r3corda.client.mock/double-range.html | 15 + .../api/com.r3corda.client.mock/double.html | 15 + .../generate-or-fail.html | 15 + .../api/com.r3corda.client.mock/index.html | 102 + .../com.r3corda.client.mock/int-range.html | 15 + .../html/api/com.r3corda.client.mock/int.html | 15 + .../api/com.r3corda.client.mock/one-of.html | 15 + .../api/com.r3corda.client.mock/pick-one.html | 15 + .../replicate-poisson.html | 15 + .../com.r3corda.client.mock/replicate.html | 15 + .../sample-bernoulli.html | 17 + .../-contract-state-model/-init-.html | 15 + .../cash-states-modification.html | 15 + .../-contract-state-model/cash-states.html | 15 + .../contract-states-diff.html | 15 + .../-contract-state-model/index.html | 50 + .../-exchange-rate-model/-init-.html | 16 + .../-exchange-rate-model/exchange-rate.html | 15 + .../-exchange-rate-model/index.html | 40 + .../-exchange-rate/index.html | 42 + .../-exchange-rate/rate.html | 15 + .../-init-.html | 15 + .../gathered-transaction-data-list.html | 25 + .../index.html | 40 + .../-init-.html | 14 + .../all-events.html | 16 + .../fiber-id.html | 16 + .../index.html | 78 + .../last-update.html | 16 + .../protocol-status.html | 16 + .../state-machine-status.html | 16 + .../status.html | 16 + .../transaction.html | 16 + .../uuid.html | 16 + .../all-events.html | 15 + .../-gathered-transaction-data/fiber-id.html | 15 + .../-gathered-transaction-data/index.html | 78 + .../last-update.html | 15 + .../protocol-status.html | 15 + .../state-machine-status.html | 15 + .../-gathered-transaction-data/status.html | 15 + .../transaction.html | 15 + .../-gathered-transaction-data/uuid.html | 15 + .../com.r3corda.client.model/-models/get.html | 17 + .../-models/index.html | 32 + .../-models/init-model.html | 15 + .../-node-monitor-model/-init-.html | 15 + .../client-to-service.html | 15 + .../-node-monitor-model/index.html | 62 + .../-node-monitor-model/register.html | 23 + .../service-to-client.html | 15 + .../-node-monitor-model/snapshot.html | 15 + .../-protocol-status/-init-.html | 14 + .../-protocol-status/index.html | 36 + .../-protocol-status/status.html | 15 + .../-state-machine-status/-added/-init-.html | 14 + .../-state-machine-status/-added/index.html | 47 + .../-removed/-init-.html | 14 + .../-state-machine-status/-removed/index.html | 47 + .../-state-machine-status/index.html | 70 + .../state-machine-name.html | 15 + .../-state-machine-status/to-string.html | 15 + .../-states-modification/-diff/-init-.html | 14 + .../-states-modification/-diff/added.html | 15 + .../-states-modification/-diff/index.html | 42 + .../-states-modification/-diff/removed.html | 15 + .../-states-modification/-reset/-init-.html | 14 + .../-states-modification/-reset/index.html | 36 + .../-states-modification/-reset/states.html | 15 + .../-states-modification/index.html | 48 + .../-event-sink-delegate/-init-.html | 14 + .../event-sink-property.html | 15 + .../-event-sink-delegate/get-value.html | 15 + .../-event-sink-delegate/index.html | 58 + .../-event-stream-delegate/-init-.html | 14 + .../event-stream-property.html | 15 + .../-event-stream-delegate/get-value.html | 15 + .../-event-stream-delegate/index.html | 58 + .../-object-property-delegate/-init-.html | 14 + .../-object-property-delegate/get-value.html | 15 + .../-object-property-delegate/index.html | 58 + .../object-property-property.html | 15 + .../-observable-delegate/-init-.html | 14 + .../event-stream-property.html | 15 + .../-observable-delegate/get-value.html | 15 + .../-observable-delegate/index.html | 58 + .../-observable-list-delegate/-init-.html | 14 + .../-observable-list-delegate/get-value.html | 15 + .../-observable-list-delegate/index.html | 58 + .../observable-list-property.html | 15 + .../-init-.html | 14 + .../get-value.html | 15 + .../index.html | 58 + .../observable-list-read-only-property.html | 15 + .../-observable-value-delegate/-init-.html | 14 + .../-observable-value-delegate/get-value.html | 15 + .../-observable-value-delegate/index.html | 58 + .../observable-value-property.html | 15 + .../-observer-delegate/-init-.html | 14 + .../event-stream-property.html | 15 + .../-observer-delegate/get-value.html | 15 + .../-observer-delegate/index.html | 58 + .../-writable-value-delegate/-init-.html | 14 + .../-writable-value-delegate/get-value.html | 15 + .../-writable-value-delegate/index.html | 58 + .../writable-value-property.html | 15 + .../-tracked-delegate/index.html | 143 + .../-tracked-delegate/klass.html | 15 + .../-failed/-init-.html | 14 + .../-failed/index.html | 47 + .../-started/-init-.html | 14 + .../-started/index.html | 47 + .../-transaction-create-status/index.html | 70 + .../-transaction-create-status/message.html | 15 + .../-transaction-create-status/to-string.html | 15 + .../com.r3corda.client.model/event-sink.html | 15 + .../event-stream.html | 15 + .../exchange-amount.html | 15 + .../exchange-double.html | 15 + .../api/com.r3corda.client.model/index.html | 172 + .../object-property.html | 15 + .../observable-list-read-only.html | 15 + .../observable-list.html | 15 + .../observable-value.html | 15 + .../com.r3corda.client.model/observable.html | 52 + .../com.r3corda.client.model/observer.html | 15 + .../writable-value.html | 15 + .../-corda-r-p-c-client/-init-.html | 16 + .../-corda-r-p-c-client/close.html | 16 + .../-corda-r-p-c-client/host.html | 15 + .../-corda-r-p-c-client/index.html | 122 + .../-corda-r-p-c-client/my-i-d.html | 18 + .../-corda-r-p-c-client/proxy.html | 44 + .../-corda-r-p-c-client}/start.html | 7 +- .../-node-monitor-client/-init-.html | 14 + .../-node-monitor-client/in-events.html | 15 + .../-node-monitor-client/index.html | 71 + .../-node-monitor-client/net.html | 15 + .../-node-monitor-client/node.html | 15 + .../-node-monitor-client/out-events.html | 15 + .../-node-monitor-client/register.html | 15 + .../-node-monitor-client/snapshot.html | 15 + .../html/api/com.r3corda.client/index.html | 30 + .../-cash/-clauses/-group/clauses.html | 16 - .../-cash/-clauses/-group/extract-groups.html | 16 - .../-cash/-clauses/-group/if-matched.html | 17 - .../-cash/-clauses/-group/if-not-matched.html | 17 - .../-clauses/-issue/required-commands.html | 2 +- .../-cash/-state/-init-.html | 4 +- .../-cash/-state/encumbrance.html | 30 + .../-cash/-state/index.html | 13 +- .../-cash/-state/owner.html | 2 +- .../-cash/-state/participants.html | 2 +- .../-cash/-state/product-amount.html | 16 - .../-cash/clauses.html | 16 - .../-cash/generate-exit.html | 32 - .../-cash/generate-issue.html | 8 +- .../-cash/generate-spend.html | 28 - .../-cash/index.html | 6 +- .../-clauses/-group/clauses.html | 16 - .../-clauses/-group/extract-groups.html | 17 - .../-clauses/-group/if-matched.html | 18 - .../-clauses/-group/if-not-matched.html | 18 - .../-clauses/-issue/required-commands.html | 2 +- .../-state/participants.html | 2 +- .../-commodity-contract/clauses.html | 16 - .../-commodity-contract/generate-issue.html | 8 +- .../-commodity-contract/index.html | 4 +- ...m-y_-o-b-l-i-g-a-t-i-o-n_-i-s-s-u-e-r.html | 19 + ...b-l-i-g-a-t-i-o-n_-i-s-s-u-e-r_-k-e-y.html | 19 + .../-fungible-asset-state/index.html | 100 - .../-fungible-asset-state/issuance-def.html | 15 - .../-fungible-asset-state/move.html | 15 - .../-fungible-asset-state/product-amount.html | 15 - .../-fungible-asset/-init-.html | 27 - .../-fungible-asset/-state/amount.html | 15 - .../-fungible-asset/-state/deposit.html | 16 - .../-fungible-asset/-state/exit-keys.html | 16 - .../-fungible-asset/-state/index.html | 76 - .../-fungible-asset/-state/owner.html | 17 - .../-fungible-asset/index.html | 2 +- .../-fungible-asset/verify.html | 17 - .../-bilateral-net-state/-init-.html | 17 - .../-bilateral-net-state/index.html | 48 - .../-bilateral-net-state/party-keys.html | 15 - .../-bilateral-net-state/template.html | 16 - .../-obligation/-clauses/-group/clauses.html | 16 - .../-clauses/-group/extract-groups.html | 16 - .../-clauses/-group/if-matched.html | 17 - .../-clauses/-group/if-not-matched.html | 17 - .../-clauses/-issue/required-commands.html | 2 +- .../-clauses/-set-lifecycle/if-matched.html | 17 - .../-set-lifecycle/if-not-matched.html | 17 - .../-clauses/-set-lifecycle/index.html | 2 +- .../-set-lifecycle/required-commands.html | 2 +- .../-clauses/-settle/if-matched.html | 17 - .../-clauses/-settle/if-not-matched.html | 17 - .../-obligation/-clauses/-settle/index.html | 2 +- .../-clauses/-settle/required-commands.html | 2 +- .../-verify-lifecycle/if-matched.html | 17 - .../-verify-lifecycle/if-not-matched.html | 17 - .../-clauses/-verify-lifecycle/index.html | 4 +- .../-verify-lifecycle/required-commands.html | 17 - .../-obligation/-clauses/index.html | 6 +- .../-commands/-exit/aggregate-state.html | 16 - .../-commands/-issue/aggregate-state.html | 16 - .../-commands/-move/aggregate-state.html | 16 - .../-obligation/-commands/-net/index.html | 5 +- .../-obligation/-commands/-net/type.html | 2 + .../-set-lifecycle/aggregate-state.html | 16 - .../-commands/-settle/aggregate-state.html | 16 - .../-obligation/-commands/index.html | 4 +- .../-issuance-commands/aggregate-state.html | 15 - .../-obligation/-issuance-commands/index.html | 70 - .../-issuance-definition/-init-.html | 20 - .../-issuance-definition/index.html | 62 - .../-issuance-definition/obligor.html | 15 - .../-issuance-definition/template.html | 15 - .../-multilateral-net-state/-init-.html | 20 - .../-multilateral-net-state/index.html | 48 - .../-multilateral-net-state/template.html | 16 - .../-obligation/-net-state/index.html | 53 - .../-obligation/-net-state/template.html | 15 - .../-obligation/-state-template/-init-.html | 18 - .../-state-template/acceptable-contracts.html | 16 - .../acceptable-issued-products.html | 16 - .../-state-template/due-before.html | 16 - .../-obligation/-state-template/index.html | 68 - .../-obligation/-state-template/product.html | 15 - .../-state-template/time-tolerance.html | 15 - .../-state/acceptable-contracts.html | 15 - .../acceptable-issuance-definitions.html | 15 - .../-obligation/-state/aggregate-state.html | 15 - .../-obligation/-state/participants.html | 4 +- .../-obligation/-state/product-amount.html | 16 - .../-obligation/clauses.html | 16 - .../-obligation/extract-commands.html | 16 - .../generate-close-out-netting.html | 4 +- .../-obligation/generate-exit.html | 4 +- .../-obligation/generate-issue.html | 4 +- .../-obligation/generate-payment-netting.html | 4 +- .../-obligation/generate-set-lifecycle.html | 4 +- .../-obligation/generate-settle.html | 4 +- .../-obligation/index.html | 12 +- .../-obligation/verify-issue-command.html | 15 - .../-obligation/verify-net-command.html | 16 - .../verify-set-lifecycle-command.html | 16 - .../-on-ledger-asset/clauses.html | 15 - .../-on-ledger-asset/generate-exit.html | 4 +- .../-on-ledger-asset/generate-spend.html | 8 +- .../-on-ledger-asset/index.html | 6 +- .../-on-ledger-asset/verify.html | 20 - .../cash-balances.html | 4 +- .../com.r3corda.contracts.asset/index.html | 16 +- .../sum-fungible-by.html | 18 - .../sum-fungible.html | 17 - .../generate-exit.html | 6 +- .../generate-spend.html | 8 +- .../-abstract-conserve-amount/if-matched.html | 20 - .../if-not-matched.html | 20 - .../-abstract-conserve-amount/index.html | 10 +- .../required-commands.html | 20 - .../-abstract-issue/if-matched.html | 20 - .../-abstract-issue/if-not-matched.html | 20 - .../-abstract-issue/index.html | 4 +- .../-net-clause/if-matched.html | 17 - .../-net-clause/if-not-matched.html | 17 - .../-net-clause/index.html | 4 +- .../-net-clause/required-commands.html | 2 +- .../-net-clause/verify-net-command.html | 4 +- .../-no-zero-sized-outputs/if-matched.html | 20 - .../if-not-matched.html | 20 - .../-no-zero-sized-outputs/index.html | 4 +- .../required-commands.html | 20 - .../com.r3corda.contracts.clause/index.html | 8 +- .../-command-data-generator/-init-.html | 14 + .../-command-data-generator/generate.html | 15 + .../-command-data-generator/index.html | 36 + .../-command-generator/-init-.html | 14 + .../-command-generator/generate.html | 15 + .../-command-generator/index.html | 36 + .../-contract-state-generator/-init-.html | 20 + .../-contract-state-generator/generate.html | 15 + .../-contract-state-generator/index.html | 45 + .../-exit-generator/-init-.html | 14 + .../-exit-generator/generate.html | 15 + .../-exit-generator/index.html | 36 + .../-issue-generator/-init-.html | 14 + .../-issue-generator/generate.html | 15 + .../-issue-generator/index.html | 36 + .../-move-generator/-init-.html | 14 + .../-move-generator/generate.html | 15 + .../-move-generator/index.html | 36 + .../-signed-transaction-generator/-init-.html | 14 + .../generate.html | 15 + .../-signed-transaction-generator/index.html | 36 + .../-wired-transaction-generator/-init-.html | 14 + .../generate.html | 15 + .../-wired-transaction-generator/index.html | 36 + .../fill-with-some-test-cash.html | 6 +- .../com.r3corda.contracts.testing/index.html | 60 +- .../-commands/-issue/notary.html | 15 - .../-commands/-redeem/notary.html | 15 - .../-state/participants.html | 2 +- .../generate-issue.html | 2 +- .../generate-move.html | 4 +- .../generate-redeem.html | 4 +- .../-commercial-paper-legacy/index.html | 6 +- .../-abstract-group-clause/-init-.html | 14 - .../-abstract-group-clause/if-matched.html | 17 - .../if-not-matched.html | 17 - .../-abstract-group-clause/index.html | 61 - .../-clauses/-group/clauses.html | 16 - .../-clauses/-group/extract-groups.html | 16 - .../-clauses/-group/if-matched.html | 17 - .../-clauses/-group/if-not-matched.html | 17 - .../-clauses/-issue/index.html | 2 +- .../-clauses/-issue/required-commands.html | 2 +- .../-clauses/-issue/verify.html | 2 +- .../-clauses/-move/index.html | 2 +- .../-clauses/-move/required-commands.html | 2 +- .../-clauses/-redeem/index.html | 2 +- .../-clauses/-redeem/required-commands.html | 2 +- .../-commercial-paper/-clauses/index.html | 4 +- .../-commands/-issue/notary.html | 15 - .../-commands/-redeem/notary.html | 15 - .../-state/participants.html | 4 +- .../-state/without-owner.html | 15 - .../-commercial-paper/clauses.html | 16 - .../-commercial-paper/extract-commands.html | 16 - .../-commercial-paper/generate-issue.html | 2 +- .../-commercial-paper/generate-move.html | 4 +- .../-commercial-paper/generate-redeem.html | 6 +- .../-commercial-paper/index.html | 6 +- .../-fixed-rate/to-string.html | 15 - .../-abstract-i-r-s-clause/-init-.html | 16 - .../check-leg-amounts.html | 15 - .../check-leg-dates.html | 15 - .../-abstract-i-r-s-clause/check-rates.html | 15 - .../check-schedules.html | 15 - ...get-floating-leg-payments-differences.html | 16 - .../-abstract-i-r-s-clause/if-matched.html | 17 - .../if-not-matched.html | 17 - .../-clause/-abstract-i-r-s-clause/index.html | 113 - .../-clause/-agree/-init-.html | 14 - .../-clause/-agree/index.html | 103 - .../-clause/-agree/required-commands.html | 17 - .../-clause/-agree/verify.html | 18 - .../-clause/-fix/-init-.html | 14 - .../-clause/-fix/index.html | 103 - .../-clause/-fix/required-commands.html | 17 - .../-clause/-fix/verify.html | 18 - .../-clause/-group/-init-.html | 14 - .../-clause/-group/clauses.html | 16 - .../-clause/-group/extract-groups.html | 16 - .../-clause/-group/group-states.html | 16 - .../-clause/-group/if-matched.html | 17 - .../-clause/-group/if-not-matched.html | 17 - .../-clause/-group/index.html | 87 - .../-clause/-mature/-init-.html | 14 - .../-clause/-mature/index.html | 103 - .../-clause/-mature/required-commands.html | 17 - .../-clause/-mature/verify.html | 18 - .../-clause/-pay/-init-.html | 14 - .../-clause/-pay/index.html | 103 - .../-clause/-pay/required-commands.html | 17 - .../-clause/-pay/verify.html | 18 - .../-clause/-timestamped/-init-.html | 14 - .../-clause/-timestamped/if-matched.html | 17 - .../-clause/-timestamped/if-not-matched.html | 17 - .../-clause/-timestamped/index.html | 65 - .../-timestamped/required-commands.html | 17 - .../-clause/-timestamped/verify.html | 24 - .../-interest-rate-swap/-clause/index.html | 63 - .../-abstract-i-r-s-clause/index.html | 4 +- .../-clauses/-agree/required-commands.html | 2 +- .../-clauses/-fix/required-commands.html | 2 +- .../-clauses/-mature/required-commands.html | 2 +- .../-clauses/-pay/required-commands.html | 2 +- .../-clauses/-timestamped/index.html | 4 +- .../-interest-rate-swap/-clauses/index.html | 4 +- .../-commands/-fix/-init-.html | 14 - .../-commands/-fix/index.html | 42 - .../-interest-rate-swap/-oracle-type.html | 54 + .../-state/generate-agreement.html | 2 +- .../-state/generate-fix.html | 4 +- .../-interest-rate-swap/-state/index.html | 15 +- .../-state/is-relevant.html | 2 +- .../-interest-rate-swap/-state/linear-id.html | 2 +- .../-state/oracle-type.html | 20 + .../-state/participants.html | 4 +- .../-interest-rate-swap/-state/thread.html | 17 - .../check-leg-amounts.html | 15 - .../-interest-rate-swap/check-leg-dates.html | 15 - .../-interest-rate-swap/check-rates.html | 15 - .../-interest-rate-swap/check-schedules.html | 15 - .../-interest-rate-swap/clauses.html | 16 - .../-interest-rate-swap/extract-commands.html | 15 - .../generate-agreement.html | 2 +- .../-interest-rate-swap/generate-fix.html | 4 +- ...get-floating-leg-payments-differences.html | 16 - .../-interest-rate-swap/index.html | 10 +- .../-all-composition/index.html | 12 - .../-any-composition/index.html | 18 - .../-any-composition/raw-clauses.html | 15 - .../-clause-verifier/-init-.html | 16 - .../-clause-verifier/clauses.html | 15 - .../-clause-verifier/extract-commands.html | 15 - .../-clause-verifier/index.html | 116 - .../-clause-verifier/verify.html | 20 - .../-clause/-init-.html | 28 + .../-clause/get-execution-path.html | 2 +- .../-clause/if-matched.html | 16 - .../-clause/if-not-matched.html | 16 - .../-clause/index.html | 117 +- .../-clause/required-commands.html | 2 +- .../-composite-clause/-init-.html | 3 - .../-composite-clause/index.html | 10 +- .../-composite-clause/required-commands.html | 17 - .../-concrete-clause/-init-.html | 19 - .../-concrete-clause/get-execution-path.html | 16 - .../-concrete-clause/index.html | 168 - .../-concrete-clause/required-commands.html | 17 - .../-first-composition/index.html | 12 - .../-group-clause-verifier/clauses.html | 15 - .../extract-groups.html | 15 - .../-group-clause-verifier/index.html | 4 +- .../required-commands.html | 20 - .../-group-clause.html | 108 - .../-group-verify/index.html | 36 - .../-group-verify/verify.html | 18 - .../-interceptor-clause/-init-.html | 16 - .../-interceptor-clause/clause.html | 15 - .../-interceptor-clause/if-matched.html | 20 - .../-interceptor-clause/if-not-matched.html | 20 - .../-interceptor-clause/index.html | 87 - .../-interceptor-clause/preclause.html | 15 - .../required-commands.html | 20 - .../-interceptor-clause/to-string.html | 15 - .../-interceptor-clause/verify.html | 24 - .../-match-behaviour/-c-o-n-t-i-n-u-e.html | 14 - .../-match-behaviour/-e-n-d.html | 14 - .../-match-behaviour/-e-r-r-o-r.html | 14 - .../-match-behaviour/index.html | 37 - .../-single-clause.html | 96 - .../-single-clause/-init-.html | 16 - .../-single-clause/if-matched.html | 17 - .../-single-clause/if-not-matched.html | 17 - .../-single-clause/index.html | 118 - .../-single-clause/required-commands.html | 17 - .../-single-verify/index.html | 41 - .../-single-verify/verify.html | 23 - .../index.html | 14 +- .../verify-clauses.html | 26 - .../-command-data.html | 7 + .../-commodity/symbol.html | 15 - .../-contract-state/encumbrance.html | 29 + .../-contract-state/index.html | 9 +- .../-contract-state/participants.html | 2 +- .../-contract/index.html | 14 +- .../-deal-state/generate-agreement.html | 2 +- .../-deal-state/index.html | 6 +- .../-multi-owner-state/index.html | 12 + .../-multi-owner-state/participants.html | 4 +- .../-single-owner-state/participants.html | 4 +- .../-dummy-contract/-state/index.html | 7 + .../-dummy-contract/generate-initial.html | 2 +- .../-dummy-contract/index.html | 5 +- .../-dummy-contract/move.html | 4 +- .../-dummy-state/-init-.html | 2 +- .../-dummy-state/index.html | 16 +- .../-dummy-state/participants.html | 4 +- .../-fixable-deal-state/generate-fix.html | 4 +- .../-fixable-deal-state/index.html | 16 +- .../-fixable-deal-state/oracle-type.html | 16 + .../-ledger-transaction/-init-.html | 17 - .../-ledger-transaction/attachments.html | 16 - .../-ledger-transaction/commands.html | 16 - .../-ledger-transaction/index.html | 122 - .../-ledger-transaction/inputs.html | 16 - .../-ledger-transaction/notary.html | 16 - .../-ledger-transaction/out-ref.html | 15 - .../-ledger-transaction/outputs.html | 16 - .../-ledger-transaction/signers.html | 16 - .../-ledger-transaction/timestamp.html | 15 - .../-ledger-transaction/type.html | 15 - .../-linear-state/-clause-verifier/index.html | 4 +- .../-linear-state/index.html | 21 +- .../-linear-state/is-relevant.html | 2 +- .../-linear-state/linear-id.html | 2 +- .../-linear-state/thread.html | 16 - .../-named-by-hash/index.html | 20 +- .../-net-command/index.html | 40 + .../-net-command/type.html | 16 + .../-ownable-state/index.html | 7 + .../-schedulable-state/index.html | 7 + .../-signed-transaction/-init-.html | 15 - .../get-missing-signatures.html | 16 - .../-signed-transaction/index.html | 105 - .../-signed-transaction/plus.html | 20 - .../verify-signatures.html | 21 - .../-signed-transaction/verify.html | 21 - .../with-additional-signature.html | 16 - .../with-additional-signatures.html | 15 - .../-state-and-ref/-init-.html | 2 +- .../-state-and-ref/index.html | 4 +- .../-timestamp-command/-init-.html | 19 - .../-timestamp-command/after.html | 15 - .../-timestamp-command/before.html | 15 - .../-timestamp-command/index.html | 52 - .../-timestamp-command/midpoint.html | 15 - .../-transaction-builder/-init-.html | 26 - .../-transaction-builder/add-attachment.html | 15 - .../-transaction-builder/add-command.html | 19 - .../-transaction-builder/add-input-state.html | 17 - .../add-output-state.html | 22 - .../add-signature-unchecked.html | 16 - .../-transaction-builder/commands.html | 17 - .../-transaction-builder/index.html | 247 - .../-transaction-builder/input-states.html | 15 - .../-transaction-builder/inputs.html | 15 - .../-transaction-builder/output-states.html | 15 - .../-transaction-builder/outputs.html | 15 - .../-transaction-builder/set-time.html | 30 - .../-transaction-builder/sign-with.html | 15 - .../-transaction-builder/time.html | 17 - .../-transaction-builder/timestamp.html | 15 - .../to-signed-transaction.html | 15 - .../-transaction-builder/type.html | 15 - .../-transaction-builder/with-items.html | 16 - .../-init-.html | 2 +- .../index.html | 6 +- .../-transaction-conflict-exception/tx1.html | 2 +- .../-transaction-conflict-exception/tx2.html | 2 +- .../get-timestamp-by-name.html | 18 - .../get-timestamp-by.html | 16 - .../group-commands.html | 15 - .../group-states.html | 2 +- .../-transaction-for-contract/in-states.html | 17 - .../-transaction-for-contract/out-states.html | 17 - .../-transaction-for-verification/-init-.html | 15 - .../attachments.html | 15 - .../commands.html | 15 - .../-transaction-for-verification/equals.html | 15 - .../hash-code.html | 15 - .../-transaction-for-verification/index.html | 104 - .../-transaction-for-verification/inputs.html | 15 - .../orig-hash.html | 15 - .../outputs.html | 15 - .../signers.html | 15 - .../to-transaction-for-contract.html | 15 - .../-transaction-for-verification/type.html | 15 - .../-transaction-for-verification/verify.html | 23 - .../-transaction-graph-search/-init-.html | 6 +- .../-transaction-graph-search/call.html | 2 +- .../-transaction-graph-search/index.html | 12 +- .../start-points.html | 2 +- .../-transaction-group/-init-.html | 21 - .../-transaction-group/index.html | 64 - .../non-verified-roots.html | 15 - .../-transaction-group/transactions.html | 15 - .../-transaction-group/verify.html | 16 - .../-general/-builder/-init-.html | 2 +- .../-general/-builder/index.html | 97 +- .../-general/get-required-signers.html | 4 +- .../-transaction-type/-general/index.html | 10 +- .../-general/verify-transaction.html | 4 +- .../-builder/add-input-state.html | 2 +- .../-notary-change/-builder/index.html | 94 +- .../-notary-change/get-required-signers.html | 4 +- .../-notary-change/index.html | 10 +- .../-notary-change/verify-transaction.html | 4 +- .../get-required-signers.html | 4 +- .../-transaction-type/index.html | 8 +- .../-transaction-type/verify-signers.html | 4 +- .../-transaction-type/verify-transaction.html | 4 +- .../-transaction-type/verify.html | 4 +- .../-contract-rejection/-init-.html | 2 +- .../-contract-rejection/index.html | 4 +- .../-direction/-i-n-p-u-t.html | 14 + .../-direction/-o-u-t-p-u-t.html | 14 + .../-direction/index.html | 31 + .../-invalid-notary-change/-init-.html | 2 +- .../-invalid-notary-change/index.html | 4 +- .../-more-than-one-notary/-init-.html | 2 +- .../-more-than-one-notary/index.html | 4 +- .../-init-.html | 2 +- .../index.html | 4 +- .../-signers-missing/-init-.html | 2 +- .../-signers-missing/index.html | 4 +- .../-init-.html | 14 + .../in-out.html | 15 + .../index.html | 59 + .../message.html | 15 + .../missing.html | 15 + .../index.html | 25 +- .../tx.html | 2 +- .../-wire-transaction/-init-.html | 15 - .../-wire-transaction/commands.html | 15 - .../-wire-transaction/deserialize.html | 15 - .../-wire-transaction/index.html | 135 - .../-wire-transaction/inputs.html | 15 - .../-wire-transaction/out-ref.html | 21 - .../-wire-transaction/outputs.html | 15 - .../-wire-transaction/signers.html | 15 - .../-wire-transaction/timestamp.html | 15 - .../-wire-transaction/type.html | 15 - .../api/com.r3corda.core.contracts/index.html | 57 +- .../filter-states-of-type.html | 16 - .../get-timestamp-by-name.html | 20 - .../get-timestamp-by.html | 16 - .../kotlin.collections.-list/index.html | 38 - .../require-single-command.html | 15 - .../to-ledger-transaction.html | 35 - .../verify-to-ledger-transaction.html | 17 - .../-digital-signature/covering.html | 15 - .../-secure-hash/-s-h-a256/-init-.html | 1 + .../-secure-hash/-s-h-a256/index.html | 15 +- .../-s-h-a256/signature-algorithm-name.html | 16 - .../-secure-hash/index.html | 19 +- .../signature-algorithm-name.html | 15 - .../-c-a-cert-and-key/-init-.html | 4 +- .../-c-a-cert-and-key/index.html | 8 +- .../{keypair.html => key-pair.html} | 10 +- ...-r-t_-p-r-i-v-a-t-e_-k-e-y_-a-l-i-a-s.html | 15 - .../-c-o-r-d-a_-c-l-i-e-n-t_-c-a.html | 15 + ...-l-i-e-n-t_-c-a_-p-r-i-v-a-t-e_-k-e-y.html | 15 + ...o-r-d-a_-i-n-t-e-r-m-e-d-i-a-t-e_-c-a.html | 15 + ...-d-i-a-t-e_-c-a_-p-r-i-v-a-t-e_-k-e-y.html | 15 + ...a-s.html => -c-o-r-d-a_-r-o-o-t_-c-a.html} | 10 +- ...a_-r-o-o-t_-c-a_-p-r-i-v-a-t-e_-k-e-y.html | 15 + ...-c-a_-p-r-i-v-a-t-e_-k-e-y_-a-l-i-a-s.html | 15 - ...-r-t_-p-r-i-v-a-t-e_-k-e-y_-a-l-i-a-s.html | 15 - .../add-or-replace-certificate.html | 22 + .../-x509-utilities/add-or-replace-key.html | 29 + .../create-certificate-signing-request.html | 30 + .../create-self-signed-c-a-cert.html | 6 +- .../-x509-utilities/get-x509-name.html | 15 + .../-x509-utilities/index.html | 87 +- .../load-key-pair-from-key-store.html | 2 +- ...oad-or-create-key-pair-from-key-store.html | 34 + .../load-or-create-key-store.html | 2 +- .../entropy-to-key-pair.html | 2 +- .../api/com.r3corda.core.crypto/index.html | 6 +- .../-message-handler-registration.html | 8 +- .../-messaging-service-builder/index.html | 44 - .../-messaging-service-builder/start.html | 15 - .../-messaging-service/stop.html | 15 - .../-single-message-recipient.html | 17 +- .../-mock-attachment-storage/-init-.html | 14 - .../-mock-attachment-storage/files.html | 15 - .../import-attachment.html | 31 - .../-mock-attachment-storage/index.html | 57 - .../open-attachment.html | 18 - .../-mock-identity-service/-init-.html | 14 - .../-mock-identity-service/identities.html | 15 - .../-mock-identity-service/index.html | 70 - .../party-from-key.html | 16 - .../party-from-name.html | 16 - .../register-identity.html | 16 - .../-mock-key-management-service/-init-.html | 14 - .../-mock-key-management-service/keys.html | 17 - .../next-keys.html | 15 - .../-mock-services/-init-.html | 16 - .../-mock-services/clock.html | 16 - .../-mock-services/identity-service.html | 16 - .../-mock-services/index.html | 142 - .../-mock-services/invoke-protocol-async.html | 20 - .../key-management-service.html | 16 - .../-mock-services/key.html | 15 - .../-mock-services/network-map-cache.html | 16 - .../-mock-services/network-service.html | 16 - .../-mock-services/record-transactions.html | 21 - .../-mock-services/scheduler-service.html | 16 - .../-mock-services/storage-service.html | 16 - .../-mock-services/wallet-service.html | 16 - .../-mock-storage-service/-init-.html | 14 - .../-mock-storage-service/attachments.html | 17 - .../-mock-storage-service/index.html | 71 - .../my-legal-identity-key.html | 16 - .../my-legal-identity.html | 18 - .../validated-transactions.html | 19 - .../-mock-transaction-storage/-init-.html | 14 - .../add-transaction.html | 18 - .../get-transaction.html | 17 - .../-mock-transaction-storage/index.html | 58 - .../-mock-transaction-storage/updates.html | 22 - .../index.html | 66 - .../make-test-data-source-properties.html | 19 - .../-attachment-storage/index.html | 6 - .../-identity-service/index.html | 6 - .../-key-management-service/index.html | 5 +- .../-network-map-cache/add-map-service.html | 8 +- .../-network-map-cache/index.html | 23 +- .../map-service-registered.html | 16 + .../rates-oracle-nodes.html | 16 - .../run-without-map-service.html | 16 + .../get-transaction.html | 2 +- .../-read-only-transaction-storage/index.html | 6 +- .../updates.html | 6 +- .../-scheduler-service/index.html | 4 +- .../-service-type/index.html | 12 +- ...o-p-i-c_-d-e-f-a-u-l-t_-p-o-s-t-f-i-x.html | 16 - .../-transaction-storage/add-transaction.html | 4 +- .../-transaction-storage/index.html | 14 +- .../-tx-writable-storage-service/index.html | 6 - .../-uniqueness-provider/index.html | 7 + .../-vault-service/current-vault.html | 17 + .../-vault-service/index.html | 122 + .../-vault-service/linear-heads-of-type_.html | 16 + .../linear-heads.html | 6 +- .../-vault-service/notify-all.html | 21 + .../-vault-service/notify.html | 16 + .../-vault-service/states-for-refs.html | 15 + .../updates.html | 12 +- .../-vault-service/when-consumed.html | 16 + .../-vault/-init-.html | 24 + .../{-wallet => -vault}/-no-update.html | 6 +- .../-vault/-update/-init-.html | 21 + .../{-wallet => -vault}/-update/consumed.html | 6 +- .../-vault/-update/index.html | 71 + .../{-wallet => -vault}/-update/plus.html | 8 +- .../{-wallet => -vault}/-update/produced.html | 6 +- .../-vault/-update/to-string.html | 15 + .../{-wallet => -vault}/index.html | 30 +- .../-vault/states-of-type.html | 15 + .../{-wallet => -vault}/states.html | 6 +- .../-wallet-service/current-wallet.html | 17 - .../-wallet-service/index.html | 114 - .../linear-heads-of-type_.html | 16 - .../-wallet-service/notify-all.html | 21 - .../-wallet-service/notify.html | 16 - .../-wallet-service/states-for-refs.html | 15 - .../-wallet-service/when-consumed.html | 16 - .../-wallet/-init-.html | 24 - .../-wallet/-update/-init-.html | 21 - .../-wallet/-update/index.html | 65 - .../-wallet/states-of-type.html | 15 - .../com.r3corda.core.node.services/index.html | 18 +- .../linear-heads-of-type.html | 4 +- .../-corda-plugin-registry/index.html | 14 +- .../-service-hub/index.html | 24 +- .../-service-hub/record-transactions.html | 16 +- .../-service-hub/vault-service.html | 15 + .../-service-hub/verify-transaction.html | 18 - .../-service-hub/wallet-service.html | 15 - .../-protocol-logic/index.html | 34 +- .../-protocol-logic/receive.html | 8 +- .../-protocol-logic/register-session.html | 18 + .../-protocol-logic/send-and-receive.html | 6 +- .../-protocol-logic/send.html | 4 +- .../-protocol-logic/sub-protocol.html | 9 +- .../-protocol-state-machine/index.html | 4 +- .../-protocol-state-machine/receive.html | 2 +- .../send-and-receive.html | 2 +- .../ed25519-curve.html | 15 - .../ed25519-curve.html | 15 - .../-init-.html | 2 +- .../-missing-attachments-exception/index.html | 4 +- .../-opaque-bytes/index.html | 4 +- .../-serialize-as-token/index.html | 7 - .../-serialized-bytes/index.html | 2 +- .../-singleton-serialize-as-token/index.html | 70 +- .../-wire-transaction-serializer/index.html | 4 +- .../-wire-transaction-serializer/read.html | 4 +- .../-wire-transaction-serializer/write.html | 4 +- .../deserialize.html | 4 +- .../com.r3corda.core.serialization/index.html | 4 +- .../com.r3corda.core.testing/-a-l-i-c-e.html | 15 - .../-a-l-i-c-e_-k-e-y.html | 15 - .../-a-l-i-c-e_-p-u-b-k-e-y.html | 15 - .../-a-l-l_-t-e-s-t_-k-e-y-s.html | 15 - .../-always-succeed-contract/-init-.html | 14 - .../-always-succeed-contract/index.html | 53 - .../legal-contract-reference.html | 18 - .../-always-succeed-contract/verify.html | 20 - .../-amount-generator/-init-.html | 14 + .../-amount-generator/generate.html | 15 + .../-amount-generator/index.html | 47 + .../-amount-generator/token-generator.html | 15 + .../-init-.html | 14 - .../index.html | 36 - .../api/com.r3corda.core.testing/-b-o-b.html | 15 - .../-b-o-b_-k-e-y.html | 15 - .../-b-o-b_-p-u-b-k-e-y.html | 15 - .../-c-h-a-r-l-i-e.html | 15 - .../-c-h-a-r-l-i-e_-k-e-y.html | 15 - .../-c-h-a-r-l-i-e_-p-u-b-k-e-y.html | 15 - .../-currency-generator/-init-.html | 14 + .../-currency-generator/currencies.html | 15 + .../-currency-generator/generate.html | 15 + .../-currency-generator/index.html | 47 + .../-d-u-m-m-y_-k-e-y_3.html | 15 - .../-dummy-linear-contract/-state/-init-.html | 14 - .../-state/contract.html | 43 - .../-dummy-linear-contract/-state/index.html | 71 - .../-state/is-relevant.html | 17 - .../-state/linear-id.html | 19 - .../-dummy-linear-contract/-state/nonce.html | 15 - .../-state/participants.html | 25 - .../-dummy-linear-contract/clause.html | 15 - .../-dummy-linear-contract/index.html | 70 - .../legal-contract-reference.html | 18 - .../-dummy-linear-contract/verify.html | 20 - .../-dummy-linear-state/-init-.html | 14 - .../-dummy-linear-state/contract.html | 43 - .../-dummy-linear-state/index.html | 81 - .../-dummy-linear-state/is-relevant.html | 17 - .../-dummy-linear-state/nonce.html | 15 - .../-dummy-linear-state/participants.html | 25 - .../-dummy-linear-state/thread.html | 17 - .../-duplicate-output-label/-init-.html | 14 - .../-duplicate-output-label/index.html | 36 - .../-duration-generator/-init-.html | 14 + .../-duration-generator/generate.html | 15 + .../-duration-generator/index.html | 36 + .../-enforce-verify-or-fail.html | 18 - .../-in-memory-vault-service/-init-.html | 17 + .../-inner-state/-init-.html | 4 +- .../-inner-state/index.html | 8 +- .../-inner-state/vault.html | 15 + .../current-vault.html | 22 + .../-in-memory-vault-service/index.html | 150 + .../linear-heads.html | 8 +- .../log.html | 6 +- .../mutex.html | 6 +- .../-in-memory-vault-service/notify-all.html | 22 + .../services.html | 6 +- .../updates.html | 18 +- .../-clashing-threads/-init-.html | 14 - .../-clashing-threads/index.html | 25 - .../-in-memory-wallet-service/-init-.html | 17 - .../-inner-state/wallet.html | 15 - .../clashing-threads.html | 15 - .../current-wallet.html | 22 - .../-in-memory-wallet-service/index.html | 163 - .../-in-memory-wallet-service/notify-all.html | 22 - .../-instant-generator/-init-.html | 14 + .../-instant-generator/generate.html | 15 + .../-instant-generator/index.html | 36 + .../-issued-generator/-init-.html | 14 + .../-issued-generator/generate.html | 15 + .../-issued-generator/index.html | 47 + .../-issued-generator/product-generator.html | 15 + .../_transaction.html | 27 - .../_unverified-transaction.html | 27 - .../-ledger-d-s-l-interpreter/attachment.html | 21 - .../-ledger-d-s-l-interpreter/index.html | 122 - .../-ledger-d-s-l-interpreter/tweak.html | 19 - .../-ledger-d-s-l/-init-.html | 18 - .../-ledger-d-s-l/index.html | 98 - .../-ledger-d-s-l/interpreter.html | 15 - .../-ledger-d-s-l/output-ref.html | 19 - .../-ledger-d-s-l/output-state-and-ref.html | 18 - .../-ledger-d-s-l/output.html | 19 - .../-ledger-d-s-l/retrieve-output.html | 18 - .../-ledger-d-s-l/transaction.html | 18 - .../-ledger-d-s-l/unverified-transaction.html | 18 - .../-m-e-g-a_-c-o-r-p.html | 15 - .../-m-e-g-a_-c-o-r-p_-k-e-y.html | 15 - .../-m-e-g-a_-c-o-r-p_-p-u-b-k-e-y.html | 15 - .../-m-i-n-i_-c-o-r-p.html | 15 - .../-m-i-n-i_-c-o-r-p_-k-e-y.html | 15 - .../-m-i-n-i_-c-o-r-p_-p-u-b-k-e-y.html | 15 - ...o-c-k_-i-d-e-n-t-i-t-y_-s-e-r-v-i-c-e.html | 15 - .../-o-r-a-c-l-e_-k-e-y.html | 15 - .../-o-r-a-c-l-e_-p-u-b-k-e-y.html | 15 - .../-output-state-lookup/index.html | 55 - .../retrieve-output-state-and-ref.html | 24 - .../-init-.html | 14 + .../generate.html | 15 + .../-party-and-reference-generator/index.html | 36 + .../-party-generator/-init-.html | 14 + .../-party-generator/generate.html | 15 + .../-party-generator/index.html | 36 + .../-init-.html | 6 +- .../-private-key-generator/generate.html | 15 + .../-private-key-generator/index.html | 36 + .../-public-key-generator/-init-.html | 14 + .../-public-key-generator/generate.html | 15 + .../-public-key-generator/index.html | 36 + .../-secure-hash-generator/-init-.html | 14 + .../-secure-hash-generator/generate.html | 15 + .../-secure-hash-generator/index.html | 36 + .../-state-ref-generator/-init-.html | 14 + .../-state-ref-generator/generate.html | 15 + .../-state-ref-generator/index.html | 36 + .../-t-e-s-t_-t-x_-t-i-m-e.html | 28 - .../-init-.html | 14 - .../-type-mismatch/-init-.html | 14 - .../-type-mismatch/index.html | 25 - .../-verifies-failed/-init-.html | 14 - .../-verifies-failed/index.html | 25 - .../_transaction.html | 27 - .../_unverified-transaction.html | 27 - .../attachment.html | 22 - .../-test-ledger-d-s-l-interpreter/index.html | 141 - .../output-to-label.html | 15 - .../retrieve-output-state-and-ref.html | 25 - .../services.html | 15 - .../to-transaction-group.html | 15 - .../transaction-name.html | 15 - .../transactions-to-verify.html | 15 - .../transactions-unverified.html | 15 - .../-test-ledger-d-s-l-interpreter/tweak.html | 19 - .../verifies.html | 17 - .../wire-transactions.html | 15 - .../-init-.html | 14 - .../_command.html | 23 - .../_output.html | 26 - .../attachment.html | 20 - .../index.html | 124 - .../input.html | 20 - .../ledger-interpreter.html | 17 - .../services.html | 15 - .../timestamp.html | 20 - .../transaction-builder.html | 15 - .../tweak.html | 20 - .../verifies.html | 17 - .../-timestamp-generator/-init-.html | 14 + .../-timestamp-generator/generate.html | 15 + .../-timestamp-generator/index.html | 36 + .../_command.html | 22 - .../_output.html | 25 - .../attachment.html | 19 - .../-transaction-d-s-l-interpreter/index.html | 154 - .../-transaction-d-s-l-interpreter/input.html | 19 - .../ledger-interpreter.html | 16 - .../timestamp.html | 19 - .../-transaction-d-s-l-interpreter/tweak.html | 19 - .../-transaction-d-s-l/-init-.html | 14 - .../-transaction-d-s-l/command.html | 20 - .../-transaction-d-s-l/index.html | 91 - .../-transaction-d-s-l/input.html | 32 - .../-transaction-d-s-l/interpreter.html | 15 - .../-transaction-d-s-l/output.html | 24 - .../-transaction-d-s-l/timestamp.html | 22 - .../-transaction-state-generator/-init-.html | 14 + .../generate.html | 15 + .../-transaction-state-generator/index.html | 47 + .../state-generator.html | 15 + .../-verifies/fails with.html | 18 - .../-verifies/fails-with.html | 19 - .../-verifies/fails.html | 16 - .../-verifies/index.html | 66 - .../-verifies/verifies.html | 16 - .../free-local-host-and-port.html | 15 - .../generate-list.html | 19 + .../generate-state-ref.html | 15 - .../api/com.r3corda.core.testing/index.html | 290 +- .../api/com.r3corda.core.testing/ledger.html | 31 - .../root-cause-exceptions.html | 16 - .../com.r3corda.core.testing/sign-all.html | 34 - .../com.r3corda.core.testing/transaction.html | 25 - .../-base-transaction/-init-.html | 15 + .../-base-transaction/check-invariants.html | 15 + .../-base-transaction/equals.html | 15 + .../-base-transaction}/hash-code.html | 6 +- .../-base-transaction/index.html | 136 + .../-base-transaction/inputs.html | 16 + .../-base-transaction/must-sign.html | 19 + .../-base-transaction/notary.html | 18 + .../-base-transaction/outputs.html | 16 + .../-base-transaction/timestamp.html | 17 + .../-base-transaction/type.html | 16 + .../-ledger-transaction/-init-.html | 23 + .../-ledger-transaction/attachments.html | 16 + .../-ledger-transaction/commands.html | 16 + .../-ledger-transaction/equals.html | 16 + .../-ledger-transaction/hash-code.html | 16 + .../-ledger-transaction/id.html | 6 +- .../-ledger-transaction/index.html | 162 + .../-ledger-transaction/inputs.html | 17 + .../-ledger-transaction/out-ref.html | 15 + .../to-transaction-for-contract.html | 6 +- .../-ledger-transaction/verify.html | 4 +- .../-signed-transaction/-init-.html | 20 + .../-signatures-missing-exception/-init-.html | 14 + .../descriptions.html | 15 + .../-signatures-missing-exception/id.html | 16 + .../-signatures-missing-exception/index.html | 59 + .../missing.html | 15 + .../to-string.html | 6 +- .../check-signatures-are-valid.html | 22 + .../-signed-transaction/id.html | 6 +- .../-signed-transaction/index.html | 134 + .../-signed-transaction/plus.html | 21 + .../-signed-transaction/sigs.html | 4 +- .../to-ledger-transaction.html | 30 + .../-signed-transaction/tx-bits.html | 4 +- .../-signed-transaction/tx.html | 4 +- .../verify-signatures.html | 29 + .../with-additional-signature.html | 16 + .../with-additional-signatures.html | 16 + .../-transaction-builder/-init-.html | 31 + .../-transaction-builder/add-attachment.html | 15 + .../-transaction-builder/add-command.html | 19 + .../-transaction-builder/add-input-state.html | 15 + .../add-output-state.html | 22 + .../add-signature-unchecked.html | 16 + .../-transaction-builder/attachments.html | 6 +- .../check-and-add-signature.html | 6 +- .../-transaction-builder/check-signature.html | 6 +- .../-transaction-builder/commands.html | 17 + .../-transaction-builder/copy.html | 4 +- .../-transaction-builder/current-sigs.html | 4 +- .../-transaction-builder/index.html | 251 + .../-transaction-builder/input-states.html | 15 + .../-transaction-builder/inputs.html | 15 + .../-transaction-builder/notary.html | 4 +- .../-transaction-builder/output-states.html | 15 + .../-transaction-builder/outputs.html | 15 + .../-transaction-builder/set-time.html | 30 + .../-transaction-builder/sign-with.html | 15 + .../-transaction-builder/signers.html | 4 +- .../-transaction-builder/time.html | 15 + .../-transaction-builder/timestamp.html | 15 + .../to-signed-transaction.html | 15 + .../to-wire-transaction.html | 4 +- .../-transaction-builder/type.html | 15 + .../-transaction-builder/with-items.html | 16 + .../-wire-transaction/-init-.html | 18 + .../-wire-transaction/attachments.html | 5 +- .../-wire-transaction/commands.html | 16 + .../-wire-transaction/deserialize.html | 15 + .../-wire-transaction/equals.html | 16 + .../-wire-transaction/hash-code.html | 16 + .../-wire-transaction/id.html | 6 +- .../-wire-transaction/index.html | 178 + .../-wire-transaction/inputs.html | 17 + .../-wire-transaction/out-ref.html | 21 + .../-wire-transaction/serialized.html | 4 +- .../to-ledger-transaction.html | 23 + .../-wire-transaction/to-string.html | 4 +- .../com.r3corda.core.transactions/index.html | 61 + .../-brief-log-formatter/-init-.html | 15 - .../-brief-log-formatter/format.html | 15 - .../-brief-log-formatter/index.html | 73 - .../-brief-log-formatter/init-verbose.html | 18 - .../-brief-log-formatter/init.html | 16 - .../-brief-log-formatter/logging-off.html | 17 - .../-brief-log-formatter/logging-on.html | 17 - .../-d-u-m-m-y_-k-e-y_1.html | 4 +- .../-d-u-m-m-y_-k-e-y_2.html | 4 +- .../-d-u-m-m-y_-n-o-t-a-r-y.html | 4 +- .../-d-u-m-m-y_-n-o-t-a-r-y_-k-e-y.html | 4 +- .../-d-u-m-m-y_-p-u-b-k-e-y_1.html | 4 +- .../-d-u-m-m-y_-p-u-b-k-e-y_2.html | 4 +- .../-progress-tracker/-step/index.html | 6 - .../-recording-map/-get/-init-.html | 14 - .../-recording-map/-get/index.html | 36 - .../-recording-map/-get/key.html | 15 - .../-recording-map/-init-.html | 19 - .../-recording-map/-put/-init-.html | 14 - .../-recording-map/-put/index.html | 42 - .../-recording-map/-put/key.html | 15 - .../-recording-map/-put/value.html | 15 - .../-recording-map/-record.html | 31 - .../-recording-map/clear-records.html | 15 - .../-recording-map/get.html | 15 - .../-recording-map/index.html | 102 - .../-recording-map/put-all-unrecorded.html | 15 - .../-recording-map/put-all.html | 15 - .../-recording-map/put.html | 15 - .../-recording-map/records.html | 16 - .../-t-e-s-t_-t-x_-t-i-m-e.html | 15 + .../-untrustworthy-data/index.html | 8 +- .../-untrustworthy-data/unwrap.html | 15 + .../-untrustworthy-data/validate.html | 4 +- .../api/com.r3corda.core.utilities/debug.html | 15 + .../api/com.r3corda.core.utilities/index.html | 53 + .../com.r3corda.core/-error-or/-init-.html | 14 + .../api/com.r3corda.core/-error-or/bind.html | 15 + .../api/com.r3corda.core/-error-or/catch.html | 16 + .../com.r3corda.core/-error-or/combine.html | 15 + .../api/com.r3corda.core/-error-or/error.html | 15 + .../-error-or/get-or-throw.html | 15 + .../api/com.r3corda.core/-error-or/index.html | 96 + .../api/com.r3corda.core/-error-or/map.html | 15 + .../api/com.r3corda.core/-error-or/match.html | 15 + .../api/com.r3corda.core/-error-or/of.html | 15 + .../api/com.r3corda.core/-error-or/value.html | 15 + .../-retryable-exception/index.html | 2 +- .../buffer-until-subscribed.html | 19 + .../html/api/com.r3corda.core/index.html | 20 + .../java.nio.file.-path/div.html | 16 + .../java.nio.file.-path/index.html | 7 + .../java.util.concurrent.-future/index.html | 21 + .../java.util.concurrent.-future/map.html | 15 + .../-fix-container/-init-.html | 15 + .../-fix-container/factory.html | 4 +- .../-fix-container/get.html | 15 + .../-fix-container/index.html | 55 + .../-fix-container/size.html | 4 +- .../-interpolating-rate-map/-init-.html | 16 + .../-interpolating-rate-map/calendar.html | 4 +- .../-interpolating-rate-map/date.html | 4 +- .../-interpolating-rate-map/factory.html | 4 +- .../-interpolating-rate-map/get-rate.html | 17 + .../-interpolating-rate-map/index.html | 72 + .../-interpolating-rate-map/size.html | 4 +- .../-node-interest-rates/-oracle/-init-.html | 18 + .../-node-interest-rates/-oracle/clock.html | 4 +- .../-oracle/identity.html | 4 +- .../-node-interest-rates/-oracle/index.html | 73 + .../-oracle/known-fixes.html | 4 +- .../-node-interest-rates/-oracle/query.html | 18 + .../-node-interest-rates/-oracle/sign.html | 15 + .../-node-interest-rates/-plugin/-init-.html | 2 +- .../-node-interest-rates/-plugin/index.html | 2 +- .../-plugin/required-protocols.html | 4 +- .../-plugin/service-plugins.html | 4 +- .../-node-interest-rates/-service/-init-.html | 15 + .../-service/acceptable-file-extensions.html | 4 +- .../-service/data-type-prefix.html | 4 +- .../-node-interest-rates/-service/index.html | 113 + .../-node-interest-rates/-service/oracle.html | 4 +- .../-node-interest-rates/-service/ss.html | 4 +- .../-node-interest-rates/-service/upload.html | 18 + .../-node-interest-rates/-type.html | 2 +- .../-unknown-fix/-init-.html | 14 + .../-unknown-fix/fix.html | 4 +- .../-unknown-fix/index.html | 4 +- .../-node-interest-rates/index.html | 8 +- .../-node-interest-rates/parse-file.html | 16 + .../-node-interest-rates/parse-fix-of.html | 16 + .../-node-interest-rates/parse-fix.html | 16 + .../html/api/com.r3corda.demos.api/index.html | 8 + .../-auto-offer-message/-init-.html | 2 +- .../-auto-offer-message/index.html | 29 +- ...her-side.html => receive-session-i-d.html} | 11 +- .../-auto-offer-message}/reply-to-party.html | 6 +- ...session-i-d.html => send-session-i-d.html} | 11 +- .../-handler/-callback/-init-.html | 14 - .../-handler/-callback/index.html | 53 - .../-handler/-callback/on-failure.html | 15 - .../-handler/-callback/on-success.html | 15 - .../-handler/-callback/success.html | 15 - .../child-progress-tracker.html | 16 - .../-handler/-d-e-a-l-i-n-g/index.html | 42 - .../-handler/-r-e-c-e-i-v-e-d.html | 42 - .../-auto-offer-protocol/-handler/index.html | 54 - .../-handler/register.html | 15 - .../-handler/tracker.html | 15 - .../-auto-offer-protocol/-requester/call.html | 2 +- .../-requester/index.html | 24 +- .../-service/-callback/-init-.html | 2 +- .../-service/-callback/index.html | 6 +- .../-service/-callback/on-success.html | 4 +- .../-service/-callback/success.html | 2 +- .../-service/-r-e-c-e-i-v-e-d.html | 42 - .../-auto-offer-protocol/-service/index.html | 50 +- .../-auto-offer-protocol/index.html | 6 +- .../-broadcast/index.html | 20 +- .../-exit-message/-init-.html | 2 +- .../-exit-message/index.html | 33 +- .../-exit-message/receive-session-i-d.html | 16 + .../-exit-message}/reply-to-party.html | 6 +- .../-exit-message/send-session-i-d.html | 16 + .../-exit-server-protocol/-handler/index.html | 25 - .../-handler/register.html | 15 - .../-exit-server-protocol/index.html | 2 +- .../-broadcast/index.html | 20 +- .../-handler/index.html | 25 - .../-handler/register.html | 15 - .../-update-business-day-message/-init-.html | 2 +- .../-update-business-day-message/index.html | 33 +- .../receive-session-i-d.html | 16 + .../reply-to-party.html | 16 + .../send-session-i-d.html | 16 + .../-update-business-day-protocol/index.html | 2 +- .../-cli-params-spec/index.html | 6 - .../network-map-identity-file.html | 15 - .../-cli-params/-run-node/-init-.html | 2 +- .../-cli-params/-run-node/identity-file.html | 15 - .../-cli-params/-run-node/index.html | 8 +- .../-cli-params/-upload-rates/-init-.html | 15 + .../-upload-rates/api-address.html | 15 + .../-cli-params/-upload-rates/index.html | 38 + .../com.r3corda.demos/-cli-params/index.html | 14 + .../-d-e-m-o_-t-o-p-i-c.html | 15 - .../com.r3corda.demos/-demo-clock/index.html | 6 +- .../-i-r-s-demo-role/-rates.html | 14 + .../-i-r-s-demo-role/index.html | 6 + .../html/api/com.r3corda.demos/index.html | 6 + .../com.r3corda.demos/run-trader-demo.html | 15 - .../com.r3corda.demos/run-upload-rates.html | 15 + .../-a-p-i-server/build-transaction.html | 2 +- .../-a-p-i-server/commit-transaction.html | 4 +- .../-a-p-i-server/fetch-transactions.html | 2 +- .../generate-transaction-signature.html | 4 +- .../-a-p-i-server/index.html | 8 +- .../-states-query/select-all-deals.html | 15 - .../-states-query/select-deal.html | 15 - .../index.html | 6 +- .../start-client.html | 4 +- .../index.html | 6 +- .../-driver-d-s-l/-state/clients.html | 2 +- .../-driver-d-s-l/-state/index.html | 2 +- .../-driver-d-s-l/index.html | 6 +- .../-driver-d-s-l/start-client.html | 4 +- .../-node-runner/-cli-params/-init-.html | 14 - .../-node-runner/-cli-params/api-address.html | 17 - .../-cli-params/base-directory.html | 17 - .../-node-runner/-cli-params/index.html | 147 - .../-cli-params/messaging-address.html | 17 - .../-cli-params/network-map-address.html | 17 - .../-cli-params/network-map-name.html | 17 - .../-cli-params/network-map-public-key.html | 17 - .../-node-runner/-cli-params/parse.html | 15 - .../-node-runner/-cli-params/parser.html | 15 - .../-node-runner/-cli-params/services.html | 17 - .../-cli-params/to-cli-arguments.html | 15 - .../-node-runner/-init-.html | 14 - .../-node-runner/index.html | 47 - .../-node-runner/main.html | 15 - .../-port-allocation/-random-free/index.html | 2 +- .../-random-free/next-port.html | 2 +- .../create-node-run-directory.html | 15 - .../api/com.r3corda.node.driver/index.html | 18 +- .../com.r3corda.node.driver/start-client.html | 4 +- .../com.r3corda.node.driver/write-config.html | 4 +- .../-i-r-s-simulation/-init-.html | 15 - .../-basket-of-nodes/-init-.html | 16 - .../-mock-network/-basket-of-nodes/index.html | 52 - .../-basket-of-nodes/map-node.html | 15 - .../-basket-of-nodes/notary-node.html | 15 - .../-basket-of-nodes/party-nodes.html | 15 - .../-default-factory/create.html | 16 - .../-mock-network/-default-factory/index.html | 25 - .../-mock-network/-factory/create.html | 15 - .../-mock-network/-factory/index.html | 67 - .../-mock-network/-init-.html | 23 - .../-mock-network/-mock-node/-init-.html | 14 - .../-mock-node/find-my-location.html | 16 - .../-mock-node/generate-key-pair.html | 16 - .../-mock-network/-mock-node/id.html | 15 - .../-mock-network/-mock-node/index.html | 386 - .../-mock-network/-mock-node/key-pair.html | 15 - .../-mock-network/-mock-node/log.html | 16 - .../-mock-node/make-identity-service.html | 16 - .../-mock-node/make-messaging-service.html | 16 - .../-mock-node/make-wallet-service.html | 16 - .../-mock-network/-mock-node/mock-net.html | 15 - .../-mock-node/no-network-map-configured.html | 17 - .../-mock-network/-mock-node/place.html | 15 - .../-mock-node/server-thread.html | 16 - .../-mock-node/start-messaging-service.html | 16 - .../-mock-network/-mock-node/start.html | 16 - .../-mock-network/address-to-node.html | 15 - .../-mock-network/create-node.html | 16 - .../-mock-network/create-notary-node.html | 15 - .../-mock-network/create-party-node.html | 15 - .../-mock-network/create-some-nodes.html | 17 - .../-mock-network/create-two-nodes.html | 17 - .../-mock-network/filesystem.html | 15 - .../-mock-network/identities.html | 15 - .../-mock-network/index.html | 166 - .../-mock-network/messaging-network.html | 15 - .../-mock-network/nodes.html | 16 - .../-mock-network/run-network.html | 19 - .../-mock-network/start-nodes.html | 15 - .../-mock-network/stop-nodes.html | 15 - .../-simulation/-bank-factory/create.html | 16 - .../-simulation/-bank-factory/index.html | 53 - .../-simulation/-init-.html | 19 - .../-network-map-node-factory/create.html | 16 - .../-network-map-node-factory/index.html | 25 - .../-notary-node-factory/create.html | 16 - .../-notary-node-factory/index.html | 25 - .../-rates-oracle-factory/create.html | 16 - .../-rates-oracle-factory/index.html | 25 - .../-regulator-factory/create.html | 16 - .../-simulation/-regulator-factory/index.html | 25 - .../-simulation/-simulated-node/-init-.html | 14 - .../-simulation/-simulated-node/index.html | 125 - .../-simulation/latency-injector.html | 15 - .../-simulation/network.html | 15 - .../-simulation/run-async.html | 15 - .../-simulation/show-consensus-for.html | 15 - .../-simulation/show-progress-for.html | 15 - .../-simulation/start-trading-circle.html | 17 - .../-test-clock/-init-.html | 15 - .../-test-clock/advance-by.html | 16 - .../-test-clock/get-zone.html | 15 - .../-test-clock/index.html | 114 - .../-test-clock/instant.html | 15 - .../-test-clock/set-to.html | 19 - .../-test-clock/to-token.html | 16 - .../-test-clock/with-zone.html | 17 - .../-trade-simulation/-init-.html | 16 - .../index.html | 64 - .../kotlin.collections.-iterable/index.html | 23 - .../kotlin.collections.-iterable/set-to.html | 17 - .../-a-p-i-server-impl/build-transaction.html | 2 +- .../commit-transaction.html | 4 +- .../fetch-transactions.html | 2 +- .../generate-transaction-signature.html | 4 +- .../-a-p-i-server-impl/index.html | 8 +- .../-init-.html | 14 + .../index.html | 25 + .../-abstract-node/-init-.html | 2 +- .../-abstract-node/close-on-stop.html | 15 - .../construct-storage-service.html | 2 +- .../-abstract-node/dir.html | 15 - .../in-node-monitor-service.html | 15 + .../in-node-wallet-monitor-service.html | 15 - .../-abstract-node/index.html | 91 +- .../initialise-database-persistence.html | 15 + .../interest-rates-service.html | 15 - .../-abstract-node/key-management.html | 2 +- .../make-interest-rates-oracle-service.html | 15 - ....html => make-key-management-service.html} | 10 +- .../-abstract-node/make-monitor-service.html | 15 + .../make-uniqueness-provider.html | 15 + .../-abstract-node/make-vault-service.html | 15 + .../-abstract-node/make-wallet-service.html | 15 - .../-abstract-node/network-map-service.html | 2 +- .../-abstract-node/run-on-stop.html | 15 + .../-abstract-node/uniqueness-provider.html | 15 + .../-abstract-node/vault.html | 15 + .../-abstract-node/wallet.html | 15 - .../-node/-init-.html | 2 +- .../-node/index.html | 82 +- .../-node/make-uniqueness-provider.html | 16 + .../-server-r-p-c-ops/-init-.html | 16 + .../-server-r-p-c-ops/index.html | 41 + .../-server-r-p-c-ops/protocol-version.html | 17 + .../api/com.r3corda.node.internal/index.html | 8 + .../-node-clock/index.html | 4 +- .../-abstract-node-service/-init-.html | 2 +- .../add-message-handler.html | 4 +- .../add-protocol-handler.html | 33 + .../-abstract-node-service/index.html | 62 +- .../-abstract-node-service}/logger.html | 6 +- .../-abstract-node-service/net.html | 2 +- .../network-map-cache.html | 15 - .../-abstract-node-service/services.html | 15 + .../-accepts-file-upload/index.html | 4 +- .../-checkpoint/-init-.html | 2 +- .../-checkpoint/awaiting-payload-type.html | 15 - .../-checkpoint/awaiting-topic.html | 15 - .../-checkpoint/fiber-created.html | 15 + .../-checkpoint/index.html | 16 +- .../-checkpoint/request.html | 2 +- .../-messaging-service-builder/index.html | 11 - .../-messaging-service-internal/index.html | 15 +- .../register-trusted-address.html | 15 - .../-service-hub-internal/index.html | 16 +- .../-service/index.html | 44 +- .../-fixing-session-initiation/index.html | 2 +- .../-fix-container/-init-.html | 15 - .../-fix-container/fixes.html | 15 - .../-fix-container/get.html | 15 - .../-fix-container/index.html | 55 - .../-interpolating-rate-map/-init-.html | 16 - .../-interpolating-rate-map/get-rate.html | 17 - .../-interpolating-rate-map/index.html | 72 - .../-interpolating-rate-map/input-rates.html | 15 - .../-node-interest-rates/-oracle/-init-.html | 18 - .../-node-interest-rates/-oracle/index.html | 73 - .../-node-interest-rates/-oracle/query.html | 18 - .../-node-interest-rates/-oracle/sign.html | 15 - .../-fixing-service-plugin/-init-.html | 15 - .../-fixing-service-plugin/index.html | 52 - .../required-protocols.html | 21 - .../-fixing-service-plugin/web-apis.html | 19 - .../-node-interest-rates/-service/-init-.html | 15 - .../-node-interest-rates/-service/index.html | 105 - .../-node-interest-rates/-service/upload.html | 18 - .../-unknown-fix/-init-.html | 14 - .../-node-interest-rates/parse-file.html | 16 - .../-node-interest-rates/parse-fix-of.html | 16 - .../-node-interest-rates/parse-fix.html | 16 - .../index.html | 8 - .../-full-node-configuration/basedir.html | 1 + .../certificate-signing-service.html | 16 + .../-full-node-configuration/dev-mode.html | 16 + .../email-address.html | 16 + .../-full-node-configuration/index.html | 41 +- .../key-store-password.html | 2 +- ...-service.html => network-map-address.html} | 10 +- .../trust-store-password.html | 2 +- .../-name-service-config/-init-.html | 14 - .../-name-service-config/address.html | 15 - .../host-service-locally.html | 15 - .../-name-service-config/identity.html | 15 - .../-name-service-config/index.html | 48 - .../basedir.html | 16 + .../certificate-signing-service.html | 16 + .../dev-mode.html | 16 + .../email-address.html | 16 + .../index.html | 35 + .../key-store-password.html | 2 +- .../trust-store-password.html | 2 +- .../-node-configuration/basedir.html | 15 + .../certificate-signing-service.html | 15 + .../certificates-path.html | 16 + .../-node-configuration/dev-mode.html | 15 + .../-node-configuration/email-address.html | 15 + .../-node-configuration/index.html | 59 +- .../certificates-path.html | 15 + .../-node-s-s-l-configuration/index.html | 60 + .../key-store-password.html | 6 +- .../key-store-path.html | 15 + .../trust-store-password.html | 6 +- .../trust-store-path.html | 15 + .../-optional-config/-init-.html | 15 + .../-optional-config/conf.html | 15 + .../-optional-config/get-value.html | 15 + .../-optional-config/index.html | 55 + .../-optional-config/lambda.html | 15 + .../get-or-else.html | 15 + .../index.html | 27 +- .../-node-scheduler-service/-init-.html | 2 +- .../-node-scheduler-service/index.html | 4 +- .../-scheduled-activity-observer/-init-.html | 2 +- .../-scheduled-activity-observer/index.html | 4 +- .../index.html | 4 +- .../-init-.html | 19 + .../fresh-key.html | 6 +- .../index.html | 24 +- .../keys.html | 20 + .../com.r3corda.node.services.keys/index.html | 7 + .../-handler/-init-.html | 15 - .../-artemis-messaging-client/-init-.html | 36 - .../add-message-handler.html | 50 - .../create-message.html | 34 - .../default-executor.html | 15 - .../make-network-map-address.html | 18 - .../make-recipient.html | 20 - .../my-host-port.html | 15 - .../-artemis-messaging-client/send.html | 24 - .../to-host-and-port.html | 15 - .../-address/-init-.html | 14 - .../-address/host-and-port.html | 15 - .../-address/index.html | 36 - .../-artemis-address/index.html | 5 +- .../-c-l-i-e-n-t-s_-p-r-e-f-i-x.html | 15 + .../-artemis-messaging-component/-init-.html | 6 +- .../-node-address/-init-.html | 3 + .../-node-address/index.html | 10 +- .../-r-p-c_-r-e-q-u-e-s-t-s_-q-u-e-u-e.html | 15 + .../check-store-passwords.html | 17 + .../-artemis-messaging-component/config.html | 2 +- .../directory.html | 15 - .../-artemis-messaging-component/index.html | 76 +- .../parse-key-from-queue-name.html | 15 + .../to-host-and-port.html | 18 + .../try-parse-key-from-queue-name.html | 15 - .../-artemis-messaging-server/-init-.html | 2 +- .../add-connector.html | 15 - .../bridge-exists.html | 15 - .../bridge-to-network-map-service.html | 4 +- .../connector-exists.html | 15 - .../deploy-bridge.html | 15 - .../-artemis-messaging-server/index.html | 52 +- .../-artemis-messaging-server/my-address.html | 15 - .../-handler/-init-.html | 15 - .../-handler/callback.html | 15 - .../-handler/executor.html | 15 - .../-handler/index.html | 50 - .../-handler/topic-session.html | 15 - .../-handler/topic.html | 15 - .../-artemis-messaging-service/-init-.html | 35 - .../-s-e-s-s-i-o-n_-i-d_-p-r-o-p-e-r-t-y.html | 15 - .../-t-o-p-i-c_-p-r-o-p-e-r-t-y.html | 15 - .../add-message-handler.html | 50 - .../configure-with-dev-s-s-l-certificate.html | 17 - .../create-message.html | 34 - .../default-executor.html | 15 - .../-artemis-messaging-service/directory.html | 15 - .../-artemis-messaging-service/index.html | 242 - .../-artemis-messaging-service/log.html | 15 - .../make-recipient.html | 20 - .../my-address.html | 17 - .../my-host-port.html | 15 - .../register-trusted-address.html | 16 - .../remove-message-handler.html | 24 - .../-artemis-messaging-service/stop.html | 16 - .../to-host-and-port.html | 15 - .../-client-r-p-c-request-message/-init-.html | 15 + .../-m-e-t-h-o-d_-n-a-m-e.html | 15 + .../-o-b-s-e-r-v-a-t-i-o-n-s_-t-o.html | 15 + .../-r-e-p-l-y_-t-o.html | 15 + .../-client-r-p-c-request-message/args.html | 15 + .../-client-r-p-c-request-message/index.html | 79 + .../method-name.html | 15 + .../observations-to-address.html | 15 + .../reply-to-address.html | 15 + .../-corda-r-p-c-ops.html | 41 + .../-marshalled-observation/-init-.html | 15 + .../-marshalled-observation/for-handle.html | 15 + .../-marshalled-observation/index.html | 44 + .../-marshalled-observation/what.html | 15 + .../-handler/-init-.html | 15 + .../-handler/callback.html | 6 +- .../-handler/executor.html | 6 +- .../-handler/index.html | 6 +- .../-handler/topic-session.html | 6 +- .../-node-messaging-client/-init-.html | 39 + .../-s-e-s-s-i-o-n_-i-d_-p-r-o-p-e-r-t-y.html | 6 +- .../-t-o-p-i-c_-p-r-o-p-e-r-t-y.html | 6 +- .../add-message-handler.html | 50 + .../create-message.html | 34 + .../executor.html | 6 +- .../index.html | 61 +- .../log.html | 6 +- .../make-network-map-address.html | 18 + .../my-address.html | 6 +- .../my-identity.html | 6 +- .../persistent-inbox.html | 6 +- .../remove-message-handler.html | 8 +- .../run.html | 8 +- .../send.html | 8 +- .../server-host-port.html | 6 +- .../start.html | 6 +- .../stop.html | 6 +- .../-r-p-c-dispatcher/-init-.html | 18 + .../-r-p-c-dispatcher/dispatch.html | 15 + .../-r-p-c-dispatcher/index.html | 67 + .../-r-p-c-dispatcher/send.html | 15 + .../-r-p-c-dispatcher/start.html | 15 + .../-r-p-c-dispatcher/target.html | 15 + .../-deadline-exceeded/-init-.html | 14 + .../-deadline-exceeded/index.html | 25 + .../-r-p-c-exception/-init-.html | 19 + .../-r-p-c-exception/index.html | 62 + .../-r-p-c-ops/index.html | 41 + .../-r-p-c-ops/protocol-version.html | 16 + .../-r-p-c-returns-observables/-init-.html | 17 + .../-r-p-c-returns-observables/index.html | 31 + .../-r-p-c-since-version/-init-.html | 15 + .../-r-p-c-since-version/index.html | 38 + .../-r-p-c-since-version/version.html | 15 + .../create-r-p-c-kryo.html | 15 + .../index.html | 122 +- .../rpc-log.html | 19 + .../to-r-p-c-request-message.html | 16 + .../-exit-cash/-init-.html | 17 - .../-exit-cash/currency.html | 15 - .../-exit-cash/index.html | 62 - .../-exit-cash/issue-ref.html | 15 - .../-exit-cash/pennies.html | 15 - .../-issue-cash/-init-.html | 34 - .../-issue-cash/currency.html | 15 - .../-issue-cash/index.html | 92 - .../-issue-cash/issue-ref.html | 15 - .../-issue-cash/notary.html | 15 - .../-issue-cash/pennies.html | 15 - .../-issue-cash/recipient.html | 15 - .../-pay-cash/-init-.html | 14 - .../-pay-cash/index.html | 59 - .../-pay-cash/owner.html | 15 - .../-pay-cash/pennies.html | 15 - .../-pay-cash/token-def.html | 15 - .../-client-to-service-command/id.html | 15 - .../-client-to-service-command/index.html | 77 - .../-d-e-r-e-g-i-s-t-e-r_-t-o-p-i-c.html | 6 +- .../-i-n_-e-v-e-n-t_-t-o-p-i-c.html | 6 +- .../-node-monitor-service/-init-.html | 20 + .../-init-.html | 14 + .../index.html | 6 +- .../-o-u-t_-e-v-e-n-t_-t-o-p-i-c.html | 6 +- .../-r-e-g-i-s-t-e-r_-t-o-p-i-c.html | 6 +- .../-registered-listener/-init-.html | 14 + .../-registered-listener/index.html | 6 +- .../-registered-listener/recipients.html | 6 +- .../-registered-listener/session-i-d.html | 6 +- .../-s-t-a-t-e_-t-o-p-i-c.html | 6 +- .../-node-monitor-service/index.html | 176 + .../listeners.html | 6 +- .../logger.html | 6 +- .../process-deregister-request.html | 16 + .../process-register-request.html | 17 + .../smm.html | 6 +- .../-output-state/index.html | 11 + .../-output-state/to-string.html | 15 + .../-progress/index.html | 11 + .../-progress/to-string.html | 15 + .../-state-machine/index.html | 11 + .../-state-machine/to-string.html | 15 + .../-transaction-build/index.html | 11 + .../-transaction-build/to-string.html | 15 + .../-transaction/-init-.html | 2 +- .../-transaction/index.html | 15 +- .../-transaction/to-string.html | 15 + .../-transaction/transaction.html | 2 +- .../-state-snapshot-message/-init-.html | 2 +- .../contract-states.html | 2 +- .../-state-snapshot-message/index.html | 4 +- .../-complete/-init-.html | 19 - .../-complete/index.html | 49 - .../-complete/message.html | 15 - .../-complete/transaction.html | 15 - .../-failed/index.html | 11 + .../-failed/to-string.html | 15 + .../-protocol-started/-init-.html | 2 +- .../-protocol-started/index.html | 15 +- .../-protocol-started/to-string.html | 15 + .../-protocol-started/transaction.html | 2 +- .../-transaction-build-result/index.html | 16 - .../-wallet-monitor-service/-init-.html | 20 - .../-init-.html | 14 - .../-public-key-lookup-failed/-init-.html | 14 - .../-public-key-lookup-failed/index.html | 25 - .../-registered-listener/-init-.html | 14 - .../-wallet-monitor-service/index.html | 174 - .../process-deregister-request.html | 16 - .../process-register-request.html | 17 - .../-wallet-monitor-service/services.html | 15 - .../index.html | 18 +- .../-abstract-network-map-service/-init-.html | 19 + .../_map-version.html | 15 + .../get-unacknowledged-count.html | 15 + .../-abstract-network-map-service/index.html | 200 + .../map-version.html | 15 + .../max-size-registration-request-bytes.html | 6 +- .../max-unacknowledged-updates.html | 6 +- .../-abstract-network-map-service/nodes.html | 16 + .../notify-subscribers.html | 15 + .../process-acknowledge.html | 8 +- .../process-fetch-all-request.html | 8 +- .../process-query-request.html | 8 +- .../process-registration-change-request.html | 8 +- .../process-subscription-request.html | 8 +- .../registered-nodes.html | 15 + .../-abstract-network-map-service/setup.html | 15 + .../subscribers.html | 15 + .../unregister-network-handlers.html | 15 + .../-builder/-init-.html | 14 - .../-builder/id.html | 15 - .../-builder/index.html | 53 - .../-builder/manually-pumped.html | 15 - .../-builder/start.html | 16 - .../-handle/-init-.html | 14 - .../-handle/description.html | 15 - .../-handle/equals.html | 15 - .../-handle/hash-code.html | 15 - .../-handle/id.html | 15 - .../-handle/index.html | 65 - .../-handle/to-string.html | 15 - .../-in-memory-messaging/-handler/-init-.html | 14 - .../-handler/callback.html | 15 - .../-handler/executor.html | 15 - .../-in-memory-messaging/-handler/index.html | 48 - .../-handler/topic-session.html | 15 - .../-in-memory-messaging/-handler/topic.html | 15 - .../-in-memory-messaging/-init-.html | 20 - .../-inner-state/-init-.html | 14 - .../-inner-state/handlers.html | 15 - .../-inner-state/index.html | 42 - .../-inner-state/pending-redelivery.html | 15 - .../add-message-handler.html | 50 - .../background-thread.html | 15 - .../-in-memory-messaging/create-message.html | 20 - .../-in-memory-messaging/index.html | 128 - .../-in-memory-messaging/my-address.html | 17 - .../-in-memory-messaging/pump-receive.html | 20 - .../register-trusted-address.html | 16 - .../remove-message-handler.html | 24 - .../-in-memory-messaging/running.html | 15 - .../-in-memory-messaging/send.html | 24 - .../-in-memory-messaging/state.html | 15 - .../-in-memory-messaging/stop.html | 20 - .../-in-memory-messaging-network/-init-.html | 19 - .../-latency-calculator/between.html | 15 - .../-latency-calculator/index.html | 25 - .../-m-e-s-s-a-g-e-s_-l-o-g_-n-a-m-e.html | 15 - .../-message-transfer/-init-.html | 14 - .../-message-transfer/index.html | 59 - .../-message-transfer/message.html | 15 - .../-message-transfer/recipients.html | 15 - .../-message-transfer/sender.html | 15 - .../create-node-with-i-d.html | 25 - .../create-node.html | 23 - .../endpoints.html | 15 - .../everyone-online.html | 15 - .../-in-memory-messaging-network/index.html | 175 - .../latency-calculator.html | 16 - .../pump-send-internal.html | 15 - .../pump-send.html | 15 - .../received-messages.html | 15 - .../send-manually-pumped.html | 15 - .../sent-messages.html | 15 - .../-in-memory-messaging-network/stop.html | 15 - .../add-map-service.html | 8 +- .../-in-memory-network-map-cache/index.html | 35 +- .../map-service-registered.html | 20 + .../net-internal.html | 15 - .../rates-oracle-nodes.html | 20 - .../run-without-map-service.html | 17 + .../-init-.html | 2 +- .../-in-memory-network-map-service/cache.html | 15 - .../get-unacknowledged-count.html | 15 - .../-in-memory-network-map-service/index.html | 137 +- .../-in-memory-network-map-service/nodes.html | 16 - .../notify-subscribers.html | 15 - .../registered-nodes.html | 16 + .../subscribers.html | 16 + .../-last-acknowledge-info/-init-.html | 14 + .../-last-acknowledge-info/index.html | 36 + .../-last-acknowledge-info/map-version.html | 15 + .../-mock-network-map-cache/-init-.html | 15 - .../-mock-address/-init-.html | 14 - .../-mock-address/id.html | 15 - .../-mock-address/index.html | 36 - .../add-registration.html | 17 - .../-mock-network-map-cache/changed.html | 17 - .../delete-registration.html | 17 - .../-mock-network-map-cache/index.html | 190 - .../-update-acknowledge/-init-.html | 2 +- .../-update-acknowledge/index.html | 10 +- .../{wire-reg-hash.html => map-version.html} | 10 +- .../-network-map-service/-update/-init-.html | 2 +- .../-network-map-service/-update/index.html | 8 +- .../-update/map-version.html | 15 + .../-network-map-service/index.html | 5 +- .../-node-registration-info/-init-.html | 14 + .../-node-registration-info/index.html | 42 + .../-node-registration-info/map-version.html | 15 + .../-node-registration-info/reg.html | 15 + .../-init-.html | 20 + .../index.html | 146 + .../registered-nodes.html | 16 + .../subscribers.html | 16 + .../index.html | 28 +- .../-data-vending-service/-init-.html | 24 - ...-f-y_-t-x_-p-r-o-t-o-c-o-l_-t-o-p-i-c.html | 16 - .../-notify-tx-request-message/-init-.html | 14 - .../-notify-tx-request-message/index.html | 59 - .../session-i-d.html | 16 - .../-notify-tx-request-message/tx.html | 15 - .../-notify-tx-response-message/-init-.html | 14 - .../-notify-tx-response-message/accepted.html | 15 - .../-notify-tx-response-message/index.html | 36 - .../-data-vending-service/index.html | 117 - .../-data-vending-service/storage.html | 15 - ...-f-y_-t-x_-p-r-o-t-o-c-o-l_-t-o-p-i-c.html | 16 - .../-notify-tx-request-message/-init-.html | 14 - .../-notify-tx-request-message/index.html | 59 - .../reply-to-party.html | 16 - .../session-i-d.html | 16 - .../-notify-tx-request-message/tx.html | 15 - .../-notify-tx-response-message/-init-.html | 14 - .../-notify-tx-response-message/accepted.html | 15 - .../-notify-tx-response-message/index.html | 36 - .../-data-vending/-service/index.html | 26 +- .../-data-vending/-service/notify.html | 4 +- .../-data-vending/-service/services.html | 15 - .../-node-attachment-service/metrics.html | 15 - .../add-transaction.html | 4 +- .../get-transaction.html | 2 +- .../-per-file-transaction-storage/index.html | 10 +- .../transactions.html | 2 +- .../updates.html | 10 +- .../-expecting-response/-init-.html | 15 - .../-expecting-response/equals.html | 16 - .../-expecting-response/index.html | 113 - .../-expecting-response/response-type.html | 15 - .../-expecting-response/to-string.html | 15 - .../-not-expecting-response/-init-.html | 14 - .../-not-expecting-response/index.html | 89 - .../-fiber-request/equals.html | 15 - .../-fiber-request/index.html | 114 - .../-fiber-request/receive-topic-session.html | 15 - .../-fiber-request/receive-topic.html | 15 - .../session-i-d-for-receive.html | 15 - .../-fiber-request/session-i-d-for-send.html | 15 - .../stack-trace-in-case-of-problems.html | 15 - .../-protocol-i-o-request/index.html | 48 + .../stack-trace-in-case-of-problems.html | 15 + .../-protocol-i-o-request}/topic.html | 6 +- .../-protocol-state-machine-impl/index.html | 4 +- .../-protocol-state-machine-impl/receive.html | 2 +- .../send-and-receive.html | 2 +- .../-receive-only/-init-.html | 14 + .../-receive-only/index.html | 65 + .../-receive-only/receive-session-i-d.html | 16 + .../-receive-only/receive-type.html | 16 + .../stack-trace-in-case-of-problems.html | 16 + .../-receive-only/topic.html | 16 + .../-receive-request/index.html | 71 + .../-receive-request/receive-session-i-d.html | 15 + .../receive-topic-session.html | 15 + .../-receive-request/receive-type.html | 15 + .../-send-and-receive/-init-.html | 14 + .../-send-and-receive/destination.html | 16 + .../-send-and-receive/index.html | 83 + .../-send-and-receive/payload.html | 16 + .../receive-session-i-d.html | 16 + .../-send-and-receive/receive-type.html | 16 + .../-send-and-receive/send-session-i-d.html | 16 + .../stack-trace-in-case-of-problems.html | 16 + .../-send-and-receive/topic.html | 16 + .../-send-only/-init-.html | 14 + .../destination.html | 9 +- .../-send-only/index.html | 60 + .../payload.html | 9 +- .../-send-only/send-session-i-d.html | 16 + .../stack-trace-in-case-of-problems.html | 16 + .../{-fiber-request => -send-only}/topic.html | 7 +- .../-send-request/destination.html | 15 + .../-send-request/index.html | 71 + .../-send-request/payload.html | 15 + .../-send-request/send-session-i-d.html | 15 + .../-expecting-response/-init-.html | 14 - .../-expecting-response/index.html | 77 - .../-expecting-response/response-type.html | 15 - .../-fiber-request/-init-.html | 14 - .../-not-expecting-response/-init-.html | 14 - .../-not-expecting-response/index.html | 66 - .../-fiber-request/destination.html | 15 - .../-fiber-request/index.html | 100 - .../-fiber-request/payload.html | 15 - .../session-i-d-for-receive.html | 15 - .../-fiber-request/session-i-d-for-send.html | 15 - .../stack-trace-in-case-of-problems.html | 15 - .../-fiber-request/topic.html | 15 - .../index.html | 34 +- .../-notary-service/-init-.html | 9 +- .../-notary-service/index.html | 33 +- .../-notary-service/smm.html | 15 - .../-init-.html | 15 + .../commit.html | 17 + .../committed-states.html | 17 + .../index.html | 63 + .../-simple-notary-service/-init-.html | 2 +- .../-simple-notary-service/index.html | 8 +- .../-validating-notary-service/-init-.html | 2 +- .../-validating-notary-service/index.html | 8 +- .../index.html | 7 + .../-init-.html | 15 + .../index.html | 6 +- .../service-hub-internal.html | 4 +- .../-node-vault-service/-init-.html | 23 + .../-node-vault-service/current-vault.html | 22 + .../-node-vault-service/index.html | 143 + .../-node-vault-service/linear-heads.html | 23 + .../-node-vault-service/log.html | 15 + .../-node-vault-service/mutex.html | 15 + .../-node-vault-service/notify-all.html | 22 + .../-node-vault-service/updates.html | 22 + .../index.html | 31 + .../-init-.html | 15 - .../-node-wallet-service/-init-.html | 21 - .../-node-wallet-service/index.html | 109 - .../-node-wallet-service/log.html | 16 - .../index.html | 31 - .../index.html | 30 - .../register.html | 15 - .../-notary-change-service/-init-.html | 16 - .../-notary-change-service/index.html | 74 - .../-notary-change-service/smm.html | 15 - .../-notary-change/-service/index.html | 29 +- .../-notary-change/-service/services.html | 15 - .../-certificate-signer/-init-.html | 18 + .../-certificate-signer/build-key-store.html | 15 + .../-certificate-signer/cert-service.html | 15 + .../-certificate-signer}/config.html | 6 +- .../-certificate-signer/index.html | 78 + .../-certificate-signer/log.html | 15 + .../-certificate-signer/poll-interval.html | 15 + .../-certificate-signing-service/index.html | 44 + .../retrieve-certificates.html | 16 + .../submit-request.html | 16 + .../-init-.html | 14 + .../client-version.html | 15 + .../index.html | 66 + .../retrieve-certificates.html | 17 + .../server.html | 15 + .../submit-request.html | 17 + .../-params-spec/base-directory-arg.html | 15 + .../-params-spec/config-file-arg.html | 15 + .../-params-spec/index.html | 37 + .../-params-spec/parser.html | 15 + .../index.html | 55 + .../main.html | 15 + .../-abstract-j-d-b-c-hash-map/-init-.html | 38 + .../add-key-to-insert.html | 21 + .../add-value-to-insert.html | 21 + .../-abstract-j-d-b-c-hash-map/clear.html | 15 + .../contains-key.html | 15 + .../contains-value.html | 15 + .../-abstract-j-d-b-c-hash-map/entries.html | 15 + .../-abstract-j-d-b-c-hash-map/get.html | 15 + .../-abstract-j-d-b-c-hash-map/index.html | 192 + .../-abstract-j-d-b-c-hash-map/is-empty.html | 15 + .../key-from-row.html | 19 + .../-abstract-j-d-b-c-hash-map/keys.html | 15 + .../load-on-init.html | 15 + .../-abstract-j-d-b-c-hash-map/log.html | 15 + .../-abstract-j-d-b-c-hash-map/put.html | 15 + .../-abstract-j-d-b-c-hash-map/remove.html | 15 + .../-abstract-j-d-b-c-hash-map/size.html | 15 + .../-abstract-j-d-b-c-hash-map/table.html | 15 + .../value-from-row.html | 19 + .../-abstract-j-d-b-c-hash-map/values.html | 15 + .../-abstract-j-d-b-c-hash-set/-init-.html | 19 + .../add-element-to-insert.html | 21 + .../-abstract-j-d-b-c-hash-set/add.html | 15 + .../-abstract-j-d-b-c-hash-set/clear.html | 15 + .../-abstract-j-d-b-c-hash-set/contains.html | 15 + .../element-from-row.html | 19 + .../-abstract-j-d-b-c-hash-set/index.html | 137 + .../-abstract-j-d-b-c-hash-set/inner-map.html | 15 + .../-abstract-j-d-b-c-hash-set/is-empty.html | 15 + .../-abstract-j-d-b-c-hash-set/iterator.html | 15 + .../-abstract-j-d-b-c-hash-set/remove.html | 15 + .../-abstract-j-d-b-c-hash-set/size.html | 15 + .../-abstract-j-d-b-c-hash-set/table.html | 15 + .../-blob-map-table/-init-.html | 14 + .../-blob-map-table/index.html | 59 + .../-blob-map-table/key.html | 15 + .../-blob-map-table/value.html | 15 + .../-j-d-b-c-hash-map/-init-.html | 21 + .../-j-d-b-c-hash-map/add-key-to-insert.html | 21 + .../add-value-to-insert.html | 21 + .../-j-d-b-c-hash-map/index.html | 136 + .../-j-d-b-c-hash-map/key-from-row.html | 20 + .../-j-d-b-c-hash-map/value-from-row.html | 20 + .../-blob-set-table/-init-.html | 14 + .../-blob-set-table/index.html | 53 + .../-blob-set-table/key.html | 15 + .../-j-d-b-c-hash-set/-init-.html | 21 + .../add-element-to-insert.html | 21 + .../-j-d-b-c-hash-set/element-from-row.html | 20 + .../-j-d-b-c-hash-set/index.html | 124 + .../-j-d-b-c-hashed-table/-init-.html | 14 + .../-j-d-b-c-hashed-table/index.html | 59 + .../-j-d-b-c-hashed-table/key-hash.html | 15 + .../-j-d-b-c-hashed-table/seq-no.html | 15 + .../-mutable-clock/index.html | 13 +- .../-mutable-clock/mutation-count.html | 2 +- .../deserialize-from-blob.html | 15 + .../api/com.r3corda.node.utilities/index.html | 51 + .../java.time.-clock/await-with-deadline.html | 4 +- .../java.time.-clock/index.html | 4 +- .../serialize-to-blob.html | 15 + .../html/api/com.r3corda.node/index.html | 11 - docs/build/html/api/com.r3corda.node/log.html | 15 - .../-acceptor/-init-.html | 2 +- .../-acceptor/index.html | 45 +- .../-acceptor/session-id-for-receive.html | 15 - .../-acceptor/session-id-for-send.html | 15 - .../-acceptor/verify-proposal.html | 18 + .../-handshake/-init-.html | 2 +- .../-handshake/index.html | 26 +- ...for-send.html => receive-session-i-d.html} | 11 +- ...session-i-d.html => send-session-i-d.html} | 12 +- .../-instigator/index.html | 20 +- .../-proposal/index.html | 2 +- .../-proposal/stx.html | 2 +- .../index.html | 4 +- .../-init-.html | 2 +- .../-notify-tx-request-message/-init-.html | 2 +- .../-notify-tx-request-message/index.html | 22 +- .../receive-session-i-d.html | 16 + ...session-i-d.html => send-session-i-d.html} | 12 +- .../-notify-tx-request-message/tx.html | 2 +- .../index.html | 26 +- .../notarised-transaction.html | 2 +- .../-fetch-data-protocol/-request/-init-.html | 2 +- .../-fetch-data-protocol/-request/index.html | 20 +- .../-request/receive-session-i-d.html | 16 + .../-request/send-session-i-d.html | 16 + .../-request/session-i-d.html | 16 - .../-fetch-data-protocol/index.html | 24 +- .../-fetch-transactions-protocol/index.html | 4 +- .../-fetch-transactions-protocol/load.html | 2 +- .../-finality-protocol/-init-.html | 2 +- .../-finality-protocol/index.html | 24 +- .../-finality-protocol/transaction.html | 2 +- .../-handshake-message/index.html | 128 + .../receive-session-i-d.html | 15 + .../-handshake-message/send-session-i-d.html | 15 + .../-handshake-message/session-i-d.html | 18 + .../-acceptor/-init-.html | 2 +- .../-acceptor/index.html | 18 +- .../-acceptor/verify-proposal.html | 21 + .../-proposal/-init-.html | 2 +- .../-proposal/index.html | 4 +- .../-proposal/stx.html | 2 +- .../-notary-error/-conflict/-init-.html | 2 +- .../-notary-error/-conflict/index.html | 4 +- .../-notary-error/-conflict/tx.html | 2 +- .../-more-than-one-timestamp/-init-.html | 14 - .../-more-than-one-timestamp/index.html | 25 - .../-notary-error/-not-for-me/-init-.html | 15 - .../-notary-error/-not-for-me/index.html | 27 - .../-signatures-missing/-init-.html | 2 +- .../-signatures-missing/index.html | 4 +- .../-signatures-missing/missing-signers.html | 2 +- .../-notary-protocol/-client/-init-.html | 2 +- .../-notary-protocol/-client/index.html | 22 +- .../-default-factory/create.html | 4 +- .../-default-factory/index.html | 2 +- .../-notary-protocol/-factory/create.html | 4 +- .../-notary-protocol/-factory/index.html | 2 +- .../-notary-protocol/-handshake/-init-.html | 2 +- .../-notary-protocol/-handshake/index.html | 22 +- .../receive-session-i-d.html | 7 +- .../-handshake/send-session-i-d.html | 1 + .../-handshake/session-i-d.html | 16 - .../-notary-protocol/-service/-init-.html | 2 +- .../-service/before-commit.html | 4 +- .../-notary-protocol/-service/index.html | 36 +- .../-service/send-session-i-d.html | 15 - .../-sign-request/-init-.html | 2 +- .../-notary-protocol/-sign-request/index.html | 4 +- .../-notary-protocol/-sign-request/tx.html | 2 +- .../-notary-protocol/index.html | 2 +- .../-party-request-message/index.html | 37 +- .../-rates-fix-protocol/-init-.html | 2 +- .../-query-request/-init-.html | 2 +- .../-query-request/index.html | 20 +- .../-query-request/receive-session-i-d.html | 16 + .../-query-request/send-session-i-d.html | 16 + .../-query-request/session-i-d.html | 16 - .../-sign-request/-init-.html | 2 +- .../-sign-request/index.html | 22 +- .../-sign-request/receive-session-i-d.html | 16 + .../-sign-request/send-session-i-d.html | 16 + .../-sign-request/session-i-d.html | 16 - .../-rates-fix-protocol/-sign-request/tx.html | 2 +- .../-rates-fix-protocol/index.html | 28 +- .../-rates-fix-protocol/tx.html | 2 +- .../-init-.html | 8 +- .../-resolve-transactions-protocol/call.html | 2 +- .../-resolve-transactions-protocol/index.html | 32 +- .../-acceptor/-init-.html | 2 +- .../-acceptor/assemble-shared-t-x.html | 2 +- .../-acceptor/index.html | 16 +- .../-acceptor/other-party.html | 16 + .../-acceptor/other-side.html | 16 - .../-acceptor/session-i-d.html | 16 - .../-fixer/-init-.html | 2 +- .../-fixer/assemble-shared-t-x.html | 2 +- .../-fixer/index.html | 20 +- .../-fixer/initiation.html | 15 - .../-fixer/oracle-type.html | 15 + .../-fixer/other-party.html | 16 + .../-fixer/other-side.html | 16 - .../-fixer/session-i-d.html | 16 - .../-fixing-role-decider/index.html | 20 +- .../-fixing-session-initiation/-init-.html | 2 +- .../-fixing-session-initiation/index.html | 33 +- .../{sender.html => oracle-type.html} | 10 +- ...sion-i-d.html => receive-session-i-d.html} | 11 +- .../reply-to-party.html | 16 + .../{party.html => send-session-i-d.html} | 11 +- .../-floater/-init-.html | 2 +- .../-floater/index.html | 20 +- .../-floater/other-party.html | 16 + .../-floater/other-session-i-d.html | 16 - .../-floater/other-side.html | 16 - .../-handshake/-init-.html | 2 +- .../-handshake/index.html | 8 +- .../-handshake/session-i-d.html | 15 - .../-instigator/-init-.html | 2 +- .../-instigator/index.html | 20 +- .../-instigator/other-party.html | 16 + .../-instigator/other-session-i-d.html | 16 - .../-instigator/other-side.html | 16 - .../-primary/call.html | 2 +- .../-primary/get-partial-transaction.html | 2 +- .../-primary/index.html | 40 +- ...ther-session-i-d.html => other-party.html} | 10 +- .../-primary/other-side.html | 15 - .../-primary/sign-with-our-key.html | 4 +- .../-primary/verify-partial-transaction.html | 4 +- .../-secondary/assemble-shared-t-x.html | 2 +- .../-secondary/call.html | 2 +- .../-secondary/index.html | 36 +- .../-secondary/other-party.html | 15 + .../-secondary/other-side.html | 15 - .../-secondary/session-i-d.html | 15 - .../-two-party-deal-protocol/index.html | 6 +- .../-buyer/-init-.html | 2 +- .../-buyer/call.html | 2 +- .../-buyer/index.html | 36 +- .../{other-side.html => other-party.html} | 10 +- .../-buyer/session-i-d.html | 15 - .../-seller-trade-info/-init-.html | 2 +- .../-seller-trade-info/index.html | 8 +- .../-seller-trade-info/session-i-d.html | 15 - .../-seller/-init-.html | 2 +- .../-seller/buyer-session-i-d.html | 15 - .../-seller/call.html | 2 +- .../-seller/index.html | 38 +- .../{other-side.html => other-party.html} | 10 +- .../-seller/sign-with-our-key.html | 4 +- .../-two-party-trade-protocol/index.html | 6 +- .../-validating-notary-protocol/-init-.html | 2 +- .../before-commit.html | 4 +- .../-validating-notary-protocol/index.html | 16 +- .../html/api/com.r3corda.protocols/index.html | 13 +- .../-i-r-s-simulation/-init-.html | 15 + .../-i-r-s-simulation/index.html | 14 +- .../-i-r-s-simulation/iterate.html | 6 +- .../-i-r-s-simulation/om.html | 4 +- .../start-main-simulation.html | 4 +- .../-simulation/-bank-factory/-init-.html | 2 +- .../-simulation/-bank-factory/counter.html | 4 +- .../-simulation/-bank-factory/create-all.html | 4 +- .../-simulation/-bank-factory/create.html | 15 + .../-simulation/-bank-factory/index.html | 53 + .../-simulation/-init-.html | 19 + .../-network-map-node-factory/create.html | 15 + .../-network-map-node-factory/index.html | 25 + .../-notary-node-factory/create.html | 15 + .../-notary-node-factory/index.html | 25 + .../-rates-oracle-factory/create.html | 15 + .../-rates-oracle-factory/index.html | 25 + .../-regulator-factory/create.html | 15 + .../-simulation/-regulator-factory/index.html | 25 + .../-simulation/-simulated-node/-init-.html | 14 + .../-simulated-node/find-my-location.html | 5 +- .../-simulation/-simulated-node/index.html | 36 + .../-simulation/all-protocol-steps.html | 4 +- .../-simulation/bank-factory.html | 4 +- .../-simulation/bank-locations.html | 4 +- .../-simulation/banks.html | 4 +- .../-simulation/clocks.html | 4 +- .../-simulation/current-date-and-time.html | 4 +- .../-simulation/date-changes.html | 4 +- .../-simulation/done-steps.html | 4 +- .../-simulation/extra-node-labels.html | 4 +- .../-simulation/index.html | 26 +- .../-simulation/iterate.html | 6 +- .../network-initialisation-finished.html | 4 +- .../-simulation/network-map.html | 4 +- .../network-send-manually-pumped.html | 4 +- .../-simulation/network.html | 15 + .../-simulation/notary.html | 4 +- .../-simulation/rates-oracle.html | 4 +- .../-simulation/regulators.html | 4 +- .../-simulation/service-providers.html | 4 +- .../-simulation/show-consensus-for.html | 15 + .../-simulation/show-progress-for.html | 15 + .../-simulation/start-main-simulation.html | 4 +- .../-simulation/start-trading-circle.html | 17 + .../-simulation/start.html | 4 +- .../-simulation/stop.html | 4 +- .../-trade-simulation/-init-.html | 16 + .../-trade-simulation/index.html | 14 +- .../start-main-simulation.html | 4 +- .../api/com.r3corda.simulation/index.html | 38 + docs/build/html/api/index-outline.html | 7239 ++++++++++------- docs/build/html/api/index.html | 56 +- .../-acceptor/-a-p-p-r-o-v-i-n-g.html | 42 - .../-acceptor/-init-.html | 14 - .../-acceptor/-r-e-j-e-c-t-i-n-g.html | 42 - .../-acceptor/-v-e-r-i-f-y-i-n-g.html | 42 - .../-acceptor/call.html | 17 - .../-acceptor/index.html | 183 - .../-acceptor/other-side.html | 15 - .../-acceptor/progress-tracker.html | 24 - .../-acceptor/session-id-for-receive.html | 15 - .../-acceptor/session-id-for-send.html | 15 - .../-acceptor/tracker.html | 15 - .../-handshake/-init-.html | 14 - .../-handshake/index.html | 59 - .../-handshake/session-i-d.html | 16 - .../-handshake/session-id-for-send.html | 15 - .../-init-.html | 23 - .../-instigator/-init-.html | 14 - .../-instigator/-n-o-t-a-r-y.html | 42 - .../-instigator/-s-i-g-n-i-n-g.html | 42 - .../-instigator/call.html | 17 - .../-instigator/index.html | 171 - .../-instigator/modification.html | 15 - .../-instigator/original-state.html | 15 - .../-instigator/progress-tracker.html | 24 - .../-instigator/tracker.html | 15 - .../-proposal/index.html | 48 - .../-proposal/modification.html | 15 - .../-proposal/state-ref.html | 15 - .../-proposal/stx.html | 15 - .../-result/error.html | 15 - .../-result/index.html | 48 - .../-result/no-error.html | 15 - .../-result/sig.html | 15 - .../-result/with-error.html | 15 - .../index.html | 85 - .../-acceptor/-init-.html | 14 - .../-acceptor/index.html | 83 - .../-acceptor/progress-tracker.html | 24 - .../-acceptor/topic.html | 22 - .../-instigator/-init-.html | 14 - .../-instigator/index.html | 77 - .../-instigator/topic.html | 22 - .../-proposal/-init-.html | 14 - .../-proposal/index.html | 48 - .../-proposal/modification.html | 16 - .../-proposal/state-ref.html | 16 - .../-proposal/stx.html | 16 - .../-notary-change-protocol/-t-o-p-i-c.html | 15 - .../-notary-change-protocol/index.html | 56 - .../-state-replacement-exception/-init-.html | 14 - .../-state-replacement-exception/error.html | 15 - .../-state-replacement-exception/index.html | 36 - .../-state-replacement-refused/-init-.html | 15 - .../-state-replacement-refused/detail.html | 15 - .../-state-replacement-refused/identity.html | 15 - .../-state-replacement-refused/index.html | 61 - .../-state-replacement-refused/state.html | 15 - .../-state-replacement-refused/to-string.html | 15 - docs/build/html/api/protocols/index.html | 51 - docs/build/html/building-the-docs.html | 21 +- docs/build/html/clientrpc.html | 318 + docs/build/html/codestyle.html | 25 +- docs/build/html/consensus.html | 20 +- docs/build/html/contract-catalogue.html | 30 +- docs/build/html/contract-irs.html | 37 +- .../build/html/corda-configuration-files.html | 48 +- docs/build/html/creating-a-cordapp.html | 23 +- docs/build/html/data-model.html | 20 +- docs/build/html/event-scheduling.html | 24 +- docs/build/html/genindex.html | 19 +- docs/build/html/getting-set-up.html | 21 +- docs/build/html/index.html | 78 +- docs/build/html/inthebox.html | 20 +- docs/build/html/messaging.html | 20 +- ...visualiser.html => network-simulator.html} | 121 +- docs/build/html/node-administration.html | 24 +- docs/build/html/objects.inv | Bin 785 -> 826 bytes docs/build/html/oracles.html | 20 +- docs/build/html/protocol-state-machines.html | 26 +- docs/build/html/release-notes.html | 37 +- docs/build/html/release-process.html | 24 +- docs/build/html/running-the-demos.html | 20 +- docs/build/html/search.html | 19 +- docs/build/html/searchindex.js | 2 +- docs/build/html/secure-coding-guidelines.html | 289 + docs/build/html/transaction-data-types.html | 20 +- .../build/html/tutorial-contract-clauses.html | 30 +- docs/build/html/tutorial-contract.html | 81 +- docs/build/html/tutorial-test-dsl.html | 21 +- docs/build/html/where-to-start.html | 25 +- 2338 files changed, 29012 insertions(+), 30813 deletions(-) create mode 100644 docs/build/html/_images/network-simulator.png delete mode 100644 docs/build/html/_images/visualiser.png create mode 100644 docs/build/html/_sources/clientrpc.txt create mode 100644 docs/build/html/_sources/network-simulator.txt create mode 100644 docs/build/html/_sources/secure-coding-guidelines.txt delete mode 100644 docs/build/html/_sources/visualiser.txt create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/assemble.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/get-source-index.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/get.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/index.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/size.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/source-changed.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/to-key.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-amount-bindings/exchange.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-amount-bindings/index.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-amount-bindings/sum-amount-exchange.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-amount-bindings/sum.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-chosen-list/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-chosen-list/get.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-chosen-list/index.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-chosen-list/size.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/-wrapped-observable-value/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/-wrapped-observable-value/index.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/-wrapped-observable-value/observable-value.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/get-source-index.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/get.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/index-map.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/index.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/size.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/source-changed.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/source-list.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/fold-to-observable-list.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/fold-to-observable-value.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/index.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/javafx.beans.value.-observable-value/bind.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/javafx.beans.value.-observable-value/index.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/javafx.beans.value.-observable-value/map.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/filter.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/flatten.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/fold.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/index.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/map.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function1/index.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function1/lift.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function2/index.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function2/lift.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function3/index.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function3/lift.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function4/index.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function4/lift.html create mode 100644 docs/build/html/api/com.r3corda.client.fxutils/lift.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/amount-generator.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/amount-issued-generator.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/cash-state-generator.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/client-to-service-command-generator.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/consumed-generator.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/currencies.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/currency-generator.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/exit-cash-generator.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/issue-cash-generator.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/issue-ref-generator.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/issuer-generator.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/move-cash-generator.html rename docs/build/html/api/{com.r3corda.core.contracts/-wire-transaction => com.r3corda.client.mock/-event-generator}/notary.html (50%) create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/output-state-generator.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/parties.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/party-generator.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/produced-generator.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/public-key-generator.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-event-generator/service-to-client-event-generator.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-generator/bind.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-generator/choice.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-generator/combine.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-generator/fail.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-generator/frequency.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-generator/impure.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-generator/map.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-generator/product.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-generator/pure.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-generator/sequence.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/-generator/success.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/double-range.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/double.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/generate-or-fail.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/index.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/int-range.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/int.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/one-of.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/pick-one.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/replicate-poisson.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/replicate.html create mode 100644 docs/build/html/api/com.r3corda.client.mock/sample-bernoulli.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-contract-state-model/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-contract-state-model/cash-states-modification.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-contract-state-model/cash-states.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-contract-state-model/contract-states-diff.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-contract-state-model/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-exchange-rate-model/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-exchange-rate-model/exchange-rate.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-exchange-rate-model/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-exchange-rate/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-exchange-rate/rate.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-model/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-model/gathered-transaction-data-list.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-model/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/all-events.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/fiber-id.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/last-update.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/protocol-status.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/state-machine-status.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/status.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/transaction.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/uuid.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/all-events.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/fiber-id.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/last-update.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/protocol-status.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/state-machine-status.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/status.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/transaction.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/uuid.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-models/get.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-models/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-models/init-model.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-node-monitor-model/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-node-monitor-model/client-to-service.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-node-monitor-model/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-node-monitor-model/register.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-node-monitor-model/service-to-client.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-node-monitor-model/snapshot.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-protocol-status/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-protocol-status/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-protocol-status/status.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-state-machine-status/-added/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-state-machine-status/-added/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-state-machine-status/-removed/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-state-machine-status/-removed/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-state-machine-status/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-state-machine-status/state-machine-name.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-state-machine-status/to-string.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-states-modification/-diff/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-states-modification/-diff/added.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-states-modification/-diff/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-states-modification/-diff/removed.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-states-modification/-reset/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-states-modification/-reset/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-states-modification/-reset/states.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-states-modification/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-sink-delegate/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-sink-delegate/event-sink-property.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-sink-delegate/get-value.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-sink-delegate/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-stream-delegate/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-stream-delegate/event-stream-property.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-stream-delegate/get-value.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-stream-delegate/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-object-property-delegate/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-object-property-delegate/get-value.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-object-property-delegate/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-object-property-delegate/object-property-property.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-delegate/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-delegate/event-stream-property.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-delegate/get-value.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-delegate/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-delegate/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-delegate/get-value.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-delegate/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-delegate/observable-list-property.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-read-only-delegate/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-read-only-delegate/get-value.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-read-only-delegate/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-read-only-delegate/observable-list-read-only-property.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-value-delegate/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-value-delegate/get-value.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-value-delegate/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-value-delegate/observable-value-property.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observer-delegate/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observer-delegate/event-stream-property.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observer-delegate/get-value.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observer-delegate/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-writable-value-delegate/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-writable-value-delegate/get-value.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-writable-value-delegate/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-writable-value-delegate/writable-value-property.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-tracked-delegate/klass.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-transaction-create-status/-failed/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-transaction-create-status/-failed/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-transaction-create-status/-started/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-transaction-create-status/-started/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-transaction-create-status/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-transaction-create-status/message.html create mode 100644 docs/build/html/api/com.r3corda.client.model/-transaction-create-status/to-string.html create mode 100644 docs/build/html/api/com.r3corda.client.model/event-sink.html create mode 100644 docs/build/html/api/com.r3corda.client.model/event-stream.html create mode 100644 docs/build/html/api/com.r3corda.client.model/exchange-amount.html create mode 100644 docs/build/html/api/com.r3corda.client.model/exchange-double.html create mode 100644 docs/build/html/api/com.r3corda.client.model/index.html create mode 100644 docs/build/html/api/com.r3corda.client.model/object-property.html create mode 100644 docs/build/html/api/com.r3corda.client.model/observable-list-read-only.html create mode 100644 docs/build/html/api/com.r3corda.client.model/observable-list.html create mode 100644 docs/build/html/api/com.r3corda.client.model/observable-value.html create mode 100644 docs/build/html/api/com.r3corda.client.model/observable.html create mode 100644 docs/build/html/api/com.r3corda.client.model/observer.html create mode 100644 docs/build/html/api/com.r3corda.client.model/writable-value.html create mode 100644 docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/close.html create mode 100644 docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/host.html create mode 100644 docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/index.html create mode 100644 docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/my-i-d.html create mode 100644 docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/proxy.html rename docs/build/html/api/{com.r3corda.node.services.messaging/-artemis-messaging-service => com.r3corda.client/-corda-r-p-c-client}/start.html (50%) create mode 100644 docs/build/html/api/com.r3corda.client/-node-monitor-client/-init-.html create mode 100644 docs/build/html/api/com.r3corda.client/-node-monitor-client/in-events.html create mode 100644 docs/build/html/api/com.r3corda.client/-node-monitor-client/index.html create mode 100644 docs/build/html/api/com.r3corda.client/-node-monitor-client/net.html create mode 100644 docs/build/html/api/com.r3corda.client/-node-monitor-client/node.html create mode 100644 docs/build/html/api/com.r3corda.client/-node-monitor-client/out-events.html create mode 100644 docs/build/html/api/com.r3corda.client/-node-monitor-client/register.html create mode 100644 docs/build/html/api/com.r3corda.client/-node-monitor-client/snapshot.html create mode 100644 docs/build/html/api/com.r3corda.client/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-group/clauses.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-group/extract-groups.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-group/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-group/if-not-matched.html create mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/encumbrance.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/product-amount.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-cash/clauses.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-cash/generate-exit.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-cash/generate-spend.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-group/clauses.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-group/extract-groups.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-group/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-group/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/clauses.html create mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-d-u-m-m-y_-o-b-l-i-g-a-t-i-o-n_-i-s-s-u-e-r.html create mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-d-u-m-m-y_-o-b-l-i-g-a-t-i-o-n_-i-s-s-u-e-r_-k-e-y.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset-state/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset-state/issuance-def.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset-state/move.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset-state/product-amount.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/amount.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/deposit.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/exit-keys.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/owner.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/verify.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-bilateral-net-state/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-bilateral-net-state/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-bilateral-net-state/party-keys.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-bilateral-net-state/template.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-group/clauses.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-group/extract-groups.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-group/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-group/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-set-lifecycle/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-set-lifecycle/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-settle/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-settle/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-verify-lifecycle/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-verify-lifecycle/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-verify-lifecycle/required-commands.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-exit/aggregate-state.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-issue/aggregate-state.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-move/aggregate-state.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-set-lifecycle/aggregate-state.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-settle/aggregate-state.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-commands/aggregate-state.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-commands/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-definition/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-definition/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-definition/obligor.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-definition/template.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-multilateral-net-state/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-multilateral-net-state/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-multilateral-net-state/template.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-net-state/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-net-state/template.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/acceptable-contracts.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/acceptable-issued-products.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/due-before.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/product.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/time-tolerance.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/acceptable-contracts.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/acceptable-issuance-definitions.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/aggregate-state.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/product-amount.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/clauses.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/extract-commands.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/verify-issue-command.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/verify-net-command.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-obligation/verify-set-lifecycle-command.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/clauses.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/verify.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/kotlin.collections.-iterable/sum-fungible-by.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.asset/kotlin.collections.-iterable/sum-fungible.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/required-commands.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.clause/-abstract-issue/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.clause/-abstract-issue/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.clause/-net-clause/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.clause/-net-clause/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.clause/-no-zero-sized-outputs/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.clause/-no-zero-sized-outputs/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts.clause/-no-zero-sized-outputs/required-commands.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-command-data-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-command-data-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-command-data-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-command-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-command-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-command-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-contract-state-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-contract-state-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-contract-state-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-exit-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-exit-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-exit-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-issue-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-issue-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-issue-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-move-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-move-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-move-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-signed-transaction-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-signed-transaction-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-signed-transaction-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-wired-transaction-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-wired-transaction-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.contracts.testing/-wired-transaction-generator/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/-commands/-issue/notary.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/-commands/-redeem/notary.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-abstract-group-clause/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-abstract-group-clause/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-abstract-group-clause/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-abstract-group-clause/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-group/clauses.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-group/extract-groups.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-group/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-group/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-commercial-paper/-commands/-issue/notary.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-commercial-paper/-commands/-redeem/notary.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-commercial-paper/-state/without-owner.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-commercial-paper/clauses.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-commercial-paper/extract-commands.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-fixed-rate/to-string.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/check-leg-amounts.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/check-leg-dates.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/check-rates.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/check-schedules.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/get-floating-leg-payments-differences.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-agree/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-agree/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-agree/required-commands.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-agree/verify.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-fix/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-fix/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-fix/required-commands.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-fix/verify.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/clauses.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/extract-groups.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/group-states.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-mature/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-mature/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-mature/required-commands.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-mature/verify.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-pay/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-pay/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-pay/required-commands.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-pay/verify.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/required-commands.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/verify.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/index.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-commands/-fix/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-commands/-fix/index.html create mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-oracle-type.html create mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/oracle-type.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/thread.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/check-leg-amounts.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/check-leg-dates.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/check-rates.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/check-schedules.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/clauses.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/extract-commands.html delete mode 100644 docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/get-floating-leg-payments-differences.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-any-composition/raw-clauses.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/clauses.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/extract-commands.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/verify.html create mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-composite-clause/required-commands.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-concrete-clause/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-concrete-clause/get-execution-path.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-concrete-clause/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-concrete-clause/required-commands.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause-verifier/clauses.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause-verifier/extract-groups.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause-verifier/required-commands.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-group-verify/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-group-verify/verify.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/clause.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/preclause.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/required-commands.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/to-string.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/verify.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-match-behaviour/-c-o-n-t-i-n-u-e.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-match-behaviour/-e-n-d.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-match-behaviour/-e-r-r-o-r.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-match-behaviour/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/if-matched.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/if-not-matched.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/required-commands.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-single-verify/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/-single-verify/verify.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts.clauses/verify-clauses.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-commodity/symbol.html create mode 100644 docs/build/html/api/com.r3corda.core.contracts/-contract-state/encumbrance.html create mode 100644 docs/build/html/api/com.r3corda.core.contracts/-fixable-deal-state/oracle-type.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/attachments.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/commands.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/inputs.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/notary.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/out-ref.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/outputs.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/signers.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/timestamp.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/type.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-linear-state/thread.html create mode 100644 docs/build/html/api/com.r3corda.core.contracts/-net-command/index.html create mode 100644 docs/build/html/api/com.r3corda.core.contracts/-net-command/type.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/get-missing-signatures.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/plus.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/verify-signatures.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/verify.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/with-additional-signature.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/with-additional-signatures.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/after.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/before.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/midpoint.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-attachment.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-command.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-input-state.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-output-state.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-signature-unchecked.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/commands.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/input-states.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/inputs.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/output-states.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/outputs.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/set-time.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/sign-with.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/time.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/timestamp.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/to-signed-transaction.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/type.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/with-items.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/get-timestamp-by-name.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/get-timestamp-by.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/group-commands.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/in-states.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/out-states.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/attachments.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/commands.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/equals.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/hash-code.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/inputs.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/orig-hash.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/outputs.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/signers.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/to-transaction-for-contract.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/type.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/verify.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-group/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-group/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-group/non-verified-roots.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-group/transactions.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-group/verify.html create mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-direction/-i-n-p-u-t.html create mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-direction/-o-u-t-p-u-t.html create mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-direction/index.html create mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/in-out.html create mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/index.html create mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/message.html create mode 100644 docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/missing.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/commands.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/deserialize.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/inputs.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/out-ref.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/outputs.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/signers.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/timestamp.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/type.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/filter-states-of-type.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/get-timestamp-by-name.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/get-timestamp-by.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/require-single-command.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/to-ledger-transaction.html delete mode 100644 docs/build/html/api/com.r3corda.core.contracts/verify-to-ledger-transaction.html delete mode 100644 docs/build/html/api/com.r3corda.core.crypto/-digital-signature/covering.html delete mode 100644 docs/build/html/api/com.r3corda.core.crypto/-secure-hash/-s-h-a256/signature-algorithm-name.html delete mode 100644 docs/build/html/api/com.r3corda.core.crypto/-secure-hash/signature-algorithm-name.html rename docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a-cert-and-key/{keypair.html => key-pair.html} (62%) delete mode 100644 docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-e-r-t_-p-r-i-v-a-t-e_-k-e-y_-a-l-i-a-s.html create mode 100644 docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-c-l-i-e-n-t_-c-a.html create mode 100644 docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-c-l-i-e-n-t_-c-a_-p-r-i-v-a-t-e_-k-e-y.html create mode 100644 docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-i-n-t-e-r-m-e-d-i-a-t-e_-c-a.html create mode 100644 docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-i-n-t-e-r-m-e-d-i-a-t-e_-c-a_-p-r-i-v-a-t-e_-k-e-y.html rename docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/{-c-a_-c-e-r-t_-a-l-i-a-s.html => -c-o-r-d-a_-r-o-o-t_-c-a.html} (60%) create mode 100644 docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-r-o-o-t_-c-a_-p-r-i-v-a-t-e_-k-e-y.html delete mode 100644 docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-i-n-t-e-r-m-e-d-i-a-t-e_-c-a_-p-r-i-v-a-t-e_-k-e-y_-a-l-i-a-s.html delete mode 100644 docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-r-o-o-t_-c-a_-c-e-r-t_-p-r-i-v-a-t-e_-k-e-y_-a-l-i-a-s.html create mode 100644 docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/add-or-replace-certificate.html create mode 100644 docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/add-or-replace-key.html create mode 100644 docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/create-certificate-signing-request.html create mode 100644 docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/get-x509-name.html create mode 100644 docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/load-or-create-key-pair-from-key-store.html delete mode 100644 docs/build/html/api/com.r3corda.core.messaging/-messaging-service-builder/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.messaging/-messaging-service-builder/start.html delete mode 100644 docs/build/html/api/com.r3corda.core.messaging/-messaging-service/stop.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/files.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/import-attachment.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/open-attachment.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/identities.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/party-from-key.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/party-from-name.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/register-identity.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/keys.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/next-keys.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/clock.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/identity-service.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/invoke-protocol-async.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/key-management-service.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/key.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/network-map-cache.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/network-service.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/record-transactions.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/scheduler-service.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/storage-service.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/wallet-service.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/attachments.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/my-legal-identity-key.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/my-legal-identity.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/validated-transactions.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/add-transaction.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/get-transaction.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/updates.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services.testing/make-test-data-source-properties.html create mode 100644 docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/map-service-registered.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/rates-oracle-nodes.html create mode 100644 docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/run-without-map-service.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services/-t-o-p-i-c_-d-e-f-a-u-l-t_-p-o-s-t-f-i-x.html create mode 100644 docs/build/html/api/com.r3corda.core.node.services/-vault-service/current-vault.html create mode 100644 docs/build/html/api/com.r3corda.core.node.services/-vault-service/index.html create mode 100644 docs/build/html/api/com.r3corda.core.node.services/-vault-service/linear-heads-of-type_.html rename docs/build/html/api/com.r3corda.core.node.services/{-wallet-service => -vault-service}/linear-heads.html (82%) create mode 100644 docs/build/html/api/com.r3corda.core.node.services/-vault-service/notify-all.html create mode 100644 docs/build/html/api/com.r3corda.core.node.services/-vault-service/notify.html create mode 100644 docs/build/html/api/com.r3corda.core.node.services/-vault-service/states-for-refs.html rename docs/build/html/api/com.r3corda.core.node.services/{-wallet-service => -vault-service}/updates.html (50%) create mode 100644 docs/build/html/api/com.r3corda.core.node.services/-vault-service/when-consumed.html create mode 100644 docs/build/html/api/com.r3corda.core.node.services/-vault/-init-.html rename docs/build/html/api/com.r3corda.core.node.services/{-wallet => -vault}/-no-update.html (67%) create mode 100644 docs/build/html/api/com.r3corda.core.node.services/-vault/-update/-init-.html rename docs/build/html/api/com.r3corda.core.node.services/{-wallet => -vault}/-update/consumed.html (68%) create mode 100644 docs/build/html/api/com.r3corda.core.node.services/-vault/-update/index.html rename docs/build/html/api/com.r3corda.core.node.services/{-wallet => -vault}/-update/plus.html (55%) rename docs/build/html/api/com.r3corda.core.node.services/{-wallet => -vault}/-update/produced.html (74%) create mode 100644 docs/build/html/api/com.r3corda.core.node.services/-vault/-update/to-string.html rename docs/build/html/api/com.r3corda.core.node.services/{-wallet => -vault}/index.html (50%) create mode 100644 docs/build/html/api/com.r3corda.core.node.services/-vault/states-of-type.html rename docs/build/html/api/com.r3corda.core.node.services/{-wallet => -vault}/states.html (80%) delete mode 100644 docs/build/html/api/com.r3corda.core.node.services/-wallet-service/current-wallet.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services/-wallet-service/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services/-wallet-service/linear-heads-of-type_.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services/-wallet-service/notify-all.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services/-wallet-service/notify.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services/-wallet-service/states-for-refs.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services/-wallet-service/when-consumed.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services/-wallet/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.node.services/-wallet/states-of-type.html create mode 100644 docs/build/html/api/com.r3corda.core.node/-service-hub/vault-service.html delete mode 100644 docs/build/html/api/com.r3corda.core.node/-service-hub/verify-transaction.html delete mode 100644 docs/build/html/api/com.r3corda.core.node/-service-hub/wallet-service.html create mode 100644 docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/register-session.html delete mode 100644 docs/build/html/api/com.r3corda.core.serialization/-ed25519-private-key-serializer/ed25519-curve.html delete mode 100644 docs/build/html/api/com.r3corda.core.serialization/-ed25519-public-key-serializer/ed25519-curve.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-a-l-i-c-e.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-a-l-i-c-e_-k-e-y.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-a-l-i-c-e_-p-u-b-k-e-y.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-a-l-l_-t-e-s-t_-k-e-y-s.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-always-succeed-contract/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-always-succeed-contract/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-always-succeed-contract/legal-contract-reference.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-always-succeed-contract/verify.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-amount-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-amount-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-amount-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-amount-generator/token-generator.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-attachment-resolution-exception/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-attachment-resolution-exception/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-b-o-b.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-b-o-b_-k-e-y.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-b-o-b_-p-u-b-k-e-y.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-c-h-a-r-l-i-e.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-c-h-a-r-l-i-e_-k-e-y.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-c-h-a-r-l-i-e_-p-u-b-k-e-y.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-currency-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-currency-generator/currencies.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-currency-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-currency-generator/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-k-e-y_3.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/contract.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/is-relevant.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/linear-id.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/nonce.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/participants.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/clause.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/legal-contract-reference.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/verify.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/contract.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/is-relevant.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/nonce.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/participants.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/thread.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-duplicate-output-label/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-duplicate-output-label/index.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-duration-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-duration-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-duration-generator/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-enforce-verify-or-fail.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/-init-.html rename docs/build/html/api/com.r3corda.core.testing/{-in-memory-wallet-service => -in-memory-vault-service}/-inner-state/-init-.html (60%) rename docs/build/html/api/com.r3corda.core.testing/{-in-memory-wallet-service => -in-memory-vault-service}/-inner-state/index.html (66%) create mode 100644 docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/-inner-state/vault.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/current-vault.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/index.html rename docs/build/html/api/com.r3corda.core.testing/{-in-memory-wallet-service => -in-memory-vault-service}/linear-heads.html (75%) rename docs/build/html/api/com.r3corda.core.testing/{-in-memory-wallet-service => -in-memory-vault-service}/log.html (68%) rename docs/build/html/api/com.r3corda.core.testing/{-in-memory-wallet-service => -in-memory-vault-service}/mutex.html (74%) create mode 100644 docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/notify-all.html rename docs/build/html/api/com.r3corda.core.testing/{-in-memory-wallet-service => -in-memory-vault-service}/services.html (68%) rename docs/build/html/api/com.r3corda.core.testing/{-in-memory-wallet-service => -in-memory-vault-service}/updates.html (50%) delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-clashing-threads/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-clashing-threads/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-inner-state/wallet.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/clashing-threads.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/current-wallet.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/notify-all.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-instant-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-instant-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-instant-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-issued-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-issued-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-issued-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-issued-generator/product-generator.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/_transaction.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/_unverified-transaction.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/attachment.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/tweak.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/interpreter.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/output-ref.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/output-state-and-ref.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/output.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/retrieve-output.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/transaction.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/unverified-transaction.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-m-e-g-a_-c-o-r-p.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-m-e-g-a_-c-o-r-p_-k-e-y.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-m-e-g-a_-c-o-r-p_-p-u-b-k-e-y.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-m-i-n-i_-c-o-r-p.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-m-i-n-i_-c-o-r-p_-k-e-y.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-m-i-n-i_-c-o-r-p_-p-u-b-k-e-y.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-m-o-c-k_-i-d-e-n-t-i-t-y_-s-e-r-v-i-c-e.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-o-r-a-c-l-e_-k-e-y.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-o-r-a-c-l-e_-p-u-b-k-e-y.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-output-state-lookup/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-output-state-lookup/retrieve-output-state-and-ref.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-party-and-reference-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-party-and-reference-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-party-and-reference-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-party-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-party-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-party-generator/index.html rename docs/build/html/api/com.r3corda.core.testing/{-dummy-linear-contract => -private-key-generator}/-init-.html (62%) create mode 100644 docs/build/html/api/com.r3corda.core.testing/-private-key-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-private-key-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-public-key-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-public-key-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-public-key-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-secure-hash-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-secure-hash-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-secure-hash-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-state-ref-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-state-ref-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-state-ref-generator/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-t-e-s-t_-t-x_-t-i-m-e.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-type-mismatch/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-type-mismatch/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-verifies-failed/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-verifies-failed/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/_transaction.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/_unverified-transaction.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/attachment.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/output-to-label.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/retrieve-output-state-and-ref.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/services.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/to-transaction-group.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/transaction-name.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/transactions-to-verify.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/transactions-unverified.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/tweak.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/verifies.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/wire-transactions.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/_command.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/_output.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/attachment.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/input.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/ledger-interpreter.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/services.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/timestamp.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/transaction-builder.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/tweak.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/verifies.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-timestamp-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-timestamp-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-timestamp-generator/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/_command.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/_output.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/attachment.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/input.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/ledger-interpreter.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/timestamp.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/tweak.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/command.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/input.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/interpreter.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/output.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/timestamp.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-state-generator/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-state-generator/generate.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-state-generator/index.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/-transaction-state-generator/state-generator.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-verifies/fails with.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-verifies/fails-with.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-verifies/fails.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-verifies/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/-verifies/verifies.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/free-local-host-and-port.html create mode 100644 docs/build/html/api/com.r3corda.core.testing/generate-list.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/generate-state-ref.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/ledger.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/root-cause-exceptions.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/sign-all.html delete mode 100644 docs/build/html/api/com.r3corda.core.testing/transaction.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-base-transaction/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-base-transaction/check-invariants.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-base-transaction/equals.html rename docs/build/html/api/{com.r3corda.node.services.statemachine/-fiber-request => com.r3corda.core.transactions/-base-transaction}/hash-code.html (57%) create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-base-transaction/index.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-base-transaction/inputs.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-base-transaction/must-sign.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-base-transaction/notary.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-base-transaction/outputs.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-base-transaction/timestamp.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-base-transaction/type.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/attachments.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/commands.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/equals.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/hash-code.html rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-ledger-transaction/id.html (58%) create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/index.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/inputs.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/out-ref.html rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-ledger-transaction/to-transaction-for-contract.html (54%) rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-ledger-transaction/verify.html (78%) create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/descriptions.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/id.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/index.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/missing.html rename docs/build/html/api/{com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer => com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception}/to-string.html (51%) create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/check-signatures-are-valid.html rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-signed-transaction/id.html (63%) create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/index.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/plus.html rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-signed-transaction/sigs.html (69%) create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/to-ledger-transaction.html rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-signed-transaction/tx-bits.html (71%) rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-signed-transaction/tx.html (72%) create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/verify-signatures.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/with-additional-signature.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/with-additional-signatures.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-attachment.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-command.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-input-state.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-output-state.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-signature-unchecked.html rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-transaction-builder/attachments.html (75%) rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-transaction-builder/check-and-add-signature.html (50%) rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-transaction-builder/check-signature.html (50%) create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/commands.html rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-transaction-builder/copy.html (67%) rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-transaction-builder/current-sigs.html (66%) create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/index.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/input-states.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/inputs.html rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-transaction-builder/notary.html (65%) create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/output-states.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/outputs.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/set-time.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/sign-with.html rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-transaction-builder/signers.html (71%) create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/time.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/timestamp.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/to-signed-transaction.html rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-transaction-builder/to-wire-transaction.html (65%) create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/type.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/with-items.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/-init-.html rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-wire-transaction/attachments.html (60%) create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/commands.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/deserialize.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/equals.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/hash-code.html rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-wire-transaction/id.html (55%) create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/index.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/inputs.html create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/out-ref.html rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-wire-transaction/serialized.html (71%) create mode 100644 docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/to-ledger-transaction.html rename docs/build/html/api/{com.r3corda.core.contracts => com.r3corda.core.transactions}/-wire-transaction/to-string.html (63%) create mode 100644 docs/build/html/api/com.r3corda.core.transactions/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/format.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/init-verbose.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/init.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/logging-off.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/logging-on.html rename docs/build/html/api/{com.r3corda.core.testing => com.r3corda.core.utilities}/-d-u-m-m-y_-k-e-y_1.html (72%) rename docs/build/html/api/{com.r3corda.core.testing => com.r3corda.core.utilities}/-d-u-m-m-y_-k-e-y_2.html (72%) rename docs/build/html/api/{com.r3corda.core.testing => com.r3corda.core.utilities}/-d-u-m-m-y_-n-o-t-a-r-y.html (71%) rename docs/build/html/api/{com.r3corda.core.testing => com.r3corda.core.utilities}/-d-u-m-m-y_-n-o-t-a-r-y_-k-e-y.html (72%) rename docs/build/html/api/{com.r3corda.core.testing => com.r3corda.core.utilities}/-d-u-m-m-y_-p-u-b-k-e-y_1.html (72%) rename docs/build/html/api/{com.r3corda.core.testing => com.r3corda.core.utilities}/-d-u-m-m-y_-p-u-b-k-e-y_2.html (72%) delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-recording-map/-get/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-recording-map/-get/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-recording-map/-get/key.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-recording-map/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-recording-map/-put/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-recording-map/-put/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-recording-map/-put/key.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-recording-map/-put/value.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-recording-map/-record.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-recording-map/clear-records.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-recording-map/get.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-recording-map/index.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-recording-map/put-all-unrecorded.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-recording-map/put-all.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-recording-map/put.html delete mode 100644 docs/build/html/api/com.r3corda.core.utilities/-recording-map/records.html create mode 100644 docs/build/html/api/com.r3corda.core.utilities/-t-e-s-t_-t-x_-t-i-m-e.html create mode 100644 docs/build/html/api/com.r3corda.core.utilities/-untrustworthy-data/unwrap.html create mode 100644 docs/build/html/api/com.r3corda.core.utilities/debug.html create mode 100644 docs/build/html/api/com.r3corda.core/-error-or/-init-.html create mode 100644 docs/build/html/api/com.r3corda.core/-error-or/bind.html create mode 100644 docs/build/html/api/com.r3corda.core/-error-or/catch.html create mode 100644 docs/build/html/api/com.r3corda.core/-error-or/combine.html create mode 100644 docs/build/html/api/com.r3corda.core/-error-or/error.html create mode 100644 docs/build/html/api/com.r3corda.core/-error-or/get-or-throw.html create mode 100644 docs/build/html/api/com.r3corda.core/-error-or/index.html create mode 100644 docs/build/html/api/com.r3corda.core/-error-or/map.html create mode 100644 docs/build/html/api/com.r3corda.core/-error-or/match.html create mode 100644 docs/build/html/api/com.r3corda.core/-error-or/of.html create mode 100644 docs/build/html/api/com.r3corda.core/-error-or/value.html create mode 100644 docs/build/html/api/com.r3corda.core/buffer-until-subscribed.html create mode 100644 docs/build/html/api/com.r3corda.core/java.nio.file.-path/div.html create mode 100644 docs/build/html/api/com.r3corda.core/java.util.concurrent.-future/index.html create mode 100644 docs/build/html/api/com.r3corda.core/java.util.concurrent.-future/map.html create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/-init-.html rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-fix-container/factory.html (58%) create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/get.html create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/index.html rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-fix-container/size.html (52%) create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/-init-.html rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-interpolating-rate-map/calendar.html (57%) rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-interpolating-rate-map/date.html (57%) rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-interpolating-rate-map/factory.html (58%) create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/get-rate.html create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/index.html rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-interpolating-rate-map/size.html (55%) create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/-init-.html rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-oracle/clock.html (58%) rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-oracle/identity.html (57%) create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/index.html rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-oracle/known-fixes.html (57%) create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/query.html create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/sign.html rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-plugin/-init-.html (63%) rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-plugin/index.html (96%) rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-plugin/required-protocols.html (79%) rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-plugin/service-plugins.html (78%) create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/-init-.html rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-service/acceptable-file-extensions.html (66%) rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-service/data-type-prefix.html (66%) create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/index.html rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-service/oracle.html (55%) rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-service/ss.html (59%) create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/upload.html rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-type.html (94%) create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-unknown-fix/-init-.html rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-unknown-fix/fix.html (57%) rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/-unknown-fix/index.html (64%) rename docs/build/html/api/{com.r3corda.node.services.clientapi => com.r3corda.demos.api}/-node-interest-rates/index.html (74%) create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/parse-file.html create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/parse-fix-of.html create mode 100644 docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/parse-fix.html rename docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/{other-side.html => receive-session-i-d.html} (52%) rename docs/build/html/api/{com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message => com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message}/reply-to-party.html (54%) rename docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/{other-session-i-d.html => send-session-i-d.html} (53%) delete mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/index.html delete mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/on-failure.html delete mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/on-success.html delete mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/success.html delete mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-d-e-a-l-i-n-g/child-progress-tracker.html delete mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-d-e-a-l-i-n-g/index.html delete mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-r-e-c-e-i-v-e-d.html delete mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/index.html delete mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/register.html delete mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/tracker.html delete mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-r-e-c-e-i-v-e-d.html create mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/receive-session-i-d.html rename docs/build/html/api/{protocols/-abstract-state-replacement-protocol/-handshake => com.r3corda.demos.protocols/-exit-server-protocol/-exit-message}/reply-to-party.html (57%) create mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/send-session-i-d.html delete mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-handler/index.html delete mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-handler/register.html delete mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-handler/index.html delete mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-handler/register.html create mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/receive-session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/reply-to-party.html create mode 100644 docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/send-session-i-d.html delete mode 100644 docs/build/html/api/com.r3corda.demos/-cli-params-spec/network-map-identity-file.html delete mode 100644 docs/build/html/api/com.r3corda.demos/-cli-params/-run-node/identity-file.html create mode 100644 docs/build/html/api/com.r3corda.demos/-cli-params/-upload-rates/-init-.html create mode 100644 docs/build/html/api/com.r3corda.demos/-cli-params/-upload-rates/api-address.html create mode 100644 docs/build/html/api/com.r3corda.demos/-cli-params/-upload-rates/index.html delete mode 100644 docs/build/html/api/com.r3corda.demos/-d-e-m-o_-t-o-p-i-c.html create mode 100644 docs/build/html/api/com.r3corda.demos/-i-r-s-demo-role/-rates.html delete mode 100644 docs/build/html/api/com.r3corda.demos/run-trader-demo.html create mode 100644 docs/build/html/api/com.r3corda.demos/run-upload-rates.html delete mode 100644 docs/build/html/api/com.r3corda.node.api/-states-query/select-all-deals.html delete mode 100644 docs/build/html/api/com.r3corda.node.api/-states-query/select-deal.html delete mode 100644 docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/api-address.html delete mode 100644 docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/base-directory.html delete mode 100644 docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/messaging-address.html delete mode 100644 docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/network-map-address.html delete mode 100644 docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/network-map-name.html delete mode 100644 docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/network-map-public-key.html delete mode 100644 docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/parse.html delete mode 100644 docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/parser.html delete mode 100644 docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/services.html delete mode 100644 docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/to-cli-arguments.html delete mode 100644 docs/build/html/api/com.r3corda.node.driver/-node-runner/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.driver/-node-runner/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.driver/-node-runner/main.html delete mode 100644 docs/build/html/api/com.r3corda.node.driver/create-node-run-directory.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-i-r-s-simulation/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/map-node.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/notary-node.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/party-nodes.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-default-factory/create.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-default-factory/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-factory/create.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-factory/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/find-my-location.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/generate-key-pair.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/id.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/key-pair.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/log.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/make-identity-service.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/make-messaging-service.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/make-wallet-service.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/mock-net.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/no-network-map-configured.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/place.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/server-thread.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/start-messaging-service.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/start.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/address-to-node.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-node.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-notary-node.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-party-node.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-some-nodes.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-two-nodes.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/filesystem.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/identities.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/messaging-network.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/nodes.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/run-network.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/start-nodes.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/stop-nodes.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/create.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-network-map-node-factory/create.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-network-map-node-factory/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-notary-node-factory/create.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-notary-node-factory/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-rates-oracle-factory/create.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-rates-oracle-factory/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-regulator-factory/create.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-regulator-factory/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-simulated-node/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-simulated-node/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/latency-injector.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/network.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/run-async.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/show-consensus-for.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/show-progress-for.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-simulation/start-trading-circle.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/advance-by.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/get-zone.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/instant.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/set-to.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/to-token.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/with-zone.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/-trade-simulation/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/kotlin.collections.-iterable/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal.testing/kotlin.collections.-iterable/set-to.html create mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/-database-configuration-exception/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/-database-configuration-exception/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/close-on-stop.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/dir.html create mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/in-node-monitor-service.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/in-node-wallet-monitor-service.html create mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/initialise-database-persistence.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/interest-rates-service.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-interest-rates-oracle-service.html rename docs/build/html/api/com.r3corda.node.internal/-abstract-node/{make-wallet-monitor-service.html => make-key-management-service.html} (50%) create mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-monitor-service.html create mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-uniqueness-provider.html create mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-vault-service.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-wallet-service.html create mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/run-on-stop.html create mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/uniqueness-provider.html create mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/vault.html delete mode 100644 docs/build/html/api/com.r3corda.node.internal/-abstract-node/wallet.html create mode 100644 docs/build/html/api/com.r3corda.node.internal/-node/make-uniqueness-provider.html create mode 100644 docs/build/html/api/com.r3corda.node.internal/-server-r-p-c-ops/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.internal/-server-r-p-c-ops/index.html create mode 100644 docs/build/html/api/com.r3corda.node.internal/-server-r-p-c-ops/protocol-version.html create mode 100644 docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/add-protocol-handler.html rename docs/build/html/api/{com.r3corda.node.services.persistence/-data-vending-service => com.r3corda.node.services.api/-abstract-node-service}/logger.html (50%) delete mode 100644 docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/network-map-cache.html create mode 100644 docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/services.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.api/-checkpoint/awaiting-payload-type.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.api/-checkpoint/awaiting-topic.html create mode 100644 docs/build/html/api/com.r3corda.node.services.api/-checkpoint/fiber-created.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.api/-messaging-service-internal/register-trusted-address.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/fixes.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/get.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/get-rate.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/input-rates.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/query.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/sign.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-fixing-service-plugin/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-fixing-service-plugin/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-fixing-service-plugin/required-protocols.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-fixing-service-plugin/web-apis.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/upload.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-unknown-fix/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/parse-file.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/parse-fix-of.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/parse-fix.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/certificate-signing-service.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/dev-mode.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/email-address.html rename docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/{map-service.html => network-map-address.html} (55%) delete mode 100644 docs/build/html/api/com.r3corda.node.services.config/-name-service-config/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.config/-name-service-config/address.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.config/-name-service-config/host-service-locally.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.config/-name-service-config/identity.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.config/-name-service-config/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/basedir.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/certificate-signing-service.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/dev-mode.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/email-address.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-node-configuration/basedir.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-node-configuration/certificate-signing-service.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-node-configuration/certificates-path.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-node-configuration/dev-mode.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-node-configuration/email-address.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/certificates-path.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/index.html rename docs/build/html/api/com.r3corda.node.services.config/{-node-configuration => -node-s-s-l-configuration}/key-store-password.html (62%) create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/key-store-path.html rename docs/build/html/api/com.r3corda.node.services.config/{-node-configuration => -node-s-s-l-configuration}/trust-store-password.html (61%) create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/trust-store-path.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-optional-config/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-optional-config/conf.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-optional-config/get-value.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-optional-config/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/-optional-config/lambda.html create mode 100644 docs/build/html/api/com.r3corda.node.services.config/get-or-else.html create mode 100644 docs/build/html/api/com.r3corda.node.services.keys/-persistent-key-management-service/-init-.html rename docs/build/html/api/{com.r3corda.core.node.services.testing/-mock-key-management-service => com.r3corda.node.services.keys/-persistent-key-management-service}/fresh-key.html (66%) rename docs/build/html/api/{com.r3corda.core.node.services.testing/-mock-key-management-service => com.r3corda.node.services.keys/-persistent-key-management-service}/index.html (62%) create mode 100644 docs/build/html/api/com.r3corda.node.services.keys/-persistent-key-management-service/keys.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-handler/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/add-message-handler.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/create-message.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/default-executor.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/make-network-map-address.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/make-recipient.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/my-host-port.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/send.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/to-host-and-port.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-address/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-address/host-and-port.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-address/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-c-l-i-e-n-t-s_-p-r-e-f-i-x.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-r-p-c_-r-e-q-u-e-s-t-s_-q-u-e-u-e.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/check-store-passwords.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/directory.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/parse-key-from-queue-name.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/to-host-and-port.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/try-parse-key-from-queue-name.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/add-connector.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/bridge-exists.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/connector-exists.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/deploy-bridge.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/my-address.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/callback.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/executor.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/topic-session.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/topic.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-s-e-s-s-i-o-n_-i-d_-p-r-o-p-e-r-t-y.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-t-o-p-i-c_-p-r-o-p-e-r-t-y.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/add-message-handler.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/configure-with-dev-s-s-l-certificate.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/create-message.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/default-executor.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/directory.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/log.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/make-recipient.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/my-address.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/my-host-port.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/register-trusted-address.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/remove-message-handler.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/stop.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/to-host-and-port.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/-m-e-t-h-o-d_-n-a-m-e.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/-o-b-s-e-r-v-a-t-i-o-n-s_-t-o.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/-r-e-p-l-y_-t-o.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/args.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/method-name.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/observations-to-address.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/reply-to-address.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-corda-r-p-c-ops.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-marshalled-observation/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-marshalled-observation/for-handle.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-marshalled-observation/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-marshalled-observation/what.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-handler/-init-.html rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/-handler/callback.html (71%) rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/-handler/executor.html (61%) rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/-handler/index.html (51%) rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/-handler/topic-session.html (58%) create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-init-.html rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/-s-e-s-s-i-o-n_-i-d_-p-r-o-p-e-r-t-y.html (57%) rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/-t-o-p-i-c_-p-r-o-p-e-r-t-y.html (58%) create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/add-message-handler.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/create-message.html rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/executor.html (65%) rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/index.html (58%) rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/log.html (60%) create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/make-network-map-address.html rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/my-address.html (75%) rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/my-identity.html (66%) rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/persistent-inbox.html (58%) rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/remove-message-handler.html (56%) rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/run.html (54%) rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-service => -node-messaging-client}/send.html (50%) rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/server-host-port.html (59%) rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/start.html (63%) rename docs/build/html/api/com.r3corda.node.services.messaging/{-artemis-messaging-client => -node-messaging-client}/stop.html (81%) create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/dispatch.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/send.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/start.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/target.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-exception/-deadline-exceeded/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-exception/-deadline-exceeded/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-exception/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-exception/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-ops/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-ops/protocol-version.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-returns-observables/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-returns-observables/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-since-version/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-since-version/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-since-version/version.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/create-r-p-c-kryo.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/rpc-log.html create mode 100644 docs/build/html/api/com.r3corda.node.services.messaging/to-r-p-c-request-message.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/currency.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/issue-ref.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/pennies.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/currency.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/issue-ref.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/notary.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/pennies.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/recipient.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/owner.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/pennies.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/token-def.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/id.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/index.html rename docs/build/html/api/com.r3corda.node.services.monitor/{-wallet-monitor-service => -node-monitor-service}/-d-e-r-e-g-i-s-t-e-r_-t-o-p-i-c.html (58%) rename docs/build/html/api/com.r3corda.node.services.monitor/{-wallet-monitor-service => -node-monitor-service}/-i-n_-e-v-e-n-t_-t-o-p-i-c.html (58%) create mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-input-state-ref-resolve-failed/-init-.html rename docs/build/html/api/com.r3corda.node.services.monitor/{-wallet-monitor-service => -node-monitor-service}/-input-state-ref-resolve-failed/index.html (53%) rename docs/build/html/api/com.r3corda.node.services.monitor/{-wallet-monitor-service => -node-monitor-service}/-o-u-t_-e-v-e-n-t_-t-o-p-i-c.html (58%) rename docs/build/html/api/com.r3corda.node.services.monitor/{-wallet-monitor-service => -node-monitor-service}/-r-e-g-i-s-t-e-r_-t-o-p-i-c.html (58%) create mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-registered-listener/-init-.html rename docs/build/html/api/com.r3corda.node.services.monitor/{-wallet-monitor-service => -node-monitor-service}/-registered-listener/index.html (58%) rename docs/build/html/api/com.r3corda.node.services.monitor/{-wallet-monitor-service => -node-monitor-service}/-registered-listener/recipients.html (57%) rename docs/build/html/api/com.r3corda.node.services.monitor/{-wallet-monitor-service => -node-monitor-service}/-registered-listener/session-i-d.html (51%) rename docs/build/html/api/com.r3corda.node.services.monitor/{-wallet-monitor-service => -node-monitor-service}/-s-t-a-t-e_-t-o-p-i-c.html (59%) create mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/index.html rename docs/build/html/api/com.r3corda.node.services.monitor/{-wallet-monitor-service => -node-monitor-service}/listeners.html (69%) rename docs/build/html/api/com.r3corda.node.services.monitor/{-wallet-monitor-service => -node-monitor-service}/logger.html (61%) create mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/process-deregister-request.html create mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/process-register-request.html rename docs/build/html/api/com.r3corda.node.services.monitor/{-wallet-monitor-service => -node-monitor-service}/smm.html (68%) create mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-output-state/to-string.html create mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-progress/to-string.html create mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-state-machine/to-string.html create mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction-build/to-string.html create mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction/to-string.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-complete/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-complete/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-complete/message.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-complete/transaction.html create mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-failed/to-string.html create mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-protocol-started/to-string.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-input-state-ref-resolve-failed/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-public-key-lookup-failed/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-public-key-lookup-failed/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-registered-listener/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/process-deregister-request.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/process-register-request.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/services.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/_map-version.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/get-unacknowledged-count.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/map-version.html rename docs/build/html/api/com.r3corda.node.services.network/{-in-memory-network-map-service => -abstract-network-map-service}/max-size-registration-request-bytes.html (77%) rename docs/build/html/api/com.r3corda.node.services.network/{-in-memory-network-map-service => -abstract-network-map-service}/max-unacknowledged-updates.html (75%) create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/nodes.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/notify-subscribers.html rename docs/build/html/api/com.r3corda.node.services.network/{-in-memory-network-map-service => -abstract-network-map-service}/process-acknowledge.html (77%) rename docs/build/html/api/com.r3corda.node.services.network/{-in-memory-network-map-service => -abstract-network-map-service}/process-fetch-all-request.html (73%) rename docs/build/html/api/com.r3corda.node.services.network/{-in-memory-network-map-service => -abstract-network-map-service}/process-query-request.html (79%) rename docs/build/html/api/com.r3corda.node.services.network/{-in-memory-network-map-service => -abstract-network-map-service}/process-registration-change-request.html (80%) rename docs/build/html/api/com.r3corda.node.services.network/{-in-memory-network-map-service => -abstract-network-map-service}/process-subscription-request.html (74%) create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/registered-nodes.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/setup.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/subscribers.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/unregister-network-handlers.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/id.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/manually-pumped.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/start.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/description.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/equals.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/hash-code.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/id.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/to-string.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/callback.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/executor.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/topic-session.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/topic.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-inner-state/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-inner-state/handlers.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-inner-state/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-inner-state/pending-redelivery.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/add-message-handler.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/background-thread.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/create-message.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/my-address.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/pump-receive.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/register-trusted-address.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/remove-message-handler.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/running.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/send.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/state.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/stop.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-latency-calculator/between.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-latency-calculator/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-m-e-s-s-a-g-e-s_-l-o-g_-n-a-m-e.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/message.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/recipients.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/sender.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/create-node-with-i-d.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/create-node.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/endpoints.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/everyone-online.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/latency-calculator.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/pump-send-internal.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/pump-send.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/received-messages.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/send-manually-pumped.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/sent-messages.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/stop.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/map-service-registered.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/net-internal.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/rates-oracle-nodes.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/run-without-map-service.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/cache.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/get-unacknowledged-count.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/nodes.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/notify-subscribers.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/registered-nodes.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/subscribers.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-last-acknowledge-info/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-last-acknowledge-info/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-last-acknowledge-info/map-version.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/-mock-address/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/-mock-address/id.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/-mock-address/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/add-registration.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/changed.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/delete-registration.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/index.html rename docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update-acknowledge/{wire-reg-hash.html => map-version.html} (57%) create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update/map-version.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-node-registration-info/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-node-registration-info/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-node-registration-info/map-version.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-node-registration-info/reg.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-persistent-network-map-service/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-persistent-network-map-service/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-persistent-network-map-service/registered-nodes.html create mode 100644 docs/build/html/api/com.r3corda.node.services.network/-persistent-network-map-service/subscribers.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-n-o-t-i-f-y_-t-x_-p-r-o-t-o-c-o-l_-t-o-p-i-c.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/session-i-d.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/tx.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-response-message/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-response-message/accepted.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-response-message/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/storage.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-n-o-t-i-f-y_-t-x_-p-r-o-t-o-c-o-l_-t-o-p-i-c.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/reply-to-party.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/session-i-d.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/tx.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-response-message/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-response-message/accepted.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-response-message/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/services.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.persistence/-node-attachment-service/metrics.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/equals.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/response-type.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/to-string.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-not-expecting-response/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-not-expecting-response/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/equals.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/receive-topic-session.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/receive-topic.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/session-i-d-for-receive.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/session-i-d-for-send.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/stack-trace-in-case-of-problems.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-i-o-request/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-i-o-request/stack-trace-in-case-of-problems.html rename docs/build/html/api/{com.r3corda.core.messaging/-message => com.r3corda.node.services.statemachine/-protocol-i-o-request}/topic.html (53%) create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/receive-session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/receive-type.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/stack-trace-in-case-of-problems.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/topic.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-receive-request/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-receive-request/receive-session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-receive-request/receive-topic-session.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-receive-request/receive-type.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/destination.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/payload.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/receive-session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/receive-type.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/send-session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/stack-trace-in-case-of-problems.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/topic.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/-init-.html rename docs/build/html/api/com.r3corda.node.services.statemachine/{-fiber-request => -send-only}/destination.html (54%) create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/index.html rename docs/build/html/api/com.r3corda.node.services.statemachine/{-fiber-request => -send-only}/payload.html (51%) create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/send-session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/stack-trace-in-case-of-problems.html rename docs/build/html/api/com.r3corda.node.services.statemachine/{-fiber-request => -send-only}/topic.html (55%) create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-request/destination.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-request/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-request/payload.html create mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-send-request/send-session-i-d.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-expecting-response/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-expecting-response/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-expecting-response/response-type.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-not-expecting-response/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-not-expecting-response/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/destination.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/payload.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/session-i-d-for-receive.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/session-i-d-for-send.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/stack-trace-in-case-of-problems.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/topic.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.transactions/-notary-service/smm.html create mode 100644 docs/build/html/api/com.r3corda.node.services.transactions/-persistent-uniqueness-provider/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.transactions/-persistent-uniqueness-provider/commit.html create mode 100644 docs/build/html/api/com.r3corda.node.services.transactions/-persistent-uniqueness-provider/committed-states.html create mode 100644 docs/build/html/api/com.r3corda.node.services.transactions/-persistent-uniqueness-provider/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.vault/-cash-balance-as-metrics-observer/-init-.html rename docs/build/html/api/{com.r3corda.node.services.wallet => com.r3corda.node.services.vault}/-cash-balance-as-metrics-observer/index.html (57%) rename docs/build/html/api/{com.r3corda.node.services.wallet => com.r3corda.node.services.vault}/-cash-balance-as-metrics-observer/service-hub-internal.html (63%) create mode 100644 docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/current-vault.html create mode 100644 docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/index.html create mode 100644 docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/linear-heads.html create mode 100644 docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/log.html create mode 100644 docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/mutex.html create mode 100644 docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/notify-all.html create mode 100644 docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/updates.html create mode 100644 docs/build/html/api/com.r3corda.node.services.vault/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.wallet/-cash-balance-as-metrics-observer/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.wallet/-node-wallet-service/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.wallet/-node-wallet-service/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.wallet/-node-wallet-service/log.html delete mode 100644 docs/build/html/api/com.r3corda.node.services.wallet/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services/-fixing-session-initiation-handler/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services/-fixing-session-initiation-handler/register.html delete mode 100644 docs/build/html/api/com.r3corda.node.services/-notary-change-service/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.node.services/-notary-change-service/index.html delete mode 100644 docs/build/html/api/com.r3corda.node.services/-notary-change-service/smm.html delete mode 100644 docs/build/html/api/com.r3corda.node.services/-notary-change/-service/services.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/build-key-store.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/cert-service.html rename docs/build/html/api/{com.r3corda.node.services.messaging/-artemis-messaging-service => com.r3corda.node.utilities.certsigning/-certificate-signer}/config.html (56%) create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/index.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/log.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/poll-interval.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signing-service/index.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signing-service/retrieve-certificates.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signing-service/submit-request.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/client-version.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/index.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/retrieve-certificates.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/server.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/submit-request.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-params-spec/base-directory-arg.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-params-spec/config-file-arg.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-params-spec/index.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/-params-spec/parser.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/index.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities.certsigning/main.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/add-key-to-insert.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/add-value-to-insert.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/clear.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/contains-key.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/contains-value.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/entries.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/get.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/index.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/is-empty.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/key-from-row.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/keys.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/load-on-init.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/log.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/put.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/remove.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/size.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/table.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/value-from-row.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/values.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/add-element-to-insert.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/add.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/clear.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/contains.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/element-from-row.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/index.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/inner-map.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/is-empty.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/iterator.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/remove.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/size.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/table.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-blob-map-table/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-blob-map-table/index.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-blob-map-table/key.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-blob-map-table/value.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/add-key-to-insert.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/add-value-to-insert.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/index.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/key-from-row.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/value-from-row.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/-blob-set-table/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/-blob-set-table/index.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/-blob-set-table/key.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/add-element-to-insert.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/element-from-row.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/index.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hashed-table/-init-.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hashed-table/index.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hashed-table/key-hash.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hashed-table/seq-no.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/deserialize-from-blob.html create mode 100644 docs/build/html/api/com.r3corda.node.utilities/serialize-to-blob.html delete mode 100644 docs/build/html/api/com.r3corda.node/log.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/session-id-for-receive.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/session-id-for-send.html create mode 100644 docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/verify-proposal.html rename docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/{session-id-for-send.html => receive-session-i-d.html} (57%) rename docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/{session-i-d.html => send-session-i-d.html} (54%) create mode 100644 docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/receive-session-i-d.html rename docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/{session-i-d.html => send-session-i-d.html} (52%) create mode 100644 docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/receive-session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/send-session-i-d.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.protocols/-handshake-message/index.html create mode 100644 docs/build/html/api/com.r3corda.protocols/-handshake-message/receive-session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.protocols/-handshake-message/send-session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.protocols/-handshake-message/session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-acceptor/verify-proposal.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-notary-error/-more-than-one-timestamp/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-notary-error/-more-than-one-timestamp/index.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-notary-error/-not-for-me/-init-.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-notary-error/-not-for-me/index.html rename docs/build/html/api/com.r3corda.protocols/-notary-protocol/{-service => -handshake}/receive-session-i-d.html (56%) delete mode 100644 docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/session-i-d.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/send-session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/receive-session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/send-session-i-d.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/receive-session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/send-session-i-d.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/other-party.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/other-side.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/session-i-d.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/initiation.html create mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/oracle-type.html create mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/other-party.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/other-side.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/session-i-d.html rename docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/{sender.html => oracle-type.html} (56%) rename docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/{session-i-d.html => receive-session-i-d.html} (52%) create mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/reply-to-party.html rename docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/{party.html => send-session-i-d.html} (54%) create mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/other-party.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/other-session-i-d.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/other-side.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-handshake/session-i-d.html create mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/other-party.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/other-session-i-d.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/other-side.html rename docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/{other-session-i-d.html => other-party.html} (50%) delete mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/other-side.html create mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/other-party.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/other-side.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/session-i-d.html rename docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/{other-side.html => other-party.html} (53%) delete mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/session-i-d.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller-trade-info/session-i-d.html delete mode 100644 docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/buyer-session-i-d.html rename docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/{other-side.html => other-party.html} (52%) create mode 100644 docs/build/html/api/com.r3corda.simulation/-i-r-s-simulation/-init-.html rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-i-r-s-simulation/index.html (73%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-i-r-s-simulation/iterate.html (66%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-i-r-s-simulation/om.html (60%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-i-r-s-simulation/start-main-simulation.html (76%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/-bank-factory/-init-.html (58%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/-bank-factory/counter.html (53%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/-bank-factory/create-all.html (65%) create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/create.html create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/index.html create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/-init-.html create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/-network-map-node-factory/create.html create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/-network-map-node-factory/index.html create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/-notary-node-factory/create.html create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/-notary-node-factory/index.html create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/-rates-oracle-factory/create.html create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/-rates-oracle-factory/index.html create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/-regulator-factory/create.html create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/-regulator-factory/index.html create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/-simulated-node/-init-.html rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/-simulated-node/find-my-location.html (57%) create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/-simulated-node/index.html rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/all-protocol-steps.html (76%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/bank-factory.html (62%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/bank-locations.html (60%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/banks.html (68%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/clocks.html (60%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/current-date-and-time.html (75%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/date-changes.html (70%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/done-steps.html (72%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/extra-node-labels.html (75%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/index.html (70%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/iterate.html (67%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/network-initialisation-finished.html (67%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/network-map.html (62%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/network-send-manually-pumped.html (59%) create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/network.html rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/notary.html (62%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/rates-oracle.html (62%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/regulators.html (68%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/service-providers.html (67%) create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/show-consensus-for.html create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/show-progress-for.html rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/start-main-simulation.html (75%) create mode 100644 docs/build/html/api/com.r3corda.simulation/-simulation/start-trading-circle.html rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/start.html (69%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-simulation/stop.html (63%) create mode 100644 docs/build/html/api/com.r3corda.simulation/-trade-simulation/-init-.html rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-trade-simulation/index.html (75%) rename docs/build/html/api/{com.r3corda.node.internal.testing => com.r3corda.simulation}/-trade-simulation/start-main-simulation.html (76%) create mode 100644 docs/build/html/api/com.r3corda.simulation/index.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/-a-p-p-r-o-v-i-n-g.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/-init-.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/-r-e-j-e-c-t-i-n-g.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/-v-e-r-i-f-y-i-n-g.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/call.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/index.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/other-side.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/progress-tracker.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/session-id-for-receive.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/session-id-for-send.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/tracker.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/-init-.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/index.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/session-i-d.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/session-id-for-send.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-init-.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/-init-.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/-n-o-t-a-r-y.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/-s-i-g-n-i-n-g.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/call.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/index.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/modification.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/original-state.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/progress-tracker.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/tracker.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-proposal/index.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-proposal/modification.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-proposal/state-ref.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-proposal/stx.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/error.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/index.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/no-error.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/sig.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/with-error.html delete mode 100644 docs/build/html/api/protocols/-abstract-state-replacement-protocol/index.html delete mode 100644 docs/build/html/api/protocols/-notary-change-protocol/-acceptor/-init-.html delete mode 100644 docs/build/html/api/protocols/-notary-change-protocol/-acceptor/index.html delete mode 100644 docs/build/html/api/protocols/-notary-change-protocol/-acceptor/progress-tracker.html delete mode 100644 docs/build/html/api/protocols/-notary-change-protocol/-acceptor/topic.html delete mode 100644 docs/build/html/api/protocols/-notary-change-protocol/-instigator/-init-.html delete mode 100644 docs/build/html/api/protocols/-notary-change-protocol/-instigator/index.html delete mode 100644 docs/build/html/api/protocols/-notary-change-protocol/-instigator/topic.html delete mode 100644 docs/build/html/api/protocols/-notary-change-protocol/-proposal/-init-.html delete mode 100644 docs/build/html/api/protocols/-notary-change-protocol/-proposal/index.html delete mode 100644 docs/build/html/api/protocols/-notary-change-protocol/-proposal/modification.html delete mode 100644 docs/build/html/api/protocols/-notary-change-protocol/-proposal/state-ref.html delete mode 100644 docs/build/html/api/protocols/-notary-change-protocol/-proposal/stx.html delete mode 100644 docs/build/html/api/protocols/-notary-change-protocol/-t-o-p-i-c.html delete mode 100644 docs/build/html/api/protocols/-notary-change-protocol/index.html delete mode 100644 docs/build/html/api/protocols/-state-replacement-exception/-init-.html delete mode 100644 docs/build/html/api/protocols/-state-replacement-exception/error.html delete mode 100644 docs/build/html/api/protocols/-state-replacement-exception/index.html delete mode 100644 docs/build/html/api/protocols/-state-replacement-refused/-init-.html delete mode 100644 docs/build/html/api/protocols/-state-replacement-refused/detail.html delete mode 100644 docs/build/html/api/protocols/-state-replacement-refused/identity.html delete mode 100644 docs/build/html/api/protocols/-state-replacement-refused/index.html delete mode 100644 docs/build/html/api/protocols/-state-replacement-refused/state.html delete mode 100644 docs/build/html/api/protocols/-state-replacement-refused/to-string.html delete mode 100644 docs/build/html/api/protocols/index.html create mode 100644 docs/build/html/clientrpc.html rename docs/build/html/{visualiser.html => network-simulator.html} (63%) create mode 100644 docs/build/html/secure-coding-guidelines.html diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo index b7417346d2..d958f98faa 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: 0e8996317ea97eb6f5837df02a05a760 +config: 02da61908148262295ef57918c434b8d tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/html/_images/network-simulator.png b/docs/build/html/_images/network-simulator.png new file mode 100644 index 0000000000000000000000000000000000000000..37060643389de7d042439947bf4d2ed8d0b1ce54 GIT binary patch literal 928380 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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^ 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%0A*Vt!-DCbZS4ueMvw$Avq{&=n` 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%0AA84 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�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 WN3LncKG+BTyD5F=zl^JTPyYwAIegUs diff --git a/docs/build/html/_sources/clientrpc.txt b/docs/build/html/_sources/clientrpc.txt new file mode 100644 index 0000000000..b691610450 --- /dev/null +++ b/docs/build/html/_sources/clientrpc.txt @@ -0,0 +1,75 @@ +Client RPC +========== + +There are multiple ways to interact with a node from a *client program*, but if your client is written in a JVM +compatible language the easiest way to do so is using the client library. The library connects to your running +node using a message queue protocol and then provides a simple RPC interface to interact with it. You make calls +on a Java object as normal, and the marshalling back and forth is handled for you. + +The starting point for the client library is the `CordaRPCClient`_ class. This provides a ``proxy`` method that +returns an implementation of the `CordaRPCOps`_ interface. A timeout parameter can be specified, and observables that +are returned by RPCs can be subscribed to in order to receive an ongoing stream of updates from the node. More +detail on how to use this is provided in the docs for the proxy method. + +.. warning:: The returned object is somewhat expensive to create and consumes a small amount of server side + resources. When you're done with it, cast it to ``Closeable`` or ``AutoCloseable`` and close it. Don't create + one for every call you make - create a proxy and reuse it. + +Observables +----------- + +The RPC system handles observables in a special way. When a method returns an observable, whether directly or +as a sub-object of the response object graph, an observable is created on the client to match the one on the +server. Objects emitted by the server-side observable are pushed onto a queue which is then drained by the client. +The returned observable may even emit object graphs with even more observables in them, and it all works as you +would expect. + +This feature comes with a cost: the server must queue up objects emitted by the server-side observable until you +download them. Therefore RPCs that use this feature are marked with the ``@RPCReturnsObservables`` annotation, and +you are expected to subscribe to all the observables returned. If you don't want an observable then subscribe +then unsubscribe immediately to clear the buffers and indicate that you aren't interested. If your app quits then +server side resources will be freed automatically. + +When all the observables returned by an RPC are unsubscribed on the client side, that unsubscription propagates +through to the server where the corresponding server-side observables are also unsubscribed. + +.. warning:: If you leak an observable or proxy on the client side and it gets garbage collected, you will get + a warning printed to the logs and the proxy will be closed for you. But don't rely on this, as garbage + collection is non-deterministic. + +Versioning +---------- + +The client RPC protocol is versioned with a simple incrementing integer. When a proxy is created the server is +queried for its protocol version, and you can specify your minimum requirement. Methods added in later versions +are tagged with the ``@RPCSinceVersion`` annotation. If you try to use a method that the server isn't advertising +support of, an ``UnsupportedOperationException`` is thrown. If you want to know the version of the server, just +use the ``protocolVersion`` property (i.e. ``getProtocolVersion`` in Java). + +Thread safety +------------- + +A proxy is thread safe, blocking, and will only allow a single RPC to be in flight at once. Any observables that +are returned and you subscribe to will have objects emitted on a background thread. Observables returned as part +of one RPC and observables returned from another may have their callbacks invoked in parallel, but observables +returned as part of the same specific RPC invocation are processed serially and will not be invoked in parallel. + +If you want to make multiple calls to the server in parallel you can do that by creating multiple proxies, but +be aware that the server itself may *not* process your work in parallel even if you make your requests that way. + +Error handling +-------------- + +If something goes wrong with the RPC infrastructure itself, an ``RPCException`` is thrown. If you call a method that +requires a higher version of the protocol than the server supports, ``UnsupportedOperationException`` is thrown. +Otherwise, if the server implementation throws an exception, that exception is serialised and rethrown on the client +side as if it was thrown from inside the called RPC method. These exceptions can be caught as normal. + +Wire protocol +------------- + +The client RPC wire protocol is not currently documented. To use it you must use the client library provided. +This is likely to change in a future release. + +.. _CordaRPCClient: api/com.r3corda.client/-corda-r-p-c-client/index.html +.. _CordaRPCOps: api/com.r3corda.node.services.messaging/-corda-r-p-c-ops.html diff --git a/docs/build/html/_sources/corda-configuration-files.txt b/docs/build/html/_sources/corda-configuration-files.txt index 293bae6559..adc412f0b2 100644 --- a/docs/build/html/_sources/corda-configuration-files.txt +++ b/docs/build/html/_sources/corda-configuration-files.txt @@ -19,95 +19,82 @@ Corda uses the Typesafe configuration library to parse the configuration see the uses HOCON format see `HOCON documents `_ Configuration File Examples --------------------------- +--------------------------- General node configuration file for hosting the IRSDemo services. .. code-block:: text - basedir : "./nodea" - myLegalName : "Bank A" - nearestCity : "London" - keyStorePassword : "cordacadevpass" - trustStorePassword : "trustpass" - dataSourceProperties : { - dataSourceClassName : org.h2.jdbcx.JdbcDataSource - "dataSource.url" : "jdbc:h2:"${basedir}"/persistence" - "dataSource.user" : sa - "dataSource.password" : "" - } - artemisAddress : "localhost:31337" - webAddress : "localhost:31339" - hostNotaryServiceLocally: false - extraAdvertisedServiceIds: "corda.interest_rates" - mapService : { - hostServiceLocally : false - address : "localhost:12345" - identity : "Notary Service" - } - useHTTPS : false + basedir : "./nodea" + myLegalName : "Bank A" + nearestCity : "London" + keyStorePassword : "cordacadevpass" + trustStorePassword : "trustpass" + dataSourceProperties : { + dataSourceClassName : org.h2.jdbcx.JdbcDataSource + "dataSource.url" : "jdbc:h2:"${basedir}"/persistence" + "dataSource.user" : sa + "dataSource.password" : "" + } + artemisAddress : "localhost:31337" + webAddress : "localhost:31339" + hostNotaryServiceLocally: false + extraAdvertisedServiceIds: "corda.interest_rates" + networkMapAddress : "localhost:12345" + useHTTPS : false NetworkMapService plus Simple Notary configuration file. .. code-block:: text - basedir : "./nameserver" - myLegalName : "Notary Service" - nearestCity : "London" - keyStorePassword : "cordacadevpass" - trustStorePassword : "trustpass" - artemisAddress : "localhost:12345" - webAddress : "localhost:12346" - hostNotaryServiceLocally: true - extraAdvertisedServiceIds: "" - mapService : { - hostServiceLocally : true - address : ${artemisAddress} - identity : ${myLegalName} - } - useHTTPS : false + basedir : "./nameserver" + myLegalName : "Notary Service" + nearestCity : "London" + keyStorePassword : "cordacadevpass" + trustStorePassword : "trustpass" + artemisAddress : "localhost:12345" + webAddress : "localhost:12346" + hostNotaryServiceLocally: true + extraAdvertisedServiceIds: "" + useHTTPS : false Configuration File Fields --------------------------- +------------------------- :basedir: This specifies the node workspace folder either as an absolute path, or relative to the current working directory. It can be overidden by the ``--base-directory`` command line option, in which case the the value in the file is ignored and a ``node.conf`` file is expected in that workspace directory as the configuration source. :myLegalName: The legal identity of the node acts as a human readable alias to the node's public key and several demos use this to lookup the NodeInfo. -:nearestCity: The location of the node as used to locate coordinates on the world map when running the network visualiser demo. See :doc:`visualiser`. +:nearestCity: The location of the node as used to locate coordinates on the world map when running the network simulator demo. See :doc:`network-simulator`. :keyStorePassword: - The password to unlock the KeyStore file (``/certificates/sslkeystore.jks``) containing the node certificate and private key. + The password to unlock the KeyStore file (``/certificates/sslkeystore.jks``) containing the node certificate and private key. - note:: This is the non-secret value for the development certificates automatically generated during the first node run. Longer term these keys will be managed in secure hardware devices. + note:: This is the non-secret value for the development certificates automatically generated during the first node run. Longer term these keys will be managed in secure hardware devices. :trustStorePassword: - The password to unlock the Trust store file (``/certificates/truststore.jks``) containing the R3 Corda root certificate. This is the non-secret value for the development certificates automatically generated during the first node run. + The password to unlock the Trust store file (``/certificates/truststore.jks``) containing the R3 Corda root certificate. This is the non-secret value for the development certificates automatically generated during the first node run. - .. note:: Longer term these keys will be managed in secure hardware devices. + .. note:: Longer term these keys will be managed in secure hardware devices. :dataSourceProperties: This section is used to configure the jdbc connection and database driver used for the nodes persistence. Currently the defaults in ``/node/src/main/resources/reference.conf`` are as shown in the first example. This is currently the only configuration that has been tested, although in the future full support for other storage layers will be validated. :artemisAddress: - The host and port on which the node is available for protocol operations over ArtemisMQ. + The host and port on which the node is available for protocol operations over ArtemisMQ. - .. note:: In practice the ArtemisMQ messaging services bind to all local addresses on the specified port. However, note that the host is the included as the advertised entry in the NetworkMapService. As a result the value listed here must be externally accessible when running nodes across a cluster of machines. + .. note:: In practice the ArtemisMQ messaging services bind to all local addresses on the specified port. However, note that the host is the included as the advertised entry in the NetworkMapService. As a result the value listed here must be externally accessible when running nodes across a cluster of machines. :webAddress: - The host and port on which the node is available for web operations. + The host and port on which the node is available for web operations. + + .. note:: If HTTPS is enabled then the browser security checks will require that the accessing url host name is one of either the machine name, fully qualified machine name, or server IP address to line up with the Subject Alternative 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:: If HTTPS is enabled then the browser security checks will require that the accessing url host name is one of either the machine name, fully qualified machine name, or server IP address to line up with the Subject Alternative 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. - :hostNotaryServiceLocally: If true the Node will host and advertise a verifying Notary service. :extraAdvertisedServiceIds: A list of ServiceType id strings to be advertised to the NetworkMapService and thus be available when other nodes query the NetworkMapCache for supporting nodes. This can also include plugin services loaded from .jar files in the -:mapService.hostServiceLocally: If true the node is declaring itself as the NetworkMapService host. Otherwise the configuration below is the remote connection details for the node to connect to the NetworkMapService. - -:mapService.address: If the node is hosting the NetworkMapService this should be exactly equal to the artemisAddress (hence $ substitution above). Otherwise this value is the remote HostAndPort string for the ArtemisMQ service on the hosting node. - -:mapService.identity: If the node is hosting the NetworkMapService this should be exactly equal to the myLegalName (hence $ substitution above). Otherwise this value must match the myLegalName of the hosting node. +:networkMapAddress: If `null`, or missing the node is declaring itself as the NetworkMapService host. Otherwise the configuration value is the remote HostAndPort string for the ArtemisMQ service on the hosting node. :useHTTPS: If false the node's web server will be plain HTTP. If true the node will use the same certificate and private key from the ``/certificates/sslkeystore.jks`` file as the ArtemisMQ port for HTTPS. If HTTPS is enabled then unencrypted HTTP traffic to the node's **webAddress** port is not supported. diff --git a/docs/build/html/_sources/creating-a-cordapp.txt b/docs/build/html/_sources/creating-a-cordapp.txt index 6795cd2b4e..87d2b7b3eb 100644 --- a/docs/build/html/_sources/creating-a-cordapp.txt +++ b/docs/build/html/_sources/creating-a-cordapp.txt @@ -13,15 +13,13 @@ To create an app plugin you must you must extend from `CordaPluginRegistry`_. Th specific details of the implementation, but you can extend the server in the following ways: 1. Required protocols: Specify which protocols will be whitelisted for use in your web APIs. -2. Service plugins: Register your :ref:`services`. +2. Service plugins: Register your services (see below). 3. Web APIs: You may register your own endpoints under /api/ of the built-in web server. 4. Static web endpoints: You may register your own static serving directories for serving web content. Services -------- -.. _services: - Services are classes which are constructed after the node has started. It is provided a `ServiceHubInternal`_ which allows a richer API than the `ServiceHub`_ exposed to contracts. It enables adding protocols, registering message handlers and more. The service does not run in a separate thread, so the only entry point to the service is during @@ -44,7 +42,7 @@ execution of the node server there will be many other configuration and persiste .. warning:: Also note that the bootstrapping process of the ``corda.jar`` unpacks the Corda dependencies into a temporary folder. It is therefore suggested that the CAPSULE_CACHE_DIR environment variable be set before starting the process to control this location. Installing Apps ------------------- +--------------- Once you have created your app JAR you can install it to a node by adding it to ``/plugins/``. In this case the ``node_dir`` is the location where your node server's JAR and configuration file is. @@ -69,7 +67,7 @@ The configuration file and workspace paths can be overidden on the command line Otherwise the workspace folder for the node is created based upon the ``basedir`` property in the ``node.conf`` file and if this is relative it is applied relative to the current working path. Debugging your Node ------------------- +------------------- To enable remote debugging of the corda process use a command line such as: diff --git a/docs/build/html/_sources/index.txt b/docs/build/html/_sources/index.txt index ef04bab9e9..e1372461c4 100644 --- a/docs/build/html/_sources/index.txt +++ b/docs/build/html/_sources/index.txt @@ -39,13 +39,6 @@ Read on to learn: node-administration corda-configuration-files -.. toctree:: - :maxdepth: 2 - :caption: Contracts - - contract-catalogue - contract-irs - .. toctree:: :maxdepth: 2 :caption: Tutorials @@ -57,6 +50,20 @@ Read on to learn: protocol-state-machines oracles event-scheduling + secure-coding-guidelines + +.. toctree:: + :maxdepth: 2 + :caption: Contracts + + contract-catalogue + contract-irs + +.. toctree:: + :maxdepth: 2 + :caption: Node API + + clientrpc .. toctree:: :maxdepth: 2 @@ -64,7 +71,7 @@ Read on to learn: release-process release-notes - visualiser + network-simulator codestyle building-the-docs diff --git a/docs/build/html/_sources/network-simulator.txt b/docs/build/html/_sources/network-simulator.txt new file mode 100644 index 0000000000..93dba16ccb --- /dev/null +++ b/docs/build/html/_sources/network-simulator.txt @@ -0,0 +1,41 @@ +Network Simulator +================= + +A network simulator is provided which shows traffic between nodes through the lifecycle of an interest rate swap +contract. It can optionally also show network setup, during which nodes register themselves with the network +map service and are notified of the changes to the map. The network simulator is run from the command line via Gradle: + +**Windows**:: + + gradlew.bat network-simulator:run + +**Other**:: + + ./gradlew network-simulator:run + +Interface +--------- + +.. image:: network-simulator.png + +The network simulator can be run automatically, or stepped manually through each step of the interest rate swap. The +options on the simulator window are: + +Simulate initialisation + If checked, the nodes registering with the network map is shown. Normally this setup step + is not shown, but may be of interest to understand the details of node discovery. +Run + Runs the network simulation in automatic mode, in which it progresses each step on a timed basis. Once running, + the simulation can be paused in order to manually progress it, or reset. +Next + Manually progress the simulation to the next step. +Reset + Reset the simulation (only available when paused). +Map/Circle + How the nodes are shown, by default nodes are rendered on a world map, but alternatively they can rendered + in a circle layout. + +While the simulation runs, details of the steps currently being executed are shown in a sidebar on the left hand side +of the window. + +.. TODO: Add documentation on how to use with different contracts for testing/debugging diff --git a/docs/build/html/_sources/protocol-state-machines.txt b/docs/build/html/_sources/protocol-state-machines.txt index 802ea563a7..b5bce9a70b 100644 --- a/docs/build/html/_sources/protocol-state-machines.txt +++ b/docs/build/html/_sources/protocol-state-machines.txt @@ -260,7 +260,7 @@ Let's fill out the ``receiveAndCheckProposedTransaction()`` method. val maybeSTX = sendAndReceive(otherSide, buyerSessionID, sessionID, hello) - maybeSTX.validate { + maybeSTX.unwrap { // Check that the tx proposed by the buyer is valid. val missingSigs: Set = it.verifySignatures(throwIfSignaturesAreMissing = false) val expected = setOf(myKeyPair.public, notaryNode.identity.owningKey) @@ -421,7 +421,7 @@ OK, let's do the same for the buyer side: private fun receiveAndValidateTradeRequest(): SellerTradeInfo { // Wait for a trade request to come in on our pre-provided session ID. val maybeTradeRequest = receive(sessionID) - maybeTradeRequest.validate { + maybeTradeRequest.unwrap { // What is the seller trying to sell us? val asset = it.assetForSale.state.data val assetTypeName = asset.javaClass.name @@ -449,7 +449,7 @@ OK, let's do the same for the buyer side: // TODO: Protect against the seller terminating here and leaving us in the lurch without the final tx. - return sendAndReceive(otherSide, theirSessionID, sessionID, stx).validate { it } + return sendAndReceive(otherSide, theirSessionID, sessionID, stx).unwrap { it } } private fun signWithOurKeys(cashSigningPubKeys: List, ptx: TransactionBuilder): SignedTransaction { diff --git a/docs/build/html/_sources/release-notes.txt b/docs/build/html/_sources/release-notes.txt index 2580c99a27..5eabaed1fe 100644 --- a/docs/build/html/_sources/release-notes.txt +++ b/docs/build/html/_sources/release-notes.txt @@ -3,6 +3,19 @@ Release notes Here are brief summaries of what's changed between each snapshot release. +Unreleased +---------- + +API changes: + +* The transaction types (Signed, Wire, LedgerTransaction) have moved to ``com.r3corda.core.transactions``. You can + update your code by just deleting the broken import lines and letting your IDE re-import them from the right + location. +* ``AbstractStateReplacementProtocol.verifyProposal`` has changed its prototype in a minor way. +* The ``UntrustworthyData.validate`` method has been renamed to ``unwrap`` - the old name is now deprecated. +* The wallet, wallet service, etc. are now vault, vault service, etc. These better reflect the intent that they + are a generic secure data store, rather than something which holds cash. + Milestone 3 ----------- diff --git a/docs/build/html/_sources/secure-coding-guidelines.txt b/docs/build/html/_sources/secure-coding-guidelines.txt new file mode 100644 index 0000000000..afa6e5b2e3 --- /dev/null +++ b/docs/build/html/_sources/secure-coding-guidelines.txt @@ -0,0 +1,47 @@ +Secure coding guidelines +------------------------ + +The platform does what it can to be secure by default and safe by design. Unfortunately the platform cannot +prevent every kind of security mistake. This document describes what to think about when writing applications +to block various kinds of attack. Whilst it may be tempting to just assume no reasonable counterparty would +attempt to subvert your trades using protocol level attacks, relying on trust for software security makes it +harder to scale up your operations later when you might want to add counterparties quickly and without +extensive vetting. + +Protocols +--------- + +:doc:`protocol-state-machines` are how your app communicates with other parties on the network. Therefore they +are the typical entry point for malicious data into your app and must be treated with care. + +The ``receive`` methods return data wrapped in the ``UntrustworthyData`` marker type. This type doesn't add +any functionality, it's only there to remind you to properly validate everything that you get from the network. +Remember that the other side may *not* be running the code you provide to take part in the protocol: they are +allowed to do anything! Things to watch out for: + +* A transaction that doesn't match a partial transaction built or proposed earlier in the protocol, for instance, + if you propose to trade a cash state worth $100 for an asset, and the transaction to sign comes back from the + other side, you must check that it points to the state you actually requested. Otherwise the attacker could + get you to sign a transaction that spends a much larger state to you, if they know the ID of one! +* A transaction that isn't of the right type. There are two transaction types: general and notary change. If you + are expecting one type but get the other you may find yourself signing a transaction that transfers your assets + to the control of a hostile notary. +* Unexpected changes in any part of the states in a transaction. If you have access to all the needed data, you + could re-run the builder logic and do a comparison of the resulting states to ensure that it's what you expected. + For instance if the data needed to construct the next state is available to both parties, the function to + calculate the transaction you want to mutually agree could be shared between both classes implementing both + sides of the protocol. + +The theme should be clear: signing is a very sensitive operation, so you need to be sure you know what it is you +are about to sign, and that nothing has changed in the small print! + +Contracts +--------- + +Contracts are arbitrary functions inside a JVM sandbox and therefore they have a lot of leeway to shoot themselves +in the foot. Things to watch out for: + +* Changes in states that should not be allowed by the current state transition. You will want to check that no + fields are changing except the intended fields! +* Accidentally catching and discarding exceptions that might be thrown by validation logic. +* Calling into other contracts via virtual methods if you don't know what those other contracts are or might do. \ No newline at end of file diff --git a/docs/build/html/_sources/tutorial-contract-clauses.txt b/docs/build/html/_sources/tutorial-contract-clauses.txt index 325fcc437c..895ff0d964 100644 --- a/docs/build/html/_sources/tutorial-contract-clauses.txt +++ b/docs/build/html/_sources/tutorial-contract-clauses.txt @@ -64,10 +64,10 @@ Clauses ------- We'll tackle the inner clauses that contain the bulk of the verification logic, first, and the clause which handles -grouping of input/output states later. The clauses must implement the ``Clause`` interface, which defines +grouping of input/output states later. The clauses must extend the ``Clause`` abstract class, which defines the ``verify`` function, and the ``requiredCommands`` property used to determine the conditions under which a clause -is triggered. Normally clauses would extend ``ConcreteClause`` which provides defaults suitable for a clause which -verifies transactions, rather than delegating to other clauses. +is triggered. Composite clauses should extend the ``CompositeClause`` abstract class, which extends ``Clause`` to +add support for wrapping around multiple clauses. The ``verify`` function defined in the ``Clause`` interface is similar to the conventional ``Contract`` verification function, although it adds new parameters and returns the set of commands which it has processed. Normally this returned @@ -80,7 +80,7 @@ The ``Move`` clause for the commercial paper contract is relatively simple, so w .. sourcecode:: kotlin - class Move: ConcreteClause>() { + class Move: Clause>() { override val requiredCommands: Set> get() = setOf(Commands.Move::class.java) @@ -103,7 +103,7 @@ The ``Move`` clause for the commercial paper contract is relatively simple, so w .. sourcecode:: java - class Move extends ConcreteClause { + class Move extends Clause { @NotNull @Override public Set> getRequiredCommands() { diff --git a/docs/build/html/_sources/tutorial-contract.txt b/docs/build/html/_sources/tutorial-contract.txt index c593eb17c9..2ee0c4b4a7 100644 --- a/docs/build/html/_sources/tutorial-contract.txt +++ b/docs/build/html/_sources/tutorial-contract.txt @@ -760,7 +760,7 @@ The time-lock contract mentioned above can be implemented very simply: class TestTimeLock : Contract { ... override fun verify(tx: TransactionForContract) { - val timestamp: Timestamp? = tx.timestamp + val time = tx.timestamp.before ?: throw IllegalStateException(...) ... requireThat { "the time specified in the time-lock has passed" by @@ -783,6 +783,16 @@ When we construct a transaction that generates the encumbered state, we must pla position of that transaction. And when we subsequently consume that encumbered state, the same encumbrance state must be available somewhere within the input set of states. +In future, we will consider the concept of a *covenant*. This is where the encumbrance travels alongside each iteration of +the encumbered state. For example, a cash state may be encumbered with a *domicile* encumbrance, which checks the domicile of +the identity of the owner that the cash state is being moved to, in order to uphold sanction screening regulations, and prevent +cash being paid to parties domiciled in e.g. North Korea. In this case, the encumbrance should be permanently attached to +the all future cash states stemming from this one. + +We will also consider marking states that are capable of being encumbrances as such. This will prevent states being used +as encumbrances inadvertently. For example, the time-lock above would be usable as an encumbrance, but it makes no sense to +be able to encumber a cash state with another one. + Clauses ------- diff --git a/docs/build/html/_sources/visualiser.txt b/docs/build/html/_sources/visualiser.txt deleted file mode 100644 index e5167cb025..0000000000 --- a/docs/build/html/_sources/visualiser.txt +++ /dev/null @@ -1,78 +0,0 @@ -.. highlight:: kotlin -.. raw:: html - - - - -Using the visualiser -==================== - -In order to assist with understanding of the state model, the repository includes a simple graph visualiser. The -visualiser is integrated with the unit test framework and the same domain specific language. It is currently very -early and the diagrams it produces are not especially beautiful. The intention is to improve it in future releases. - -.. image:: visualiser.png - -An example of how to use it can be seen in ``src/test/kotlin/contracts/CommercialPaperTests.kt``. - -Briefly, define a set of transactions in a group using the same DSL that is used in the unit tests. Here's an example -of a trade lifecycle using the commercial paper contract - -.. container:: codeset - - .. sourcecode:: kotlin - - val group: TransactionGroupDSL = transactionGroupFor() { - roots { - transaction(900.DOLLARS.CASH `owned by` ALICE label "alice's $900") - transaction(someProfits.CASH `owned by` MEGA_CORP_PUBKEY label "some profits") - } - - // Some CP is issued onto the ledger by MegaCorp. - transaction("Issuance") { - output("paper") { PAPER_1 } - arg(MEGA_CORP_PUBKEY) { CommercialPaper.Commands.Issue() } - } - - // The CP is sold to alice for her $900, $100 less than the face value. At 10% interest after only 7 days, - // that sounds a bit too good to be true! - transaction("Trade") { - input("paper") - input("alice's $900") - output("borrowed $900") { 900.DOLLARS.CASH `owned by` MEGA_CORP_PUBKEY } - output("alice's paper") { "paper".output `owned by` ALICE } - arg(ALICE) { Cash.Commands.Move() } - arg(MEGA_CORP_PUBKEY) { CommercialPaper.Commands.Move() } - } - - // Time passes, and Alice redeem's her CP for $1000, netting a $100 profit. MegaCorp has received $1200 - // as a single payment from somewhere and uses it to pay Alice off, keeping the remaining $200 as change. - transaction("Redemption", redemptionTime) { - input("alice's paper") - input("some profits") - - output("Alice's profit") { aliceGetsBack.CASH `owned by` ALICE } - output("Change") { (someProfits - aliceGetsBack).CASH `owned by` MEGA_CORP_PUBKEY } - if (!destroyPaperAtRedemption) - output { "paper".output } - - arg(MEGA_CORP_PUBKEY) { Cash.Commands.Move() } - arg(ALICE) { CommercialPaper.Commands.Redeem() } - } - } - -Now you can define a main method in your unit test class that takes the ``TransactionGroupDSL`` object and uses it: - -.. container:: codeset - - .. sourcecode:: kotlin - - CommercialPaperTests().trade().visualise() - -This will open up a window with the following features: - -* The nodes can be dragged around to try and obtain a better layout (an improved layout algorithm will be a future - feature). -* States are rendered as circles. Transactions are small blue squares. Commands are small diamonds. -* Clicking a state will open up a window that shows its fields. - diff --git a/docs/build/html/_static/basic.css b/docs/build/html/_static/basic.css index 2b513f0c96..65dfd7dfda 100644 --- a/docs/build/html/_static/basic.css +++ b/docs/build/html/_static/basic.css @@ -85,6 +85,10 @@ div.sphinxsidebar #searchbox input[type="text"] { width: 170px; } +div.sphinxsidebar #searchbox input[type="submit"] { + width: 30px; +} + img { border: 0; max-width: 100%; diff --git a/docs/build/html/api/alltypes/index.html b/docs/build/html/api/alltypes/index.html index b6864614ea..bd7b8b236a 100644 --- a/docs/build/html/api/alltypes/index.html +++ b/docs/build/html/api/alltypes/index.html @@ -55,6 +55,30 @@ errors on no-match, ends on match.

+
com.r3corda.node.utilities.AbstractJDBCHashMap + +

A base class for a JDBC table backed hash map that iterates in insertion order by using +an ever increasing sequence number on entries. Iterators supports remove() but entries are not really mutable and +do not support setValue() method from MutableMap.MutableEntry.

+ + + + +com.r3corda.node.utilities.AbstractJDBCHashSet + +

Base class for JDBC backed hash set that delegates to a JDBC backed hash map where the values are all +Unit and not actually persisted. Iteration order is order of insertion. Iterators can remove().

+ + + + +com.r3corda.node.services.network.AbstractNetworkMapService + +

Abstracted out core functionality as the basis for a persistent implementation, as well as existing in-memory implementation.

+ + + + com.r3corda.node.internal.AbstractNode

A base node implementation that can be customised either for production (with real implementations that do real @@ -117,6 +141,14 @@ for ensuring code runs on the right thread, and also for unit testing.

+com.r3corda.client.fxutils.AggregatedList + +

Given an ObservableList<E> and a grouping key K, AggregatedList groups the elements by the key into a fresh +ObservableList<E> for each group and exposes the groups as an observable list of As by calling assemble on each.

+ + + + com.r3corda.core.contracts.clauses.AllComposition

Compose a number of clauses, such that all of the clauses must run for verification to pass.

@@ -131,12 +163,6 @@ for ensuring code runs on the right thread, and also for unit testing.

-com.r3corda.core.testing.AlwaysSucceedContract - - - - - com.r3corda.core.contracts.Amount

Amount represents a positive quantity of some token (currency, asset, etc.), measured in quantity of the smallest @@ -146,6 +172,19 @@ amount used in whatever underlying thing the amount represents.

+com.r3corda.client.fxutils.AmountBindings + +

Utility bindings for the Amount type, similar in spirit to Bindings

+ + + + +com.r3corda.core.testing.AmountGenerator + + + + + com.r3corda.core.contracts.clauses.AnyComposition

Compose a number of clauses, such that any number of the clauses can run.

@@ -161,15 +200,6 @@ properties loaded from the attachments. And perhaps the authenticated user for -com.r3corda.node.services.messaging.ArtemisMessagingClient - -

This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. -Artemis is a message queue broker and here we run a client connecting to the specified broker instance -ArtemisMessagingServer.

- - - - com.r3corda.node.services.messaging.ArtemisMessagingComponent

The base class for Artemis services that defines shared data structures and transport configuration

@@ -200,12 +230,6 @@ of how attachments are meant to be used include:

-com.r3corda.core.testing.AttachmentResolutionException - - - - - com.r3corda.core.node.services.AttachmentStorage

An attachment store records potentially large binary objects, identified by their hash.

@@ -238,6 +262,13 @@ API call from a single party without bi-directional access to the database of of +com.r3corda.core.transactions.BaseTransaction + +

An abstract class defining fields shared by all transaction types in the system.

+ + + + com.r3corda.contracts.clause.BilateralNetState

Subset of state, containing the elements which must match for two obligation transactions to be nettable. @@ -293,9 +324,25 @@ the same transaction.

-com.r3corda.node.services.wallet.CashBalanceAsMetricsObserver +com.r3corda.node.services.vault.CashBalanceAsMetricsObserver + +

This class observes the vault and reflect current cash balances as exposed metrics in the monitoring service.

+ + + + +com.r3corda.node.utilities.certsigning.CertificateSigner + +

This check the certificatePath for certificates required to connect to the Corda network. +If the certificates are not found, a PKCS10CertificationRequest will be submitted to Corda network permissioning server using CertificateSigningService. +This process will enter a slow polling loop until the request has been approved, and then +the certificate chain will be downloaded and stored in KeyStore reside in certificatePath.

+ + + + +com.r3corda.node.utilities.certsigning.CertificateSigningService -

This class observes the wallet and reflect current cash balances as exposed metrics in the monitoring service.

@@ -313,6 +360,14 @@ the same transaction.

+com.r3corda.client.fxutils.ChosenList + +

ChosenList manages an ObservableList that may be changed by the wrapping ObservableValue. Whenever the underlying +ObservableValue changes the exposed list changes to the new value. Changes to the list are simply propagated.

+ + + + com.r3corda.core.node.CityDatabase

A simple lookup table of city names to their coordinates. Lookups are case insensitive.

@@ -322,6 +377,8 @@ the same transaction.

com.r3corda.core.contracts.clauses.Clause +

A clause of a contract, containing a chunk of verification logic. That logic may be delegated to other clauses, or +provided directly by this clause.

@@ -339,6 +396,13 @@ the same transaction.

+com.r3corda.node.services.messaging.ClientRPCRequestMessage + +

The contents of an RPC request message, separated from the MQ layer.

+ + + + com.r3corda.core.contracts.ClientToServiceCommand

A command from the monitoring client, to the node.

@@ -378,6 +442,18 @@ the same transaction.

+com.r3corda.contracts.testing.CommandDataGenerator + + + + + +com.r3corda.contracts.testing.CommandGenerator + + + + + com.r3corda.contracts.CommercialPaper @@ -416,14 +492,6 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or -com.r3corda.core.contracts.clauses.ConcreteClause - -

Abstract supertype for clauses which provide their own verification logic, rather than delegating to subclauses. -By default these clauses are always matched (they have no required commands).

- - - - com.r3corda.node.servlets.Config

Primary purpose is to install Kotlin extensions for Jackson ObjectMapper so data classes work @@ -441,7 +509,7 @@ and to organise serializers / deserializers for java.time.* classes as necessary com.r3corda.core.contracts.Contract

Implemented by a program that implements business logic on the shared ledger. All participants run this code for -every LedgerTransaction they see on the network, for every input and output state. All contracts must accept the +every LedgerTransaction they see on the network, for every input and output state. All contracts must accept the 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.

@@ -478,6 +546,22 @@ are all free.

+com.r3corda.contracts.testing.ContractStateGenerator + +

This file contains generators for quickcheck style testing. The idea is that we can write random instance generators +for each type we have in the code and test against those instead of predefined mock data. This style of testing can +catch corner case bugs and test algebraic properties of the code, for example deserialize(serialize(generatedThing)) == generatedThing

+ + + + +com.r3corda.client.model.ContractStateModel + +

This model exposes the list of owned contract states.

+ + + + com.r3corda.core.node.CordaPluginRegistry

Implement this interface on a class advertised in a META-INF/services/com.r3corda.core.node.CordaPluginRegistry file @@ -486,6 +570,22 @@ to extend a Corda node with additional application services.

+com.r3corda.client.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.

+ + + + +com.r3corda.node.services.messaging.CordaRPCOps + +

RPC operations that the node exposes to clients using the Java client library. These can be called from +client apps and are implemented by the node in the ServerRPCOps class.

+ + + + com.r3corda.core.math.CubicSplineInterpolator

Interpolates values between the given data points using a SplineFunction.

@@ -499,6 +599,12 @@ to extend a Corda node with additional application services.

+com.r3corda.core.testing.CurrencyGenerator + + + + + com.r3corda.node.servlets.DataUploadServlet

Accepts binary streams, finds the right AcceptsFileUpload implementor and hands the stream off to it.

@@ -635,12 +741,6 @@ started on).

-com.r3corda.core.testing.DummyLinearContract - - - - - com.r3corda.core.crypto.DummyPublicKey @@ -649,12 +749,12 @@ started on).

com.r3corda.core.contracts.DummyState -

Dummy state for use in testing. Not part of any real contract.

+

Dummy state for use in testing. Not part of any contract, not even the DummyContract.

-com.r3corda.core.testing.DuplicateOutputLabel +com.r3corda.core.testing.DurationGenerator @@ -688,12 +788,9 @@ started on).

-com.r3corda.core.testing.EnforceVerifyOrFail +com.r3corda.core.ErrorOr -

If you jumped here from a compiler error make sure the last line of your test tests for a transaction verify or fail. -This is a dummy type that can only be instantiated by functions in this module. This way we can ensure that all tests -will have as the last line either an accept or a failure test. The name is deliberately long to help make sense of -the triggered diagnostic.

+

Representation of an operation that may have thrown an error.

@@ -705,6 +802,34 @@ the triggered diagnostic.

+com.r3corda.client.mock.EventGenerator + +

Generators for incoming/outgoing events to/from the WalletMonitorService. Internally it keeps track of owned +state/ref pairs, but it doesnt necessarily generate "correct" events

+ + + + +com.r3corda.client.model.ExchangeRate + + + + + +com.r3corda.client.model.ExchangeRateModel + +

This model provides an exchange rate from arbitrary currency to arbitrary currency. +TODO hook up an actual oracle

+ + + + +com.r3corda.contracts.testing.ExitGenerator + + + + + com.r3corda.demos.protocols.ExitServerProtocol @@ -759,12 +884,6 @@ attachments are saved to local storage automatically.

-com.r3corda.node.services.statemachine.FiberRequest - - - - - com.r3corda.protocols.FinalityProtocol

Finalise a transaction by notarising it, then recording it locally, and then sending it to all involved parties.

@@ -823,6 +942,14 @@ running scheduled fixings for the InterestRateSwap contract.

+com.r3corda.client.fxutils.FlattenedList + +

FlattenedList flattens the passed in list of ObservableValues so that changes in individual updates to the values +are reflected in the exposed list as expected.

+ + + + com.r3corda.contracts.FloatingRate

The parent class of the Floating rate classes.

@@ -852,6 +979,30 @@ that would divide into (eg annually = 1, semiannual = 2, monthly = 12 etc).

+kotlin.Function1 (extensions in package com.r3corda.client.fxutils) + + + + + +kotlin.Function2 (extensions in package com.r3corda.client.fxutils) + + + + + +kotlin.Function3 (extensions in package com.r3corda.client.fxutils) + + + + + +kotlin.Function4 (extensions in package com.r3corda.client.fxutils) + + + + + com.r3corda.contracts.asset.FungibleAsset

Interface for contract states representing assets which are fungible, countable and issued by a @@ -864,12 +1015,59 @@ container), shares of the same class in a specific company are fungible and coun +java.util.concurrent.Future (extensions in package com.r3corda.core) + + + + + +com.r3corda.client.model.GatheredTransactionData + + + + + +com.r3corda.client.model.GatheredTransactionDataModel + +

This model provides an observable list of states relating to the creation of a transaction not yet on ledger.

+ + + + +com.r3corda.client.model.GatheredTransactionDataWritable + + + + + +com.r3corda.client.mock.Generator + +

This file defines a basic Generator library for composing random generators of objects.

+ + + + com.r3corda.core.contracts.clauses.GroupClauseVerifier +com.r3corda.node.utilities.certsigning.HTTPCertificateSigningService + + + + + +com.r3corda.protocols.HandshakeMessage + +

A Handshake message is sent to initiate communication between two protocol instances. It contains the two session IDs +the two protocols will need to communicate. +Note: This is a temperary interface and will be removed once the protocol session work is implemented.

+ + + + com.r3corda.demos.IRSDemoNode @@ -889,7 +1087,7 @@ container), shares of the same class in a specific company are fungible and coun -com.r3corda.node.internal.testing.IRSSimulation +com.r3corda.simulation.IRSSimulation

A simulation in which banks execute interest rate swaps with each other, including the fixing events.

@@ -926,17 +1124,6 @@ set via the constructor and the class is immutable.

-com.r3corda.node.services.network.InMemoryMessagingNetwork - -

An in-memory network allows you to manufacture InMemoryMessagings for a set of participants. Each -InMemoryMessaging maintains a queue of messages it has received, and a background thread that dispatches -messages one by one to registered handlers. Alternatively, a messaging system may be manually pumped, in which -case no thread is created and a caller is expected to force delivery one at a time (this is useful for unit -testing).

- - - - com.r3corda.node.services.network.InMemoryNetworkMapCache

Extremely simple in-memory cache of the network map.

@@ -957,11 +1144,17 @@ testing).

-com.r3corda.core.testing.InMemoryWalletService +com.r3corda.core.testing.InMemoryVaultService + +

This class implements a simple, in memory vault that tracks states that are owned by us, and also has a convenience +method to auto-generate some self-issued cash states that can be used for test trading. A real vault would persist +states relevant to us into a database and once such a vault is implemented, this scaffolding can be removed.

+ + + + +com.r3corda.core.testing.InstantGenerator -

This class implements a simple, in memory wallet that tracks states that are owned by us, and also has a convenience -method to auto-generate some self-issued cash states that can be used for test trading. A real wallet would persist -states relevant to us into a database and once such a wallet is implemented, this scaffolding can be removed.

@@ -1035,6 +1228,12 @@ from which the state object is initialised.

+com.r3corda.contracts.testing.IssueGenerator + + + + + com.r3corda.core.contracts.Issued

Definition for an issued product, which can be cash, a cash-like thing, assets, or generally anything else thats @@ -1043,6 +1242,12 @@ quantifiable with integer quantities.

+com.r3corda.core.testing.IssuedGenerator + + + + + kotlin.collections.Iterable (extensions in package com.r3corda.core.contracts) @@ -1067,7 +1272,23 @@ quantifiable with integer quantities.

-kotlin.collections.Iterable (extensions in package com.r3corda.node.internal.testing) +com.r3corda.node.utilities.JDBCHashMap + +

A convenient JDBC table backed hash map with iteration order based on insertion order. +See AbstractJDBCHashMap for further implementation details.

+ + + + +com.r3corda.node.utilities.JDBCHashSet + +

A convenient JDBC table backed hash set with iteration order based on insertion order. +See AbstractJDBCHashSet and AbstractJDBCHashMap for further implementation details.

+ + + + +com.r3corda.node.utilities.JDBCHashedTable @@ -1102,28 +1323,15 @@ call out to a hardware security module that enforces various auditing and freque -com.r3corda.core.testing.LedgerDSL +com.r3corda.node.services.network.LastAcknowledgeInfo -

This is the class that defines the syntactic sugar of the ledger Test DSL and delegates to the contained interpreter, -and what is actually used in ledger{(...)}. Add convenience functions here, or if you want to extend the DSL -functionality then first add your primitive to LedgerDSLInterpreter and then add the convenience defaults/extension -methods here.

-com.r3corda.core.testing.LedgerDSLInterpreter +com.r3corda.core.transactions.LedgerTransaction -

This interface defines the bare bone functionality that a Ledger DSL interpreter should implement.

- - - - -com.r3corda.core.contracts.LedgerTransaction - -

A LedgerTransaction wraps the data needed to calculate one or more successor states from a set of input states. -It is the first step after extraction from a WireTransaction. The signatures at this point have been lined up -with the commands from the wire, and verified/looked up.

+

A LedgerTransaction is derived from a WireTransaction. It is the result of doing the following operations:

@@ -1167,6 +1375,13 @@ with the commands from the wire, and verified/looked up.

+com.r3corda.node.services.messaging.MarshalledObservation + +

Used in the RPC wire protocol to wrap an observation with the handle of the observable its intended for.

+ + + + com.r3corda.core.messaging.Message

A message is defined, at this level, to be a (topic, timestamp, byte arrays) triple, where the topic is a string in @@ -1221,59 +1436,12 @@ may let you cast the returned future to an object that lets you get status info. com.r3corda.core.serialization.MissingAttachmentsException -

Thrown during deserialisation to indicate that an attachment needed to construct the WireTransaction is not found

+

Thrown during deserialisation to indicate that an attachment needed to construct the WireTransaction is not found

-com.r3corda.core.node.services.testing.MockAttachmentStorage - - - - - -com.r3corda.core.node.services.testing.MockIdentityService - - - - - -com.r3corda.core.node.services.testing.MockKeyManagementService - - - - - -com.r3corda.node.internal.testing.MockNetwork - -

A mock node brings up a suite of in-memory services in a fast manner suitable for unit testing. -Components that do IO are either swapped out for mocks, or pointed to a Jimfs in memory filesystem.

- - - - -com.r3corda.node.services.network.MockNetworkMapCache - -

Network map cache with no backing map service.

- - - - -com.r3corda.core.node.services.testing.MockServices - -

A singleton utility that only provides a mock identity, key and storage service. However, this is sufficient for -building chains of transactions and verifying them. It isnt sufficient for testing protocols however.

- - - - -com.r3corda.core.node.services.testing.MockStorageService - - - - - -com.r3corda.core.node.services.testing.MockTransactionStorage +com.r3corda.client.model.Models @@ -1294,6 +1462,12 @@ This is not an interface because it is too lightweight to bother mocking out.

+com.r3corda.contracts.testing.MoveGenerator + + + + + com.r3corda.contracts.clause.MultilateralNetState

Subset of state, containing the elements which must match for two or more obligation transactions to be candidates @@ -1321,12 +1495,6 @@ adjusted externally.

-com.r3corda.node.services.config.NameServiceConfig - - - - - com.r3corda.core.contracts.NamedByHash

Implemented by anything that can be named by a secure hash value (e.g. transactions, attachments).

@@ -1341,6 +1509,13 @@ adjusted externally.

+com.r3corda.core.contracts.NetCommand + +

A common netting command for contracts whose states can be netted.

+ + + + com.r3corda.contracts.clause.NetState

Common interface for the state subsets used when determining nettability of two or more states. Exposes the @@ -1444,7 +1619,7 @@ loads important data off disk and starts listening for connections.

-com.r3corda.node.services.clientapi.NodeInterestRates +com.r3corda.demos.api.NodeInterestRates

An interest rates service is an oracle that signs transactions which contain embedded assertions about an interest rate fix (e.g. LIBOR, EURIBOR ...).

@@ -1458,6 +1633,37 @@ rate fix (e.g. LIBOR, EURIBOR ...).

+com.r3corda.node.services.messaging.NodeMessagingClient + +

This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. +Artemis is a message queue broker and here we run a client connecting to the specified broker instance +ArtemisMessagingServer. Its primarily concerned with peer-to-peer messaging.

+ + + + +com.r3corda.client.NodeMonitorClient + + + + + +com.r3corda.client.model.NodeMonitorModel + +

This model exposes raw event streams to and from the NodeMonitorService through a NodeMonitorClient

+ + + + +com.r3corda.node.services.monitor.NodeMonitorService + +

Service which allows external clients to monitor the nodes vault and state machine manager, as well as trigger +actions within the node. The service also sends requests for user input back to clients, for example to enter +additional information while a protocol runs, or confirm an action.

+ + + + com.r3corda.node.services.network.NodeRegistration

A node registration state in the network map.

@@ -1465,7 +1671,13 @@ rate fix (e.g. LIBOR, EURIBOR ...).

-com.r3corda.node.driver.NodeRunner +com.r3corda.node.services.network.NodeRegistrationInfo + + + + + +com.r3corda.node.services.config.NodeSSLConfiguration @@ -1474,15 +1686,15 @@ rate fix (e.g. LIBOR, EURIBOR ...).

com.r3corda.node.services.events.NodeSchedulerService

A first pass of a simple SchedulerService that works with MutableClocks for testing, demonstrations and simulations -that also encompasses the Wallet observer for processing transactions.

+that also encompasses the Vault observer for processing transactions.

-com.r3corda.node.services.wallet.NodeWalletService +com.r3corda.node.services.vault.NodeVaultService -

Currently, the node wallet service is a very simple RDBMS backed implementation. It will change significantly when -we add further functionality as the design for the wallet and wallet service matures.

+

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.

@@ -1566,6 +1778,18 @@ to be netted/merged, with settlement only for any remainder amount.

+javafx.collections.ObservableList (extensions in package com.r3corda.client.fxutils) + + + + + +javafx.beans.value.ObservableValue (extensions in package com.r3corda.client.fxutils) + + + + + com.r3corda.contracts.asset.OnLedgerAsset

An asset transaction may split and merge assets represented by a set of (issuer, depositRef) pairs, across multiple @@ -1585,10 +1809,9 @@ functionality to Java, but it wont arrive for a few years yet

-com.r3corda.core.testing.OutputStateLookup +com.r3corda.node.services.config.OptionalConfig -

This interface defines output state lookup by label. It is split from the interpreter interfaces so that outputs may -be looked up both in ledger{..} and transaction{..} blocks.

+

Helper class for optional configurations

@@ -1606,6 +1829,12 @@ be looked up both in ledger{..} and transaction{..} blocks.

+com.r3corda.node.utilities.certsigning.ParamsSpec + + + + + com.r3corda.core.crypto.Party

A Party is well known (name, pubkey) pair. In a real system this would probably be an X.509 certificate.

@@ -1621,6 +1850,18 @@ ledger. The reference is intended to be encrypted so its meaningless to anyone o +com.r3corda.core.testing.PartyAndReferenceGenerator + + + + + +com.r3corda.core.testing.PartyGenerator + + + + + com.r3corda.protocols.PartyRequestMessage @@ -1668,6 +1909,27 @@ ledger. The reference is intended to be encrypted so its meaningless to anyone o +com.r3corda.node.services.keys.PersistentKeyManagementService + +

A persistent re-implementation of E2ETestKeyManagementService to support node re-start.

+ + + + +com.r3corda.node.services.network.PersistentNetworkMapService + +

A network map service backed by a database to survive restarts of the node hosting it.

+ + + + +com.r3corda.node.services.transactions.PersistentUniquenessProvider + +

A RDBMS backed Uniqueness provider

+ + + + com.r3corda.core.node.PhysicalLocation

A labelled WorldCoordinate, where the label is human meaningful. For example, the name of the nearest city. @@ -1695,6 +1957,12 @@ Labels should not refer to non-landmarks, for example, they should not contain t +com.r3corda.core.testing.PrivateKeyGenerator + + + + + com.r3corda.core.utilities.ProgressTracker

A progress tracker helps surface information about the progress of an operation to a user interface or API of some @@ -1710,6 +1978,12 @@ a singleton).

+com.r3corda.node.services.statemachine.ProtocolIORequest + + + + + com.r3corda.node.api.ProtocolInstanceRef @@ -1768,12 +2042,66 @@ For any given flow there is only one PSM, even if that protocol invokes subproto +com.r3corda.client.model.ProtocolStatus + + + + + java.security.PublicKey (extensions in package com.r3corda.core.crypto) +com.r3corda.core.testing.PublicKeyGenerator + + + + + +com.r3corda.node.services.messaging.RPCDispatcher + +

Intended to service transient clients only (not p2p nodes) for short-lived, transient request/response pairs. +If you need robustness, this is the wrong system. If you dont want a response, this is probably the +wrong system (you could just send a message). If you want complex customisation of how requests/responses +are handled, this is probably the wrong system.

+ + + + +com.r3corda.node.services.messaging.RPCException + +

Thrown to indicate a fatal error in the RPC system itself, as opposed to an error generated by the invoked +method.

+ + + + +com.r3corda.node.services.messaging.RPCOps + +

Base interface that all RPC servers must implement. Note: in Corda theres only one RPC interface. This base +interface is here in case we split the RPC system out into a separate library one day.

+ + + + +com.r3corda.node.services.messaging.RPCReturnsObservables + +

If an RPC is tagged with this annotation it may return one or more observables anywhere in its response graph. +Calling such a method comes with consequences: its slower, and consumes server side resources as observations +will buffer up on the server until theyre consumed by the client.

+ + + + +com.r3corda.node.services.messaging.RPCSinceVersion + +

Records the protocol version in which this RPC was added.

+ + + + com.r3corda.contracts.Rate

Parent of the Rate family. Used to denote fixed rates, floating rates, reference rates etc.

@@ -1816,6 +2144,18 @@ for each step.

+com.r3corda.node.services.statemachine.ReceiveOnly + + + + + +com.r3corda.node.services.statemachine.ReceiveRequest + + + + + com.r3corda.contracts.ReferenceRate

So a reference rate is a rate that takes its value from a source at a given date @@ -1909,7 +2249,7 @@ e.g. run a fixing protocol.

com.r3corda.node.services.events.ScheduledActivityObserver -

This observes the wallet and schedules and unschedules activities appropriately based on state production and +

This observes the vault and schedules and unschedules activities appropriately based on state production and consumption.

@@ -1933,6 +2273,32 @@ increase the feature set in the future.

com.r3corda.core.crypto.SecureHash +

Container for a cryptographically secure hash value. +Provides utilities for generating a cryptographic hash using different algorithms (currently only SHA-256 supported).

+ + + + +com.r3corda.core.testing.SecureHashGenerator + + + + + +com.r3corda.node.services.statemachine.SendAndReceive + + + + + +com.r3corda.node.services.statemachine.SendOnly + + + + + +com.r3corda.node.services.statemachine.SendRequest + @@ -1982,6 +2348,14 @@ type safety hack.

+com.r3corda.node.internal.ServerRPCOps + +

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.

+ + + + com.r3corda.core.node.ServiceHub

A service hub simply vends references to the other services a node has. Some of those services may be missing or @@ -2029,9 +2403,20 @@ contained within.

-com.r3corda.core.contracts.SignedTransaction +com.r3corda.core.transactions.SignedTransaction + +

SignedTransaction wraps a serialized WireTransaction. It contains one or more signatures, each one for +a public key that is mentioned inside a transaction command. SignedTransaction is the top level transaction type +and the type most frequently passed around the network and stored. The identity of a transaction is the hash +of a WireTransaction, therefore if you are storing data keyed by WT hash be aware that multiple different STs may +map to the same key (and they could be different in important ways, like validity). The signatures on a +SignedTransaction might be invalid or missing: the type does not imply validity.

+ + + + +com.r3corda.contracts.testing.SignedTransactionGenerator -

Container for a WireTransaction and attached signatures.

@@ -2043,7 +2428,7 @@ contained within.

-com.r3corda.node.internal.testing.Simulation +com.r3corda.simulation.Simulation

Base class for network simulations that are based on the unit test / mock environment.

@@ -2089,7 +2474,7 @@ Points at which polynomial pieces connect are known as knots.

com.r3corda.core.contracts.StateAndRef -

A StateAndRef is simply a (state, ref) pair. For instance, a wallet (which holds available assets) contains these.

+

A StateAndRef is simply a (state, ref) pair. For instance, a vault (which holds available assets) contains these.

@@ -2102,6 +2487,12 @@ Each such object represents an instantiation of a (two-party) protocol that has +com.r3corda.client.model.StateMachineStatus + + + + + com.r3corda.core.contracts.StateRef

A stateref is a pointer (reference) to a state, this is an equivalent of an "outpoint" in Bitcoin. It records which @@ -2110,6 +2501,12 @@ transaction defined the state and where in that transaction it was.

+com.r3corda.core.testing.StateRefGenerator + + + + + com.r3corda.protocols.StateReplacementException @@ -2129,6 +2526,12 @@ transaction defined the state and where in that transaction it was.

+com.r3corda.client.model.StatesModification + + + + + com.r3corda.node.api.StatesQuery

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

@@ -2176,27 +2579,6 @@ anything like that, this interface is only big enough to support the prototyping -com.r3corda.node.internal.testing.TestClock - -

A Clock that can have the time advanced for use in testing.

- - - - -com.r3corda.core.testing.TestLedgerDSLInterpreter - - - - - -com.r3corda.core.testing.TestTransactionDSLInterpreter - -

This interpreter builds a transaction, and TransactionDSL.verifies that the resolved transaction is correct. Note -that transactions corresponding to input states are not verified. Use LedgerDSL.verifies for that.

- - - - com.r3corda.core.ThreadBox

A threadbox is a simple utility that makes it harder to forget to take a lock before accessing some shared state. @@ -2235,6 +2617,12 @@ between (after, before).

+com.r3corda.core.testing.TimestampGenerator + + + + + com.r3corda.core.messaging.TopicSession

An identifier for the endpoint MessagingService message handlers listen at.

@@ -2249,7 +2637,13 @@ between (after, before).

-com.r3corda.node.internal.testing.TradeSimulation +com.r3corda.client.model.TrackedDelegate + + + + + +com.r3corda.simulation.TradeSimulation

Simulates a never ending series of trades that go pair-wise through the banks (e.g. A and B trade with each other, then B and C trade with each other, then C and A etc).

@@ -2270,7 +2664,7 @@ then B and C trade with each other, then C and A etc).

-com.r3corda.core.contracts.TransactionBuilder +com.r3corda.core.transactions.TransactionBuilder

A TransactionBuilder is a transaction class thats mutable (unlike the others which are all immutable). It is intended to be passed around contracts that may edit it by adding new states/commands. Then once the states @@ -2285,19 +2679,12 @@ and commands are right, this class can be used as a holding bucket to gather sig -com.r3corda.core.testing.TransactionDSL +com.r3corda.client.model.TransactionCreateStatus -com.r3corda.core.testing.TransactionDSLInterpreter - -

This interface defines the bare bone functionality that a Transaction DSL interpreter should implement.

- - - - com.r3corda.core.contracts.TransactionForContract

A transaction to be passed as input to a contract verification function. Defines helper methods to @@ -2308,7 +2695,7 @@ simplify verification logic in contracts.

com.r3corda.core.contracts.TransactionGraphSearch -

Given a map of transaction id to SignedTransaction, performs a breadth first search of the dependency graph from +

Given a map of transaction id to SignedTransaction, performs a breadth first search of the dependency graph from the starting point down in order to find transactions that match the given query criteria.

@@ -2328,6 +2715,12 @@ This is the definitive state that is stored on the ledger and used in transactio +com.r3corda.core.testing.TransactionStateGenerator + + + + + com.r3corda.core.node.services.TransactionStorage

Thread-safe storage of transactions.

@@ -2446,37 +2839,21 @@ indeed valid.

-com.r3corda.core.testing.Verifies +com.r3corda.core.node.services.Vault -

This interface asserts that the DSL at hand is capable of verifying its underlying construct(ledger/transaction).

- - - - -com.r3corda.core.node.services.Wallet - -

A wallet (name may be temporary) wraps a set of states that are useful for us to keep track of, for instance, -because we own them. This class represents an immutable, stable state of a wallet: it is guaranteed not to -change out from underneath you, even though the canonical currently-best-known wallet may change as we learn +

A vault (name may be temporary) wraps a set of states that are useful for us to keep track of, for instance, +because we own them. This class represents an immutable, stable state of a vault: it is guaranteed not to +change out from underneath you, even though the canonical currently-best-known vault may change as we learn about new transactions from our peers and generate new transactions that consume states ourselves.

-com.r3corda.node.services.monitor.WalletMonitorService +com.r3corda.core.node.services.VaultService -

Service which allows external clients to monitor the wallet service and state machine manager, as well as trigger -actions within the node. The service also sends requests for user input back to clients, for example to enter -additional information while a protocol runs, or confirm an action.

- - - - -com.r3corda.core.node.services.WalletService - -

A WalletService is responsible for securely and safely persisting the current state of a wallet to storage. The -wallet service vends immutable snapshots of the current wallet for working with: if you build a transaction based -on a wallet that isnt current, be aware that it may end up being invalid if the states that were used have been +

A VaultService is responsible for securely and safely persisting the current state of a vault to storage. The +vault service vends immutable snapshots of the current vault for working with: if you build a transaction based +on a vault that isnt current, be aware that it may end up being invalid if the states that were used have been consumed by someone else first

@@ -2513,9 +2890,12 @@ that we can delegate most of the checking to the proper Java code. We simply add -com.r3corda.core.contracts.WireTransaction +com.r3corda.core.transactions.WireTransaction -

Transaction ready for serialisation, without any signatures attached.

+

A transaction ready for serialisation, without any signatures attached. A WireTransaction is usually wrapped +by a SignedTransaction that carries the signatures over this payload. The hash of the wire transaction is +the identity of the transaction, that is, its possible for two SignedTransactions with different sets of +signatures to have the same identity hash.

@@ -2527,6 +2907,12 @@ that we can delegate most of the checking to the proper Java code. We simply add +com.r3corda.contracts.testing.WiredTransactionGenerator + + + + + com.r3corda.core.node.WorldCoordinate

A latitude/longitude pair.

diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/-init-.html b/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/-init-.html new file mode 100644 index 0000000000..1d84b729d6 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/-init-.html @@ -0,0 +1,41 @@ + + +AggregatedList.<init> - + + + +com.r3corda.client.fxutils / AggregatedList / <init>
+
+

<init>

+AggregatedList(list: ObservableList<out E>, toKey: (E) -> K, assemble: (K, ObservableList<E>) -> A)
+

Given an ObservableList<E> and a grouping key K, AggregatedList groups the elements by the key into a fresh +ObservableList<E> for each group and exposes the groups as an observable list of As by calling assemble on each.

+

Changes done to elements of the input list are reflected in the observable list of the respective group, whereas +additions/removals of elements in the underlying list are reflected in the exposed ObservableList<A> by +adding/deleting aggregations as expected.

+

The ordering of the exposed list is based on the hashCode of keys.

+

Example: +val statesGroupedByCurrency = AggregatedList(states, { state -> state.currency }) { currency, group -> +object { +val currency = currency +val states = group +} +}

+

The above creates an observable list of (currency, statesOfCurrency) pairs.

+

Note that update events to the source list are discarded, assuming the key of elements does not change. +TODO Should we handle this case? It requires additional bookkeeping of sourceIndex->(aggregationIndex, groupIndex)

+
+
+

Parameters

+ +list - The underlying list.
+
+ +toKey - Function to extract the key from an element.
+
+ +assemble - Function to assemble the aggregation into the exposed A.
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/assemble.html b/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/assemble.html new file mode 100644 index 0000000000..c588f18742 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/assemble.html @@ -0,0 +1,15 @@ + + +AggregatedList.assemble - + + + +com.r3corda.client.fxutils / AggregatedList / assemble
+
+

assemble

+ +val assemble: (K, ObservableList<E>) -> A
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/get-source-index.html b/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/get-source-index.html new file mode 100644 index 0000000000..211cbbbbdb --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/get-source-index.html @@ -0,0 +1,16 @@ + + +AggregatedList.getSourceIndex - + + + +com.r3corda.client.fxutils / AggregatedList / getSourceIndex
+
+

getSourceIndex

+ +fun getSourceIndex(index: Int): Int
+

We cannot implement this as aggregations are one to many

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/get.html b/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/get.html new file mode 100644 index 0000000000..ea45fd2a28 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/get.html @@ -0,0 +1,15 @@ + + +AggregatedList.get - + + + +com.r3corda.client.fxutils / AggregatedList / get
+
+

get

+ +fun get(index: Int): A?
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/index.html b/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/index.html new file mode 100644 index 0000000000..f84492aa58 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/index.html @@ -0,0 +1,149 @@ + + +AggregatedList - + + + +com.r3corda.client.fxutils / AggregatedList
+
+

AggregatedList

+class AggregatedList<A, E, K : Any> : TransformationList<A, E>
+

Given an ObservableList<E> and a grouping key K, AggregatedList groups the elements by the key into a fresh +ObservableList<E> for each group and exposes the groups as an observable list of As by calling assemble on each.

+

Changes done to elements of the input list are reflected in the observable list of the respective group, whereas +additions/removals of elements in the underlying list are reflected in the exposed ObservableList<A> by +adding/deleting aggregations as expected.

+

The ordering of the exposed list is based on the hashCode of keys.

+

Example: +val statesGroupedByCurrency = AggregatedList(states, { state -> state.currency }) { currency, group -> +object { +val currency = currency +val states = group +} +}

+

The above creates an observable list of (currency, statesOfCurrency) pairs.

+

Note that update events to the source list are discarded, assuming the key of elements does not change. +TODO Should we handle this case? It requires additional bookkeeping of sourceIndex->(aggregationIndex, groupIndex)

+
+
+

Parameters

+ +list - The underlying list.
+
+ +toKey - Function to extract the key from an element.
+
+ +assemble - Function to assemble the aggregation into the exposed A.
+
+
+

Constructors

+ + + + + + + +
+<init> +AggregatedList(list: ObservableList<out E>, toKey: (E) -> K, assemble: (K, ObservableList<E>) -> A)

Given an ObservableList<E> and a grouping key K, AggregatedList groups the elements by the key into a fresh +ObservableList<E> for each group and exposes the groups as an observable list of As by calling assemble on each.

+
+

Properties

+ + + + + + + + + + + + + + + +
+assemble +val assemble: (K, ObservableList<E>) -> A
+size +val size: Int
+toKey +val toKey: (E) -> K
+

Functions

+ + + + + + + + + + + + + + + +
+get +fun get(index: Int): A?
+getSourceIndex +fun getSourceIndex(index: Int): Int

We cannot implement this as aggregations are one to many

+
+sourceChanged +fun sourceChanged(c: Change<out E>): Unit
+

Extension Functions

+ + + + + + + + + + + + + + + + + + + + + + + +
+filter +fun <A> ObservableList<out A>.filter(predicate: ObservableValue<(A) -> Boolean>): ObservableList<out A>

enum class FilterCriterion { HEIGHT, NAME } +val filterCriterion: ObservableValue = (..) +val people: ObservableList = (..) +fun filterFunction(filterCriterion: FilterCriterion): (Person) -> Boolean { .. }

+
+fold +fun <A, B> ObservableList<out A>.fold(initial: B, folderFunction: (B, A) -> B): ObservableValue<B>

val people: ObservableList = (..) +val concatenatedNames = people.fold("", { names, person -> names + person.name }) +val concatenatedNames2 = people.map(Person::name).fold("", String::plus)

+
+indexOfOrThrow +fun <T> List<T>.indexOfOrThrow(item: T): Int

Returns the index of the given item or throws IllegalArgumentException if not found.

+
+map +fun <A, B> ObservableList<out A>.map(function: (A) -> B): ObservableList<B>

val dogs: ObservableList = (..) +val dogOwners: ObservableList = dogs.map { it.owner }

+
+noneOrSingle +fun <T> Iterable<T>.noneOrSingle(predicate: (T) -> Boolean): T?

Returns the single element matching the given predicate, or null if element was not found, +or throws if more than one element was found.

+fun <T> Iterable<T>.noneOrSingle(): T?

Returns single element, or null if element was not found, or throws if more than one element was found.

+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/size.html b/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/size.html new file mode 100644 index 0000000000..55744d63d5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/size.html @@ -0,0 +1,15 @@ + + +AggregatedList.size - + + + +com.r3corda.client.fxutils / AggregatedList / size
+
+

size

+ +val size: Int
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/source-changed.html b/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/source-changed.html new file mode 100644 index 0000000000..0048ec1703 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/source-changed.html @@ -0,0 +1,15 @@ + + +AggregatedList.sourceChanged - + + + +com.r3corda.client.fxutils / AggregatedList / sourceChanged
+
+

sourceChanged

+ +protected fun sourceChanged(c: Change<out E>): Unit
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/to-key.html b/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/to-key.html new file mode 100644 index 0000000000..3cf30bb3be --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-aggregated-list/to-key.html @@ -0,0 +1,15 @@ + + +AggregatedList.toKey - + + + +com.r3corda.client.fxutils / AggregatedList / toKey
+
+

toKey

+ +val toKey: (E) -> K
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-amount-bindings/exchange.html b/docs/build/html/api/com.r3corda.client.fxutils/-amount-bindings/exchange.html new file mode 100644 index 0000000000..7b59cd9785 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-amount-bindings/exchange.html @@ -0,0 +1,15 @@ + + +AmountBindings.exchange - + + + +com.r3corda.client.fxutils / AmountBindings / exchange
+
+

exchange

+ +fun exchange(currency: ObservableValue<Currency>, exchangeRate: ObservableValue<ExchangeRate>): ObservableValue<<ERROR CLASS><Currency, (Amount<Currency>) -> Long>>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-amount-bindings/index.html b/docs/build/html/api/com.r3corda.client.fxutils/-amount-bindings/index.html new file mode 100644 index 0000000000..a3bce3e7df --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-amount-bindings/index.html @@ -0,0 +1,38 @@ + + +AmountBindings - + + + +com.r3corda.client.fxutils / AmountBindings
+
+

AmountBindings

+object AmountBindings
+

Utility bindings for the Amount type, similar in spirit to Bindings

+
+
+

Functions

+ + + + + + + + + + + + + + + +
+exchange +fun exchange(currency: ObservableValue<Currency>, exchangeRate: ObservableValue<ExchangeRate>): ObservableValue<<ERROR CLASS><Currency, (Amount<Currency>) -> Long>>
+sum +fun <T> sum(amounts: ObservableList<Amount<T>>, token: T): <ERROR CLASS>
+sumAmountExchange +fun sumAmountExchange(amounts: ObservableList<Amount<Currency>>, currency: ObservableValue<Currency>, exchangeRate: ObservableValue<ExchangeRate>): ObservableValue<Amount<Currency>>
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-amount-bindings/sum-amount-exchange.html b/docs/build/html/api/com.r3corda.client.fxutils/-amount-bindings/sum-amount-exchange.html new file mode 100644 index 0000000000..a6b2e6fc04 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-amount-bindings/sum-amount-exchange.html @@ -0,0 +1,15 @@ + + +AmountBindings.sumAmountExchange - + + + +com.r3corda.client.fxutils / AmountBindings / sumAmountExchange
+
+

sumAmountExchange

+ +fun sumAmountExchange(amounts: ObservableList<Amount<Currency>>, currency: ObservableValue<Currency>, exchangeRate: ObservableValue<ExchangeRate>): ObservableValue<Amount<Currency>>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-amount-bindings/sum.html b/docs/build/html/api/com.r3corda.client.fxutils/-amount-bindings/sum.html new file mode 100644 index 0000000000..2ef4742432 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-amount-bindings/sum.html @@ -0,0 +1,15 @@ + + +AmountBindings.sum - + + + +com.r3corda.client.fxutils / AmountBindings / sum
+
+

sum

+ +fun <T> sum(amounts: ObservableList<Amount<T>>, token: T): <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-chosen-list/-init-.html b/docs/build/html/api/com.r3corda.client.fxutils/-chosen-list/-init-.html new file mode 100644 index 0000000000..cdebee3160 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-chosen-list/-init-.html @@ -0,0 +1,26 @@ + + +ChosenList.<init> - + + + +com.r3corda.client.fxutils / ChosenList / <init>
+
+

<init>

+ChosenList(chosenListObservable: ObservableValue<out ObservableList<out E>>)
+

ChosenList manages an ObservableList that may be changed by the wrapping ObservableValue. Whenever the underlying +ObservableValue changes the exposed list changes to the new value. Changes to the list are simply propagated.

+

Example: +val filteredStates = ChosenList(EasyBind.map(filterCriteriaType) { type -> +when (type) { +is (ByCurrency) -> statesFilteredByCurrency +is (ByIssuer) -> statesFilteredByIssuer +} +})

+

The above will create a list that chooses and delegates to the appropriate filtered list based on the type of filter.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-chosen-list/get.html b/docs/build/html/api/com.r3corda.client.fxutils/-chosen-list/get.html new file mode 100644 index 0000000000..46b40a78d9 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-chosen-list/get.html @@ -0,0 +1,15 @@ + + +ChosenList.get - + + + +com.r3corda.client.fxutils / ChosenList / get
+
+

get

+ +fun get(index: Int): E
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-chosen-list/index.html b/docs/build/html/api/com.r3corda.client.fxutils/-chosen-list/index.html new file mode 100644 index 0000000000..d2afecca81 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-chosen-list/index.html @@ -0,0 +1,109 @@ + + +ChosenList - + + + +com.r3corda.client.fxutils / ChosenList
+
+

ChosenList

+class ChosenList<E> : ObservableListBase<E>
+

ChosenList manages an ObservableList that may be changed by the wrapping ObservableValue. Whenever the underlying +ObservableValue changes the exposed list changes to the new value. Changes to the list are simply propagated.

+

Example: +val filteredStates = ChosenList(EasyBind.map(filterCriteriaType) { type -> +when (type) { +is (ByCurrency) -> statesFilteredByCurrency +is (ByIssuer) -> statesFilteredByIssuer +} +})

+

The above will create a list that chooses and delegates to the appropriate filtered list based on the type of filter.

+
+
+
+
+

Constructors

+ + + + + + + +
+<init> +ChosenList(chosenListObservable: ObservableValue<out ObservableList<out E>>)

ChosenList manages an ObservableList that may be changed by the wrapping ObservableValue. Whenever the underlying +ObservableValue changes the exposed list changes to the new value. Changes to the list are simply propagated.

+
+

Properties

+ + + + + + + +
+size +val size: Int
+

Functions

+ + + + + + + +
+get +fun get(index: Int): E
+

Extension Functions

+ + + + + + + + + + + + + + + + + + + + + + + +
+filter +fun <A> ObservableList<out A>.filter(predicate: ObservableValue<(A) -> Boolean>): ObservableList<out A>

enum class FilterCriterion { HEIGHT, NAME } +val filterCriterion: ObservableValue = (..) +val people: ObservableList = (..) +fun filterFunction(filterCriterion: FilterCriterion): (Person) -> Boolean { .. }

+
+fold +fun <A, B> ObservableList<out A>.fold(initial: B, folderFunction: (B, A) -> B): ObservableValue<B>

val people: ObservableList = (..) +val concatenatedNames = people.fold("", { names, person -> names + person.name }) +val concatenatedNames2 = people.map(Person::name).fold("", String::plus)

+
+indexOfOrThrow +fun <T> List<T>.indexOfOrThrow(item: T): Int

Returns the index of the given item or throws IllegalArgumentException if not found.

+
+map +fun <A, B> ObservableList<out A>.map(function: (A) -> B): ObservableList<B>

val dogs: ObservableList = (..) +val dogOwners: ObservableList = dogs.map { it.owner }

+
+noneOrSingle +fun <T> Iterable<T>.noneOrSingle(predicate: (T) -> Boolean): T?

Returns the single element matching the given predicate, or null if element was not found, +or throws if more than one element was found.

+fun <T> Iterable<T>.noneOrSingle(): T?

Returns single element, or null if element was not found, or throws if more than one element was found.

+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-chosen-list/size.html b/docs/build/html/api/com.r3corda.client.fxutils/-chosen-list/size.html new file mode 100644 index 0000000000..92fac235bc --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-chosen-list/size.html @@ -0,0 +1,15 @@ + + +ChosenList.size - + + + +com.r3corda.client.fxutils / ChosenList / size
+
+

size

+ +val size: Int
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/-init-.html b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/-init-.html new file mode 100644 index 0000000000..a52e83f562 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/-init-.html @@ -0,0 +1,16 @@ + + +FlattenedList.<init> - + + + +com.r3corda.client.fxutils / FlattenedList / <init>
+
+

<init>

+FlattenedList(sourceList: ObservableList<out ObservableValue<out A>>)
+

FlattenedList flattens the passed in list of ObservableValues so that changes in individual updates to the values +are reflected in the exposed list as expected.

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/-wrapped-observable-value/-init-.html b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/-wrapped-observable-value/-init-.html new file mode 100644 index 0000000000..82ed4a1858 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/-wrapped-observable-value/-init-.html @@ -0,0 +1,23 @@ + + +FlattenedList.WrappedObservableValue.<init> - + + + +com.r3corda.client.fxutils / FlattenedList / WrappedObservableValue / <init>
+
+

<init>

+WrappedObservableValue(observableValue: ObservableValue<A>)
+

We maintain an ObservableValue->index map. This is needed because we need the ObservableValues index in order to +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.

+

Note that because of the bookkeeping required for this map, any remove operation and any add operation that +inserts to the middle of the list will be O(N) as we need to scan the map and shift indices accordingly.

+

Note also that were wrapping each ObservableValue, this is required because we want to support reusing of +ObservableValues and we need each to have a different hash.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/-wrapped-observable-value/index.html b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/-wrapped-observable-value/index.html new file mode 100644 index 0000000000..e2df290186 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/-wrapped-observable-value/index.html @@ -0,0 +1,48 @@ + + +FlattenedList.WrappedObservableValue - + + + +com.r3corda.client.fxutils / FlattenedList / WrappedObservableValue
+
+

WrappedObservableValue

+class WrappedObservableValue<A>
+

We maintain an ObservableValue->index map. This is needed because we need the ObservableValues index in order to +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.

+

Note that because of the bookkeeping required for this map, any remove operation and any add operation that +inserts to the middle of the list will be O(N) as we need to scan the map and shift indices accordingly.

+

Note also that were wrapping each ObservableValue, this is required because we want to support reusing of +ObservableValues and we need each to have a different hash.

+
+
+
+
+

Constructors

+ + + + + + + +
+<init> +WrappedObservableValue(observableValue: ObservableValue<A>)

We maintain an ObservableValue->index map. This is needed because we need the ObservableValues index in order to +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.

+
+

Properties

+ + + + + + + +
+observableValue +val observableValue: ObservableValue<A>
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/-wrapped-observable-value/observable-value.html b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/-wrapped-observable-value/observable-value.html new file mode 100644 index 0000000000..49aaa1d3cf --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/-wrapped-observable-value/observable-value.html @@ -0,0 +1,15 @@ + + +FlattenedList.WrappedObservableValue.observableValue - + + + +com.r3corda.client.fxutils / FlattenedList / WrappedObservableValue / observableValue
+
+

observableValue

+ +val observableValue: ObservableValue<A>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/get-source-index.html b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/get-source-index.html new file mode 100644 index 0000000000..ed6d8c31b8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/get-source-index.html @@ -0,0 +1,15 @@ + + +FlattenedList.getSourceIndex - + + + +com.r3corda.client.fxutils / FlattenedList / getSourceIndex
+
+

getSourceIndex

+ +fun getSourceIndex(index: Int): Int
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/get.html b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/get.html new file mode 100644 index 0000000000..34ab3b6f85 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/get.html @@ -0,0 +1,15 @@ + + +FlattenedList.get - + + + +com.r3corda.client.fxutils / FlattenedList / get
+
+

get

+ +fun get(index: Int): A
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/index-map.html b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/index-map.html new file mode 100644 index 0000000000..c2b98bff69 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/index-map.html @@ -0,0 +1,15 @@ + + +FlattenedList.indexMap - + + + +com.r3corda.client.fxutils / FlattenedList / indexMap
+
+

indexMap

+ +val indexMap: HashMap<WrappedObservableValue<out A>, <ERROR CLASS><Int, ChangeListener<A>>>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/index.html b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/index.html new file mode 100644 index 0000000000..62f1f3d6b8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/index.html @@ -0,0 +1,137 @@ + + +FlattenedList - + + + +com.r3corda.client.fxutils / FlattenedList
+
+

FlattenedList

+class FlattenedList<A> : TransformationList<A, ObservableValue<out A>>
+

FlattenedList flattens the passed in list of ObservableValues so that changes in individual updates to the values +are reflected in the exposed list as expected.

+
+
+

Types

+ + + + + + + +
+WrappedObservableValue +class WrappedObservableValue<A>

We maintain an ObservableValue->index map. This is needed because we need the ObservableValues index in order to +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.

+
+

Constructors

+ + + + + + + +
+<init> +FlattenedList(sourceList: ObservableList<out ObservableValue<out A>>)

FlattenedList flattens the passed in list of ObservableValues so that changes in individual updates to the values +are reflected in the exposed list as expected.

+
+

Properties

+ + + + + + + + + + + + + + + +
+indexMap +val indexMap: HashMap<WrappedObservableValue<out A>, <ERROR CLASS><Int, ChangeListener<A>>>
+size +val size: Int
+sourceList +val sourceList: ObservableList<out ObservableValue<out A>>
+

Functions

+ + + + + + + + + + + + + + + +
+get +fun get(index: Int): A
+getSourceIndex +fun getSourceIndex(index: Int): Int
+sourceChanged +fun sourceChanged(c: Change<out ObservableValue<out A>>): Unit
+

Extension Functions

+ + + + + + + + + + + + + + + + + + + + + + + +
+filter +fun <A> ObservableList<out A>.filter(predicate: ObservableValue<(A) -> Boolean>): ObservableList<out A>

enum class FilterCriterion { HEIGHT, NAME } +val filterCriterion: ObservableValue = (..) +val people: ObservableList = (..) +fun filterFunction(filterCriterion: FilterCriterion): (Person) -> Boolean { .. }

+
+fold +fun <A, B> ObservableList<out A>.fold(initial: B, folderFunction: (B, A) -> B): ObservableValue<B>

val people: ObservableList = (..) +val concatenatedNames = people.fold("", { names, person -> names + person.name }) +val concatenatedNames2 = people.map(Person::name).fold("", String::plus)

+
+indexOfOrThrow +fun <T> List<T>.indexOfOrThrow(item: T): Int

Returns the index of the given item or throws IllegalArgumentException if not found.

+
+map +fun <A, B> ObservableList<out A>.map(function: (A) -> B): ObservableList<B>

val dogs: ObservableList = (..) +val dogOwners: ObservableList = dogs.map { it.owner }

+
+noneOrSingle +fun <T> Iterable<T>.noneOrSingle(predicate: (T) -> Boolean): T?

Returns the single element matching the given predicate, or null if element was not found, +or throws if more than one element was found.

+fun <T> Iterable<T>.noneOrSingle(): T?

Returns single element, or null if element was not found, or throws if more than one element was found.

+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/size.html b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/size.html new file mode 100644 index 0000000000..74de0fd074 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/size.html @@ -0,0 +1,15 @@ + + +FlattenedList.size - + + + +com.r3corda.client.fxutils / FlattenedList / size
+
+

size

+ +val size: Int
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/source-changed.html b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/source-changed.html new file mode 100644 index 0000000000..795919c174 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/source-changed.html @@ -0,0 +1,15 @@ + + +FlattenedList.sourceChanged - + + + +com.r3corda.client.fxutils / FlattenedList / sourceChanged
+
+

sourceChanged

+ +protected fun sourceChanged(c: Change<out ObservableValue<out A>>): Unit
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/source-list.html b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/source-list.html new file mode 100644 index 0000000000..fb98cbc014 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/-flattened-list/source-list.html @@ -0,0 +1,15 @@ + + +FlattenedList.sourceList - + + + +com.r3corda.client.fxutils / FlattenedList / sourceList
+
+

sourceList

+ +val sourceList: ObservableList<out ObservableValue<out A>>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/fold-to-observable-list.html b/docs/build/html/api/com.r3corda.client.fxutils/fold-to-observable-list.html new file mode 100644 index 0000000000..96f288dc57 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/fold-to-observable-list.html @@ -0,0 +1,15 @@ + + +foldToObservableList - + + + +com.r3corda.client.fxutils / foldToObservableList
+
+

foldToObservableList

+ +fun <A, B, C> <ERROR CLASS><A>.foldToObservableList(initialAccumulator: C, folderFun: (A, C, ObservableList<B>) -> C): ObservableList<B>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/fold-to-observable-value.html b/docs/build/html/api/com.r3corda.client.fxutils/fold-to-observable-value.html new file mode 100644 index 0000000000..3820eb5975 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/fold-to-observable-value.html @@ -0,0 +1,16 @@ + + +foldToObservableValue - + + + +com.r3corda.client.fxutils / foldToObservableValue
+
+

foldToObservableValue

+ +fun <A, B> <ERROR CLASS><A>.foldToObservableValue(initial: B, folderFun: (A, B) -> B): ObservableValue<B>
+

Simple utilities for converting an rx.Observable into a javafx ObservableValue/ObservableList

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/index.html b/docs/build/html/api/com.r3corda.client.fxutils/index.html new file mode 100644 index 0000000000..fdf8671af6 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/index.html @@ -0,0 +1,115 @@ + + +com.r3corda.client.fxutils - + + + +com.r3corda.client.fxutils
+
+

Package com.r3corda.client.fxutils

+

Types

+ + + + + + + + + + + + + + + + + + + +
+AggregatedList +class AggregatedList<A, E, K : Any> : TransformationList<A, E>

Given an ObservableList<E> and a grouping key K, AggregatedList groups the elements by the key into a fresh +ObservableList<E> for each group and exposes the groups as an observable list of As by calling assemble on each.

+
+AmountBindings +object AmountBindings

Utility bindings for the Amount type, similar in spirit to Bindings

+
+ChosenList +class ChosenList<E> : ObservableListBase<E>

ChosenList manages an ObservableList that may be changed by the wrapping ObservableValue. Whenever the underlying +ObservableValue changes the exposed list changes to the new value. Changes to the list are simply propagated.

+
+FlattenedList +class FlattenedList<A> : TransformationList<A, ObservableValue<out A>>

FlattenedList flattens the passed in list of ObservableValues so that changes in individual updates to the values +are reflected in the exposed list as expected.

+
+

Extensions for External Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+javafx.beans.value.ObservableValue +
+javafx.collections.ObservableList +
+kotlin.Function1 +
+kotlin.Function2 +
+kotlin.Function3 +
+kotlin.Function4 +
+

Functions

+ + + + + + + + + + + + + + + +
+foldToObservableList +fun <A, B, C> <ERROR CLASS><A>.foldToObservableList(initialAccumulator: C, folderFun: (A, C, ObservableList<B>) -> C): ObservableList<B>
+foldToObservableValue +fun <A, B> <ERROR CLASS><A>.foldToObservableValue(initial: B, folderFun: (A, B) -> B): ObservableValue<B>

Simple utilities for converting an rx.Observable into a javafx ObservableValue/ObservableList

+
+lift +fun <A> A.lift(): ObservableValue<A>

val aliceHeight: ObservableValue = (..) +val bobHeight: ObservableValue = (..) +fun sumHeight(a: Long, b: Long): Long { .. }

+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/javafx.beans.value.-observable-value/bind.html b/docs/build/html/api/com.r3corda.client.fxutils/javafx.beans.value.-observable-value/bind.html new file mode 100644 index 0000000000..6f79f3ffaf --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/javafx.beans.value.-observable-value/bind.html @@ -0,0 +1,18 @@ + + +bind - + + + +com.r3corda.client.fxutils / javafx.beans.value.ObservableValue / bind
+
+

bind

+ +fun <A, B> ObservableValue<out A>.bind(function: (A) -> ObservableValue<out B>): ObservableValue<out B>
+

data class Person(val height: ObservableValue) +val person: ObservableValue = (..) +val personHeight: ObservableValue = person.bind { it.height }

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/javafx.beans.value.-observable-value/index.html b/docs/build/html/api/com.r3corda.client.fxutils/javafx.beans.value.-observable-value/index.html new file mode 100644 index 0000000000..5d95970617 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/javafx.beans.value.-observable-value/index.html @@ -0,0 +1,32 @@ + + +com.r3corda.client.fxutils.javafx.beans.value.ObservableValue - + + + +com.r3corda.client.fxutils / javafx.beans.value.ObservableValue
+
+

Extensions for javafx.beans.value.ObservableValue

+ + + + + + + + + + + +
+bind +fun <A, B> ObservableValue<out A>.bind(function: (A) -> ObservableValue<out B>): ObservableValue<out B>

data class Person(val height: ObservableValue) +val person: ObservableValue = (..) +val personHeight: ObservableValue = person.bind { it.height }

+
+map +fun <A, B> ObservableValue<out A>.map(function: (A) -> B): ObservableValue<B>

val person: ObservableValue = (..) +val personName: ObservableValue = person.map { it.name }

+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/javafx.beans.value.-observable-value/map.html b/docs/build/html/api/com.r3corda.client.fxutils/javafx.beans.value.-observable-value/map.html new file mode 100644 index 0000000000..d3292d91f8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/javafx.beans.value.-observable-value/map.html @@ -0,0 +1,17 @@ + + +map - + + + +com.r3corda.client.fxutils / javafx.beans.value.ObservableValue / map
+
+

map

+ +fun <A, B> ObservableValue<out A>.map(function: (A) -> B): ObservableValue<B>
+

val person: ObservableValue = (..) +val personName: ObservableValue = person.map { it.name }

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/filter.html b/docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/filter.html new file mode 100644 index 0000000000..13bfc8c74f --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/filter.html @@ -0,0 +1,22 @@ + + +filter - + + + +com.r3corda.client.fxutils / javafx.collections.ObservableList / filter
+
+

filter

+ +fun <A> ObservableList<out A>.filter(predicate: ObservableValue<(A) -> Boolean>): ObservableList<out A>
+

enum class FilterCriterion { HEIGHT, NAME } +val filterCriterion: ObservableValue = (..) +val people: ObservableList = (..) +fun filterFunction(filterCriterion: FilterCriterion): (Person) -> Boolean { .. }

+

val filteredPeople: ObservableList = people.filter(filterCriterion.map(filterFunction))

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/flatten.html b/docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/flatten.html new file mode 100644 index 0000000000..aee90c96a0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/flatten.html @@ -0,0 +1,18 @@ + + +flatten - + + + +com.r3corda.client.fxutils / javafx.collections.ObservableList / flatten
+
+

flatten

+ +fun <A> ObservableList<out ObservableValue<out A>>.flatten(): ObservableList<out A>
+

data class Person(val height: ObservableValue) +val people: ObservableList = (..) +val heights: ObservableList = people.map(Person::height).flatten()

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/fold.html b/docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/fold.html new file mode 100644 index 0000000000..976823f0a9 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/fold.html @@ -0,0 +1,18 @@ + + +fold - + + + +com.r3corda.client.fxutils / javafx.collections.ObservableList / fold
+
+

fold

+ +fun <A, B> ObservableList<out A>.fold(initial: B, folderFunction: (B, A) -> B): ObservableValue<B>
+

val people: ObservableList = (..) +val concatenatedNames = people.fold("", { names, person -> names + person.name }) +val concatenatedNames2 = people.map(Person::name).fold("", String::plus)

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/index.html b/docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/index.html new file mode 100644 index 0000000000..347b455435 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/index.html @@ -0,0 +1,51 @@ + + +com.r3corda.client.fxutils.javafx.collections.ObservableList - + + + +com.r3corda.client.fxutils / javafx.collections.ObservableList
+
+

Extensions for javafx.collections.ObservableList

+ + + + + + + + + + + + + + + + + + + +
+filter +fun <A> ObservableList<out A>.filter(predicate: ObservableValue<(A) -> Boolean>): ObservableList<out A>

enum class FilterCriterion { HEIGHT, NAME } +val filterCriterion: ObservableValue = (..) +val people: ObservableList = (..) +fun filterFunction(filterCriterion: FilterCriterion): (Person) -> Boolean { .. }

+
+flatten +fun <A> ObservableList<out ObservableValue<out A>>.flatten(): ObservableList<out A>

data class Person(val height: ObservableValue) +val people: ObservableList = (..) +val heights: ObservableList = people.map(Person::height).flatten()

+
+fold +fun <A, B> ObservableList<out A>.fold(initial: B, folderFunction: (B, A) -> B): ObservableValue<B>

val people: ObservableList = (..) +val concatenatedNames = people.fold("", { names, person -> names + person.name }) +val concatenatedNames2 = people.map(Person::name).fold("", String::plus)

+
+map +fun <A, B> ObservableList<out A>.map(function: (A) -> B): ObservableList<B>

val dogs: ObservableList = (..) +val dogOwners: ObservableList = dogs.map { it.owner }

+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/map.html b/docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/map.html new file mode 100644 index 0000000000..8362b4b10f --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/javafx.collections.-observable-list/map.html @@ -0,0 +1,17 @@ + + +map - + + + +com.r3corda.client.fxutils / javafx.collections.ObservableList / map
+
+

map

+ +fun <A, B> ObservableList<out A>.map(function: (A) -> B): ObservableList<B>
+

val dogs: ObservableList = (..) +val dogOwners: ObservableList = dogs.map { it.owner }

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function1/index.html b/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function1/index.html new file mode 100644 index 0000000000..53e5143cf8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function1/index.html @@ -0,0 +1,21 @@ + + +com.r3corda.client.fxutils.kotlin.Function1 - + + + +com.r3corda.client.fxutils / kotlin.Function1
+
+

Extensions for kotlin.Function1

+ + + + + + + +
+lift +fun <A, R> (A) -> R.lift(arg0: ObservableValue<A>): ObservableValue<R>
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function1/lift.html b/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function1/lift.html new file mode 100644 index 0000000000..ead52968df --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function1/lift.html @@ -0,0 +1,15 @@ + + +lift - + + + +com.r3corda.client.fxutils / kotlin.Function1 / lift
+
+

lift

+ +fun <A, R> (A) -> R.lift(arg0: ObservableValue<A>): ObservableValue<R>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function2/index.html b/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function2/index.html new file mode 100644 index 0000000000..5c22510909 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function2/index.html @@ -0,0 +1,21 @@ + + +com.r3corda.client.fxutils.kotlin.Function2 - + + + +com.r3corda.client.fxutils / kotlin.Function2
+
+

Extensions for kotlin.Function2

+ + + + + + + +
+lift +fun <A, B, R> (A, B) -> R.lift(arg0: ObservableValue<A>, arg1: ObservableValue<B>): ObservableValue<R>
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function2/lift.html b/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function2/lift.html new file mode 100644 index 0000000000..5d0d816cf5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function2/lift.html @@ -0,0 +1,15 @@ + + +lift - + + + +com.r3corda.client.fxutils / kotlin.Function2 / lift
+
+

lift

+ +fun <A, B, R> (A, B) -> R.lift(arg0: ObservableValue<A>, arg1: ObservableValue<B>): ObservableValue<R>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function3/index.html b/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function3/index.html new file mode 100644 index 0000000000..b53eccf3c3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function3/index.html @@ -0,0 +1,21 @@ + + +com.r3corda.client.fxutils.kotlin.Function3 - + + + +com.r3corda.client.fxutils / kotlin.Function3
+
+

Extensions for kotlin.Function3

+ + + + + + + +
+lift +fun <A, B, C, R> (A, B, C) -> R.lift(arg0: ObservableValue<A>, arg1: ObservableValue<B>, arg2: ObservableValue<C>): ObservableValue<R>
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function3/lift.html b/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function3/lift.html new file mode 100644 index 0000000000..af93f32cee --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function3/lift.html @@ -0,0 +1,15 @@ + + +lift - + + + +com.r3corda.client.fxutils / kotlin.Function3 / lift
+
+

lift

+ +fun <A, B, C, R> (A, B, C) -> R.lift(arg0: ObservableValue<A>, arg1: ObservableValue<B>, arg2: ObservableValue<C>): ObservableValue<R>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function4/index.html b/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function4/index.html new file mode 100644 index 0000000000..f7e902edb5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function4/index.html @@ -0,0 +1,21 @@ + + +com.r3corda.client.fxutils.kotlin.Function4 - + + + +com.r3corda.client.fxutils / kotlin.Function4
+
+

Extensions for kotlin.Function4

+ + + + + + + +
+lift +fun <A, B, C, D, R> (A, B, C, D) -> R.lift(arg0: ObservableValue<A>, arg1: ObservableValue<B>, arg2: ObservableValue<C>, arg3: ObservableValue<D>): ObservableValue<R>
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function4/lift.html b/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function4/lift.html new file mode 100644 index 0000000000..e4660c24b8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/kotlin.-function4/lift.html @@ -0,0 +1,15 @@ + + +lift - + + + +com.r3corda.client.fxutils / kotlin.Function4 / lift
+
+

lift

+ +fun <A, B, C, D, R> (A, B, C, D) -> R.lift(arg0: ObservableValue<A>, arg1: ObservableValue<B>, arg2: ObservableValue<C>, arg3: ObservableValue<D>): ObservableValue<R>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.fxutils/lift.html b/docs/build/html/api/com.r3corda.client.fxutils/lift.html new file mode 100644 index 0000000000..5dc61c5675 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.fxutils/lift.html @@ -0,0 +1,22 @@ + + +lift - + + + +com.r3corda.client.fxutils / lift
+
+

lift

+ +fun <A> A.lift(): ObservableValue<A>
+

val aliceHeight: ObservableValue = (..) +val bobHeight: ObservableValue = (..) +fun sumHeight(a: Long, b: Long): Long { .. }

+

val aliceBobSumHeight = ::sumHeight.lift(aliceHeight, bobHeight) +val aliceHeightPlus2 = ::sumHeight.lift(aliceHeight, 2L.lift())

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/-init-.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/-init-.html new file mode 100644 index 0000000000..051b0ee7c7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/-init-.html @@ -0,0 +1,16 @@ + + +EventGenerator.<init> - + + + +com.r3corda.client.mock / EventGenerator / <init>
+
+

<init>

+EventGenerator(parties: List<Party>, notary: Party)
+

Generators for incoming/outgoing events to/from the WalletMonitorService. Internally it keeps track of owned +state/ref pairs, but it doesnt necessarily generate "correct" events

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/amount-generator.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/amount-generator.html new file mode 100644 index 0000000000..eccadb6eb9 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/amount-generator.html @@ -0,0 +1,15 @@ + + +EventGenerator.amountGenerator - + + + +com.r3corda.client.mock / EventGenerator / amountGenerator
+
+

amountGenerator

+ +val amountGenerator: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/amount-issued-generator.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/amount-issued-generator.html new file mode 100644 index 0000000000..029cffc2f1 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/amount-issued-generator.html @@ -0,0 +1,15 @@ + + +EventGenerator.amountIssuedGenerator - + + + +com.r3corda.client.mock / EventGenerator / amountIssuedGenerator
+
+

amountIssuedGenerator

+ +val amountIssuedGenerator: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/cash-state-generator.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/cash-state-generator.html new file mode 100644 index 0000000000..c15ffb9a80 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/cash-state-generator.html @@ -0,0 +1,15 @@ + + +EventGenerator.cashStateGenerator - + + + +com.r3corda.client.mock / EventGenerator / cashStateGenerator
+
+

cashStateGenerator

+ +val cashStateGenerator: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/client-to-service-command-generator.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/client-to-service-command-generator.html new file mode 100644 index 0000000000..39bd84eb6a --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/client-to-service-command-generator.html @@ -0,0 +1,15 @@ + + +EventGenerator.clientToServiceCommandGenerator - + + + +com.r3corda.client.mock / EventGenerator / clientToServiceCommandGenerator
+
+

clientToServiceCommandGenerator

+ +val clientToServiceCommandGenerator: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/consumed-generator.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/consumed-generator.html new file mode 100644 index 0000000000..6f1e016756 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/consumed-generator.html @@ -0,0 +1,15 @@ + + +EventGenerator.consumedGenerator - + + + +com.r3corda.client.mock / EventGenerator / consumedGenerator
+
+

consumedGenerator

+ +val consumedGenerator: Generator<Set<StateRef>>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/currencies.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/currencies.html new file mode 100644 index 0000000000..6abbc89489 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/currencies.html @@ -0,0 +1,15 @@ + + +EventGenerator.currencies - + + + +com.r3corda.client.mock / EventGenerator / currencies
+
+

currencies

+ +val currencies: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/currency-generator.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/currency-generator.html new file mode 100644 index 0000000000..d84ffc98d4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/currency-generator.html @@ -0,0 +1,15 @@ + + +EventGenerator.currencyGenerator - + + + +com.r3corda.client.mock / EventGenerator / currencyGenerator
+
+

currencyGenerator

+ +val currencyGenerator: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/exit-cash-generator.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/exit-cash-generator.html new file mode 100644 index 0000000000..945338f1e3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/exit-cash-generator.html @@ -0,0 +1,15 @@ + + +EventGenerator.exitCashGenerator - + + + +com.r3corda.client.mock / EventGenerator / exitCashGenerator
+
+

exitCashGenerator

+ +val exitCashGenerator: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/index.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/index.html new file mode 100644 index 0000000000..944fcb5d78 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/index.html @@ -0,0 +1,148 @@ + + +EventGenerator - + + + +com.r3corda.client.mock / EventGenerator
+
+

EventGenerator

+class EventGenerator
+

Generators for incoming/outgoing events to/from the WalletMonitorService. Internally it keeps track of owned +state/ref pairs, but it doesnt necessarily generate "correct" events

+
+
+

Constructors

+ + + + + + + +
+<init> +EventGenerator(parties: List<Party>, notary: Party)

Generators for incoming/outgoing events to/from the WalletMonitorService. Internally it keeps track of owned +state/ref pairs, but it doesnt necessarily generate "correct" events

+
+

Properties

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+amountGenerator +val amountGenerator: <ERROR CLASS>
+amountIssuedGenerator +val amountIssuedGenerator: <ERROR CLASS>
+cashStateGenerator +val cashStateGenerator: <ERROR CLASS>
+clientToServiceCommandGenerator +val clientToServiceCommandGenerator: <ERROR CLASS>
+consumedGenerator +val consumedGenerator: Generator<Set<StateRef>>
+currencies +val currencies: <ERROR CLASS>
+currencyGenerator +val currencyGenerator: <ERROR CLASS>
+exitCashGenerator +val exitCashGenerator: <ERROR CLASS>
+issueCashGenerator +val issueCashGenerator: <ERROR CLASS>
+issueRefGenerator +val issueRefGenerator: Generator<OpaqueBytes>
+issuerGenerator +val issuerGenerator: Generator<PartyAndReference>
+moveCashGenerator +val moveCashGenerator: <ERROR CLASS>
+notary +val notary: Party
+outputStateGenerator +val outputStateGenerator: Generator<OutputState>
+parties +val parties: List<Party>
+partyGenerator +val partyGenerator: Generator<Party>
+producedGenerator +val producedGenerator: Generator<Set<StateAndRef<ContractState>>>
+publicKeyGenerator +val publicKeyGenerator: <ERROR CLASS>
+serviceToClientEventGenerator +val serviceToClientEventGenerator: Generator<ServiceToClientEvent>
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/issue-cash-generator.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/issue-cash-generator.html new file mode 100644 index 0000000000..a775eb733a --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/issue-cash-generator.html @@ -0,0 +1,15 @@ + + +EventGenerator.issueCashGenerator - + + + +com.r3corda.client.mock / EventGenerator / issueCashGenerator
+
+

issueCashGenerator

+ +val issueCashGenerator: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/issue-ref-generator.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/issue-ref-generator.html new file mode 100644 index 0000000000..2f87a1c097 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/issue-ref-generator.html @@ -0,0 +1,15 @@ + + +EventGenerator.issueRefGenerator - + + + +com.r3corda.client.mock / EventGenerator / issueRefGenerator
+
+

issueRefGenerator

+ +val issueRefGenerator: Generator<OpaqueBytes>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/issuer-generator.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/issuer-generator.html new file mode 100644 index 0000000000..57dc6007fc --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/issuer-generator.html @@ -0,0 +1,15 @@ + + +EventGenerator.issuerGenerator - + + + +com.r3corda.client.mock / EventGenerator / issuerGenerator
+
+

issuerGenerator

+ +val issuerGenerator: Generator<PartyAndReference>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/move-cash-generator.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/move-cash-generator.html new file mode 100644 index 0000000000..a9a43f69bc --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/move-cash-generator.html @@ -0,0 +1,15 @@ + + +EventGenerator.moveCashGenerator - + + + +com.r3corda.client.mock / EventGenerator / moveCashGenerator
+
+

moveCashGenerator

+ +val moveCashGenerator: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/notary.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/notary.html similarity index 50% rename from docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/notary.html rename to docs/build/html/api/com.r3corda.client.mock/-event-generator/notary.html index 6127ec4bb3..b2a9931adc 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/notary.html +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/notary.html @@ -1,14 +1,14 @@ -WireTransaction.notary - +EventGenerator.notary - -com.r3corda.core.contracts / WireTransaction / notary
+com.r3corda.client.mock / EventGenerator / notary

notary

- -val notary: Party?
+ +val notary: Party


diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/output-state-generator.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/output-state-generator.html new file mode 100644 index 0000000000..db1bc4e8d0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/output-state-generator.html @@ -0,0 +1,15 @@ + + +EventGenerator.outputStateGenerator - + + + +com.r3corda.client.mock / EventGenerator / outputStateGenerator
+
+

outputStateGenerator

+ +val outputStateGenerator: Generator<OutputState>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/parties.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/parties.html new file mode 100644 index 0000000000..2bd6e4348d --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/parties.html @@ -0,0 +1,15 @@ + + +EventGenerator.parties - + + + +com.r3corda.client.mock / EventGenerator / parties
+
+

parties

+ +val parties: List<Party>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/party-generator.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/party-generator.html new file mode 100644 index 0000000000..ab5c4e1287 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/party-generator.html @@ -0,0 +1,15 @@ + + +EventGenerator.partyGenerator - + + + +com.r3corda.client.mock / EventGenerator / partyGenerator
+
+

partyGenerator

+ +val partyGenerator: Generator<Party>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/produced-generator.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/produced-generator.html new file mode 100644 index 0000000000..9e913521dc --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/produced-generator.html @@ -0,0 +1,15 @@ + + +EventGenerator.producedGenerator - + + + +com.r3corda.client.mock / EventGenerator / producedGenerator
+
+

producedGenerator

+ +val producedGenerator: Generator<Set<StateAndRef<ContractState>>>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/public-key-generator.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/public-key-generator.html new file mode 100644 index 0000000000..1f139ac652 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/public-key-generator.html @@ -0,0 +1,15 @@ + + +EventGenerator.publicKeyGenerator - + + + +com.r3corda.client.mock / EventGenerator / publicKeyGenerator
+
+

publicKeyGenerator

+ +val publicKeyGenerator: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-event-generator/service-to-client-event-generator.html b/docs/build/html/api/com.r3corda.client.mock/-event-generator/service-to-client-event-generator.html new file mode 100644 index 0000000000..daca269538 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-event-generator/service-to-client-event-generator.html @@ -0,0 +1,15 @@ + + +EventGenerator.serviceToClientEventGenerator - + + + +com.r3corda.client.mock / EventGenerator / serviceToClientEventGenerator
+
+

serviceToClientEventGenerator

+ +val serviceToClientEventGenerator: Generator<ServiceToClientEvent>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-generator/-init-.html b/docs/build/html/api/com.r3corda.client.mock/-generator/-init-.html new file mode 100644 index 0000000000..10b861aa20 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-generator/-init-.html @@ -0,0 +1,36 @@ + + +Generator.<init> - + + + +com.r3corda.client.mock / Generator / <init>
+
+

<init>

+Generator(generate: (Random) -> ErrorOr<A>)
+

This file defines a basic Generator library for composing random generators of objects.

+

An object of type Generator<A> captures a generator of As. Generators may be composed in several ways.

+

Generator.choice picks a generator from the specified list and runs that. +Generator.frequency is similar to choice but the probability may be specified for each generator (it is normalised before picking). +Generator.combine combines two generators of A and B with a function (A, B) -> C. Variants exist for other arities. +Generator.bind sequences two generators using an arbitrary A->Generator function. Keep the usage of this +function minimal as it may explode the stack, especially when using recursion.

+

There are other utilities as well, the type of which are usually descriptive.

+

Example: +val birdNameGenerator = Generator.pickOne(listOf("raven", "pigeon")) +val birdHeightGenerator = Generator.doubleRange(from = 10.0, to = 30.0) +val birdGenerator = birdNameGenerator.combine(birdHeightGenerator) { name, height -> Bird(name, height) } +val birdsGenerator = Generator.replicate(2, birdGenerator) +val mammalsGenerator = Generator.sampleBernoulli(listOf(Mammal("fox"), Mammal("elephant"))) +val animalsGenerator = Generator.frequency( +0.2 to birdsGenerator, +0.8 to mammalsGenerator +) +val animals = animalsGenerator.generate(Random()).getOrThrow()

+

The above will generate a random list of animals.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-generator/bind.html b/docs/build/html/api/com.r3corda.client.mock/-generator/bind.html new file mode 100644 index 0000000000..6c45b3f392 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-generator/bind.html @@ -0,0 +1,15 @@ + + +Generator.bind - + + + +com.r3corda.client.mock / Generator / bind
+
+

bind

+ +fun <B> bind(function: (A) -> Generator<B>): Generator<Nothing>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-generator/choice.html b/docs/build/html/api/com.r3corda.client.mock/-generator/choice.html new file mode 100644 index 0000000000..c4c99db60b --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-generator/choice.html @@ -0,0 +1,15 @@ + + +Generator.choice - + + + +com.r3corda.client.mock / Generator / choice
+
+

choice

+ +fun <A> choice(generators: List<Generator<A>>): Generator<Nothing>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-generator/combine.html b/docs/build/html/api/com.r3corda.client.mock/-generator/combine.html new file mode 100644 index 0000000000..e8836807c1 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-generator/combine.html @@ -0,0 +1,21 @@ + + +Generator.combine - + + + +com.r3corda.client.mock / Generator / combine
+
+

combine

+ +fun <B, R> combine(other1: Generator<B>, function: (A, B) -> R): Generator<R>
+ +fun <B, C, R> combine(other1: Generator<B>, other2: Generator<C>, function: (A, B, C) -> R): Generator<R>
+ +fun <B, C, D, R> combine(other1: Generator<B>, other2: Generator<C>, other3: Generator<D>, function: (A, B, C, D) -> R): Generator<R>
+ +fun <B, C, D, E, R> combine(other1: Generator<B>, other2: Generator<C>, other3: Generator<D>, other4: Generator<E>, function: (A, B, C, D, E) -> R): Generator<R>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-generator/fail.html b/docs/build/html/api/com.r3corda.client.mock/-generator/fail.html new file mode 100644 index 0000000000..2c147b2483 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-generator/fail.html @@ -0,0 +1,15 @@ + + +Generator.fail - + + + +com.r3corda.client.mock / Generator / fail
+
+

fail

+ +fun <A> fail(error: Exception): Generator<A>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-generator/frequency.html b/docs/build/html/api/com.r3corda.client.mock/-generator/frequency.html new file mode 100644 index 0000000000..0d517b0c9a --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-generator/frequency.html @@ -0,0 +1,15 @@ + + +Generator.frequency - + + + +com.r3corda.client.mock / Generator / frequency
+
+

frequency

+ +fun <A> frequency(vararg generators: <ERROR CLASS><Double, Generator<A>>): Generator<A>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-generator/generate.html b/docs/build/html/api/com.r3corda.client.mock/-generator/generate.html new file mode 100644 index 0000000000..fcfb2ce7de --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-generator/generate.html @@ -0,0 +1,15 @@ + + +Generator.generate - + + + +com.r3corda.client.mock / Generator / generate
+
+

generate

+ +val generate: (Random) -> ErrorOr<A>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-generator/impure.html b/docs/build/html/api/com.r3corda.client.mock/-generator/impure.html new file mode 100644 index 0000000000..31034bc6ea --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-generator/impure.html @@ -0,0 +1,15 @@ + + +Generator.impure - + + + +com.r3corda.client.mock / Generator / impure
+
+

impure

+ +fun <A> impure(valueClosure: () -> A): Generator<A>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-generator/index.html b/docs/build/html/api/com.r3corda.client.mock/-generator/index.html new file mode 100644 index 0000000000..254fc9aa92 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-generator/index.html @@ -0,0 +1,209 @@ + + +Generator - + + + +com.r3corda.client.mock / Generator
+
+

Generator

+class Generator<out A>
+

This file defines a basic Generator library for composing random generators of objects.

+

An object of type Generator<A> captures a generator of As. Generators may be composed in several ways.

+

Generator.choice picks a generator from the specified list and runs that. +Generator.frequency is similar to choice but the probability may be specified for each generator (it is normalised before picking). +Generator.combine combines two generators of A and B with a function (A, B) -> C. Variants exist for other arities. +Generator.bind sequences two generators using an arbitrary A->Generator function. Keep the usage of this +function minimal as it may explode the stack, especially when using recursion.

+

There are other utilities as well, the type of which are usually descriptive.

+

Example: +val birdNameGenerator = Generator.pickOne(listOf("raven", "pigeon")) +val birdHeightGenerator = Generator.doubleRange(from = 10.0, to = 30.0) +val birdGenerator = birdNameGenerator.combine(birdHeightGenerator) { name, height -> Bird(name, height) } +val birdsGenerator = Generator.replicate(2, birdGenerator) +val mammalsGenerator = Generator.sampleBernoulli(listOf(Mammal("fox"), Mammal("elephant"))) +val animalsGenerator = Generator.frequency( +0.2 to birdsGenerator, +0.8 to mammalsGenerator +) +val animals = animalsGenerator.generate(Random()).getOrThrow()

+

The above will generate a random list of animals.

+
+
+
+
+

Constructors

+ + + + + + + +
+<init> +Generator(generate: (Random) -> ErrorOr<A>)

This file defines a basic Generator library for composing random generators of objects.

+
+

Properties

+ + + + + + + +
+generate +val generate: (Random) -> ErrorOr<A>
+

Functions

+ + + + + + + + + + + + + + + + + + + +
+bind +fun <B> bind(function: (A) -> Generator<B>): Generator<Nothing>
+combine +fun <B, R> combine(other1: Generator<B>, function: (A, B) -> R): Generator<R>
+fun <B, C, R> combine(other1: Generator<B>, other2: Generator<C>, function: (A, B, C) -> R): Generator<R>
+fun <B, C, D, R> combine(other1: Generator<B>, other2: Generator<C>, other3: Generator<D>, function: (A, B, C, D) -> R): Generator<R>
+fun <B, C, D, E, R> combine(other1: Generator<B>, other2: Generator<C>, other3: Generator<D>, other4: Generator<E>, function: (A, B, C, D, E) -> R): Generator<R>
+map +fun <B> map(function: (A) -> B): Generator<B>
+product +fun <B> product(other: Generator<(A) -> B>): Generator<B>
+

Companion Object Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+choice +fun <A> choice(generators: List<Generator<A>>): Generator<Nothing>
+fail +fun <A> fail(error: Exception): Generator<A>
+frequency +fun <A> frequency(vararg generators: <ERROR CLASS><Double, Generator<A>>): Generator<A>
+impure +fun <A> impure(valueClosure: () -> A): Generator<A>
+pure +fun <A> pure(value: A): Generator<A>
+sequence +fun <A> sequence(generators: List<Generator<A>>): Generator<List<A>>
+success +fun <A> success(generate: (Random) -> A): Generator<A>
+

Extension Functions

+ + + + + + + +
+generateOrFail +fun <A> Generator<A>.generateOrFail(random: Random, numberOfTries: Int = 1): A
+

Companion Object Extension Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+double +fun Generator.Companion.double(): Generator<Double>
+doubleRange +fun Generator.Companion.doubleRange(from: Double, to: Double): Generator<Double>
+int +fun Generator.Companion.int(): Generator<Int>
+intRange +fun Generator.Companion.intRange(from: Int, to: Int): Generator<Int>
+oneOf +fun <A> Generator.Companion.oneOf(list: List<A>): Generator<A>
+pickOne +fun <A> Generator.Companion.pickOne(list: List<A>): Generator<A>
+replicate +fun <A> Generator.Companion.replicate(number: Int, generator: Generator<A>): Generator<List<A>>
+replicatePoisson +fun <A> Generator.Companion.replicatePoisson(meanSize: Double, generator: Generator<A>): Generator<List<A>>
+sampleBernoulli +fun <A> Generator.Companion.sampleBernoulli(maxRatio: Double = 1.0, vararg collection: A): <ERROR CLASS>
+fun <A> Generator.Companion.sampleBernoulli(collection: Collection<A>, maxRatio: Double = 1.0): Generator<List<A>>
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-generator/map.html b/docs/build/html/api/com.r3corda.client.mock/-generator/map.html new file mode 100644 index 0000000000..655805c2b1 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-generator/map.html @@ -0,0 +1,15 @@ + + +Generator.map - + + + +com.r3corda.client.mock / Generator / map
+
+

map

+ +fun <B> map(function: (A) -> B): Generator<B>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-generator/product.html b/docs/build/html/api/com.r3corda.client.mock/-generator/product.html new file mode 100644 index 0000000000..eb7df0eb9d --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-generator/product.html @@ -0,0 +1,15 @@ + + +Generator.product - + + + +com.r3corda.client.mock / Generator / product
+
+

product

+ +fun <B> product(other: Generator<(A) -> B>): Generator<B>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-generator/pure.html b/docs/build/html/api/com.r3corda.client.mock/-generator/pure.html new file mode 100644 index 0000000000..5ad584da70 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-generator/pure.html @@ -0,0 +1,15 @@ + + +Generator.pure - + + + +com.r3corda.client.mock / Generator / pure
+
+

pure

+ +fun <A> pure(value: A): Generator<A>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-generator/sequence.html b/docs/build/html/api/com.r3corda.client.mock/-generator/sequence.html new file mode 100644 index 0000000000..98d1780004 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-generator/sequence.html @@ -0,0 +1,15 @@ + + +Generator.sequence - + + + +com.r3corda.client.mock / Generator / sequence
+
+

sequence

+ +fun <A> sequence(generators: List<Generator<A>>): Generator<List<A>>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/-generator/success.html b/docs/build/html/api/com.r3corda.client.mock/-generator/success.html new file mode 100644 index 0000000000..7d9ab42b15 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/-generator/success.html @@ -0,0 +1,15 @@ + + +Generator.success - + + + +com.r3corda.client.mock / Generator / success
+
+

success

+ +fun <A> success(generate: (Random) -> A): Generator<A>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/double-range.html b/docs/build/html/api/com.r3corda.client.mock/double-range.html new file mode 100644 index 0000000000..8d035fc4c6 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/double-range.html @@ -0,0 +1,15 @@ + + +com.r3corda.client.mock.doubleRange - + + + +com.r3corda.client.mock / doubleRange
+
+

doubleRange

+ +fun Generator.Companion.doubleRange(from: Double, to: Double): Generator<Double>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/double.html b/docs/build/html/api/com.r3corda.client.mock/double.html new file mode 100644 index 0000000000..694230d011 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/double.html @@ -0,0 +1,15 @@ + + +com.r3corda.client.mock.double - + + + +com.r3corda.client.mock / double
+
+

double

+ +fun Generator.Companion.double(): Generator<Double>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/generate-or-fail.html b/docs/build/html/api/com.r3corda.client.mock/generate-or-fail.html new file mode 100644 index 0000000000..3be7ed810c --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/generate-or-fail.html @@ -0,0 +1,15 @@ + + +generateOrFail - + + + +com.r3corda.client.mock / generateOrFail
+
+

generateOrFail

+ +fun <A> Generator<A>.generateOrFail(random: Random, numberOfTries: Int = 1): A
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/index.html b/docs/build/html/api/com.r3corda.client.mock/index.html new file mode 100644 index 0000000000..c3bd865fdc --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/index.html @@ -0,0 +1,102 @@ + + +com.r3corda.client.mock - + + + +com.r3corda.client.mock
+
+

Package com.r3corda.client.mock

+

Types

+ + + + + + + + + + + +
+EventGenerator +class EventGenerator

Generators for incoming/outgoing events to/from the WalletMonitorService. Internally it keeps track of owned +state/ref pairs, but it doesnt necessarily generate "correct" events

+
+Generator +class Generator<out A>

This file defines a basic Generator library for composing random generators of objects.

+
+

Functions

+ + + + + + + +
+generateOrFail +fun <A> Generator<A>.generateOrFail(random: Random, numberOfTries: Int = 1): A
+

Companion Object Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+double +fun Generator.Companion.double(): Generator<Double>
+doubleRange +fun Generator.Companion.doubleRange(from: Double, to: Double): Generator<Double>
+int +fun Generator.Companion.int(): Generator<Int>
+intRange +fun Generator.Companion.intRange(from: Int, to: Int): Generator<Int>
+oneOf +fun <A> Generator.Companion.oneOf(list: List<A>): Generator<A>
+pickOne +fun <A> Generator.Companion.pickOne(list: List<A>): Generator<A>
+replicate +fun <A> Generator.Companion.replicate(number: Int, generator: Generator<A>): Generator<List<A>>
+replicatePoisson +fun <A> Generator.Companion.replicatePoisson(meanSize: Double, generator: Generator<A>): Generator<List<A>>
+sampleBernoulli +fun <A> Generator.Companion.sampleBernoulli(maxRatio: Double = 1.0, vararg collection: A): <ERROR CLASS>
+fun <A> Generator.Companion.sampleBernoulli(collection: Collection<A>, maxRatio: Double = 1.0): Generator<List<A>>
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/int-range.html b/docs/build/html/api/com.r3corda.client.mock/int-range.html new file mode 100644 index 0000000000..7e4a213e8c --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/int-range.html @@ -0,0 +1,15 @@ + + +com.r3corda.client.mock.intRange - + + + +com.r3corda.client.mock / intRange
+
+

intRange

+ +fun Generator.Companion.intRange(from: Int, to: Int): Generator<Int>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/int.html b/docs/build/html/api/com.r3corda.client.mock/int.html new file mode 100644 index 0000000000..0ada89531b --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/int.html @@ -0,0 +1,15 @@ + + +com.r3corda.client.mock.int - + + + +com.r3corda.client.mock / int
+
+

int

+ +fun Generator.Companion.int(): Generator<Int>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/one-of.html b/docs/build/html/api/com.r3corda.client.mock/one-of.html new file mode 100644 index 0000000000..16e697b061 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/one-of.html @@ -0,0 +1,15 @@ + + +com.r3corda.client.mock.oneOf - + + + +com.r3corda.client.mock / oneOf
+
+

oneOf

+ +fun <A> Generator.Companion.oneOf(list: List<A>): Generator<A>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/pick-one.html b/docs/build/html/api/com.r3corda.client.mock/pick-one.html new file mode 100644 index 0000000000..1b021e3f27 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/pick-one.html @@ -0,0 +1,15 @@ + + +com.r3corda.client.mock.pickOne - + + + +com.r3corda.client.mock / pickOne
+
+

pickOne

+ +fun <A> Generator.Companion.pickOne(list: List<A>): Generator<A>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/replicate-poisson.html b/docs/build/html/api/com.r3corda.client.mock/replicate-poisson.html new file mode 100644 index 0000000000..078950d4c2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/replicate-poisson.html @@ -0,0 +1,15 @@ + + +com.r3corda.client.mock.replicatePoisson - + + + +com.r3corda.client.mock / replicatePoisson
+
+

replicatePoisson

+ +fun <A> Generator.Companion.replicatePoisson(meanSize: Double, generator: Generator<A>): Generator<List<A>>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/replicate.html b/docs/build/html/api/com.r3corda.client.mock/replicate.html new file mode 100644 index 0000000000..b43cbb27af --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/replicate.html @@ -0,0 +1,15 @@ + + +com.r3corda.client.mock.replicate - + + + +com.r3corda.client.mock / replicate
+
+

replicate

+ +fun <A> Generator.Companion.replicate(number: Int, generator: Generator<A>): Generator<List<A>>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.mock/sample-bernoulli.html b/docs/build/html/api/com.r3corda.client.mock/sample-bernoulli.html new file mode 100644 index 0000000000..c90a723ae2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.mock/sample-bernoulli.html @@ -0,0 +1,17 @@ + + +com.r3corda.client.mock.sampleBernoulli - + + + +com.r3corda.client.mock / sampleBernoulli
+
+

sampleBernoulli

+ +fun <A> Generator.Companion.sampleBernoulli(maxRatio: Double = 1.0, vararg collection: A): <ERROR CLASS>
+ +fun <A> Generator.Companion.sampleBernoulli(collection: Collection<A>, maxRatio: Double = 1.0): Generator<List<A>>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-contract-state-model/-init-.html b/docs/build/html/api/com.r3corda.client.model/-contract-state-model/-init-.html new file mode 100644 index 0000000000..5941a53836 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-contract-state-model/-init-.html @@ -0,0 +1,15 @@ + + +ContractStateModel.<init> - + + + +com.r3corda.client.model / ContractStateModel / <init>
+
+

<init>

+ContractStateModel()
+

This model exposes the list of owned contract states.

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-contract-state-model/cash-states-modification.html b/docs/build/html/api/com.r3corda.client.model/-contract-state-model/cash-states-modification.html new file mode 100644 index 0000000000..256200005c --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-contract-state-model/cash-states-modification.html @@ -0,0 +1,15 @@ + + +ContractStateModel.cashStatesModification - + + + +com.r3corda.client.model / ContractStateModel / cashStatesModification
+
+

cashStatesModification

+ +val cashStatesModification: <ERROR CLASS><StatesModification<State>>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-contract-state-model/cash-states.html b/docs/build/html/api/com.r3corda.client.model/-contract-state-model/cash-states.html new file mode 100644 index 0000000000..69af437964 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-contract-state-model/cash-states.html @@ -0,0 +1,15 @@ + + +ContractStateModel.cashStates - + + + +com.r3corda.client.model / ContractStateModel / cashStates
+
+

cashStates

+ +val cashStates: ObservableList<StateAndRef<State>>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-contract-state-model/contract-states-diff.html b/docs/build/html/api/com.r3corda.client.model/-contract-state-model/contract-states-diff.html new file mode 100644 index 0000000000..fc870df8bc --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-contract-state-model/contract-states-diff.html @@ -0,0 +1,15 @@ + + +ContractStateModel.contractStatesDiff - + + + +com.r3corda.client.model / ContractStateModel / contractStatesDiff
+
+

contractStatesDiff

+ +val contractStatesDiff: <ERROR CLASS><Diff<ContractState>>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-contract-state-model/index.html b/docs/build/html/api/com.r3corda.client.model/-contract-state-model/index.html new file mode 100644 index 0000000000..a3b9e33e3c --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-contract-state-model/index.html @@ -0,0 +1,50 @@ + + +ContractStateModel - + + + +com.r3corda.client.model / ContractStateModel
+
+

ContractStateModel

+class ContractStateModel
+

This model exposes the list of owned contract states.

+
+
+

Constructors

+ + + + + + + +
+<init> +ContractStateModel()

This model exposes the list of owned contract states.

+
+

Properties

+ + + + + + + + + + + + + + + +
+cashStates +val cashStates: ObservableList<StateAndRef<State>>
+cashStatesModification +val cashStatesModification: <ERROR CLASS><StatesModification<State>>
+contractStatesDiff +val contractStatesDiff: <ERROR CLASS><Diff<ContractState>>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-exchange-rate-model/-init-.html b/docs/build/html/api/com.r3corda.client.model/-exchange-rate-model/-init-.html new file mode 100644 index 0000000000..5bfa5eb42b --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-exchange-rate-model/-init-.html @@ -0,0 +1,16 @@ + + +ExchangeRateModel.<init> - + + + +com.r3corda.client.model / ExchangeRateModel / <init>
+
+

<init>

+ExchangeRateModel()
+

This model provides an exchange rate from arbitrary currency to arbitrary currency. +TODO hook up an actual oracle

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-exchange-rate-model/exchange-rate.html b/docs/build/html/api/com.r3corda.client.model/-exchange-rate-model/exchange-rate.html new file mode 100644 index 0000000000..d8c09ec9b7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-exchange-rate-model/exchange-rate.html @@ -0,0 +1,15 @@ + + +ExchangeRateModel.exchangeRate - + + + +com.r3corda.client.model / ExchangeRateModel / exchangeRate
+
+

exchangeRate

+ +val exchangeRate: ObservableValue<ExchangeRate>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-exchange-rate-model/index.html b/docs/build/html/api/com.r3corda.client.model/-exchange-rate-model/index.html new file mode 100644 index 0000000000..49fa0ff30f --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-exchange-rate-model/index.html @@ -0,0 +1,40 @@ + + +ExchangeRateModel - + + + +com.r3corda.client.model / ExchangeRateModel
+
+

ExchangeRateModel

+class ExchangeRateModel
+

This model provides an exchange rate from arbitrary currency to arbitrary currency. +TODO hook up an actual oracle

+
+
+

Constructors

+ + + + + + + +
+<init> +ExchangeRateModel()

This model provides an exchange rate from arbitrary currency to arbitrary currency. +TODO hook up an actual oracle

+
+

Properties

+ + + + + + + +
+exchangeRate +val exchangeRate: ObservableValue<ExchangeRate>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-exchange-rate/index.html b/docs/build/html/api/com.r3corda.client.model/-exchange-rate/index.html new file mode 100644 index 0000000000..810ee9cdee --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-exchange-rate/index.html @@ -0,0 +1,42 @@ + + +ExchangeRate - + + + +com.r3corda.client.model / ExchangeRate
+
+

ExchangeRate

+interface ExchangeRate
+
+
+

Functions

+ + + + + + + +
+rate +abstract fun rate(from: Currency, to: Currency): Double
+

Extension Functions

+ + + + + + + + + + + +
+exchangeAmount +fun ExchangeRate.exchangeAmount(amount: Amount<Currency>, to: Currency): Amount<Currency>
+exchangeDouble +fun ExchangeRate.exchangeDouble(amount: Amount<Currency>, to: Currency): Double
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-exchange-rate/rate.html b/docs/build/html/api/com.r3corda.client.model/-exchange-rate/rate.html new file mode 100644 index 0000000000..75facad4cc --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-exchange-rate/rate.html @@ -0,0 +1,15 @@ + + +ExchangeRate.rate - + + + +com.r3corda.client.model / ExchangeRate / rate
+
+

rate

+ +abstract fun rate(from: Currency, to: Currency): Double
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-model/-init-.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-model/-init-.html new file mode 100644 index 0000000000..9570181a49 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-model/-init-.html @@ -0,0 +1,15 @@ + + +GatheredTransactionDataModel.<init> - + + + +com.r3corda.client.model / GatheredTransactionDataModel / <init>
+
+

<init>

+GatheredTransactionDataModel()
+

This model provides an observable list of states relating to the creation of a transaction not yet on ledger.

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-model/gathered-transaction-data-list.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-model/gathered-transaction-data-list.html new file mode 100644 index 0000000000..17a1964e50 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-model/gathered-transaction-data-list.html @@ -0,0 +1,25 @@ + + +GatheredTransactionDataModel.gatheredTransactionDataList - + + + +com.r3corda.client.model / GatheredTransactionDataModel / gatheredTransactionDataList
+
+

gatheredTransactionDataList

+ +val gatheredTransactionDataList: ObservableList<out GatheredTransactionData>
+

Aggregation of updates to transactions. We use the observable list as the only container and do linear search for +matching transactions because we have three keys(fiber ID, UUID, tx id) and this way its easier to avoid syncing issues.

+

The Fiber ID is used to identify events that relate to the same transaction server-side, whereas the UUID is +generated on the UI and is used to identify events with the UI action that triggered them. Currently a UUID is +generated for each outgoing ClientToServiceCommand.

+

TODO: Make this more efficient by maintaining and syncing two maps (for the two keys) in the accumulator +(Note that a transaction may be mapped by one or both) +TODO: Expose a writable stream to combine serviceToClient with to allow recording of transactions made locally(UUID)

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-model/index.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-model/index.html new file mode 100644 index 0000000000..671e3af34a --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-model/index.html @@ -0,0 +1,40 @@ + + +GatheredTransactionDataModel - + + + +com.r3corda.client.model / GatheredTransactionDataModel
+
+

GatheredTransactionDataModel

+class GatheredTransactionDataModel
+

This model provides an observable list of states relating to the creation of a transaction not yet on ledger.

+
+
+

Constructors

+ + + + + + + +
+<init> +GatheredTransactionDataModel()

This model provides an observable list of states relating to the creation of a transaction not yet on ledger.

+
+

Properties

+ + + + + + + +
+gatheredTransactionDataList +val gatheredTransactionDataList: ObservableList<out GatheredTransactionData>

Aggregation of updates to transactions. We use the observable list as the only container and do linear search for +matching transactions because we have three keys(fiber ID, UUID, tx id) and this way its easier to avoid syncing issues.

+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/-init-.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/-init-.html new file mode 100644 index 0000000000..cb16d5738c --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/-init-.html @@ -0,0 +1,14 @@ + + +GatheredTransactionDataWritable.<init> - + + + +com.r3corda.client.model / GatheredTransactionDataWritable / <init>
+
+

<init>

+GatheredTransactionDataWritable(fiberId: SimpleObjectProperty<Long?> = SimpleObjectProperty(null), uuid: SimpleObjectProperty<UUID?> = SimpleObjectProperty(null), stateMachineStatus: SimpleObjectProperty<StateMachineStatus?> = SimpleObjectProperty(null), protocolStatus: SimpleObjectProperty<ProtocolStatus?> = SimpleObjectProperty(null), transaction: SimpleObjectProperty<LedgerTransaction?> = SimpleObjectProperty(null), status: SimpleObjectProperty<TransactionCreateStatus?> = SimpleObjectProperty(null), lastUpdate: SimpleObjectProperty<Instant>, allEvents: ObservableList<ServiceToClientEvent> = FXCollections.observableArrayList())
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/all-events.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/all-events.html new file mode 100644 index 0000000000..30dc2951ce --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/all-events.html @@ -0,0 +1,16 @@ + + +GatheredTransactionDataWritable.allEvents - + + + +com.r3corda.client.model / GatheredTransactionDataWritable / allEvents
+
+

allEvents

+ +val allEvents: ObservableList<ServiceToClientEvent>
+Overrides GatheredTransactionData.allEvents
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/fiber-id.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/fiber-id.html new file mode 100644 index 0000000000..1dd1a7696f --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/fiber-id.html @@ -0,0 +1,16 @@ + + +GatheredTransactionDataWritable.fiberId - + + + +com.r3corda.client.model / GatheredTransactionDataWritable / fiberId
+
+

fiberId

+ +val fiberId: SimpleObjectProperty<Long?>
+Overrides GatheredTransactionData.fiberId
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/index.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/index.html new file mode 100644 index 0000000000..5aaa5d00ff --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/index.html @@ -0,0 +1,78 @@ + + +GatheredTransactionDataWritable - + + + +com.r3corda.client.model / GatheredTransactionDataWritable
+
+

GatheredTransactionDataWritable

+data class GatheredTransactionDataWritable : GatheredTransactionData
+
+
+

Constructors

+ + + + + + + +
+<init> +GatheredTransactionDataWritable(fiberId: SimpleObjectProperty<Long?> = SimpleObjectProperty(null), uuid: SimpleObjectProperty<UUID?> = SimpleObjectProperty(null), stateMachineStatus: SimpleObjectProperty<StateMachineStatus?> = SimpleObjectProperty(null), protocolStatus: SimpleObjectProperty<ProtocolStatus?> = SimpleObjectProperty(null), transaction: SimpleObjectProperty<LedgerTransaction?> = SimpleObjectProperty(null), status: SimpleObjectProperty<TransactionCreateStatus?> = SimpleObjectProperty(null), lastUpdate: SimpleObjectProperty<Instant>, allEvents: ObservableList<ServiceToClientEvent> = FXCollections.observableArrayList())
+

Properties

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+allEvents +val allEvents: ObservableList<ServiceToClientEvent>
+fiberId +val fiberId: SimpleObjectProperty<Long?>
+lastUpdate +val lastUpdate: SimpleObjectProperty<Instant>
+protocolStatus +val protocolStatus: SimpleObjectProperty<ProtocolStatus?>
+stateMachineStatus +val stateMachineStatus: SimpleObjectProperty<StateMachineStatus?>
+status +val status: SimpleObjectProperty<TransactionCreateStatus?>
+transaction +val transaction: SimpleObjectProperty<LedgerTransaction?>
+uuid +val uuid: SimpleObjectProperty<UUID?>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/last-update.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/last-update.html new file mode 100644 index 0000000000..1904278cd5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/last-update.html @@ -0,0 +1,16 @@ + + +GatheredTransactionDataWritable.lastUpdate - + + + +com.r3corda.client.model / GatheredTransactionDataWritable / lastUpdate
+
+

lastUpdate

+ +val lastUpdate: SimpleObjectProperty<Instant>
+Overrides GatheredTransactionData.lastUpdate
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/protocol-status.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/protocol-status.html new file mode 100644 index 0000000000..4023706ea2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/protocol-status.html @@ -0,0 +1,16 @@ + + +GatheredTransactionDataWritable.protocolStatus - + + + +com.r3corda.client.model / GatheredTransactionDataWritable / protocolStatus
+
+

protocolStatus

+ +val protocolStatus: SimpleObjectProperty<ProtocolStatus?>
+Overrides GatheredTransactionData.protocolStatus
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/state-machine-status.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/state-machine-status.html new file mode 100644 index 0000000000..e9eb28fef6 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/state-machine-status.html @@ -0,0 +1,16 @@ + + +GatheredTransactionDataWritable.stateMachineStatus - + + + +com.r3corda.client.model / GatheredTransactionDataWritable / stateMachineStatus
+
+

stateMachineStatus

+ +val stateMachineStatus: SimpleObjectProperty<StateMachineStatus?>
+Overrides GatheredTransactionData.stateMachineStatus
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/status.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/status.html new file mode 100644 index 0000000000..cd55037bc0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/status.html @@ -0,0 +1,16 @@ + + +GatheredTransactionDataWritable.status - + + + +com.r3corda.client.model / GatheredTransactionDataWritable / status
+
+

status

+ +val status: SimpleObjectProperty<TransactionCreateStatus?>
+Overrides GatheredTransactionData.status
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/transaction.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/transaction.html new file mode 100644 index 0000000000..3e0f2525d8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/transaction.html @@ -0,0 +1,16 @@ + + +GatheredTransactionDataWritable.transaction - + + + +com.r3corda.client.model / GatheredTransactionDataWritable / transaction
+
+

transaction

+ +val transaction: SimpleObjectProperty<LedgerTransaction?>
+Overrides GatheredTransactionData.transaction
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/uuid.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/uuid.html new file mode 100644 index 0000000000..0ea0899912 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data-writable/uuid.html @@ -0,0 +1,16 @@ + + +GatheredTransactionDataWritable.uuid - + + + +com.r3corda.client.model / GatheredTransactionDataWritable / uuid
+
+

uuid

+ +val uuid: SimpleObjectProperty<UUID?>
+Overrides GatheredTransactionData.uuid
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/all-events.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/all-events.html new file mode 100644 index 0000000000..9624faeb96 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/all-events.html @@ -0,0 +1,15 @@ + + +GatheredTransactionData.allEvents - + + + +com.r3corda.client.model / GatheredTransactionData / allEvents
+
+

allEvents

+ +abstract val allEvents: ObservableList<out ServiceToClientEvent>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/fiber-id.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/fiber-id.html new file mode 100644 index 0000000000..8d30eac3d0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/fiber-id.html @@ -0,0 +1,15 @@ + + +GatheredTransactionData.fiberId - + + + +com.r3corda.client.model / GatheredTransactionData / fiberId
+
+

fiberId

+ +abstract val fiberId: ObservableValue<Long?>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/index.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/index.html new file mode 100644 index 0000000000..6ac1754eae --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/index.html @@ -0,0 +1,78 @@ + + +GatheredTransactionData - + + + +com.r3corda.client.model / GatheredTransactionData
+
+

GatheredTransactionData

+interface GatheredTransactionData
+
+
+

Properties

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+allEvents +abstract val allEvents: ObservableList<out ServiceToClientEvent>
+fiberId +abstract val fiberId: ObservableValue<Long?>
+lastUpdate +abstract val lastUpdate: ObservableValue<Instant>
+protocolStatus +abstract val protocolStatus: ObservableValue<ProtocolStatus?>
+stateMachineStatus +abstract val stateMachineStatus: ObservableValue<StateMachineStatus?>
+status +abstract val status: ObservableValue<TransactionCreateStatus?>
+transaction +abstract val transaction: ObservableValue<LedgerTransaction?>
+uuid +abstract val uuid: ObservableValue<UUID?>
+

Inheritors

+ + + + + + + +
+GatheredTransactionDataWritable +data class GatheredTransactionDataWritable : GatheredTransactionData
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/last-update.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/last-update.html new file mode 100644 index 0000000000..12bf4c684c --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/last-update.html @@ -0,0 +1,15 @@ + + +GatheredTransactionData.lastUpdate - + + + +com.r3corda.client.model / GatheredTransactionData / lastUpdate
+
+

lastUpdate

+ +abstract val lastUpdate: ObservableValue<Instant>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/protocol-status.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/protocol-status.html new file mode 100644 index 0000000000..927688245f --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/protocol-status.html @@ -0,0 +1,15 @@ + + +GatheredTransactionData.protocolStatus - + + + +com.r3corda.client.model / GatheredTransactionData / protocolStatus
+
+

protocolStatus

+ +abstract val protocolStatus: ObservableValue<ProtocolStatus?>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/state-machine-status.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/state-machine-status.html new file mode 100644 index 0000000000..68f12ac75c --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/state-machine-status.html @@ -0,0 +1,15 @@ + + +GatheredTransactionData.stateMachineStatus - + + + +com.r3corda.client.model / GatheredTransactionData / stateMachineStatus
+
+

stateMachineStatus

+ +abstract val stateMachineStatus: ObservableValue<StateMachineStatus?>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/status.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/status.html new file mode 100644 index 0000000000..42a98a171c --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/status.html @@ -0,0 +1,15 @@ + + +GatheredTransactionData.status - + + + +com.r3corda.client.model / GatheredTransactionData / status
+
+

status

+ +abstract val status: ObservableValue<TransactionCreateStatus?>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/transaction.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/transaction.html new file mode 100644 index 0000000000..ba92add77e --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/transaction.html @@ -0,0 +1,15 @@ + + +GatheredTransactionData.transaction - + + + +com.r3corda.client.model / GatheredTransactionData / transaction
+
+

transaction

+ +abstract val transaction: ObservableValue<LedgerTransaction?>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/uuid.html b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/uuid.html new file mode 100644 index 0000000000..c3a139b6a0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-gathered-transaction-data/uuid.html @@ -0,0 +1,15 @@ + + +GatheredTransactionData.uuid - + + + +com.r3corda.client.model / GatheredTransactionData / uuid
+
+

uuid

+ +abstract val uuid: ObservableValue<UUID?>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-models/get.html b/docs/build/html/api/com.r3corda.client.model/-models/get.html new file mode 100644 index 0000000000..4c40c34199 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-models/get.html @@ -0,0 +1,17 @@ + + +Models.get - + + + +com.r3corda.client.model / Models / get
+
+

get

+ +fun <M : Any> get(klass: KClass<M>, origin: KClass<*>): M
+ +inline fun <reified M : Any> get(origin: KClass<*>): M
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-models/index.html b/docs/build/html/api/com.r3corda.client.model/-models/index.html new file mode 100644 index 0000000000..02f745c36a --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-models/index.html @@ -0,0 +1,32 @@ + + +Models - + + + +com.r3corda.client.model / Models
+
+

Models

+object Models
+
+
+

Functions

+ + + + + + + + + + + +
+get +fun <M : Any> get(klass: KClass<M>, origin: KClass<*>): M
+fun <M : Any> get(origin: KClass<*>): M
+initModel +fun <M : Any> initModel(klass: KClass<M>): <ERROR CLASS>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-models/init-model.html b/docs/build/html/api/com.r3corda.client.model/-models/init-model.html new file mode 100644 index 0000000000..19f4a880b2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-models/init-model.html @@ -0,0 +1,15 @@ + + +Models.initModel - + + + +com.r3corda.client.model / Models / initModel
+
+

initModel

+ +fun <M : Any> initModel(klass: KClass<M>): <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/-init-.html b/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/-init-.html new file mode 100644 index 0000000000..1ab2ec4145 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/-init-.html @@ -0,0 +1,15 @@ + + +NodeMonitorModel.<init> - + + + +com.r3corda.client.model / NodeMonitorModel / <init>
+
+

<init>

+NodeMonitorModel()
+

This model exposes raw event streams to and from the NodeMonitorService through a NodeMonitorClient

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/client-to-service.html b/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/client-to-service.html new file mode 100644 index 0000000000..8a4afb2954 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/client-to-service.html @@ -0,0 +1,15 @@ + + +NodeMonitorModel.clientToService - + + + +com.r3corda.client.model / NodeMonitorModel / clientToService
+
+

clientToService

+ +val clientToService: <ERROR CLASS><ClientToServiceCommand>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/index.html b/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/index.html new file mode 100644 index 0000000000..97e10efeb6 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/index.html @@ -0,0 +1,62 @@ + + +NodeMonitorModel - + + + +com.r3corda.client.model / NodeMonitorModel
+
+

NodeMonitorModel

+class NodeMonitorModel
+

This model exposes raw event streams to and from the NodeMonitorService through a NodeMonitorClient

+
+
+

Constructors

+ + + + + + + +
+<init> +NodeMonitorModel()

This model exposes raw event streams to and from the NodeMonitorService through a NodeMonitorClient

+
+

Properties

+ + + + + + + + + + + + + + + +
+clientToService +val clientToService: <ERROR CLASS><ClientToServiceCommand>
+serviceToClient +val serviceToClient: <ERROR CLASS><ServiceToClientEvent>
+snapshot +val snapshot: <ERROR CLASS><StateSnapshotMessage>
+

Functions

+ + + + + + + +
+register +fun register(messagingService: MessagingService, monitorNodeInfo: NodeInfo): Unit

Register for updates to/from a given wallet.

+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/register.html b/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/register.html new file mode 100644 index 0000000000..346ef7c937 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/register.html @@ -0,0 +1,23 @@ + + +NodeMonitorModel.register - + + + +com.r3corda.client.model / NodeMonitorModel / register
+
+

register

+ +fun register(messagingService: MessagingService, monitorNodeInfo: NodeInfo): Unit
+

Register for updates to/from a given wallet.

+

Parameters

+ +messagingService - The messaging to use for communication.
+
+ +monitorNodeInfo - the Node to connect to. +TODO provide an unsubscribe mechanism
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/service-to-client.html b/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/service-to-client.html new file mode 100644 index 0000000000..9d920fe710 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/service-to-client.html @@ -0,0 +1,15 @@ + + +NodeMonitorModel.serviceToClient - + + + +com.r3corda.client.model / NodeMonitorModel / serviceToClient
+
+

serviceToClient

+ +val serviceToClient: <ERROR CLASS><ServiceToClientEvent>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/snapshot.html b/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/snapshot.html new file mode 100644 index 0000000000..871df09e71 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-node-monitor-model/snapshot.html @@ -0,0 +1,15 @@ + + +NodeMonitorModel.snapshot - + + + +com.r3corda.client.model / NodeMonitorModel / snapshot
+
+

snapshot

+ +val snapshot: <ERROR CLASS><StateSnapshotMessage>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-protocol-status/-init-.html b/docs/build/html/api/com.r3corda.client.model/-protocol-status/-init-.html new file mode 100644 index 0000000000..98af575988 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-protocol-status/-init-.html @@ -0,0 +1,14 @@ + + +ProtocolStatus.<init> - + + + +com.r3corda.client.model / ProtocolStatus / <init>
+
+

<init>

+ProtocolStatus(status: String)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-protocol-status/index.html b/docs/build/html/api/com.r3corda.client.model/-protocol-status/index.html new file mode 100644 index 0000000000..68db1b23d3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-protocol-status/index.html @@ -0,0 +1,36 @@ + + +ProtocolStatus - + + + +com.r3corda.client.model / ProtocolStatus
+
+

ProtocolStatus

+data class ProtocolStatus
+
+
+

Constructors

+ + + + + + + +
+<init> +ProtocolStatus(status: String)
+

Properties

+ + + + + + + +
+status +val status: String
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-protocol-status/status.html b/docs/build/html/api/com.r3corda.client.model/-protocol-status/status.html new file mode 100644 index 0000000000..16c97f5153 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-protocol-status/status.html @@ -0,0 +1,15 @@ + + +ProtocolStatus.status - + + + +com.r3corda.client.model / ProtocolStatus / status
+
+

status

+ +val status: String
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-state-machine-status/-added/-init-.html b/docs/build/html/api/com.r3corda.client.model/-state-machine-status/-added/-init-.html new file mode 100644 index 0000000000..d168fd4688 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-state-machine-status/-added/-init-.html @@ -0,0 +1,14 @@ + + +StateMachineStatus.Added.<init> - + + + +com.r3corda.client.model / StateMachineStatus / Added / <init>
+
+

<init>

+Added(stateMachineName: String)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-state-machine-status/-added/index.html b/docs/build/html/api/com.r3corda.client.model/-state-machine-status/-added/index.html new file mode 100644 index 0000000000..286876b298 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-state-machine-status/-added/index.html @@ -0,0 +1,47 @@ + + +StateMachineStatus.Added - + + + +com.r3corda.client.model / StateMachineStatus / Added
+
+

Added

+class Added : StateMachineStatus
+
+
+

Constructors

+ + + + + + + +
+<init> +Added(stateMachineName: String)
+

Inherited Properties

+ + + + + + + +
+stateMachineName +val stateMachineName: String
+

Inherited Functions

+ + + + + + + +
+toString +open fun toString(): String
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-state-machine-status/-removed/-init-.html b/docs/build/html/api/com.r3corda.client.model/-state-machine-status/-removed/-init-.html new file mode 100644 index 0000000000..72931c5f0f --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-state-machine-status/-removed/-init-.html @@ -0,0 +1,14 @@ + + +StateMachineStatus.Removed.<init> - + + + +com.r3corda.client.model / StateMachineStatus / Removed / <init>
+
+

<init>

+Removed(stateMachineName: String)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-state-machine-status/-removed/index.html b/docs/build/html/api/com.r3corda.client.model/-state-machine-status/-removed/index.html new file mode 100644 index 0000000000..359e87a2c5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-state-machine-status/-removed/index.html @@ -0,0 +1,47 @@ + + +StateMachineStatus.Removed - + + + +com.r3corda.client.model / StateMachineStatus / Removed
+
+

Removed

+class Removed : StateMachineStatus
+
+
+

Constructors

+ + + + + + + +
+<init> +Removed(stateMachineName: String)
+

Inherited Properties

+ + + + + + + +
+stateMachineName +val stateMachineName: String
+

Inherited Functions

+ + + + + + + +
+toString +open fun toString(): String
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-state-machine-status/index.html b/docs/build/html/api/com.r3corda.client.model/-state-machine-status/index.html new file mode 100644 index 0000000000..df0f03f98e --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-state-machine-status/index.html @@ -0,0 +1,70 @@ + + +StateMachineStatus - + + + +com.r3corda.client.model / StateMachineStatus
+
+

StateMachineStatus

+sealed class StateMachineStatus
+
+
+

Types

+ + + + + + + + + + + +
+Added +class Added : StateMachineStatus
+Removed +class Removed : StateMachineStatus
+

Properties

+ + + + + + + +
+stateMachineName +val stateMachineName: String
+

Functions

+ + + + + + + +
+toString +open fun toString(): String
+

Inheritors

+ + + + + + + + + + + +
+Added +class Added : StateMachineStatus
+Removed +class Removed : StateMachineStatus
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-state-machine-status/state-machine-name.html b/docs/build/html/api/com.r3corda.client.model/-state-machine-status/state-machine-name.html new file mode 100644 index 0000000000..666d83a5d1 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-state-machine-status/state-machine-name.html @@ -0,0 +1,15 @@ + + +StateMachineStatus.stateMachineName - + + + +com.r3corda.client.model / StateMachineStatus / stateMachineName
+
+

stateMachineName

+ +val stateMachineName: String
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-state-machine-status/to-string.html b/docs/build/html/api/com.r3corda.client.model/-state-machine-status/to-string.html new file mode 100644 index 0000000000..d6930d3f81 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-state-machine-status/to-string.html @@ -0,0 +1,15 @@ + + +StateMachineStatus.toString - + + + +com.r3corda.client.model / StateMachineStatus / toString
+
+

toString

+ +open fun toString(): String
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-states-modification/-diff/-init-.html b/docs/build/html/api/com.r3corda.client.model/-states-modification/-diff/-init-.html new file mode 100644 index 0000000000..eba35cb8a8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-states-modification/-diff/-init-.html @@ -0,0 +1,14 @@ + + +StatesModification.Diff.<init> - + + + +com.r3corda.client.model / StatesModification / Diff / <init>
+
+

<init>

+Diff(added: Collection<StateAndRef<T>>, removed: Collection<StateRef>)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-states-modification/-diff/added.html b/docs/build/html/api/com.r3corda.client.model/-states-modification/-diff/added.html new file mode 100644 index 0000000000..dc3e40a4f7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-states-modification/-diff/added.html @@ -0,0 +1,15 @@ + + +StatesModification.Diff.added - + + + +com.r3corda.client.model / StatesModification / Diff / added
+
+

added

+ +val added: Collection<StateAndRef<T>>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-states-modification/-diff/index.html b/docs/build/html/api/com.r3corda.client.model/-states-modification/-diff/index.html new file mode 100644 index 0000000000..5909fccfca --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-states-modification/-diff/index.html @@ -0,0 +1,42 @@ + + +StatesModification.Diff - + + + +com.r3corda.client.model / StatesModification / Diff
+
+

Diff

+class Diff<out T : ContractState> : StatesModification<T>
+
+
+

Constructors

+ + + + + + + +
+<init> +Diff(added: Collection<StateAndRef<T>>, removed: Collection<StateRef>)
+

Properties

+ + + + + + + + + + + +
+added +val added: Collection<StateAndRef<T>>
+removed +val removed: Collection<StateRef>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-states-modification/-diff/removed.html b/docs/build/html/api/com.r3corda.client.model/-states-modification/-diff/removed.html new file mode 100644 index 0000000000..2b7279c334 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-states-modification/-diff/removed.html @@ -0,0 +1,15 @@ + + +StatesModification.Diff.removed - + + + +com.r3corda.client.model / StatesModification / Diff / removed
+
+

removed

+ +val removed: Collection<StateRef>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-states-modification/-reset/-init-.html b/docs/build/html/api/com.r3corda.client.model/-states-modification/-reset/-init-.html new file mode 100644 index 0000000000..858ed508d7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-states-modification/-reset/-init-.html @@ -0,0 +1,14 @@ + + +StatesModification.Reset.<init> - + + + +com.r3corda.client.model / StatesModification / Reset / <init>
+
+

<init>

+Reset(states: Collection<StateAndRef<T>>)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-states-modification/-reset/index.html b/docs/build/html/api/com.r3corda.client.model/-states-modification/-reset/index.html new file mode 100644 index 0000000000..317a2bafde --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-states-modification/-reset/index.html @@ -0,0 +1,36 @@ + + +StatesModification.Reset - + + + +com.r3corda.client.model / StatesModification / Reset
+
+

Reset

+class Reset<out T : ContractState> : StatesModification<T>
+
+
+

Constructors

+ + + + + + + +
+<init> +Reset(states: Collection<StateAndRef<T>>)
+

Properties

+ + + + + + + +
+states +val states: Collection<StateAndRef<T>>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-states-modification/-reset/states.html b/docs/build/html/api/com.r3corda.client.model/-states-modification/-reset/states.html new file mode 100644 index 0000000000..616e8f7c77 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-states-modification/-reset/states.html @@ -0,0 +1,15 @@ + + +StatesModification.Reset.states - + + + +com.r3corda.client.model / StatesModification / Reset / states
+
+

states

+ +val states: Collection<StateAndRef<T>>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-states-modification/index.html b/docs/build/html/api/com.r3corda.client.model/-states-modification/index.html new file mode 100644 index 0000000000..ce77ecaea2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-states-modification/index.html @@ -0,0 +1,48 @@ + + +StatesModification - + + + +com.r3corda.client.model / StatesModification
+
+

StatesModification

+sealed class StatesModification<out T : ContractState>
+
+
+

Types

+ + + + + + + + + + + +
+Diff +class Diff<out T : ContractState> : StatesModification<T>
+Reset +class Reset<out T : ContractState> : StatesModification<T>
+

Inheritors

+ + + + + + + + + + + +
+Diff +class Diff<out T : ContractState> : StatesModification<T>
+Reset +class Reset<out T : ContractState> : StatesModification<T>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-sink-delegate/-init-.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-sink-delegate/-init-.html new file mode 100644 index 0000000000..964e7eab23 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-sink-delegate/-init-.html @@ -0,0 +1,14 @@ + + +TrackedDelegate.EventSinkDelegate.<init> - + + + +com.r3corda.client.model / TrackedDelegate / EventSinkDelegate / <init>
+
+

<init>

+EventSinkDelegate(klass: KClass<M>, eventSinkProperty: (M) -> <ERROR CLASS><T>)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-sink-delegate/event-sink-property.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-sink-delegate/event-sink-property.html new file mode 100644 index 0000000000..29792778ba --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-sink-delegate/event-sink-property.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.EventSinkDelegate.eventSinkProperty - + + + +com.r3corda.client.model / TrackedDelegate / EventSinkDelegate / eventSinkProperty
+
+

eventSinkProperty

+ +val eventSinkProperty: (M) -> <ERROR CLASS><T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-sink-delegate/get-value.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-sink-delegate/get-value.html new file mode 100644 index 0000000000..b34069a39c --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-sink-delegate/get-value.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.EventSinkDelegate.getValue - + + + +com.r3corda.client.model / TrackedDelegate / EventSinkDelegate / getValue
+
+

getValue

+ +operator fun getValue(thisRef: Any, property: KProperty<*>): <ERROR CLASS><T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-sink-delegate/index.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-sink-delegate/index.html new file mode 100644 index 0000000000..840d085f06 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-sink-delegate/index.html @@ -0,0 +1,58 @@ + + +TrackedDelegate.EventSinkDelegate - + + + +com.r3corda.client.model / TrackedDelegate / EventSinkDelegate
+
+

EventSinkDelegate

+class EventSinkDelegate<M : Any, T> : TrackedDelegate<M>
+
+
+

Constructors

+ + + + + + + +
+<init> +EventSinkDelegate(klass: KClass<M>, eventSinkProperty: (M) -> <ERROR CLASS><T>)
+

Properties

+ + + + + + + +
+eventSinkProperty +val eventSinkProperty: (M) -> <ERROR CLASS><T>
+

Inherited Properties

+ + + + + + + +
+klass +val klass: KClass<M>
+

Functions

+ + + + + + + +
+getValue +operator fun getValue(thisRef: Any, property: KProperty<*>): <ERROR CLASS><T>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-stream-delegate/-init-.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-stream-delegate/-init-.html new file mode 100644 index 0000000000..e1ca395828 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-stream-delegate/-init-.html @@ -0,0 +1,14 @@ + + +TrackedDelegate.EventStreamDelegate.<init> - + + + +com.r3corda.client.model / TrackedDelegate / EventStreamDelegate / <init>
+
+

<init>

+EventStreamDelegate(klass: KClass<M>, eventStreamProperty: (M) -> <ERROR CLASS><T>)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-stream-delegate/event-stream-property.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-stream-delegate/event-stream-property.html new file mode 100644 index 0000000000..5a6df49135 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-stream-delegate/event-stream-property.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.EventStreamDelegate.eventStreamProperty - + + + +com.r3corda.client.model / TrackedDelegate / EventStreamDelegate / eventStreamProperty
+
+

eventStreamProperty

+ +val eventStreamProperty: (M) -> <ERROR CLASS><T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-stream-delegate/get-value.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-stream-delegate/get-value.html new file mode 100644 index 0000000000..7a4805ea99 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-stream-delegate/get-value.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.EventStreamDelegate.getValue - + + + +com.r3corda.client.model / TrackedDelegate / EventStreamDelegate / getValue
+
+

getValue

+ +operator fun getValue(thisRef: Any, property: KProperty<*>): <ERROR CLASS><T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-stream-delegate/index.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-stream-delegate/index.html new file mode 100644 index 0000000000..96ceed5de0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-event-stream-delegate/index.html @@ -0,0 +1,58 @@ + + +TrackedDelegate.EventStreamDelegate - + + + +com.r3corda.client.model / TrackedDelegate / EventStreamDelegate
+
+

EventStreamDelegate

+class EventStreamDelegate<M : Any, T> : TrackedDelegate<M>
+
+
+

Constructors

+ + + + + + + +
+<init> +EventStreamDelegate(klass: KClass<M>, eventStreamProperty: (M) -> <ERROR CLASS><T>)
+

Properties

+ + + + + + + +
+eventStreamProperty +val eventStreamProperty: (M) -> <ERROR CLASS><T>
+

Inherited Properties

+ + + + + + + +
+klass +val klass: KClass<M>
+

Functions

+ + + + + + + +
+getValue +operator fun getValue(thisRef: Any, property: KProperty<*>): <ERROR CLASS><T>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-object-property-delegate/-init-.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-object-property-delegate/-init-.html new file mode 100644 index 0000000000..0b6d1d7c04 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-object-property-delegate/-init-.html @@ -0,0 +1,14 @@ + + +TrackedDelegate.ObjectPropertyDelegate.<init> - + + + +com.r3corda.client.model / TrackedDelegate / ObjectPropertyDelegate / <init>
+
+

<init>

+ObjectPropertyDelegate(klass: KClass<M>, objectPropertyProperty: (M) -> ObjectProperty<T>)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-object-property-delegate/get-value.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-object-property-delegate/get-value.html new file mode 100644 index 0000000000..33c3693b96 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-object-property-delegate/get-value.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.ObjectPropertyDelegate.getValue - + + + +com.r3corda.client.model / TrackedDelegate / ObjectPropertyDelegate / getValue
+
+

getValue

+ +operator fun getValue(thisRef: Any, property: KProperty<*>): ObjectProperty<T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-object-property-delegate/index.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-object-property-delegate/index.html new file mode 100644 index 0000000000..65d3c809ff --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-object-property-delegate/index.html @@ -0,0 +1,58 @@ + + +TrackedDelegate.ObjectPropertyDelegate - + + + +com.r3corda.client.model / TrackedDelegate / ObjectPropertyDelegate
+
+

ObjectPropertyDelegate

+class ObjectPropertyDelegate<M : Any, T> : TrackedDelegate<M>
+
+
+

Constructors

+ + + + + + + +
+<init> +ObjectPropertyDelegate(klass: KClass<M>, objectPropertyProperty: (M) -> ObjectProperty<T>)
+

Properties

+ + + + + + + +
+objectPropertyProperty +val objectPropertyProperty: (M) -> ObjectProperty<T>
+

Inherited Properties

+ + + + + + + +
+klass +val klass: KClass<M>
+

Functions

+ + + + + + + +
+getValue +operator fun getValue(thisRef: Any, property: KProperty<*>): ObjectProperty<T>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-object-property-delegate/object-property-property.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-object-property-delegate/object-property-property.html new file mode 100644 index 0000000000..19a126ad01 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-object-property-delegate/object-property-property.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.ObjectPropertyDelegate.objectPropertyProperty - + + + +com.r3corda.client.model / TrackedDelegate / ObjectPropertyDelegate / objectPropertyProperty
+
+

objectPropertyProperty

+ +val objectPropertyProperty: (M) -> ObjectProperty<T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-delegate/-init-.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-delegate/-init-.html new file mode 100644 index 0000000000..15b4d6e7ab --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-delegate/-init-.html @@ -0,0 +1,14 @@ + + +TrackedDelegate.ObservableDelegate.<init> - + + + +com.r3corda.client.model / TrackedDelegate / ObservableDelegate / <init>
+
+

<init>

+ObservableDelegate(klass: KClass<M>, eventStreamProperty: (M) -> <ERROR CLASS><T>)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-delegate/event-stream-property.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-delegate/event-stream-property.html new file mode 100644 index 0000000000..0617179219 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-delegate/event-stream-property.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.ObservableDelegate.eventStreamProperty - + + + +com.r3corda.client.model / TrackedDelegate / ObservableDelegate / eventStreamProperty
+
+

eventStreamProperty

+ +val eventStreamProperty: (M) -> <ERROR CLASS><T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-delegate/get-value.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-delegate/get-value.html new file mode 100644 index 0000000000..29fdf5696f --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-delegate/get-value.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.ObservableDelegate.getValue - + + + +com.r3corda.client.model / TrackedDelegate / ObservableDelegate / getValue
+
+

getValue

+ +operator fun getValue(thisRef: Any, property: KProperty<*>): <ERROR CLASS><T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-delegate/index.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-delegate/index.html new file mode 100644 index 0000000000..a36cf8f738 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-delegate/index.html @@ -0,0 +1,58 @@ + + +TrackedDelegate.ObservableDelegate - + + + +com.r3corda.client.model / TrackedDelegate / ObservableDelegate
+
+

ObservableDelegate

+class ObservableDelegate<M : Any, T> : TrackedDelegate<M>
+
+
+

Constructors

+ + + + + + + +
+<init> +ObservableDelegate(klass: KClass<M>, eventStreamProperty: (M) -> <ERROR CLASS><T>)
+

Properties

+ + + + + + + +
+eventStreamProperty +val eventStreamProperty: (M) -> <ERROR CLASS><T>
+

Inherited Properties

+ + + + + + + +
+klass +val klass: KClass<M>
+

Functions

+ + + + + + + +
+getValue +operator fun getValue(thisRef: Any, property: KProperty<*>): <ERROR CLASS><T>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-delegate/-init-.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-delegate/-init-.html new file mode 100644 index 0000000000..059195cd05 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-delegate/-init-.html @@ -0,0 +1,14 @@ + + +TrackedDelegate.ObservableListDelegate.<init> - + + + +com.r3corda.client.model / TrackedDelegate / ObservableListDelegate / <init>
+
+

<init>

+ObservableListDelegate(klass: KClass<M>, observableListProperty: (M) -> ObservableList<T>)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-delegate/get-value.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-delegate/get-value.html new file mode 100644 index 0000000000..9dc4b9b25e --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-delegate/get-value.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.ObservableListDelegate.getValue - + + + +com.r3corda.client.model / TrackedDelegate / ObservableListDelegate / getValue
+
+

getValue

+ +operator fun getValue(thisRef: Any, property: KProperty<*>): ObservableList<T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-delegate/index.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-delegate/index.html new file mode 100644 index 0000000000..6623cb3841 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-delegate/index.html @@ -0,0 +1,58 @@ + + +TrackedDelegate.ObservableListDelegate - + + + +com.r3corda.client.model / TrackedDelegate / ObservableListDelegate
+
+

ObservableListDelegate

+class ObservableListDelegate<M : Any, T> : TrackedDelegate<M>
+
+
+

Constructors

+ + + + + + + +
+<init> +ObservableListDelegate(klass: KClass<M>, observableListProperty: (M) -> ObservableList<T>)
+

Properties

+ + + + + + + +
+observableListProperty +val observableListProperty: (M) -> ObservableList<T>
+

Inherited Properties

+ + + + + + + +
+klass +val klass: KClass<M>
+

Functions

+ + + + + + + +
+getValue +operator fun getValue(thisRef: Any, property: KProperty<*>): ObservableList<T>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-delegate/observable-list-property.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-delegate/observable-list-property.html new file mode 100644 index 0000000000..c5a1eff1d2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-delegate/observable-list-property.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.ObservableListDelegate.observableListProperty - + + + +com.r3corda.client.model / TrackedDelegate / ObservableListDelegate / observableListProperty
+
+

observableListProperty

+ +val observableListProperty: (M) -> ObservableList<T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-read-only-delegate/-init-.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-read-only-delegate/-init-.html new file mode 100644 index 0000000000..27dba2e670 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-read-only-delegate/-init-.html @@ -0,0 +1,14 @@ + + +TrackedDelegate.ObservableListReadOnlyDelegate.<init> - + + + +com.r3corda.client.model / TrackedDelegate / ObservableListReadOnlyDelegate / <init>
+
+

<init>

+ObservableListReadOnlyDelegate(klass: KClass<M>, observableListReadOnlyProperty: (M) -> ObservableList<out T>)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-read-only-delegate/get-value.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-read-only-delegate/get-value.html new file mode 100644 index 0000000000..b3ad47e6b5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-read-only-delegate/get-value.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.ObservableListReadOnlyDelegate.getValue - + + + +com.r3corda.client.model / TrackedDelegate / ObservableListReadOnlyDelegate / getValue
+
+

getValue

+ +operator fun getValue(thisRef: Any, property: KProperty<*>): ObservableList<out T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-read-only-delegate/index.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-read-only-delegate/index.html new file mode 100644 index 0000000000..b2fab24811 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-read-only-delegate/index.html @@ -0,0 +1,58 @@ + + +TrackedDelegate.ObservableListReadOnlyDelegate - + + + +com.r3corda.client.model / TrackedDelegate / ObservableListReadOnlyDelegate
+
+

ObservableListReadOnlyDelegate

+class ObservableListReadOnlyDelegate<M : Any, out T> : TrackedDelegate<M>
+
+
+

Constructors

+ + + + + + + +
+<init> +ObservableListReadOnlyDelegate(klass: KClass<M>, observableListReadOnlyProperty: (M) -> ObservableList<out T>)
+

Properties

+ + + + + + + +
+observableListReadOnlyProperty +val observableListReadOnlyProperty: (M) -> ObservableList<out T>
+

Inherited Properties

+ + + + + + + +
+klass +val klass: KClass<M>
+

Functions

+ + + + + + + +
+getValue +operator fun getValue(thisRef: Any, property: KProperty<*>): ObservableList<out T>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-read-only-delegate/observable-list-read-only-property.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-read-only-delegate/observable-list-read-only-property.html new file mode 100644 index 0000000000..e88a8c7450 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-list-read-only-delegate/observable-list-read-only-property.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.ObservableListReadOnlyDelegate.observableListReadOnlyProperty - + + + +com.r3corda.client.model / TrackedDelegate / ObservableListReadOnlyDelegate / observableListReadOnlyProperty
+
+

observableListReadOnlyProperty

+ +val observableListReadOnlyProperty: (M) -> ObservableList<out T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-value-delegate/-init-.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-value-delegate/-init-.html new file mode 100644 index 0000000000..9e2bfbebcf --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-value-delegate/-init-.html @@ -0,0 +1,14 @@ + + +TrackedDelegate.ObservableValueDelegate.<init> - + + + +com.r3corda.client.model / TrackedDelegate / ObservableValueDelegate / <init>
+
+

<init>

+ObservableValueDelegate(klass: KClass<M>, observableValueProperty: (M) -> ObservableValue<T>)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-value-delegate/get-value.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-value-delegate/get-value.html new file mode 100644 index 0000000000..83777151e0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-value-delegate/get-value.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.ObservableValueDelegate.getValue - + + + +com.r3corda.client.model / TrackedDelegate / ObservableValueDelegate / getValue
+
+

getValue

+ +operator fun getValue(thisRef: Any, property: KProperty<*>): ObservableValue<T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-value-delegate/index.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-value-delegate/index.html new file mode 100644 index 0000000000..69f869d620 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-value-delegate/index.html @@ -0,0 +1,58 @@ + + +TrackedDelegate.ObservableValueDelegate - + + + +com.r3corda.client.model / TrackedDelegate / ObservableValueDelegate
+
+

ObservableValueDelegate

+class ObservableValueDelegate<M : Any, T> : TrackedDelegate<M>
+
+
+

Constructors

+ + + + + + + +
+<init> +ObservableValueDelegate(klass: KClass<M>, observableValueProperty: (M) -> ObservableValue<T>)
+

Properties

+ + + + + + + +
+observableValueProperty +val observableValueProperty: (M) -> ObservableValue<T>
+

Inherited Properties

+ + + + + + + +
+klass +val klass: KClass<M>
+

Functions

+ + + + + + + +
+getValue +operator fun getValue(thisRef: Any, property: KProperty<*>): ObservableValue<T>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-value-delegate/observable-value-property.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-value-delegate/observable-value-property.html new file mode 100644 index 0000000000..2e6b96744e --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observable-value-delegate/observable-value-property.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.ObservableValueDelegate.observableValueProperty - + + + +com.r3corda.client.model / TrackedDelegate / ObservableValueDelegate / observableValueProperty
+
+

observableValueProperty

+ +val observableValueProperty: (M) -> ObservableValue<T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observer-delegate/-init-.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observer-delegate/-init-.html new file mode 100644 index 0000000000..d0fc7e7884 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observer-delegate/-init-.html @@ -0,0 +1,14 @@ + + +TrackedDelegate.ObserverDelegate.<init> - + + + +com.r3corda.client.model / TrackedDelegate / ObserverDelegate / <init>
+
+

<init>

+ObserverDelegate(klass: KClass<M>, eventStreamProperty: (M) -> <ERROR CLASS><T>)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observer-delegate/event-stream-property.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observer-delegate/event-stream-property.html new file mode 100644 index 0000000000..b928ceea20 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observer-delegate/event-stream-property.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.ObserverDelegate.eventStreamProperty - + + + +com.r3corda.client.model / TrackedDelegate / ObserverDelegate / eventStreamProperty
+
+

eventStreamProperty

+ +val eventStreamProperty: (M) -> <ERROR CLASS><T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observer-delegate/get-value.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observer-delegate/get-value.html new file mode 100644 index 0000000000..f0191c7bbe --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observer-delegate/get-value.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.ObserverDelegate.getValue - + + + +com.r3corda.client.model / TrackedDelegate / ObserverDelegate / getValue
+
+

getValue

+ +operator fun getValue(thisRef: Any, property: KProperty<*>): <ERROR CLASS><T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observer-delegate/index.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observer-delegate/index.html new file mode 100644 index 0000000000..98d7034c85 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-observer-delegate/index.html @@ -0,0 +1,58 @@ + + +TrackedDelegate.ObserverDelegate - + + + +com.r3corda.client.model / TrackedDelegate / ObserverDelegate
+
+

ObserverDelegate

+class ObserverDelegate<M : Any, T> : TrackedDelegate<M>
+
+
+

Constructors

+ + + + + + + +
+<init> +ObserverDelegate(klass: KClass<M>, eventStreamProperty: (M) -> <ERROR CLASS><T>)
+

Properties

+ + + + + + + +
+eventStreamProperty +val eventStreamProperty: (M) -> <ERROR CLASS><T>
+

Inherited Properties

+ + + + + + + +
+klass +val klass: KClass<M>
+

Functions

+ + + + + + + +
+getValue +operator fun getValue(thisRef: Any, property: KProperty<*>): <ERROR CLASS><T>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-writable-value-delegate/-init-.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-writable-value-delegate/-init-.html new file mode 100644 index 0000000000..50bb2f869e --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-writable-value-delegate/-init-.html @@ -0,0 +1,14 @@ + + +TrackedDelegate.WritableValueDelegate.<init> - + + + +com.r3corda.client.model / TrackedDelegate / WritableValueDelegate / <init>
+
+

<init>

+WritableValueDelegate(klass: KClass<M>, writableValueProperty: (M) -> WritableValue<T>)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-writable-value-delegate/get-value.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-writable-value-delegate/get-value.html new file mode 100644 index 0000000000..3a289f2b96 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-writable-value-delegate/get-value.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.WritableValueDelegate.getValue - + + + +com.r3corda.client.model / TrackedDelegate / WritableValueDelegate / getValue
+
+

getValue

+ +operator fun getValue(thisRef: Any, property: KProperty<*>): WritableValue<T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-writable-value-delegate/index.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-writable-value-delegate/index.html new file mode 100644 index 0000000000..dd6d7c4346 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-writable-value-delegate/index.html @@ -0,0 +1,58 @@ + + +TrackedDelegate.WritableValueDelegate - + + + +com.r3corda.client.model / TrackedDelegate / WritableValueDelegate
+
+

WritableValueDelegate

+class WritableValueDelegate<M : Any, T> : TrackedDelegate<M>
+
+
+

Constructors

+ + + + + + + +
+<init> +WritableValueDelegate(klass: KClass<M>, writableValueProperty: (M) -> WritableValue<T>)
+

Properties

+ + + + + + + +
+writableValueProperty +val writableValueProperty: (M) -> WritableValue<T>
+

Inherited Properties

+ + + + + + + +
+klass +val klass: KClass<M>
+

Functions

+ + + + + + + +
+getValue +operator fun getValue(thisRef: Any, property: KProperty<*>): WritableValue<T>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-writable-value-delegate/writable-value-property.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-writable-value-delegate/writable-value-property.html new file mode 100644 index 0000000000..7194cbe665 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/-writable-value-delegate/writable-value-property.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.WritableValueDelegate.writableValueProperty - + + + +com.r3corda.client.model / TrackedDelegate / WritableValueDelegate / writableValueProperty
+
+

writableValueProperty

+ +val writableValueProperty: (M) -> WritableValue<T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/index.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/index.html new file mode 100644 index 0000000000..f5fefe8d83 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/index.html @@ -0,0 +1,143 @@ + + +TrackedDelegate - + + + +com.r3corda.client.model / TrackedDelegate
+
+

TrackedDelegate

+sealed class TrackedDelegate<M : Any>
+
+
+

Types

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+EventSinkDelegate +class EventSinkDelegate<M : Any, T> : TrackedDelegate<M>
+EventStreamDelegate +class EventStreamDelegate<M : Any, T> : TrackedDelegate<M>
+ObjectPropertyDelegate +class ObjectPropertyDelegate<M : Any, T> : TrackedDelegate<M>
+ObservableDelegate +class ObservableDelegate<M : Any, T> : TrackedDelegate<M>
+ObservableListDelegate +class ObservableListDelegate<M : Any, T> : TrackedDelegate<M>
+ObservableListReadOnlyDelegate +class ObservableListReadOnlyDelegate<M : Any, out T> : TrackedDelegate<M>
+ObservableValueDelegate +class ObservableValueDelegate<M : Any, T> : TrackedDelegate<M>
+ObserverDelegate +class ObserverDelegate<M : Any, T> : TrackedDelegate<M>
+WritableValueDelegate +class WritableValueDelegate<M : Any, T> : TrackedDelegate<M>
+

Properties

+ + + + + + + +
+klass +val klass: KClass<M>
+

Inheritors

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+EventSinkDelegate +class EventSinkDelegate<M : Any, T> : TrackedDelegate<M>
+EventStreamDelegate +class EventStreamDelegate<M : Any, T> : TrackedDelegate<M>
+ObjectPropertyDelegate +class ObjectPropertyDelegate<M : Any, T> : TrackedDelegate<M>
+ObservableDelegate +class ObservableDelegate<M : Any, T> : TrackedDelegate<M>
+ObservableListDelegate +class ObservableListDelegate<M : Any, T> : TrackedDelegate<M>
+ObservableListReadOnlyDelegate +class ObservableListReadOnlyDelegate<M : Any, out T> : TrackedDelegate<M>
+ObservableValueDelegate +class ObservableValueDelegate<M : Any, T> : TrackedDelegate<M>
+ObserverDelegate +class ObserverDelegate<M : Any, T> : TrackedDelegate<M>
+WritableValueDelegate +class WritableValueDelegate<M : Any, T> : TrackedDelegate<M>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/klass.html b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/klass.html new file mode 100644 index 0000000000..fb90186c07 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-tracked-delegate/klass.html @@ -0,0 +1,15 @@ + + +TrackedDelegate.klass - + + + +com.r3corda.client.model / TrackedDelegate / klass
+
+

klass

+ +val klass: KClass<M>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/-failed/-init-.html b/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/-failed/-init-.html new file mode 100644 index 0000000000..fe7823ba24 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/-failed/-init-.html @@ -0,0 +1,14 @@ + + +TransactionCreateStatus.Failed.<init> - + + + +com.r3corda.client.model / TransactionCreateStatus / Failed / <init>
+
+

<init>

+Failed(message: String?)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/-failed/index.html b/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/-failed/index.html new file mode 100644 index 0000000000..01856f1b1a --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/-failed/index.html @@ -0,0 +1,47 @@ + + +TransactionCreateStatus.Failed - + + + +com.r3corda.client.model / TransactionCreateStatus / Failed
+
+

Failed

+class Failed : TransactionCreateStatus
+
+
+

Constructors

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

Inherited Properties

+ + + + + + + +
+message +val message: String?
+

Inherited Functions

+ + + + + + + +
+toString +open fun toString(): String
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/-started/-init-.html b/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/-started/-init-.html new file mode 100644 index 0000000000..8af434731a --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/-started/-init-.html @@ -0,0 +1,14 @@ + + +TransactionCreateStatus.Started.<init> - + + + +com.r3corda.client.model / TransactionCreateStatus / Started / <init>
+
+

<init>

+Started(message: String?)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/-started/index.html b/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/-started/index.html new file mode 100644 index 0000000000..239a3a55b2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/-started/index.html @@ -0,0 +1,47 @@ + + +TransactionCreateStatus.Started - + + + +com.r3corda.client.model / TransactionCreateStatus / Started
+
+

Started

+class Started : TransactionCreateStatus
+
+
+

Constructors

+ + + + + + + +
+<init> +Started(message: String?)
+

Inherited Properties

+ + + + + + + +
+message +val message: String?
+

Inherited Functions

+ + + + + + + +
+toString +open fun toString(): String
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/index.html b/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/index.html new file mode 100644 index 0000000000..4a2d053773 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/index.html @@ -0,0 +1,70 @@ + + +TransactionCreateStatus - + + + +com.r3corda.client.model / TransactionCreateStatus
+
+

TransactionCreateStatus

+sealed class TransactionCreateStatus
+
+
+

Types

+ + + + + + + + + + + +
+Failed +class Failed : TransactionCreateStatus
+Started +class Started : TransactionCreateStatus
+

Properties

+ + + + + + + +
+message +val message: String?
+

Functions

+ + + + + + + +
+toString +open fun toString(): String
+

Inheritors

+ + + + + + + + + + + +
+Failed +class Failed : TransactionCreateStatus
+Started +class Started : TransactionCreateStatus
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/message.html b/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/message.html new file mode 100644 index 0000000000..417b58a90d --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/message.html @@ -0,0 +1,15 @@ + + +TransactionCreateStatus.message - + + + +com.r3corda.client.model / TransactionCreateStatus / message
+
+

message

+ +val message: String?
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/to-string.html b/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/to-string.html new file mode 100644 index 0000000000..b45aea4461 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/-transaction-create-status/to-string.html @@ -0,0 +1,15 @@ + + +TransactionCreateStatus.toString - + + + +com.r3corda.client.model / TransactionCreateStatus / toString
+
+

toString

+ +open fun toString(): String
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/event-sink.html b/docs/build/html/api/com.r3corda.client.model/event-sink.html new file mode 100644 index 0000000000..32bd3e08a1 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/event-sink.html @@ -0,0 +1,15 @@ + + +eventSink - + + + +com.r3corda.client.model / eventSink
+
+

eventSink

+ +inline fun <reified M : Any, T> eventSink(noinline sinkProperty: (M) -> <ERROR CLASS><T>): <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/event-stream.html b/docs/build/html/api/com.r3corda.client.model/event-stream.html new file mode 100644 index 0000000000..da2acbb163 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/event-stream.html @@ -0,0 +1,15 @@ + + +eventStream - + + + +com.r3corda.client.model / eventStream
+
+

eventStream

+ +inline fun <reified M : Any, T> eventStream(noinline streamProperty: (M) -> <ERROR CLASS><T>): <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/exchange-amount.html b/docs/build/html/api/com.r3corda.client.model/exchange-amount.html new file mode 100644 index 0000000000..852680f726 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/exchange-amount.html @@ -0,0 +1,15 @@ + + +exchangeAmount - + + + +com.r3corda.client.model / exchangeAmount
+
+

exchangeAmount

+ +fun ExchangeRate.exchangeAmount(amount: Amount<Currency>, to: Currency): Amount<Currency>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/exchange-double.html b/docs/build/html/api/com.r3corda.client.model/exchange-double.html new file mode 100644 index 0000000000..e13e4ee919 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/exchange-double.html @@ -0,0 +1,15 @@ + + +exchangeDouble - + + + +com.r3corda.client.model / exchangeDouble
+
+

exchangeDouble

+ +fun ExchangeRate.exchangeDouble(amount: Amount<Currency>, to: Currency): Double
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/index.html b/docs/build/html/api/com.r3corda.client.model/index.html new file mode 100644 index 0000000000..dd1ad5f9f3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/index.html @@ -0,0 +1,172 @@ + + +com.r3corda.client.model - + + + +com.r3corda.client.model
+
+

Package com.r3corda.client.model

+

Types

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ContractStateModel +class ContractStateModel

This model exposes the list of owned contract states.

+
+ExchangeRate +interface ExchangeRate
+ExchangeRateModel +class ExchangeRateModel

This model provides an exchange rate from arbitrary currency to arbitrary currency. +TODO hook up an actual oracle

+
+GatheredTransactionData +interface GatheredTransactionData
+GatheredTransactionDataModel +class GatheredTransactionDataModel

This model provides an observable list of states relating to the creation of a transaction not yet on ledger.

+
+GatheredTransactionDataWritable +data class GatheredTransactionDataWritable : GatheredTransactionData
+Models +object Models
+NodeMonitorModel +class NodeMonitorModel

This model exposes raw event streams to and from the NodeMonitorService through a NodeMonitorClient

+
+ProtocolStatus +data class ProtocolStatus
+StateMachineStatus +sealed class StateMachineStatus
+StatesModification +sealed class StatesModification<out T : ContractState>
+TrackedDelegate +sealed class TrackedDelegate<M : Any>
+TransactionCreateStatus +sealed class TransactionCreateStatus
+

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+eventSink +fun <M : Any, T> eventSink(sinkProperty: (M) -> <ERROR CLASS><T>): <ERROR CLASS>
+eventStream +fun <M : Any, T> eventStream(streamProperty: (M) -> <ERROR CLASS><T>): <ERROR CLASS>
+exchangeAmount +fun ExchangeRate.exchangeAmount(amount: Amount<Currency>, to: Currency): Amount<Currency>
+exchangeDouble +fun ExchangeRate.exchangeDouble(amount: Amount<Currency>, to: Currency): Double
+objectProperty +fun <M : Any, T> objectProperty(objectProperty: (M) -> ObjectProperty<T>): ObjectPropertyDelegate<M, T>
+observable +fun <M : Any, T> observable(observableProperty: (M) -> <ERROR CLASS><T>): <ERROR CLASS>

This file defines a global Models store and delegates to inject event streams/sinks. Note that all streams here +are global.

+
+observableList +fun <M : Any, T> observableList(observableListProperty: (M) -> ObservableList<T>): ObservableListDelegate<M, T>
+observableListReadOnly +fun <M : Any, T> observableListReadOnly(observableListProperty: (M) -> ObservableList<out T>): ObservableListReadOnlyDelegate<M, T>
+observableValue +fun <M : Any, T> observableValue(observableValueProperty: (M) -> ObservableValue<T>): ObservableValueDelegate<M, T>
+observer +fun <M : Any, T> observer(observerProperty: (M) -> <ERROR CLASS><T>): <ERROR CLASS>
+writableValue +fun <M : Any, T> writableValue(writableValueProperty: (M) -> WritableValue<T>): WritableValueDelegate<M, T>
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/object-property.html b/docs/build/html/api/com.r3corda.client.model/object-property.html new file mode 100644 index 0000000000..7ddf39e74b --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/object-property.html @@ -0,0 +1,15 @@ + + +objectProperty - + + + +com.r3corda.client.model / objectProperty
+
+

objectProperty

+ +inline fun <reified M : Any, T> objectProperty(noinline objectProperty: (M) -> ObjectProperty<T>): ObjectPropertyDelegate<M, T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/observable-list-read-only.html b/docs/build/html/api/com.r3corda.client.model/observable-list-read-only.html new file mode 100644 index 0000000000..ffe171d239 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/observable-list-read-only.html @@ -0,0 +1,15 @@ + + +observableListReadOnly - + + + +com.r3corda.client.model / observableListReadOnly
+
+

observableListReadOnly

+ +inline fun <reified M : Any, T> observableListReadOnly(noinline observableListProperty: (M) -> ObservableList<out T>): ObservableListReadOnlyDelegate<M, T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/observable-list.html b/docs/build/html/api/com.r3corda.client.model/observable-list.html new file mode 100644 index 0000000000..c18809b726 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/observable-list.html @@ -0,0 +1,15 @@ + + +observableList - + + + +com.r3corda.client.model / observableList
+
+

observableList

+ +inline fun <reified M : Any, T> observableList(noinline observableListProperty: (M) -> ObservableList<T>): ObservableListDelegate<M, T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/observable-value.html b/docs/build/html/api/com.r3corda.client.model/observable-value.html new file mode 100644 index 0000000000..be46e51e1b --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/observable-value.html @@ -0,0 +1,15 @@ + + +observableValue - + + + +com.r3corda.client.model / observableValue
+
+

observableValue

+ +inline fun <reified M : Any, T> observableValue(noinline observableValueProperty: (M) -> ObservableValue<T>): ObservableValueDelegate<M, T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/observable.html b/docs/build/html/api/com.r3corda.client.model/observable.html new file mode 100644 index 0000000000..019095088b --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/observable.html @@ -0,0 +1,52 @@ + + +observable - + + + +com.r3corda.client.model / observable
+
+

observable

+ +inline fun <reified M : Any, T> observable(noinline observableProperty: (M) -> <ERROR CLASS><T>): <ERROR CLASS>
+

This file defines a global Models store and delegates to inject event streams/sinks. Note that all streams here +are global.

+

This allows decoupling of UI logic from stream initialisation and provides us with a central place to inspect data +flows. It also allows detecting of looping logic by constructing a stream dependency graph TODO do this.

+

Usage: +// Inject service -> client event stream +private val serviceToClient: EventStream by eventStream(WalletMonitorModel::serviceToClient)

+

Each Screen code should have a code layout like this:

+

class Screen { +val root = (..)

+

inject UI elements using fxid/inject

+

inject observable dependencies using observable/eventSinketc

+

define screen-specific observables

+

init { +wire up UI elements +} +}

+

For example if I wanted to display a list of all USD cash states: +class USDCashStatesScreen { +val root: Pane by fxml()

+

val usdCashStatesListView: ListView<Cash.State> by fxid("USDCashStatesListView")

+

val cashStates: ObservableList<Cash.State> by observableList(ContractStateModel::cashStates)

+

val usdCashStates = cashStates.filter { it.(..).currency == USD }

+

init { +Bindings.bindContent(usdCashStatesListView.items, usdCashStates) +usdCashStatesListView.setCellValueFactory(somethingsomething) +} +}

+

The UI code can just assume that the cash state list comes from somewhere outside. The initialisation of that +observable is decoupled, it may be mocked or be streamed from the network etc.

+

Later on we may even want to move all screen-specific observables to a separate Model as well (like usdCashStates) - this +would allow moving all of the aggregation logic to e.g. a different machine, all the UI will do is inject these and wire +them up with the UI elements.

+

Another advantage of this separation is that once we start adding a lot of screens we can still track data dependencies +in a central place as opposed to ad-hoc wiring up the observables.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/observer.html b/docs/build/html/api/com.r3corda.client.model/observer.html new file mode 100644 index 0000000000..f99eb522a4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/observer.html @@ -0,0 +1,15 @@ + + +observer - + + + +com.r3corda.client.model / observer
+
+

observer

+ +inline fun <reified M : Any, T> observer(noinline observerProperty: (M) -> <ERROR CLASS><T>): <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client.model/writable-value.html b/docs/build/html/api/com.r3corda.client.model/writable-value.html new file mode 100644 index 0000000000..4cbc1aaad9 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client.model/writable-value.html @@ -0,0 +1,15 @@ + + +writableValue - + + + +com.r3corda.client.model / writableValue
+
+

writableValue

+ +inline fun <reified M : Any, T> writableValue(noinline writableValueProperty: (M) -> WritableValue<T>): WritableValueDelegate<M, T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/-init-.html b/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/-init-.html new file mode 100644 index 0000000000..5124ce628d --- /dev/null +++ b/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/-init-.html @@ -0,0 +1,16 @@ + + +CordaRPCClient.<init> - + + + +com.r3corda.client / CordaRPCClient / <init>
+
+

<init>

+CordaRPCClient(host: <ERROR CLASS>, certificatesPath: Path)
+

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.

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/close.html b/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/close.html new file mode 100644 index 0000000000..c7752eeff8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/close.html @@ -0,0 +1,16 @@ + + +CordaRPCClient.close - + + + +com.r3corda.client / CordaRPCClient / close
+
+

close

+ +fun close(): Unit
+

Shuts down the client and lets the server know it can free the used resources (in a nice way)

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/host.html b/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/host.html new file mode 100644 index 0000000000..1e0fab8043 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/host.html @@ -0,0 +1,15 @@ + + +CordaRPCClient.host - + + + +com.r3corda.client / CordaRPCClient / host
+
+

host

+ +val host: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/index.html b/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/index.html new file mode 100644 index 0000000000..0fc5985170 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/index.html @@ -0,0 +1,122 @@ + + +CordaRPCClient - + + + +com.r3corda.client / CordaRPCClient
+
+

CordaRPCClient

+class CordaRPCClient : Closeable, ArtemisMessagingComponent
+

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.

+
+
+

Constructors

+ + + + + + + +
+<init> +CordaRPCClient(host: <ERROR CLASS>, certificatesPath: Path)

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.

+
+

Properties

+ + + + + + + + + + + +
+host +val host: <ERROR CLASS>
+myID +var myID: Int

An ID that we used to identify this connection on the server side: kind of like a local port number but +it persists for the lifetime of this process and survives short TCP connection interruptions. Is -1 +until start is called.

+
+

Inherited Properties

+ + + + + + + +
+config +val config: NodeSSLConfiguration
+

Functions

+ + + + + + + + + + + + + + + +
+close +fun close(): Unit

Shuts down the client and lets the server know it can free the used resources (in a nice way)

+
+proxy +fun proxy(timeout: Duration? = null, minVersion: Int = 0): CordaRPCOps

Returns a fresh proxy that lets you invoke RPCs on the server. Calls on it block, and if the server throws an +exception then it will be rethrown on the client. Proxies are thread safe but only one RPC can be in flight at +once. If youd like to perform multiple RPCs in parallel, use this function multiple times to get multiple +proxies.

+
+start +fun start(): Unit

Opens the connection to the server and registers a JVM shutdown hook to cleanly disconnect.

+
+

Inherited Functions

+ + + + + + + + + + + + + + + + + + + +
+checkStorePasswords +fun checkStorePasswords(): Unit

Returns nothing if the keystore was opened OK or throws if not. Useful to check the password, as +unfortunately Artemis tends to bury the exception when the password is wrong.

+
+configureWithDevSSLCertificate +fun configureWithDevSSLCertificate(): Unit

Strictly for dev only automatically construct a server certificate/private key signed from +the CA certs in Node resources. Then provision KeyStores into certificates folder under node path.

+
+parseKeyFromQueueName +fun parseKeyFromQueueName(name: String): PublicKey
+tcpTransport +fun tcpTransport(direction: ConnectionDirection, host: String, port: Int): <ERROR CLASS>
+ + diff --git a/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/my-i-d.html b/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/my-i-d.html new file mode 100644 index 0000000000..d8d7685433 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/my-i-d.html @@ -0,0 +1,18 @@ + + +CordaRPCClient.myID - + + + +com.r3corda.client / CordaRPCClient / myID
+
+

myID

+ +var myID: Int
+

An ID that we used to identify this connection on the server side: kind of like a local port number but +it persists for the lifetime of this process and survives short TCP connection interruptions. Is -1 +until start is called.

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/proxy.html b/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/proxy.html new file mode 100644 index 0000000000..0ac2191379 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/proxy.html @@ -0,0 +1,44 @@ + + +CordaRPCClient.proxy - + + + +com.r3corda.client / CordaRPCClient / proxy
+
+

proxy

+ +fun proxy(timeout: Duration? = null, minVersion: Int = 0): CordaRPCOps
+

Returns a fresh proxy that lets you invoke RPCs on the server. Calls on it block, and if the server throws an +exception then it will be rethrown on the client. Proxies are thread safe but only one RPC can be in flight at +once. If youd like to perform multiple RPCs in parallel, use this function multiple times to get multiple +proxies.

+

Creation of a proxy is a somewhat expensive operation that involves calls to the server, so if you want to do +calls from many threads at once you should cache one proxy per thread and reuse them. This function itself is +thread safe though so requires no extra synchronisation.

+

RPC sends and receives are logged on the com.r3corda.rpc logger.

+

By default there are no timeouts on calls. RPCs can survive temporary losses or changes in connectivity, +like switching between wifi networks. You can specify a timeout on the level of a proxy. If a call times +out it will throw RPCException.Deadline.

+

The CordaRPCOps defines what client RPCs are available. If an RPC returns an Observable anywhere in the +object graph returned then the server-side observable is transparently linked to a messaging queue, and that +queue linked to another observable on the client side here. You are expected to use it. The server will begin +buffering messages immediately that it will expect you to drain by subscribing to the returned observer. You can +opt-out of this by simply casting the Observable to Closeable or AutoCloseable and then calling the close +method on it. You dont have to explicitly close the observable if you actually subscribe to it: it will close +itself and free up the server-side resources either when the client or JVM itself is shutdown, or when there are +no more subscribers to it. Once all the subscribers to a returned observable are unsubscribed, the observable is +closed and you cant then re-subscribe again: youll have to re-request a fresh observable with another RPC.

+

The proxy and linked observables consume some small amount of resources on the server. Its OK to just exit your +process and let the server clean up, but in a long running process where you only need something for a short +amount of time it is polite to cast the objects to Closeable or AutoCloseable and close it when you are done. +Finalizers are in place to warn you if you lose a reference to an unclosed proxy or observable.

+
+
+

Exceptions

+ +RPCException - if the server version is too low or if the server isnt reachable within the given time.
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/start.html b/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/start.html similarity index 50% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/start.html rename to docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/start.html index ea68ca52c7..8b0230111b 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/start.html +++ b/docs/build/html/api/com.r3corda.client/-corda-r-p-c-client/start.html @@ -1,14 +1,15 @@ -ArtemisMessagingService.start - +CordaRPCClient.start - -com.r3corda.node.services.messaging / ArtemisMessagingService / start
+com.r3corda.client / CordaRPCClient / start

start

- + fun start(): Unit
+

Opens the connection to the server and registers a JVM shutdown hook to cleanly disconnect.



diff --git a/docs/build/html/api/com.r3corda.client/-node-monitor-client/-init-.html b/docs/build/html/api/com.r3corda.client/-node-monitor-client/-init-.html new file mode 100644 index 0000000000..ea7e480028 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client/-node-monitor-client/-init-.html @@ -0,0 +1,14 @@ + + +NodeMonitorClient.<init> - + + + +com.r3corda.client / NodeMonitorClient / <init>
+
+

<init>

+NodeMonitorClient(net: MessagingService, node: NodeInfo, outEvents: <ERROR CLASS><ClientToServiceCommand>, inEvents: <ERROR CLASS><ServiceToClientEvent>, snapshot: <ERROR CLASS><StateSnapshotMessage>)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client/-node-monitor-client/in-events.html b/docs/build/html/api/com.r3corda.client/-node-monitor-client/in-events.html new file mode 100644 index 0000000000..d8d790153e --- /dev/null +++ b/docs/build/html/api/com.r3corda.client/-node-monitor-client/in-events.html @@ -0,0 +1,15 @@ + + +NodeMonitorClient.inEvents - + + + +com.r3corda.client / NodeMonitorClient / inEvents
+
+

inEvents

+ +val inEvents: <ERROR CLASS><ServiceToClientEvent>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client/-node-monitor-client/index.html b/docs/build/html/api/com.r3corda.client/-node-monitor-client/index.html new file mode 100644 index 0000000000..6119ec0b37 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client/-node-monitor-client/index.html @@ -0,0 +1,71 @@ + + +NodeMonitorClient - + + + +com.r3corda.client / NodeMonitorClient
+
+

NodeMonitorClient

+class NodeMonitorClient
+
+
+

Constructors

+ + + + + + + +
+<init> +NodeMonitorClient(net: MessagingService, node: NodeInfo, outEvents: <ERROR CLASS><ClientToServiceCommand>, inEvents: <ERROR CLASS><ServiceToClientEvent>, snapshot: <ERROR CLASS><StateSnapshotMessage>)
+

Properties

+ + + + + + + + + + + + + + + + + + + + + + + +
+inEvents +val inEvents: <ERROR CLASS><ServiceToClientEvent>
+net +val net: MessagingService
+node +val node: NodeInfo
+outEvents +val outEvents: <ERROR CLASS><ClientToServiceCommand>
+snapshot +val snapshot: <ERROR CLASS><StateSnapshotMessage>
+

Functions

+ + + + + + + +
+register +fun register(): <ERROR CLASS><Boolean>
+ + diff --git a/docs/build/html/api/com.r3corda.client/-node-monitor-client/net.html b/docs/build/html/api/com.r3corda.client/-node-monitor-client/net.html new file mode 100644 index 0000000000..ad9601eaf5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client/-node-monitor-client/net.html @@ -0,0 +1,15 @@ + + +NodeMonitorClient.net - + + + +com.r3corda.client / NodeMonitorClient / net
+
+

net

+ +val net: MessagingService
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client/-node-monitor-client/node.html b/docs/build/html/api/com.r3corda.client/-node-monitor-client/node.html new file mode 100644 index 0000000000..1a11532642 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client/-node-monitor-client/node.html @@ -0,0 +1,15 @@ + + +NodeMonitorClient.node - + + + +com.r3corda.client / NodeMonitorClient / node
+
+

node

+ +val node: NodeInfo
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client/-node-monitor-client/out-events.html b/docs/build/html/api/com.r3corda.client/-node-monitor-client/out-events.html new file mode 100644 index 0000000000..c584e11fe8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client/-node-monitor-client/out-events.html @@ -0,0 +1,15 @@ + + +NodeMonitorClient.outEvents - + + + +com.r3corda.client / NodeMonitorClient / outEvents
+
+

outEvents

+ +val outEvents: <ERROR CLASS><ClientToServiceCommand>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client/-node-monitor-client/register.html b/docs/build/html/api/com.r3corda.client/-node-monitor-client/register.html new file mode 100644 index 0000000000..79a38c644c --- /dev/null +++ b/docs/build/html/api/com.r3corda.client/-node-monitor-client/register.html @@ -0,0 +1,15 @@ + + +NodeMonitorClient.register - + + + +com.r3corda.client / NodeMonitorClient / register
+
+

register

+ +fun register(): <ERROR CLASS><Boolean>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client/-node-monitor-client/snapshot.html b/docs/build/html/api/com.r3corda.client/-node-monitor-client/snapshot.html new file mode 100644 index 0000000000..b430fe72e6 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client/-node-monitor-client/snapshot.html @@ -0,0 +1,15 @@ + + +NodeMonitorClient.snapshot - + + + +com.r3corda.client / NodeMonitorClient / snapshot
+
+

snapshot

+ +val snapshot: <ERROR CLASS><StateSnapshotMessage>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.client/index.html b/docs/build/html/api/com.r3corda.client/index.html new file mode 100644 index 0000000000..e7839c24f7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.client/index.html @@ -0,0 +1,30 @@ + + +com.r3corda.client - + + + +com.r3corda.client
+
+

Package com.r3corda.client

+

Types

+ + + + + + + + + + + +
+CordaRPCClient +class CordaRPCClient : Closeable, ArtemisMessagingComponent

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.

+
+NodeMonitorClient +class NodeMonitorClient
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-group/clauses.html b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-group/clauses.html deleted file mode 100644 index 6b66c6bda9..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-group/clauses.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Cash.Clauses.Group.clauses - - - - -com.r3corda.contracts.asset / Cash / Clauses / Group / clauses
-
-

clauses

- -val clauses: <ERROR CLASS>
-Overrides GroupClauseVerifier.clauses
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-group/extract-groups.html b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-group/extract-groups.html deleted file mode 100644 index 31eabd960a..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-group/extract-groups.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Cash.Clauses.Group.extractGroups - - - - -com.r3corda.contracts.asset / Cash / Clauses / Group / extractGroups
-
-

extractGroups

- -fun extractGroups(tx: TransactionForContract): List<InOutGroup<State, Issued<Currency>>>
-Overrides GroupClauseVerifier.extractGroups
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-group/if-matched.html b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-group/if-matched.html deleted file mode 100644 index ebcc5a729f..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-group/if-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -Cash.Clauses.Group.ifMatched - - - - -com.r3corda.contracts.asset / Cash / Clauses / Group / ifMatched
-
-

ifMatched

- -val ifMatched: MatchBehaviour
-Overrides SingleClause.ifMatched
-

Behaviour if this clause is not matches

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-group/if-not-matched.html b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-group/if-not-matched.html deleted file mode 100644 index c6b05967e2..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-group/if-not-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -Cash.Clauses.Group.ifNotMatched - - - - -com.r3corda.contracts.asset / Cash / Clauses / Group / ifNotMatched
-
-

ifNotMatched

- -val ifNotMatched: MatchBehaviour
-Overrides SingleClause.ifNotMatched
-

Behaviour if this clause is matched

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-issue/required-commands.html b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-issue/required-commands.html index 330bb5d7e1..8aab5a0b10 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-issue/required-commands.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-clauses/-issue/required-commands.html @@ -9,7 +9,7 @@

requiredCommands

val requiredCommands: Set<Class<out CommandData>>
-Overrides ConcreteClause.requiredCommands
+Overrides Clause.requiredCommands

Determine whether this clause runs or not



diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/-init-.html b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/-init-.html index e51cfe241a..27f50b3bd8 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/-init-.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/-init-.html @@ -10,8 +10,8 @@ State(deposit: PartyAndReference, amount: Amount<Currency>, owner: PublicKey)


-State(amount: Amount<Issued<Currency>>, owner: PublicKey)
-

A state representing a cash claim against some party

+State(amount: Amount<Issued<Currency>>, owner: PublicKey, encumbrance: Int? = null)
+

A state representing a cash claim against some party.



diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/encumbrance.html b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/encumbrance.html new file mode 100644 index 0000000000..6938e0bef2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/encumbrance.html @@ -0,0 +1,30 @@ + + +Cash.State.encumbrance - + + + +com.r3corda.contracts.asset / Cash / State / encumbrance
+
+

encumbrance

+ +val encumbrance: Int?
+Overrides ContractState.encumbrance
+

All contract states may be encumbered by up to one other state.

+

The encumbrance state, if present, forces additional controls over the encumbered state, since the platform checks +that the encumbrance state is present as an input in the same transaction that consumes the encumbered state, and +the contract code and rules of the encumbrance state will also be verified during the execution of the transaction. +For example, a cash contract state could be encumbered with a time-lock contract state; the cash state is then only +processable in a transaction that verifies that the time specified in the encumbrance time-lock has passed.

+

The encumbered state refers to another by index, and the referred encumbrance state +is an output state in a particular position on the same transaction that created the encumbered state. An alternative +implementation would be encumber by reference to a StateRef., which would allow the specification of encumbrance +by a state created in a prior transaction.

+

Note that an encumbered state that is being consumed must have its encumbrance consumed in the same transaction, +otherwise the transaction is not valid.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/index.html index 8ac2830424..1f94703120 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/index.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/index.html @@ -8,7 +8,7 @@

State

data class State : FungibleAsset<Currency>
-

A state representing a cash claim against some party

+

A state representing a cash claim against some party.



Constructors

@@ -18,7 +18,7 @@ <init> -State(deposit: PartyAndReference, amount: Amount<Currency>, owner: PublicKey)State(amount: Amount<Issued<Currency>>, owner: PublicKey)

A state representing a cash claim against some party

+State(deposit: PartyAndReference, amount: Amount<Currency>, owner: PublicKey)State(amount: Amount<Issued<Currency>>, owner: PublicKey, encumbrance: Int? = null)

A state representing a cash claim against some party.

@@ -49,6 +49,13 @@ is only intended for use by the issuer, and is not intended to be meaningful to +encumbrance + +val encumbrance: Int?

All contract states may be encumbered by up to one other state.

+ + + + exitKeys val exitKeys: <ERROR CLASS>

There must be an ExitCommand signed by these keys to destroy the amount. While all states require their @@ -65,7 +72,7 @@ owner to sign, some (i.e. cash) also require the issuer.

owner -val owner: PublicKey

There must be a MoveCommand signed by this key to claim the amount

+val owner: PublicKey

There must be a MoveCommand signed by this key to claim the amount.

diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/owner.html b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/owner.html index 0c15539674..a7c3fa875c 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/owner.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/owner.html @@ -10,7 +10,7 @@ val owner: PublicKey
Overrides FungibleAsset.owner
-

There must be a MoveCommand signed by this key to claim the amount

+

There must be a MoveCommand signed by this key to claim the amount.



diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/participants.html b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/participants.html index cffdc93834..2159331eaf 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/participants.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/participants.html @@ -12,7 +12,7 @@ Overrides ContractState.participants

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 participants has to be involved and approve the transaction +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction so that they receive the updated state, and dont 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 diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/product-amount.html b/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/product-amount.html deleted file mode 100644 index d8c5d61ac8..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-cash/-state/product-amount.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Cash.State.productAmount - - - - -com.r3corda.contracts.asset / Cash / State / productAmount
-
-

productAmount

- -val productAmount: Amount<Currency>
-Overrides FungibleAssetState.productAmount
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-cash/clauses.html b/docs/build/html/api/com.r3corda.contracts.asset/-cash/clauses.html deleted file mode 100644 index 257e105528..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-cash/clauses.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Cash.clauses - - - - -com.r3corda.contracts.asset / Cash / clauses
-
-

clauses

- -val clauses: <ERROR CLASS>
-Overrides OnLedgerAsset.clauses
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-cash/generate-exit.html b/docs/build/html/api/com.r3corda.contracts.asset/-cash/generate-exit.html deleted file mode 100644 index 3a11d685e6..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-cash/generate-exit.html +++ /dev/null @@ -1,32 +0,0 @@ - - -Cash.generateExit - - - - -com.r3corda.contracts.asset / Cash / generateExit
-
-

generateExit

- -fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<Currency>>, changeKey: PublicKey, cashStates: List<StateAndRef<State>>): PublicKey
-

Generate an transaction exiting cash from the ledger.

-

Parameters

- -tx - transaction builder to add states and commands to.
-
- -amountIssued - the amount to be exited, represented as a quantity of issued currency.
-
- -changeKey - the key to send any change to. This needs to be explicitly stated as the input states are not -necessarily owned by us.
-
- -cashStates - the cash states to take funds from. No checks are done about ownership of these states, it is -the responsibility of the caller to check that they do not exit funds held by others.
-

Return
-the public key of the cash issuer, who must sign the transaction for it to be valid.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-cash/generate-issue.html b/docs/build/html/api/com.r3corda.contracts.asset/-cash/generate-issue.html index bacf9b9dfb..2a6ece3b4e 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-cash/generate-issue.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-cash/generate-issue.html @@ -7,13 +7,13 @@ com.r3corda.contracts.asset / Cash / generateIssue

generateIssue

- -fun generateIssue(tx: TransactionBuilder, tokenDef: Issued<Currency>, pennies: Long, owner: PublicKey, notary: Party): Unit
+ +fun generateIssue(tx: TransactionBuilder, tokenDef: Issued<Currency>, pennies: Long, owner: PublicKey, notary: Party): Unit

Puts together an issuance transaction from the given template, that starts out being owned by the given pubkey.



- -fun generateIssue(tx: TransactionBuilder, amount: Amount<Issued<Currency>>, owner: PublicKey, notary: Party): Unit
+ +fun generateIssue(tx: TransactionBuilder, amount: Amount<Issued<Currency>>, owner: PublicKey, notary: Party): Unit

Puts together an issuance transaction for the specified amount that starts out being owned by the given pubkey.



diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-cash/generate-spend.html b/docs/build/html/api/com.r3corda.contracts.asset/-cash/generate-spend.html deleted file mode 100644 index 08553e2510..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-cash/generate-spend.html +++ /dev/null @@ -1,28 +0,0 @@ - - -Cash.generateSpend - - - - -com.r3corda.contracts.asset / Cash / generateSpend
-
-

generateSpend

- -fun generateSpend(tx: TransactionBuilder, amount: Amount<Issued<Currency>>, to: PublicKey, cashStates: List<StateAndRef<State>>): List<PublicKey>
-

Generate a transaction that consumes one or more of the given input states to move money to the given pubkey. -Note that the wallet list is not updated: its up to you to do that.

-
-
- -fun generateSpend(tx: TransactionBuilder, amount: Amount<Currency>, to: PublicKey, cashStates: List<StateAndRef<State>>, onlyFromParties: Set<Party>? = null): List<PublicKey>
-

Generate a transaction that consumes one or more of the given input states to move money to the given pubkey. -Note that the wallet list is not updated: its up to you to do that.

-

Parameters

- -onlyFromParties - if non-null, the wallet will be filtered to only include cash states issued by the set -of given parties. This can be useful if the party youre trying to pay has expectations -about which type of cash claims they are willing to accept.
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-cash/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-cash/index.html index ec5fcd9c14..48af0e15b4 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-cash/index.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-cash/index.html @@ -40,7 +40,7 @@ vaults can ignore the issuer/depositRefs and just examine the amount fields.

State -data class State : FungibleAsset<Currency>

A state representing a cash claim against some party

+data class State : FungibleAsset<Currency>

A state representing a cash claim against some party.

@@ -106,8 +106,8 @@ when sending out "change" from spending/exiting.

generateIssue -fun generateIssue(tx: TransactionBuilder, tokenDef: Issued<Currency>, pennies: Long, owner: PublicKey, notary: Party): Unit

Puts together an issuance transaction from the given template, that starts out being owned by the given pubkey.

-fun generateIssue(tx: TransactionBuilder, amount: Amount<Issued<Currency>>, owner: PublicKey, notary: Party): Unit

Puts together an issuance transaction for the specified amount that starts out being owned by the given pubkey.

+fun generateIssue(tx: TransactionBuilder, tokenDef: Issued<Currency>, pennies: Long, owner: PublicKey, notary: Party): Unit

Puts together an issuance transaction from the given template, that starts out being owned by the given pubkey.

+fun generateIssue(tx: TransactionBuilder, amount: Amount<Issued<Currency>>, owner: PublicKey, notary: Party): Unit

Puts together an issuance transaction for the specified amount that starts out being owned by the given pubkey.

diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-group/clauses.html b/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-group/clauses.html deleted file mode 100644 index 0088c67b79..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-group/clauses.html +++ /dev/null @@ -1,16 +0,0 @@ - - -CommodityContract.Clauses.Group.clauses - - - - -com.r3corda.contracts.asset / CommodityContract / Clauses / Group / clauses
-
-

clauses

- -val clauses: <ERROR CLASS>
-Overrides GroupClauseVerifier.clauses
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-group/extract-groups.html b/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-group/extract-groups.html deleted file mode 100644 index 6ee337e754..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-group/extract-groups.html +++ /dev/null @@ -1,17 +0,0 @@ - - -CommodityContract.Clauses.Group.extractGroups - - - - -com.r3corda.contracts.asset / CommodityContract / Clauses / Group / extractGroups
-
-

extractGroups

- -fun extractGroups(tx: TransactionForContract): List<InOutGroup<State, Issued<Commodity>>>
-Overrides GroupClauseVerifier.extractGroups
-

Group commodity states by issuance definition (issuer and underlying commodity).

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-group/if-matched.html b/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-group/if-matched.html deleted file mode 100644 index c208bcb1fb..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-group/if-matched.html +++ /dev/null @@ -1,18 +0,0 @@ - - -CommodityContract.Clauses.Group.ifMatched - - - - -com.r3corda.contracts.asset / CommodityContract / Clauses / Group / ifMatched
-
-

ifMatched

- -val ifMatched: MatchBehaviour
-Overrides SingleClause.ifMatched
-

The group clause is the only top level clause, so end after processing it. If there are any commands left -after this clause has run, the clause verifier will trigger an error.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-group/if-not-matched.html b/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-group/if-not-matched.html deleted file mode 100644 index 380142fa5f..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-group/if-not-matched.html +++ /dev/null @@ -1,18 +0,0 @@ - - -CommodityContract.Clauses.Group.ifNotMatched - - - - -com.r3corda.contracts.asset / CommodityContract / Clauses / Group / ifNotMatched
-
-

ifNotMatched

- -val ifNotMatched: MatchBehaviour
-Overrides SingleClause.ifNotMatched
-

The group clause does not depend on any commands being present, so something has gone terribly wrong if -it doesnt match.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-issue/required-commands.html b/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-issue/required-commands.html index cef383ae16..d6b8f13ea6 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-issue/required-commands.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-clauses/-issue/required-commands.html @@ -9,7 +9,7 @@

requiredCommands

val requiredCommands: Set<Class<out CommandData>>
-Overrides ConcreteClause.requiredCommands
+Overrides Clause.requiredCommands

Determine whether this clause runs or not



diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-state/participants.html b/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-state/participants.html index e21083acff..41fb1ca134 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-state/participants.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/-state/participants.html @@ -12,7 +12,7 @@ Overrides ContractState.participants

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 participants has to be involved and approve the transaction +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction so that they receive the updated state, and dont 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 diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/clauses.html b/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/clauses.html deleted file mode 100644 index 1d47ce2d7f..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/clauses.html +++ /dev/null @@ -1,16 +0,0 @@ - - -CommodityContract.clauses - - - - -com.r3corda.contracts.asset / CommodityContract / clauses
-
-

clauses

- -val clauses: <ERROR CLASS>
-Overrides OnLedgerAsset.clauses
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/generate-issue.html b/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/generate-issue.html index 8a74449bfa..ccee6341c3 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/generate-issue.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/generate-issue.html @@ -7,13 +7,13 @@ com.r3corda.contracts.asset / CommodityContract / generateIssue

generateIssue

- -fun generateIssue(tx: TransactionBuilder, tokenDef: Issued<Commodity>, pennies: Long, owner: PublicKey, notary: Party): Unit
+ +fun generateIssue(tx: TransactionBuilder, tokenDef: Issued<Commodity>, pennies: Long, owner: PublicKey, notary: Party): Unit

Puts together an issuance transaction from the given template, that starts out being owned by the given pubkey.



- -fun generateIssue(tx: TransactionBuilder, amount: Amount<Issued<Commodity>>, owner: PublicKey, notary: Party): Unit
+ +fun generateIssue(tx: TransactionBuilder, amount: Amount<Issued<Commodity>>, owner: PublicKey, notary: Party): Unit

Puts together an issuance transaction for the specified amount that starts out being owned by the given pubkey.



diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/index.html index b1178646eb..670d041463 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/index.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-commodity-contract/index.html @@ -106,8 +106,8 @@ when sending out "change" from spending/exiting.

generateIssue -fun generateIssue(tx: TransactionBuilder, tokenDef: Issued<Commodity>, pennies: Long, owner: PublicKey, notary: Party): Unit

Puts together an issuance transaction from the given template, that starts out being owned by the given pubkey.

-fun generateIssue(tx: TransactionBuilder, amount: Amount<Issued<Commodity>>, owner: PublicKey, notary: Party): Unit

Puts together an issuance transaction for the specified amount that starts out being owned by the given pubkey.

+fun generateIssue(tx: TransactionBuilder, tokenDef: Issued<Commodity>, pennies: Long, owner: PublicKey, notary: Party): Unit

Puts together an issuance transaction from the given template, that starts out being owned by the given pubkey.

+fun generateIssue(tx: TransactionBuilder, amount: Amount<Issued<Commodity>>, owner: PublicKey, notary: Party): Unit

Puts together an issuance transaction for the specified amount that starts out being owned by the given pubkey.

diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-d-u-m-m-y_-o-b-l-i-g-a-t-i-o-n_-i-s-s-u-e-r.html b/docs/build/html/api/com.r3corda.contracts.asset/-d-u-m-m-y_-o-b-l-i-g-a-t-i-o-n_-i-s-s-u-e-r.html new file mode 100644 index 0000000000..238441af5b --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.asset/-d-u-m-m-y_-o-b-l-i-g-a-t-i-o-n_-i-s-s-u-e-r.html @@ -0,0 +1,19 @@ + + +DUMMY_OBLIGATION_ISSUER - + + + +com.r3corda.contracts.asset / DUMMY_OBLIGATION_ISSUER
+
+

DUMMY_OBLIGATION_ISSUER

+ +val DUMMY_OBLIGATION_ISSUER: <ERROR CLASS>
+

A dummy, randomly generated issuer party by the name of "Snake Oil Issuer"

+

Getter
+

A dummy, randomly generated issuer party by the name of "Snake Oil Issuer"

+

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-d-u-m-m-y_-o-b-l-i-g-a-t-i-o-n_-i-s-s-u-e-r_-k-e-y.html b/docs/build/html/api/com.r3corda.contracts.asset/-d-u-m-m-y_-o-b-l-i-g-a-t-i-o-n_-i-s-s-u-e-r_-k-e-y.html new file mode 100644 index 0000000000..4c7f898f05 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.asset/-d-u-m-m-y_-o-b-l-i-g-a-t-i-o-n_-i-s-s-u-e-r_-k-e-y.html @@ -0,0 +1,19 @@ + + +DUMMY_OBLIGATION_ISSUER_KEY - + + + +com.r3corda.contracts.asset / DUMMY_OBLIGATION_ISSUER_KEY
+
+

DUMMY_OBLIGATION_ISSUER_KEY

+ +val DUMMY_OBLIGATION_ISSUER_KEY: <ERROR CLASS>
+

A randomly generated key.

+

Getter
+

A randomly generated key.

+

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset-state/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset-state/index.html deleted file mode 100644 index 4a816d2296..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset-state/index.html +++ /dev/null @@ -1,100 +0,0 @@ - - -FungibleAssetState - - - - -com.r3corda.contracts.asset / FungibleAssetState
-
-

FungibleAssetState

-interface FungibleAssetState<T, I> : OwnableState
-

Common elements of cash contract states.

-
-
-

Properties

- - - - - - - - - - - -
-issuanceDef -abstract val issuanceDef: I
-productAmount -abstract val productAmount: Amount<T>
-

Inherited Properties

- - - - - - - -
-owner -abstract val owner: PublicKey

There must be a MoveCommand signed by this key to claim the amount

-
-

Functions

- - - - - - - -
-move -abstract fun move(newAmount: Amount<T>, newOwner: PublicKey): FungibleAssetState<T, I>
-

Inherited Functions

- - - - - - - -
-withNewOwner -abstract fun withNewOwner(newOwner: PublicKey): <ERROR CLASS><CommandData, OwnableState>

Copies the underlying data structure, replacing the owner field with this new value and leaving the rest alone

-
-

Extension Functions

- - - - - - - -
-hash -fun ContractState.hash(): SecureHash

Returns the SHA-256 hash of the serialised contents of this state (not cached)

-
-

Inheritors

- - - - - - - - - - - -
-State -interface State<T> : FungibleAssetState<T, Issued<T>>

A state representing a cash claim against some party

-
-State -data class State<P> : FungibleAssetState<P, IssuanceDefinition<P>>, BilateralNettableState<State<P>>

A state representing the obligation of one party (obligor) to deliver a specified number of -units of an underlying asset (described as issuanceDef.acceptableIssuedProducts) to the beneficiary -no later than the specified time.

-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset-state/issuance-def.html b/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset-state/issuance-def.html deleted file mode 100644 index 40ec6c2a50..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset-state/issuance-def.html +++ /dev/null @@ -1,15 +0,0 @@ - - -FungibleAssetState.issuanceDef - - - - -com.r3corda.contracts.asset / FungibleAssetState / issuanceDef
-
-

issuanceDef

- -abstract val issuanceDef: I
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset-state/move.html b/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset-state/move.html deleted file mode 100644 index bd9d2983b6..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset-state/move.html +++ /dev/null @@ -1,15 +0,0 @@ - - -FungibleAssetState.move - - - - -com.r3corda.contracts.asset / FungibleAssetState / move
-
-

move

- -abstract fun move(newAmount: Amount<T>, newOwner: PublicKey): FungibleAssetState<T, I>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset-state/product-amount.html b/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset-state/product-amount.html deleted file mode 100644 index c0a2c8926e..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset-state/product-amount.html +++ /dev/null @@ -1,15 +0,0 @@ - - -FungibleAssetState.productAmount - - - - -com.r3corda.contracts.asset / FungibleAssetState / productAmount
-
-

productAmount

- -abstract val productAmount: Amount<T>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-init-.html b/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-init-.html deleted file mode 100644 index ebf40e1878..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-init-.html +++ /dev/null @@ -1,27 +0,0 @@ - - -FungibleAsset.<init> - - - - -com.r3corda.contracts.asset / FungibleAsset / <init>
-
-

<init>

-FungibleAsset()
-

Superclass for contracts representing assets which are fungible, countable and issued by a specific party. States -contain assets which are equivalent (such as cash of the same currency), so records of their existence can -be merged or split as needed where the issuer is the same. For instance, dollars issued by the Fed are fungible and -countable (in cents), barrels of West Texas crude are fungible and countable (oil from two small containers -can be poured into one large container), shares of the same class in a specific company are fungible and -countable, and so on.

-

See Cash for an example subclass that implements currency.

-
-
-

Parameters

- -T - a type that represents the asset in question. This should describe the basic type of the asset -(GBP, USD, oil, shares in company , etc.) and any additional metadata (issuer, grade, class, etc.).
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/amount.html b/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/amount.html deleted file mode 100644 index dab9d811f9..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/amount.html +++ /dev/null @@ -1,15 +0,0 @@ - - -FungibleAsset.State.amount - - - - -com.r3corda.contracts.asset / FungibleAsset / State / amount
-
-

amount

- -abstract val amount: Amount<Issued<T>>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/deposit.html b/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/deposit.html deleted file mode 100644 index edc5d0b5c7..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/deposit.html +++ /dev/null @@ -1,16 +0,0 @@ - - -FungibleAsset.State.deposit - - - - -com.r3corda.contracts.asset / FungibleAsset / State / deposit
-
-

deposit

- -abstract val deposit: PartyAndReference
-

Where the underlying currency backing this ledger entry can be found (propagated)

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/exit-keys.html b/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/exit-keys.html deleted file mode 100644 index 6c806e4ea3..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/exit-keys.html +++ /dev/null @@ -1,16 +0,0 @@ - - -FungibleAsset.State.exitKeys - - - - -com.r3corda.contracts.asset / FungibleAsset / State / exitKeys
-
-

exitKeys

- -abstract val exitKeys: Collection<PublicKey>
-

There must be an ExitCommand signed by these keys to destroy the amount

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/index.html deleted file mode 100644 index 164fb5c2e4..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/index.html +++ /dev/null @@ -1,76 +0,0 @@ - - -FungibleAsset.State - - - - -com.r3corda.contracts.asset / FungibleAsset / State
-
-

State

-interface State<T> : FungibleAssetState<T, Issued<T>>
-

A state representing a cash claim against some party

-
-
-

Properties

- - - - - - - - - - - - - - - - - - - -
-amount -abstract val amount: Amount<Issued<T>>
-deposit -abstract val deposit: PartyAndReference

Where the underlying currency backing this ledger entry can be found (propagated)

-
-exitKeys -abstract val exitKeys: Collection<PublicKey>

There must be an ExitCommand signed by these keys to destroy the amount

-
-owner -abstract val owner: PublicKey

There must be a MoveCommand signed by this key to claim the amount

-
-

Inherited Properties

- - - - - - - - - - - -
-issuanceDef -abstract val issuanceDef: I
-productAmount -abstract val productAmount: Amount<T>
-

Inheritors

- - - - - - - -
-State -data class State : State<Currency>

A state representing a cash claim against some party

-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/owner.html b/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/owner.html deleted file mode 100644 index 65b4b0cd45..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/-state/owner.html +++ /dev/null @@ -1,17 +0,0 @@ - - -FungibleAsset.State.owner - - - - -com.r3corda.contracts.asset / FungibleAsset / State / owner
-
-

owner

- -abstract val owner: PublicKey
-Overrides OwnableState.owner
-

There must be a MoveCommand signed by this key to claim the amount

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/index.html index 26d54b8b9d..923cf2cc2c 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/index.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/index.html @@ -117,7 +117,7 @@ owner to sign, some (i.e. cash) also require the issuer.

State -data class State : FungibleAsset<Currency>

A state representing a cash claim against some party

+data class State : FungibleAsset<Currency>

A state representing a cash claim against some party.

diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/verify.html b/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/verify.html deleted file mode 100644 index fff6e7005b..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-fungible-asset/verify.html +++ /dev/null @@ -1,17 +0,0 @@ - - -FungibleAsset.verify - - - - -com.r3corda.contracts.asset / FungibleAsset / verify
-
-

verify

- -open fun verify(tx: TransactionForContract): Unit
-Overrides Contract.verify
-

This is the function EVERYONE runs

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-bilateral-net-state/-init-.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-bilateral-net-state/-init-.html deleted file mode 100644 index af18f3f409..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-bilateral-net-state/-init-.html +++ /dev/null @@ -1,17 +0,0 @@ - - -Obligation.BilateralNetState.<init> - - - - -com.r3corda.contracts.asset / Obligation / BilateralNetState / <init>
-
-

<init>

-BilateralNetState(partyKeys: Set<PublicKey>, template: StateTemplate<P>)
-

Subset of state, containing the elements which must match for two obligation transactions to be nettable. -If two obligation state objects produce equal bilateral net states, they are considered safe to net directly. -Bilateral states are used in close-out netting.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-bilateral-net-state/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-bilateral-net-state/index.html deleted file mode 100644 index 5fa4936ec5..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-bilateral-net-state/index.html +++ /dev/null @@ -1,48 +0,0 @@ - - -Obligation.BilateralNetState - - - - -com.r3corda.contracts.asset / Obligation / BilateralNetState
-
-

BilateralNetState

-data class BilateralNetState<P> : NetState<P>
-

Subset of state, containing the elements which must match for two obligation transactions to be nettable. -If two obligation state objects produce equal bilateral net states, they are considered safe to net directly. -Bilateral states are used in close-out netting.

-
-
-

Constructors

- - - - - - - -
-<init> -BilateralNetState(partyKeys: Set<PublicKey>, template: StateTemplate<P>)

Subset of state, containing the elements which must match for two obligation transactions to be nettable. -If two obligation state objects produce equal bilateral net states, they are considered safe to net directly. -Bilateral states are used in close-out netting.

-
-

Properties

- - - - - - - - - - - -
-partyKeys -val partyKeys: Set<PublicKey>
-template -val template: StateTemplate<P>
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-bilateral-net-state/party-keys.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-bilateral-net-state/party-keys.html deleted file mode 100644 index 2ddd5e694a..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-bilateral-net-state/party-keys.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Obligation.BilateralNetState.partyKeys - - - - -com.r3corda.contracts.asset / Obligation / BilateralNetState / partyKeys
-
-

partyKeys

- -val partyKeys: Set<PublicKey>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-bilateral-net-state/template.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-bilateral-net-state/template.html deleted file mode 100644 index de87ee09e9..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-bilateral-net-state/template.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.BilateralNetState.template - - - - -com.r3corda.contracts.asset / Obligation / BilateralNetState / template
-
-

template

- -val template: StateTemplate<P>
-Overrides NetState.template
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-group/clauses.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-group/clauses.html deleted file mode 100644 index fe3fdb2e21..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-group/clauses.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.Clauses.Group.clauses - - - - -com.r3corda.contracts.asset / Obligation / Clauses / Group / clauses
-
-

clauses

- -val clauses: <ERROR CLASS>
-Overrides GroupClauseVerifier.clauses
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-group/extract-groups.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-group/extract-groups.html deleted file mode 100644 index a91774f1a0..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-group/extract-groups.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.Clauses.Group.extractGroups - - - - -com.r3corda.contracts.asset / Obligation / Clauses / Group / extractGroups
-
-

extractGroups

- -fun extractGroups(tx: TransactionForContract): List<InOutGroup<State<P>, Issued<Terms<P>>>>
-Overrides GroupClauseVerifier.extractGroups
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-group/if-matched.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-group/if-matched.html deleted file mode 100644 index 5ed4160101..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-group/if-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -Obligation.Clauses.Group.ifMatched - - - - -com.r3corda.contracts.asset / Obligation / Clauses / Group / ifMatched
-
-

ifMatched

- -val ifMatched: MatchBehaviour
-Overrides SingleClause.ifMatched
-

Behaviour if this clause is not matches

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-group/if-not-matched.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-group/if-not-matched.html deleted file mode 100644 index 34c904e894..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-group/if-not-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -Obligation.Clauses.Group.ifNotMatched - - - - -com.r3corda.contracts.asset / Obligation / Clauses / Group / ifNotMatched
-
-

ifNotMatched

- -val ifNotMatched: MatchBehaviour
-Overrides SingleClause.ifNotMatched
-

Behaviour if this clause is matched

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-issue/required-commands.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-issue/required-commands.html index 3f3ae5561a..e23a521290 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-issue/required-commands.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-issue/required-commands.html @@ -9,7 +9,7 @@

requiredCommands

val requiredCommands: Set<Class<out CommandData>>
-Overrides ConcreteClause.requiredCommands
+Overrides Clause.requiredCommands

Determine whether this clause runs or not



diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-set-lifecycle/if-matched.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-set-lifecycle/if-matched.html deleted file mode 100644 index 2238141d52..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-set-lifecycle/if-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -Obligation.Clauses.SetLifecycle.ifMatched - - - - -com.r3corda.contracts.asset / Obligation / Clauses / SetLifecycle / ifMatched
-
-

ifMatched

- -val ifMatched: MatchBehaviour
-Overrides Clause.ifMatched
-

Behaviour if this clause is not matches

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-set-lifecycle/if-not-matched.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-set-lifecycle/if-not-matched.html deleted file mode 100644 index 86daecb85c..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-set-lifecycle/if-not-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -Obligation.Clauses.SetLifecycle.ifNotMatched - - - - -com.r3corda.contracts.asset / Obligation / Clauses / SetLifecycle / ifNotMatched
-
-

ifNotMatched

- -val ifNotMatched: MatchBehaviour
-Overrides Clause.ifNotMatched
-

Behaviour if this clause is matched

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-set-lifecycle/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-set-lifecycle/index.html index eb1a3409c3..e28a527330 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-set-lifecycle/index.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-set-lifecycle/index.html @@ -7,7 +7,7 @@ com.r3corda.contracts.asset / Obligation / Clauses / SetLifecycle

SetLifecycle

-class SetLifecycle<P> : ConcreteClause<State<P>, Commands, Issued<Terms<P>>>
+class SetLifecycle<P> : Clause<State<P>, Commands, Issued<Terms<P>>>

Obligation-specific clause for changing the lifecycle of one or more states.



diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-set-lifecycle/required-commands.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-set-lifecycle/required-commands.html index e0d57bef06..73c2ee87cf 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-set-lifecycle/required-commands.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-set-lifecycle/required-commands.html @@ -9,7 +9,7 @@

requiredCommands

val requiredCommands: Set<Class<out CommandData>>
-Overrides ConcreteClause.requiredCommands
+Overrides Clause.requiredCommands

Determine whether this clause runs or not



diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-settle/if-matched.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-settle/if-matched.html deleted file mode 100644 index 5929bb7e5d..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-settle/if-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -Obligation.Clauses.Settle.ifMatched - - - - -com.r3corda.contracts.asset / Obligation / Clauses / Settle / ifMatched
-
-

ifMatched

- -val ifMatched: MatchBehaviour
-Overrides Clause.ifMatched
-

Behaviour if this clause is not matches

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-settle/if-not-matched.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-settle/if-not-matched.html deleted file mode 100644 index 9833366a65..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-settle/if-not-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -Obligation.Clauses.Settle.ifNotMatched - - - - -com.r3corda.contracts.asset / Obligation / Clauses / Settle / ifNotMatched
-
-

ifNotMatched

- -val ifNotMatched: MatchBehaviour
-Overrides Clause.ifNotMatched
-

Behaviour if this clause is matched

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-settle/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-settle/index.html index dd3245045f..9e15d16815 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-settle/index.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-settle/index.html @@ -7,7 +7,7 @@ com.r3corda.contracts.asset / Obligation / Clauses / Settle

Settle

-class Settle<P> : ConcreteClause<State<P>, Commands, Issued<Terms<P>>>
+class Settle<P> : Clause<State<P>, Commands, Issued<Terms<P>>>

Obligation-specific clause for settling an outstanding obligation by witnessing change of ownership of other states to fulfil


diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-settle/required-commands.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-settle/required-commands.html index 8062861903..4b6440e4fd 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-settle/required-commands.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-settle/required-commands.html @@ -9,7 +9,7 @@

requiredCommands

val requiredCommands: Set<Class<out CommandData>>
-Overrides ConcreteClause.requiredCommands
+Overrides Clause.requiredCommands

Determine whether this clause runs or not



diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-verify-lifecycle/if-matched.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-verify-lifecycle/if-matched.html deleted file mode 100644 index cec9f0a51f..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-verify-lifecycle/if-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -Obligation.Clauses.VerifyLifecycle.ifMatched - - - - -com.r3corda.contracts.asset / Obligation / Clauses / VerifyLifecycle / ifMatched
-
-

ifMatched

- -val ifMatched: MatchBehaviour
-Overrides Clause.ifMatched
-

Behaviour if this clause is not matches

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-verify-lifecycle/if-not-matched.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-verify-lifecycle/if-not-matched.html deleted file mode 100644 index 78a260208c..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-verify-lifecycle/if-not-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -Obligation.Clauses.VerifyLifecycle.ifNotMatched - - - - -com.r3corda.contracts.asset / Obligation / Clauses / VerifyLifecycle / ifNotMatched
-
-

ifNotMatched

- -val ifNotMatched: MatchBehaviour
-Overrides Clause.ifNotMatched
-

Behaviour if this clause is matched

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-verify-lifecycle/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-verify-lifecycle/index.html index ceb932aa78..65b8f0a4e4 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-verify-lifecycle/index.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-verify-lifecycle/index.html @@ -7,7 +7,7 @@ com.r3corda.contracts.asset / Obligation / Clauses / VerifyLifecycle

VerifyLifecycle

-class VerifyLifecycle<S : ContractState, C : CommandData, T : Any, P> : ConcreteClause<S, C, T>
+class VerifyLifecycle<S : ContractState, C : CommandData, T : Any, P> : Clause<S, C, T>

Obligation-specific clause for verifying that all states are in normal lifecycle. In a group clause set, this must be run after any lifecycle change clause, which is the only clause that involve @@ -34,7 +34,7 @@ non-standard lifecycle states on input/output.

-requiredCommands +requiredCommands open val requiredCommands: Set<Class<out CommandData>>

Determine whether this clause runs or not

diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-verify-lifecycle/required-commands.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-verify-lifecycle/required-commands.html deleted file mode 100644 index 5910594d2b..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/-verify-lifecycle/required-commands.html +++ /dev/null @@ -1,17 +0,0 @@ - - -Obligation.Clauses.VerifyLifecycle.requiredCommands - - - - -com.r3corda.contracts.asset / Obligation / Clauses / VerifyLifecycle / requiredCommands
-
-

requiredCommands

- -val requiredCommands: Set<Class<out CommandData>>
-Overrides Clause.requiredCommands
-

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/index.html index 7b5feb64d9..8a4e954513 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/index.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-clauses/index.html @@ -45,14 +45,14 @@ SetLifecycle -class SetLifecycle<P> : ConcreteClause<State<P>, Commands, Issued<Terms<P>>>

Obligation-specific clause for changing the lifecycle of one or more states.

+class SetLifecycle<P> : Clause<State<P>, Commands, Issued<Terms<P>>>

Obligation-specific clause for changing the lifecycle of one or more states.

Settle -class Settle<P> : ConcreteClause<State<P>, Commands, Issued<Terms<P>>>

Obligation-specific clause for settling an outstanding obligation by witnessing +class Settle<P> : Clause<State<P>, Commands, Issued<Terms<P>>>

Obligation-specific clause for settling an outstanding obligation by witnessing change of ownership of other states to fulfil

@@ -60,7 +60,7 @@ change of ownership of other states to fulfil

VerifyLifecycle -class VerifyLifecycle<S : ContractState, C : CommandData, T : Any, P> : ConcreteClause<S, C, T>

Obligation-specific clause for verifying that all states are in +class VerifyLifecycle<S : ContractState, C : CommandData, T : Any, P> : Clause<S, C, T>

Obligation-specific clause for verifying that all states are in normal lifecycle. In a group clause set, this must be run after any lifecycle change clause, which is the only clause that involve non-standard lifecycle states on input/output.

diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-exit/aggregate-state.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-exit/aggregate-state.html deleted file mode 100644 index ed4ddfe019..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-exit/aggregate-state.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.Commands.Exit.aggregateState - - - - -com.r3corda.contracts.asset / Obligation / Commands / Exit / aggregateState
-
-

aggregateState

- -val aggregateState: IssuanceDefinition<P>
-Overrides IssuanceCommands.aggregateState
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-issue/aggregate-state.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-issue/aggregate-state.html deleted file mode 100644 index 7897792325..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-issue/aggregate-state.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.Commands.Issue.aggregateState - - - - -com.r3corda.contracts.asset / Obligation / Commands / Issue / aggregateState
-
-

aggregateState

- -val aggregateState: IssuanceDefinition<P>
-Overrides IssuanceCommands.aggregateState
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-move/aggregate-state.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-move/aggregate-state.html deleted file mode 100644 index 596ef6fcdb..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-move/aggregate-state.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.Commands.Move.aggregateState - - - - -com.r3corda.contracts.asset / Obligation / Commands / Move / aggregateState
-
-

aggregateState

- -val aggregateState: IssuanceDefinition<P>
-Overrides IssuanceCommands.aggregateState
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-net/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-net/index.html index 83b2cd921b..5b476ebf95 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-net/index.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-net/index.html @@ -7,7 +7,7 @@ com.r3corda.contracts.asset / Obligation / Commands / Net

Net

-data class Net : Commands
+data class Net : NetCommand, Commands

Net two or more obligation states together in a close-out netting style. Limited to bilateral netting as only the beneficiary (not the obligor) needs to sign.


@@ -32,7 +32,8 @@ as only the beneficiary (not the obligor) needs to sign.

type -val type: NetType +val type: NetType

The type of netting to apply, see NetType for options.

+ diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-net/type.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-net/type.html index 3af08472bc..9eeec701d3 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-net/type.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-net/type.html @@ -9,6 +9,8 @@

type

val type: NetType
+Overrides NetCommand.type
+

The type of netting to apply, see NetType for options.



diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-set-lifecycle/aggregate-state.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-set-lifecycle/aggregate-state.html deleted file mode 100644 index bff8bd5430..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-set-lifecycle/aggregate-state.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.Commands.SetLifecycle.aggregateState - - - - -com.r3corda.contracts.asset / Obligation / Commands / SetLifecycle / aggregateState
-
-

aggregateState

- -val aggregateState: IssuanceDefinition<P>
-Overrides IssuanceCommands.aggregateState
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-settle/aggregate-state.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-settle/aggregate-state.html deleted file mode 100644 index edf1a102af..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/-settle/aggregate-state.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.Commands.Settle.aggregateState - - - - -com.r3corda.contracts.asset / Obligation / Commands / Settle / aggregateState
-
-

aggregateState

- -val aggregateState: IssuanceDefinition<P>
-Overrides IssuanceCommands.aggregateState
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/index.html index 6d79701734..f48c0c0c6a 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/index.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-commands/index.html @@ -40,7 +40,7 @@ transaction has a unique ID even when there are no inputs.

Net -data class Net : Commands

Net two or more obligation states together in a close-out netting style. Limited to bilateral netting +data class Net : NetCommand, Commands

Net two or more obligation states together in a close-out netting style. Limited to bilateral netting as only the beneficiary (not the obligor) needs to sign.

@@ -92,7 +92,7 @@ transaction has a unique ID even when there are no inputs.

Net -data class Net : Commands

Net two or more obligation states together in a close-out netting style. Limited to bilateral netting +data class Net : NetCommand, Commands

Net two or more obligation states together in a close-out netting style. Limited to bilateral netting as only the beneficiary (not the obligor) needs to sign.

diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-commands/aggregate-state.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-commands/aggregate-state.html deleted file mode 100644 index 9958e98a9c..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-commands/aggregate-state.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Obligation.IssuanceCommands.aggregateState - - - - -com.r3corda.contracts.asset / Obligation / IssuanceCommands / aggregateState
-
-

aggregateState

- -abstract val aggregateState: IssuanceDefinition<P>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-commands/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-commands/index.html deleted file mode 100644 index 150871e311..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-commands/index.html +++ /dev/null @@ -1,70 +0,0 @@ - - -Obligation.IssuanceCommands - - - - -com.r3corda.contracts.asset / Obligation / IssuanceCommands
-
-

IssuanceCommands

-interface IssuanceCommands<P> : CommandData
-

Interface for commands that apply to states grouped by issuance definition

-
-
-

Properties

- - - - - - - -
-aggregateState -abstract val aggregateState: IssuanceDefinition<P>
-

Inheritors

- - - - - - - - - - - - - - - - - - - - - - - -
-Exit -data class Exit<P> : Commands, IssuanceCommands<P>

A command stating that the debt is being released by the beneficiary. Normally would indicate -either settlement outside of the ledger, or that the obligor is unable to pay.

-
-Issue -data class Issue<P> : Commands, IssuanceCommands<P>

Allows new obligation states to be issued into existence: the nonce ("number used once") ensures the -transaction has a unique ID even when there are no inputs.

-
-Move -data class Move<P> : Commands, IssuanceCommands<P>, MoveCommand

A command stating that a debt has been moved, optionally to fulfil another contract.

-
-SetLifecycle -data class SetLifecycle<P> : Commands, IssuanceCommands<P>

A command stating that the beneficiary is moving the contract into the defaulted state as it has not been settled -by the due date, or resetting a defaulted contract back to the issued state.

-
-Settle -data class Settle<P> : Commands, IssuanceCommands<P>

A command stating that the obligor is settling some or all of the amount owed by transferring a suitable -state object to the beneficiary. If this reduces the balance to zero, the state object is destroyed.

-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-definition/-init-.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-definition/-init-.html deleted file mode 100644 index 9889000d66..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-definition/-init-.html +++ /dev/null @@ -1,20 +0,0 @@ - - -Obligation.IssuanceDefinition.<init> - - - - -com.r3corda.contracts.asset / Obligation / IssuanceDefinition / <init>
-
-

<init>

-IssuanceDefinition(obligor: Party, template: StateTemplate<P>)
-

Subset of state, containing the elements specified when issuing a new settlement contract. -TODO: This needs to be something common to contracts that we can be obliged to pay, and moved -out into core accordingly.

-

Parameters

- -P - the product the obligation is for payment of.
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-definition/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-definition/index.html deleted file mode 100644 index 8983ff0880..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-definition/index.html +++ /dev/null @@ -1,62 +0,0 @@ - - -Obligation.IssuanceDefinition - - - - -com.r3corda.contracts.asset / Obligation / IssuanceDefinition
-
-

IssuanceDefinition

-data class IssuanceDefinition<P>
-

Subset of state, containing the elements specified when issuing a new settlement contract. -TODO: This needs to be something common to contracts that we can be obliged to pay, and moved -out into core accordingly.

-

Parameters

- -P - the product the obligation is for payment of.
-
-
-

Constructors

- - - - - - - -
-<init> -IssuanceDefinition(obligor: Party, template: StateTemplate<P>)

Subset of state, containing the elements specified when issuing a new settlement contract. -TODO: This needs to be something common to contracts that we can be obliged to pay, and moved -out into core accordingly.

-
-

Properties

- - - - - - - - - - - -
-obligor -val obligor: Party
-template -val template: StateTemplate<P>
-

Extension Functions

- - - - - - - -
-at -infix fun <T> IssuanceDefinition<T>.at(dueBefore: Instant): IssuanceDefinition<T>
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-definition/obligor.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-definition/obligor.html deleted file mode 100644 index 74c795c24d..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-definition/obligor.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Obligation.IssuanceDefinition.obligor - - - - -com.r3corda.contracts.asset / Obligation / IssuanceDefinition / obligor
-
-

obligor

- -val obligor: Party
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-definition/template.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-definition/template.html deleted file mode 100644 index 57d9a58a4e..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-issuance-definition/template.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Obligation.IssuanceDefinition.template - - - - -com.r3corda.contracts.asset / Obligation / IssuanceDefinition / template
-
-

template

- -val template: StateTemplate<P>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-multilateral-net-state/-init-.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-multilateral-net-state/-init-.html deleted file mode 100644 index 76c45cb32d..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-multilateral-net-state/-init-.html +++ /dev/null @@ -1,20 +0,0 @@ - - -Obligation.MultilateralNetState.<init> - - - - -com.r3corda.contracts.asset / Obligation / MultilateralNetState / <init>
-
-

<init>

-MultilateralNetState(template: StateTemplate<P>)
-

Subset of state, containing the elements which must match for two or more obligation transactions to be candidates -for netting (this does not include the checks to enforce that everyones amounts received are the same at the end, -which is handled under the verify() function). -In comparison to BilateralNetState, this doesnt include the parties keys, as ensuring balances match on -input and output is handled elsewhere. -Used in cases where all parties (or their proxies) are signing, such as central clearing.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-multilateral-net-state/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-multilateral-net-state/index.html deleted file mode 100644 index 1811d4ecaf..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-multilateral-net-state/index.html +++ /dev/null @@ -1,48 +0,0 @@ - - -Obligation.MultilateralNetState - - - - -com.r3corda.contracts.asset / Obligation / MultilateralNetState
-
-

MultilateralNetState

-data class MultilateralNetState<P> : NetState<P>
-

Subset of state, containing the elements which must match for two or more obligation transactions to be candidates -for netting (this does not include the checks to enforce that everyones amounts received are the same at the end, -which is handled under the verify() function). -In comparison to BilateralNetState, this doesnt include the parties keys, as ensuring balances match on -input and output is handled elsewhere. -Used in cases where all parties (or their proxies) are signing, such as central clearing.

-
-
-

Constructors

- - - - - - - -
-<init> -MultilateralNetState(template: StateTemplate<P>)

Subset of state, containing the elements which must match for two or more obligation transactions to be candidates -for netting (this does not include the checks to enforce that everyones amounts received are the same at the end, -which is handled under the verify() function). -In comparison to BilateralNetState, this doesnt include the parties keys, as ensuring balances match on -input and output is handled elsewhere. -Used in cases where all parties (or their proxies) are signing, such as central clearing.

-
-

Properties

- - - - - - - -
-template -val template: StateTemplate<P>
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-multilateral-net-state/template.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-multilateral-net-state/template.html deleted file mode 100644 index 79d0eb9272..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-multilateral-net-state/template.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.MultilateralNetState.template - - - - -com.r3corda.contracts.asset / Obligation / MultilateralNetState / template
-
-

template

- -val template: StateTemplate<P>
-Overrides NetState.template
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-net-state/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-net-state/index.html deleted file mode 100644 index d182442adb..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-net-state/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - -Obligation.NetState - - - - -com.r3corda.contracts.asset / Obligation / NetState
-
-

NetState

-interface NetState<P>
-

Common interface for the state subsets used when determining nettability of two or more states. Exposes the -underlying issued thing.

-
-
-

Properties

- - - - - - - -
-template -abstract val template: StateTemplate<P>
-

Inheritors

- - - - - - - - - - - -
-BilateralNetState -data class BilateralNetState<P> : NetState<P>

Subset of state, containing the elements which must match for two obligation transactions to be nettable. -If two obligation state objects produce equal bilateral net states, they are considered safe to net directly. -Bilateral states are used in close-out netting.

-
-MultilateralNetState -data class MultilateralNetState<P> : NetState<P>

Subset of state, containing the elements which must match for two or more obligation transactions to be candidates -for netting (this does not include the checks to enforce that everyones amounts received are the same at the end, -which is handled under the verify() function). -In comparison to BilateralNetState, this doesnt include the parties keys, as ensuring balances match on -input and output is handled elsewhere. -Used in cases where all parties (or their proxies) are signing, such as central clearing.

-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-net-state/template.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-net-state/template.html deleted file mode 100644 index fac3c14750..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-net-state/template.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Obligation.NetState.template - - - - -com.r3corda.contracts.asset / Obligation / NetState / template
-
-

template

- -abstract val template: StateTemplate<P>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/-init-.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/-init-.html deleted file mode 100644 index 2e798540c3..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/-init-.html +++ /dev/null @@ -1,18 +0,0 @@ - - -Obligation.StateTemplate.<init> - - - - -com.r3corda.contracts.asset / Obligation / StateTemplate / <init>
-
-

<init>

-StateTemplate(acceptableContracts: NonEmptySet<SecureHash>, acceptableIssuedProducts: NonEmptySet<Issued<P>>, dueBefore: Instant, timeTolerance: Duration = Duration.ofSeconds(30))
-

Subset of state, containing the elements specified when issuing a new settlement contract.

-

Parameters

- -P - the product the obligation is for payment of.
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/acceptable-contracts.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/acceptable-contracts.html deleted file mode 100644 index 3a668ea9cc..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/acceptable-contracts.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.StateTemplate.acceptableContracts - - - - -com.r3corda.contracts.asset / Obligation / StateTemplate / acceptableContracts
-
-

acceptableContracts

- -val acceptableContracts: NonEmptySet<SecureHash>
-

The hash of the asset contract were willing to accept in payment for this debt.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/acceptable-issued-products.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/acceptable-issued-products.html deleted file mode 100644 index 473b35da6d..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/acceptable-issued-products.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.StateTemplate.acceptableIssuedProducts - - - - -com.r3corda.contracts.asset / Obligation / StateTemplate / acceptableIssuedProducts
-
-

acceptableIssuedProducts

- -val acceptableIssuedProducts: NonEmptySet<Issued<P>>
-

The parties whose assets we are willing to accept in payment for this debt.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/due-before.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/due-before.html deleted file mode 100644 index 5da6aaab3e..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/due-before.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.StateTemplate.dueBefore - - - - -com.r3corda.contracts.asset / Obligation / StateTemplate / dueBefore
-
-

dueBefore

- -val dueBefore: Instant
-

When the contract must be settled by.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/index.html deleted file mode 100644 index 8e22c54fe9..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/index.html +++ /dev/null @@ -1,68 +0,0 @@ - - -Obligation.StateTemplate - - - - -com.r3corda.contracts.asset / Obligation / StateTemplate
-
-

StateTemplate

-data class StateTemplate<P>
-

Subset of state, containing the elements specified when issuing a new settlement contract.

-

Parameters

- -P - the product the obligation is for payment of.
-
-
-

Constructors

- - - - - - - -
-<init> -StateTemplate(acceptableContracts: NonEmptySet<SecureHash>, acceptableIssuedProducts: NonEmptySet<Issued<P>>, dueBefore: Instant, timeTolerance: Duration = Duration.ofSeconds(30))

Subset of state, containing the elements specified when issuing a new settlement contract.

-
-

Properties

- - - - - - - - - - - - - - - - - - - - - - - -
-acceptableContracts -val acceptableContracts: NonEmptySet<SecureHash>

The hash of the asset contract were willing to accept in payment for this debt.

-
-acceptableIssuedProducts -val acceptableIssuedProducts: NonEmptySet<Issued<P>>

The parties whose assets we are willing to accept in payment for this debt.

-
-dueBefore -val dueBefore: Instant

When the contract must be settled by.

-
-product -val product: P
-timeTolerance -val timeTolerance: Duration
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/product.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/product.html deleted file mode 100644 index 7681b329e0..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/product.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Obligation.StateTemplate.product - - - - -com.r3corda.contracts.asset / Obligation / StateTemplate / product
-
-

product

- -val product: P
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/time-tolerance.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/time-tolerance.html deleted file mode 100644 index e2c5837d99..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state-template/time-tolerance.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Obligation.StateTemplate.timeTolerance - - - - -com.r3corda.contracts.asset / Obligation / StateTemplate / timeTolerance
-
-

timeTolerance

- -val timeTolerance: Duration
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/acceptable-contracts.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/acceptable-contracts.html deleted file mode 100644 index d1d9b7fbb4..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/acceptable-contracts.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Obligation.State.acceptableContracts - - - - -com.r3corda.contracts.asset / Obligation / State / acceptableContracts
-
-

acceptableContracts

- -val acceptableContracts: NonEmptySet<SecureHash>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/acceptable-issuance-definitions.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/acceptable-issuance-definitions.html deleted file mode 100644 index 356bf3a180..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/acceptable-issuance-definitions.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Obligation.State.acceptableIssuanceDefinitions - - - - -com.r3corda.contracts.asset / Obligation / State / acceptableIssuanceDefinitions
-
-

acceptableIssuanceDefinitions

- -val acceptableIssuanceDefinitions: NonEmptySet<*>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/aggregate-state.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/aggregate-state.html deleted file mode 100644 index 42b3213ed7..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/aggregate-state.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Obligation.State.aggregateState - - - - -com.r3corda.contracts.asset / Obligation / State / aggregateState
-
-

aggregateState

- -val aggregateState: IssuanceDefinition<P>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/participants.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/participants.html index 94bbb94bd5..abe729010e 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/participants.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/participants.html @@ -12,7 +12,7 @@ Overrides ContractState.participants

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 participants has to be involved and approve the transaction +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction so that they receive the updated state, and dont 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 @@ -22,7 +22,7 @@ list should just contain the owner.

Getter

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 participants has to be involved and approve the transaction +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction so that they receive the updated state, and dont 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 diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/product-amount.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/product-amount.html deleted file mode 100644 index 59d6383ed5..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/-state/product-amount.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.State.productAmount - - - - -com.r3corda.contracts.asset / Obligation / State / productAmount
-
-

productAmount

- -val productAmount: Amount<P>
-Overrides FungibleAssetState.productAmount
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/clauses.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/clauses.html deleted file mode 100644 index 570610c6dc..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/clauses.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.clauses - - - - -com.r3corda.contracts.asset / Obligation / clauses
-
-

clauses

- -val clauses: <ERROR CLASS>
-Overrides ClauseVerifier.clauses
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/extract-commands.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/extract-commands.html deleted file mode 100644 index bc244e210f..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/extract-commands.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.extractCommands - - - - -com.r3corda.contracts.asset / Obligation / extractCommands
-
-

extractCommands

- -fun extractCommands(tx: TransactionForContract): List<AuthenticatedObject<Commands>>
-Overrides ClauseVerifier.extractCommands
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-close-out-netting.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-close-out-netting.html index 65c37cd33f..02e4861be6 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-close-out-netting.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-close-out-netting.html @@ -7,8 +7,8 @@ com.r3corda.contracts.asset / Obligation / generateCloseOutNetting

generateCloseOutNetting

- -fun generateCloseOutNetting(tx: TransactionBuilder, signer: PublicKey, vararg states: State<P>): Unit
+ +fun generateCloseOutNetting(tx: TransactionBuilder, signer: PublicKey, vararg states: State<P>): Unit

Generate a transaction performing close-out netting of two or more states.

Parameters

diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-exit.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-exit.html index 7b4a1d8fc5..02d0ee2aba 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-exit.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-exit.html @@ -7,8 +7,8 @@ com.r3corda.contracts.asset / Obligation / generateExit

generateExit

- -fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<Terms<P>>>, assetStates: List<StateAndRef<State<P>>>): PublicKey
+ +fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<Terms<P>>>, assetStates: List<StateAndRef<State<P>>>): PublicKey

Generate an transaction exiting an obligation from the ledger.

Parameters

diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-issue.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-issue.html index d72f950516..52d73eecfe 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-issue.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-issue.html @@ -7,8 +7,8 @@ com.r3corda.contracts.asset / Obligation / generateIssue

generateIssue

- -fun generateIssue(tx: TransactionBuilder, obligor: Party, issuanceDef: Terms<P>, pennies: Long, beneficiary: PublicKey, notary: Party): Unit
+ +fun generateIssue(tx: TransactionBuilder, obligor: Party, issuanceDef: Terms<P>, pennies: Long, beneficiary: PublicKey, notary: Party): Unit

Puts together an issuance transaction for the specified amount that starts out being owned by the given pubkey.



diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-payment-netting.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-payment-netting.html index 37f8f03de1..b1db2c3585 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-payment-netting.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-payment-netting.html @@ -7,8 +7,8 @@ com.r3corda.contracts.asset / Obligation / generatePaymentNetting

generatePaymentNetting

- -fun generatePaymentNetting(tx: TransactionBuilder, issued: Issued<Terms<P>>, notary: Party, vararg states: State<P>): Unit
+ +fun generatePaymentNetting(tx: TransactionBuilder, issued: Issued<Terms<P>>, notary: Party, vararg states: State<P>): Unit


diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-set-lifecycle.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-set-lifecycle.html index 0efd6a6520..959a244b12 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-set-lifecycle.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-set-lifecycle.html @@ -7,8 +7,8 @@ com.r3corda.contracts.asset / Obligation / generateSetLifecycle

generateSetLifecycle

- -fun generateSetLifecycle(tx: TransactionBuilder, statesAndRefs: List<StateAndRef<State<P>>>, lifecycle: Lifecycle, notary: Party): Unit
+ +fun generateSetLifecycle(tx: TransactionBuilder, statesAndRefs: List<StateAndRef<State<P>>>, lifecycle: Lifecycle, notary: Party): Unit

Generate a transaction changing the lifecycle of one or more state objects.

Parameters

diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-settle.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-settle.html index bdda6f31be..e12a51f255 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-settle.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/generate-settle.html @@ -7,8 +7,8 @@ com.r3corda.contracts.asset / Obligation / generateSettle

generateSettle

- -fun generateSettle(tx: TransactionBuilder, statesAndRefs: Iterable<StateAndRef<State<P>>>, assetStatesAndRefs: Iterable<StateAndRef<FungibleAsset<P>>>, moveCommand: MoveCommand, notary: Party): Unit
+ +fun generateSettle(tx: TransactionBuilder, statesAndRefs: Iterable<StateAndRef<State<P>>>, assetStatesAndRefs: Iterable<StateAndRef<FungibleAsset<P>>>, moveCommand: MoveCommand, notary: Party): Unit

Parameters

statesAndRefs - a list of state objects, which MUST all have the same aggregate state. This is done as diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/index.html index 384639a86e..6f23f7a372 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/index.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/index.html @@ -93,41 +93,41 @@ to be netted/merged, with settlement only for any remainder amount.

generateCloseOutNetting -fun generateCloseOutNetting(tx: TransactionBuilder, signer: PublicKey, vararg states: State<P>): Unit

Generate a transaction performing close-out netting of two or more states.

+fun generateCloseOutNetting(tx: TransactionBuilder, signer: PublicKey, vararg states: State<P>): Unit

Generate a transaction performing close-out netting of two or more states.

generateExit -fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<Terms<P>>>, assetStates: List<StateAndRef<State<P>>>): PublicKey

Generate an transaction exiting an obligation from the ledger.

+fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<Terms<P>>>, assetStates: List<StateAndRef<State<P>>>): PublicKey

Generate an transaction exiting an obligation from the ledger.

generateIssue -fun generateIssue(tx: TransactionBuilder, obligor: Party, issuanceDef: Terms<P>, pennies: Long, beneficiary: PublicKey, notary: Party): Unit

Puts together an issuance transaction for the specified amount that starts out being owned by the given pubkey.

+fun generateIssue(tx: TransactionBuilder, obligor: Party, issuanceDef: Terms<P>, pennies: Long, beneficiary: PublicKey, notary: Party): Unit

Puts together an issuance transaction for the specified amount that starts out being owned by the given pubkey.

generatePaymentNetting -fun generatePaymentNetting(tx: TransactionBuilder, issued: Issued<Terms<P>>, notary: Party, vararg states: State<P>): Unit +fun generatePaymentNetting(tx: TransactionBuilder, issued: Issued<Terms<P>>, notary: Party, vararg states: State<P>): Unit generateSetLifecycle -fun generateSetLifecycle(tx: TransactionBuilder, statesAndRefs: List<StateAndRef<State<P>>>, lifecycle: Lifecycle, notary: Party): Unit

Generate a transaction changing the lifecycle of one or more state objects.

+fun generateSetLifecycle(tx: TransactionBuilder, statesAndRefs: List<StateAndRef<State<P>>>, lifecycle: Lifecycle, notary: Party): Unit

Generate a transaction changing the lifecycle of one or more state objects.

generateSettle -fun generateSettle(tx: TransactionBuilder, statesAndRefs: Iterable<StateAndRef<State<P>>>, assetStatesAndRefs: Iterable<StateAndRef<FungibleAsset<P>>>, moveCommand: MoveCommand, notary: Party): Unit +fun generateSettle(tx: TransactionBuilder, statesAndRefs: Iterable<StateAndRef<State<P>>>, assetStatesAndRefs: Iterable<StateAndRef<FungibleAsset<P>>>, moveCommand: MoveCommand, notary: Party): Unit diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/verify-issue-command.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/verify-issue-command.html deleted file mode 100644 index 525e12f466..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/verify-issue-command.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Obligation.verifyIssueCommand - - - - -com.r3corda.contracts.asset / Obligation / verifyIssueCommand
-
-

verifyIssueCommand

- -protected fun verifyIssueCommand(inputs: List<State<P>>, outputs: List<State<P>>, issueCommand: AuthenticatedObject<Issue<P>>, issued: Issued<P>, obligor: Party): Unit
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/verify-net-command.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/verify-net-command.html deleted file mode 100644 index a897afe124..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/verify-net-command.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.verifyNetCommand - - - - -com.r3corda.contracts.asset / Obligation / verifyNetCommand
-
-

verifyNetCommand

- -protected fun verifyNetCommand(inputs: Iterable<State<P>>, outputs: Iterable<State<P>>, command: AuthenticatedObject<Net>, netState: NetState<P>): Unit
-

Verify a netting command. This handles both close-out and payment netting.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/verify-set-lifecycle-command.html b/docs/build/html/api/com.r3corda.contracts.asset/-obligation/verify-set-lifecycle-command.html deleted file mode 100644 index d8058447e7..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-obligation/verify-set-lifecycle-command.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Obligation.verifySetLifecycleCommand - - - - -com.r3corda.contracts.asset / Obligation / verifySetLifecycleCommand
-
-

verifySetLifecycleCommand

- -protected fun verifySetLifecycleCommand(inputs: List<FungibleAsset<Terms<P>>>, outputs: List<FungibleAsset<Terms<P>>>, tx: TransactionForContract, setLifecycleCommand: AuthenticatedObject<SetLifecycle>): Unit
-

A default command mutates inputs and produces identical outputs, except that the lifecycle changes.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/clauses.html b/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/clauses.html deleted file mode 100644 index 13a91088e7..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/clauses.html +++ /dev/null @@ -1,15 +0,0 @@ - - -OnLedgerAsset.clauses - - - - -com.r3corda.contracts.asset / OnLedgerAsset / clauses
-
-

clauses

- -abstract val clauses: List<SingleClause>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/generate-exit.html b/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/generate-exit.html index 9790db56cb..6664109ed4 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/generate-exit.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/generate-exit.html @@ -7,8 +7,8 @@ com.r3corda.contracts.asset / OnLedgerAsset / generateExit

generateExit

- -fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<T>>, assetStates: List<StateAndRef<S>>): PublicKey
+ +fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<T>>, assetStates: List<StateAndRef<S>>): PublicKey

Generate an transaction exiting assets from the ledger.

Parameters

diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/generate-spend.html b/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/generate-spend.html index 60c3b77ea9..4fcf410296 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/generate-spend.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/generate-spend.html @@ -7,13 +7,13 @@ com.r3corda.contracts.asset / OnLedgerAsset / generateSpend

generateSpend

- -fun generateSpend(tx: TransactionBuilder, amount: Amount<T>, to: PublicKey, assetsStates: List<StateAndRef<S>>, onlyFromParties: Set<Party>? = null): List<PublicKey>
+ +fun generateSpend(tx: TransactionBuilder, amount: Amount<T>, to: PublicKey, assetsStates: List<StateAndRef<S>>, onlyFromParties: Set<Party>? = null): List<PublicKey>

Generate a transaction that consumes one or more of the given input states to move assets to the given pubkey. -Note that the wallet list is not updated: its up to you to do that.

+Note that the vault is not updated: its up to you to do that.

Parameters

-onlyFromParties - if non-null, the wallet will be filtered to only include asset states issued by the set +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 youre trying to pay has expectations about which type of asset claims they are willing to accept.

diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/index.html b/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/index.html index 833536f4c1..49b5975c1b 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/index.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/index.html @@ -82,7 +82,7 @@ when sending out "change" from spending/exiting.

generateExit -fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<T>>, assetStates: List<StateAndRef<S>>): PublicKey

Generate an transaction exiting assets from the ledger.

+fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<T>>, assetStates: List<StateAndRef<S>>): PublicKey

Generate an transaction exiting assets from the ledger.

@@ -107,8 +107,8 @@ when sending out "change" from spending/exiting.

generateSpend -fun generateSpend(tx: TransactionBuilder, amount: Amount<T>, to: PublicKey, assetsStates: List<StateAndRef<S>>, onlyFromParties: Set<Party>? = null): List<PublicKey>

Generate a transaction that consumes one or more of the given input states to move assets to the given pubkey. -Note that the wallet list is not updated: its up to you to do that.

+fun generateSpend(tx: TransactionBuilder, amount: Amount<T>, to: PublicKey, assetsStates: List<StateAndRef<S>>, onlyFromParties: Set<Party>? = null): List<PublicKey>

Generate a transaction that consumes one or more of the given input states to move assets to the given pubkey. +Note that the vault is not updated: its up to you to do that.

diff --git a/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/verify.html b/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/verify.html deleted file mode 100644 index 1f29351627..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/-on-ledger-asset/verify.html +++ /dev/null @@ -1,20 +0,0 @@ - - -OnLedgerAsset.verify - - - - -com.r3corda.contracts.asset / OnLedgerAsset / verify
-
-

verify

- -open fun verify(tx: TransactionForContract): Unit
-Overrides Contract.verify
-

Takes an object that represents a state transition, and ensures the inputs/outputs/commands make sense. -Must throw an exception if theres 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/com.r3corda.contracts.asset/cash-balances.html b/docs/build/html/api/com.r3corda.contracts.asset/cash-balances.html index aaaba11c55..8041ea75e8 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/cash-balances.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/cash-balances.html @@ -7,8 +7,8 @@ com.r3corda.contracts.asset / cashBalances

cashBalances

- -val Wallet.cashBalances: Map<Currency, Amount<Currency>>
+ +val Vault.cashBalances: Map<Currency, Amount<Currency>>

Returns a map of how much cash we have in each currency, ignoring details like issuer. Note: currencies for which we have no cash evaluate to null (not present in map), not 0.


diff --git a/docs/build/html/api/com.r3corda.contracts.asset/index.html b/docs/build/html/api/com.r3corda.contracts.asset/index.html index 8bd796ad91..05b439ff9b 100644 --- a/docs/build/html/api/com.r3corda.contracts.asset/index.html +++ b/docs/build/html/api/com.r3corda.contracts.asset/index.html @@ -125,6 +125,20 @@ transaction.

+DUMMY_OBLIGATION_ISSUER + +val DUMMY_OBLIGATION_ISSUER: <ERROR CLASS>

A dummy, randomly generated issuer party by the name of "Snake Oil Issuer"

+ + + + +DUMMY_OBLIGATION_ISSUER_KEY + +val DUMMY_OBLIGATION_ISSUER_KEY: <ERROR CLASS>

A randomly generated key.

+ + + + OBLIGATION val Amount<Issued<Currency>>.OBLIGATION: State<Currency> @@ -152,7 +166,7 @@ transaction.

cashBalances -val Wallet.cashBalances: Map<Currency, Amount<Currency>>

Returns a map of how much cash we have in each currency, ignoring details like issuer. Note: currencies for +val Vault.cashBalances: Map<Currency, Amount<Currency>>

Returns a map of how much cash we have in each currency, ignoring details like issuer. Note: currencies for which we have no cash evaluate to null (not present in map), not 0.

diff --git a/docs/build/html/api/com.r3corda.contracts.asset/kotlin.collections.-iterable/sum-fungible-by.html b/docs/build/html/api/com.r3corda.contracts.asset/kotlin.collections.-iterable/sum-fungible-by.html deleted file mode 100644 index cc0a42b341..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/kotlin.collections.-iterable/sum-fungible-by.html +++ /dev/null @@ -1,18 +0,0 @@ - - -sumFungibleBy - - - - -com.r3corda.contracts.asset / kotlin.collections.Iterable / sumFungibleBy
-
-

sumFungibleBy

- -fun <T> Iterable<ContractState>.sumFungibleBy(owner: PublicKey): <ERROR CLASS>
-

Sums the asset states in the list belonging to a single owner, throwing an exception -if there are none, or if any of the asset states cannot be added together (i.e. are -different tokens).

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.asset/kotlin.collections.-iterable/sum-fungible.html b/docs/build/html/api/com.r3corda.contracts.asset/kotlin.collections.-iterable/sum-fungible.html deleted file mode 100644 index b594939bb4..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.asset/kotlin.collections.-iterable/sum-fungible.html +++ /dev/null @@ -1,17 +0,0 @@ - - -sumFungible - - - - -com.r3corda.contracts.asset / kotlin.collections.Iterable / sumFungible
-
-

sumFungible

- -fun <T> Iterable<ContractState>.sumFungible(): <ERROR CLASS>
-

Sums the asset states in the list, throwing an exception if there are none, or if any of the asset -states cannot be added together (i.e. are different tokens).

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/generate-exit.html b/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/generate-exit.html index 35b588d54a..2b9ffc127e 100644 --- a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/generate-exit.html +++ b/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/generate-exit.html @@ -7,8 +7,8 @@ com.r3corda.contracts.clause / AbstractConserveAmount / generateExit

generateExit

- -fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<T>>, assetStates: List<StateAndRef<S>>, deriveState: (TransactionState<S>, Amount<Issued<T>>, PublicKey) -> TransactionState<S>, generateExitCommand: (Amount<Issued<T>>) -> CommandData): PublicKey
+ +fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<T>>, assetStates: List<StateAndRef<S>>, deriveState: (TransactionState<S>, Amount<Issued<T>>, PublicKey) -> TransactionState<S>, generateMoveCommand: () -> CommandData, generateExitCommand: (Amount<Issued<T>>) -> CommandData): PublicKey

Generate an transaction exiting fungible assets from the ledger.

Parameters

@@ -19,7 +19,7 @@
assetStates - the asset states to take funds from. No checks are done about ownership of these states, it is -the responsibility of the caller to check that they do not exit funds held by others.
+the responsibility of the caller to check that they do not attempt to exit funds held by others.

Return
the public key of the assets issuer, who must sign the transaction for it to be valid.


diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/generate-spend.html b/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/generate-spend.html index 7e279c2036..433a7e7833 100644 --- a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/generate-spend.html +++ b/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/generate-spend.html @@ -7,13 +7,13 @@ com.r3corda.contracts.clause / AbstractConserveAmount / generateSpend

generateSpend

- -fun generateSpend(tx: TransactionBuilder, amount: Amount<T>, to: PublicKey, assetsStates: List<StateAndRef<S>>, onlyFromParties: Set<Party>? = null, deriveState: (TransactionState<S>, Amount<Issued<T>>, PublicKey) -> TransactionState<S>, generateMoveCommand: () -> CommandData): List<PublicKey>
+ +fun generateSpend(tx: TransactionBuilder, amount: Amount<T>, to: PublicKey, assetsStates: List<StateAndRef<S>>, onlyFromParties: Set<Party>? = null, deriveState: (TransactionState<S>, Amount<Issued<T>>, PublicKey) -> TransactionState<S>, generateMoveCommand: () -> CommandData): List<PublicKey>

Generate a transaction that consumes one or more of the given input states to move assets to the given pubkey. -Note that the wallet list is not updated: its up to you to do that.

+Note that the vault is not updated: its up to you to do that.

Parameters

-onlyFromParties - if non-null, the wallet will be filtered to only include asset states issued by the set +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 youre trying to pay has expectations about which type of asset claims they are willing to accept.

diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/if-matched.html b/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/if-matched.html deleted file mode 100644 index a7e1e8dec7..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/if-matched.html +++ /dev/null @@ -1,20 +0,0 @@ - - -AbstractConserveAmount.ifMatched - - - - -com.r3corda.contracts.clause / AbstractConserveAmount / ifMatched
-
-

ifMatched

- -open val ifMatched: MatchBehaviour
-Overrides Clause.ifMatched
-

Behaviour if this clause is not matches

-

Getter
-

Behaviour if this clause is not matches

-

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/if-not-matched.html b/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/if-not-matched.html deleted file mode 100644 index 99976ed708..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/if-not-matched.html +++ /dev/null @@ -1,20 +0,0 @@ - - -AbstractConserveAmount.ifNotMatched - - - - -com.r3corda.contracts.clause / AbstractConserveAmount / ifNotMatched
-
-

ifNotMatched

- -open val ifNotMatched: MatchBehaviour
-Overrides Clause.ifNotMatched
-

Behaviour if this clause is matched

-

Getter
-

Behaviour if this clause is matched

-

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/index.html b/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/index.html index 07955c57e2..0ab9dd0f56 100644 --- a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/index.html +++ b/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/index.html @@ -7,7 +7,7 @@ com.r3corda.contracts.clause / AbstractConserveAmount

AbstractConserveAmount

-abstract class AbstractConserveAmount<S : FungibleAsset<T>, C : CommandData, T : Any> : ConcreteClause<S, C, Issued<T>>
+abstract class AbstractConserveAmount<S : FungibleAsset<T>, C : CommandData, T : Any> : Clause<S, C, Issued<T>>

Standardised clause for checking input/output balances of fungible assets. Requires that a Move command is provided, and errors if absent. Must be the last clause under a grouping clause; errors on no-match, ends on match.

@@ -32,7 +32,7 @@ errors on no-match, ends on match.

-requiredCommands +requiredCommands open val requiredCommands: Set<Class<out CommandData>>

Determine whether this clause runs or not

@@ -46,15 +46,15 @@ errors on no-match, ends on match.

generateExit -fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<T>>, assetStates: List<StateAndRef<S>>, deriveState: (TransactionState<S>, Amount<Issued<T>>, PublicKey) -> TransactionState<S>, generateExitCommand: (Amount<Issued<T>>) -> CommandData): PublicKey

Generate an transaction exiting fungible assets from the ledger.

+fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<T>>, assetStates: List<StateAndRef<S>>, deriveState: (TransactionState<S>, Amount<Issued<T>>, PublicKey) -> TransactionState<S>, generateMoveCommand: () -> CommandData, generateExitCommand: (Amount<Issued<T>>) -> CommandData): PublicKey

Generate an transaction exiting fungible assets from the ledger.

generateSpend -fun generateSpend(tx: TransactionBuilder, amount: Amount<T>, to: PublicKey, assetsStates: List<StateAndRef<S>>, onlyFromParties: Set<Party>? = null, deriveState: (TransactionState<S>, Amount<Issued<T>>, PublicKey) -> TransactionState<S>, generateMoveCommand: () -> CommandData): List<PublicKey>

Generate a transaction that consumes one or more of the given input states to move assets to the given pubkey. -Note that the wallet list is not updated: its up to you to do that.

+fun generateSpend(tx: TransactionBuilder, amount: Amount<T>, to: PublicKey, assetsStates: List<StateAndRef<S>>, onlyFromParties: Set<Party>? = null, deriveState: (TransactionState<S>, Amount<Issued<T>>, PublicKey) -> TransactionState<S>, generateMoveCommand: () -> CommandData): List<PublicKey>

Generate a transaction that consumes one or more of the given input states to move assets to the given pubkey. +Note that the vault is not updated: its up to you to do that.

diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/required-commands.html b/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/required-commands.html deleted file mode 100644 index eb75bdeb70..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-conserve-amount/required-commands.html +++ /dev/null @@ -1,20 +0,0 @@ - - -AbstractConserveAmount.requiredCommands - - - - -com.r3corda.contracts.clause / AbstractConserveAmount / requiredCommands
-
-

requiredCommands

- -open val requiredCommands: Set<Class<out CommandData>>
-Overrides Clause.requiredCommands
-

Classes for commands which must ALL be present in transaction for this clause to be triggered

-

Getter
-

Classes for commands which must ALL be present in transaction for this clause to be triggered

-

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-issue/if-matched.html b/docs/build/html/api/com.r3corda.contracts.clause/-abstract-issue/if-matched.html deleted file mode 100644 index 57e46230b7..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-issue/if-matched.html +++ /dev/null @@ -1,20 +0,0 @@ - - -AbstractIssue.ifMatched - - - - -com.r3corda.contracts.clause / AbstractIssue / ifMatched
-
-

ifMatched

- -open val ifMatched: MatchBehaviour
-Overrides Clause.ifMatched
-

Behaviour if this clause is not matches

-

Getter
-

Behaviour if this clause is not matches

-

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-issue/if-not-matched.html b/docs/build/html/api/com.r3corda.contracts.clause/-abstract-issue/if-not-matched.html deleted file mode 100644 index def52d3f23..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-issue/if-not-matched.html +++ /dev/null @@ -1,20 +0,0 @@ - - -AbstractIssue.ifNotMatched - - - - -com.r3corda.contracts.clause / AbstractIssue / ifNotMatched
-
-

ifNotMatched

- -open val ifNotMatched: MatchBehaviour
-Overrides Clause.ifNotMatched
-

Behaviour if this clause is matched

-

Getter
-

Behaviour if this clause is matched

-

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-issue/index.html b/docs/build/html/api/com.r3corda.contracts.clause/-abstract-issue/index.html index 6bcc2db6fe..037aa67cdb 100644 --- a/docs/build/html/api/com.r3corda.contracts.clause/-abstract-issue/index.html +++ b/docs/build/html/api/com.r3corda.contracts.clause/-abstract-issue/index.html @@ -7,7 +7,7 @@ com.r3corda.contracts.clause / AbstractIssue

AbstractIssue

-abstract class AbstractIssue<in S : ContractState, C : CommandData, T : Any> : ConcreteClause<S, C, Issued<T>>
+abstract class AbstractIssue<in S : ContractState, C : CommandData, T : Any> : Clause<S, C, Issued<T>>

Standard issue clause for contracts that issue fungible assets.

Parameters

@@ -59,7 +59,7 @@ no states in the list. Takes in an instance of the token definition for construc -requiredCommands +requiredCommands open val requiredCommands: Set<Class<out CommandData>>

Determine whether this clause runs or not

diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/if-matched.html b/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/if-matched.html deleted file mode 100644 index a5bcf8cbf9..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/if-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -NetClause.ifMatched - - - - -com.r3corda.contracts.clause / NetClause / ifMatched
-
-

ifMatched

- -open val ifMatched: MatchBehaviour
-Overrides SingleClause.ifMatched
-

Behaviour if this clause is not matches

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/if-not-matched.html b/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/if-not-matched.html deleted file mode 100644 index 6ea1beb8f1..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/if-not-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -NetClause.ifNotMatched - - - - -com.r3corda.contracts.clause / NetClause / ifNotMatched
-
-

ifNotMatched

- -open val ifNotMatched: MatchBehaviour
-Overrides SingleClause.ifNotMatched
-

Behaviour if this clause is matched

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/index.html b/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/index.html index 6780ed381d..4582905b34 100644 --- a/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/index.html +++ b/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/index.html @@ -7,7 +7,7 @@ com.r3corda.contracts.clause / NetClause

NetClause

-open class NetClause<C : CommandData, P> : ConcreteClause<ContractState, C, Unit>
+open class NetClause<C : CommandData, P> : Clause<ContractState, C, Unit>

Clause for netting contract states. Currently only supports obligation contract.



@@ -51,7 +51,7 @@ if any matched.

verifyNetCommand -fun verifyNetCommand(inputs: List<State<P>>, outputs: List<State<P>>, command: AuthenticatedObject<Net>, netState: NetState<P>): Unit

Verify a netting command. This handles both close-out and payment netting.

+fun verifyNetCommand(inputs: List<State<P>>, outputs: List<State<P>>, command: AuthenticatedObject<NetCommand>, netState: NetState<P>): Unit

Verify a netting command. This handles both close-out and payment netting.

diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/required-commands.html b/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/required-commands.html index 6f0d40af2e..6803b1ddb0 100644 --- a/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/required-commands.html +++ b/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/required-commands.html @@ -9,7 +9,7 @@

requiredCommands

open val requiredCommands: Set<Class<out CommandData>>
-Overrides ConcreteClause.requiredCommands
+Overrides Clause.requiredCommands

Determine whether this clause runs or not



diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/verify-net-command.html b/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/verify-net-command.html index 0b71a7989a..92e2f6ebdd 100644 --- a/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/verify-net-command.html +++ b/docs/build/html/api/com.r3corda.contracts.clause/-net-clause/verify-net-command.html @@ -7,8 +7,8 @@ com.r3corda.contracts.clause / NetClause / verifyNetCommand

verifyNetCommand

- -fun verifyNetCommand(inputs: List<State<P>>, outputs: List<State<P>>, command: AuthenticatedObject<Net>, netState: NetState<P>): Unit
+ +fun verifyNetCommand(inputs: List<State<P>>, outputs: List<State<P>>, command: AuthenticatedObject<NetCommand>, netState: NetState<P>): Unit

Verify a netting command. This handles both close-out and payment netting.



diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-no-zero-sized-outputs/if-matched.html b/docs/build/html/api/com.r3corda.contracts.clause/-no-zero-sized-outputs/if-matched.html deleted file mode 100644 index 57324a7c9e..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.clause/-no-zero-sized-outputs/if-matched.html +++ /dev/null @@ -1,20 +0,0 @@ - - -NoZeroSizedOutputs.ifMatched - - - - -com.r3corda.contracts.clause / NoZeroSizedOutputs / ifMatched
-
-

ifMatched

- -open val ifMatched: MatchBehaviour
-Overrides Clause.ifMatched
-

Behaviour if this clause is not matches

-

Getter
-

Behaviour if this clause is not matches

-

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-no-zero-sized-outputs/if-not-matched.html b/docs/build/html/api/com.r3corda.contracts.clause/-no-zero-sized-outputs/if-not-matched.html deleted file mode 100644 index 01d324e3ec..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.clause/-no-zero-sized-outputs/if-not-matched.html +++ /dev/null @@ -1,20 +0,0 @@ - - -NoZeroSizedOutputs.ifNotMatched - - - - -com.r3corda.contracts.clause / NoZeroSizedOutputs / ifNotMatched
-
-

ifNotMatched

- -open val ifNotMatched: MatchBehaviour
-Overrides Clause.ifNotMatched
-

Behaviour if this clause is matched

-

Getter
-

Behaviour if this clause is matched

-

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-no-zero-sized-outputs/index.html b/docs/build/html/api/com.r3corda.contracts.clause/-no-zero-sized-outputs/index.html index baaa15afcc..ec55acc1d0 100644 --- a/docs/build/html/api/com.r3corda.contracts.clause/-no-zero-sized-outputs/index.html +++ b/docs/build/html/api/com.r3corda.contracts.clause/-no-zero-sized-outputs/index.html @@ -7,7 +7,7 @@ com.r3corda.contracts.clause / NoZeroSizedOutputs

NoZeroSizedOutputs

-open class NoZeroSizedOutputs<in S : FungibleAsset<T>, C : CommandData, T : Any> : ConcreteClause<S, C, Issued<T>>
+open class NoZeroSizedOutputs<in S : FungibleAsset<T>, C : CommandData, T : Any> : Clause<S, C, Issued<T>>

Clause for fungible asset contracts, which enforces that no output state should have a balance of zero.


@@ -30,7 +30,7 @@ a balance of zero.

-requiredCommands +requiredCommands open val requiredCommands: Set<Class<out CommandData>>

Determine whether this clause runs or not

diff --git a/docs/build/html/api/com.r3corda.contracts.clause/-no-zero-sized-outputs/required-commands.html b/docs/build/html/api/com.r3corda.contracts.clause/-no-zero-sized-outputs/required-commands.html deleted file mode 100644 index 8e6fd01c81..0000000000 --- a/docs/build/html/api/com.r3corda.contracts.clause/-no-zero-sized-outputs/required-commands.html +++ /dev/null @@ -1,20 +0,0 @@ - - -NoZeroSizedOutputs.requiredCommands - - - - -com.r3corda.contracts.clause / NoZeroSizedOutputs / requiredCommands
-
-

requiredCommands

- -open val requiredCommands: Set<Class<CommandData>>
-Overrides Clause.requiredCommands
-

Classes for commands which must ALL be present in transaction for this clause to be triggered

-

Getter
-

Classes for commands which must ALL be present in transaction for this clause to be triggered

-

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts.clause/index.html b/docs/build/html/api/com.r3corda.contracts.clause/index.html index a70c20889e..666ef4c4e3 100644 --- a/docs/build/html/api/com.r3corda.contracts.clause/index.html +++ b/docs/build/html/api/com.r3corda.contracts.clause/index.html @@ -14,7 +14,7 @@ AbstractConserveAmount -abstract class AbstractConserveAmount<S : FungibleAsset<T>, C : CommandData, T : Any> : ConcreteClause<S, C, Issued<T>>

Standardised clause for checking input/output balances of fungible assets. Requires that a +abstract class AbstractConserveAmount<S : FungibleAsset<T>, C : CommandData, T : Any> : Clause<S, C, Issued<T>>

Standardised clause for checking input/output balances of fungible assets. Requires that a Move command is provided, and errors if absent. Must be the last clause under a grouping clause; errors on no-match, ends on match.

@@ -23,7 +23,7 @@ errors on no-match, ends on match.

AbstractIssue -abstract class AbstractIssue<in S : ContractState, C : CommandData, T : Any> : ConcreteClause<S, C, Issued<T>>

Standard issue clause for contracts that issue fungible assets.

+abstract class AbstractIssue<in S : ContractState, C : CommandData, T : Any> : Clause<S, C, Issued<T>>

Standard issue clause for contracts that issue fungible assets.

@@ -51,7 +51,7 @@ Used in cases where all parties (or their proxies) are signing, such as central NetClause -open class NetClause<C : CommandData, P> : ConcreteClause<ContractState, C, Unit>

Clause for netting contract states. Currently only supports obligation contract.

+open class NetClause<C : CommandData, P> : Clause<ContractState, C, Unit>

Clause for netting contract states. Currently only supports obligation contract.

@@ -66,7 +66,7 @@ underlying issued thing.

NoZeroSizedOutputs -open class NoZeroSizedOutputs<in S : FungibleAsset<T>, C : CommandData, T : Any> : ConcreteClause<S, C, Issued<T>>

Clause for fungible asset contracts, which enforces that no output state should have +open class NoZeroSizedOutputs<in S : FungibleAsset<T>, C : CommandData, T : Any> : Clause<S, C, Issued<T>>

Clause for fungible asset contracts, which enforces that no output state should have a balance of zero.

diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-command-data-generator/-init-.html b/docs/build/html/api/com.r3corda.contracts.testing/-command-data-generator/-init-.html new file mode 100644 index 0000000000..d7cee844b7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-command-data-generator/-init-.html @@ -0,0 +1,14 @@ + + +CommandDataGenerator.<init> - + + + +com.r3corda.contracts.testing / CommandDataGenerator / <init>
+
+

<init>

+CommandDataGenerator()
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-command-data-generator/generate.html b/docs/build/html/api/com.r3corda.contracts.testing/-command-data-generator/generate.html new file mode 100644 index 0000000000..2bbcbebbf9 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-command-data-generator/generate.html @@ -0,0 +1,15 @@ + + +CommandDataGenerator.generate - + + + +com.r3corda.contracts.testing / CommandDataGenerator / generate
+
+

generate

+ +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): CommandData
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-command-data-generator/index.html b/docs/build/html/api/com.r3corda.contracts.testing/-command-data-generator/index.html new file mode 100644 index 0000000000..15e5eb711a --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-command-data-generator/index.html @@ -0,0 +1,36 @@ + + +CommandDataGenerator - + + + +com.r3corda.contracts.testing / CommandDataGenerator
+
+

CommandDataGenerator

+class CommandDataGenerator
+
+
+

Constructors

+ + + + + + + +
+<init> +CommandDataGenerator()
+

Functions

+ + + + + + + +
+generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): CommandData
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-command-generator/-init-.html b/docs/build/html/api/com.r3corda.contracts.testing/-command-generator/-init-.html new file mode 100644 index 0000000000..1bf8b55147 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-command-generator/-init-.html @@ -0,0 +1,14 @@ + + +CommandGenerator.<init> - + + + +com.r3corda.contracts.testing / CommandGenerator / <init>
+
+

<init>

+CommandGenerator()
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-command-generator/generate.html b/docs/build/html/api/com.r3corda.contracts.testing/-command-generator/generate.html new file mode 100644 index 0000000000..d8eded549c --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-command-generator/generate.html @@ -0,0 +1,15 @@ + + +CommandGenerator.generate - + + + +com.r3corda.contracts.testing / CommandGenerator / generate
+
+

generate

+ +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Command
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-command-generator/index.html b/docs/build/html/api/com.r3corda.contracts.testing/-command-generator/index.html new file mode 100644 index 0000000000..fed27583f5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-command-generator/index.html @@ -0,0 +1,36 @@ + + +CommandGenerator - + + + +com.r3corda.contracts.testing / CommandGenerator
+
+

CommandGenerator

+class CommandGenerator
+
+
+

Constructors

+ + + + + + + +
+<init> +CommandGenerator()
+

Functions

+ + + + + + + +
+generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Command
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-contract-state-generator/-init-.html b/docs/build/html/api/com.r3corda.contracts.testing/-contract-state-generator/-init-.html new file mode 100644 index 0000000000..af8e11eccc --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-contract-state-generator/-init-.html @@ -0,0 +1,20 @@ + + +ContractStateGenerator.<init> - + + + +com.r3corda.contracts.testing / ContractStateGenerator / <init>
+
+

<init>

+ContractStateGenerator()
+

This file contains generators for quickcheck style testing. The idea is that we can write random instance generators +for each type we have in the code and test against those instead of predefined mock data. This style of testing can +catch corner case bugs and test algebraic properties of the code, for example deserialize(serialize(generatedThing)) == generatedThing

+

TODO add combinators for easier Generator writing

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-contract-state-generator/generate.html b/docs/build/html/api/com.r3corda.contracts.testing/-contract-state-generator/generate.html new file mode 100644 index 0000000000..3c434ad059 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-contract-state-generator/generate.html @@ -0,0 +1,15 @@ + + +ContractStateGenerator.generate - + + + +com.r3corda.contracts.testing / ContractStateGenerator / generate
+
+

generate

+ +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): ContractState
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-contract-state-generator/index.html b/docs/build/html/api/com.r3corda.contracts.testing/-contract-state-generator/index.html new file mode 100644 index 0000000000..5facc223d8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-contract-state-generator/index.html @@ -0,0 +1,45 @@ + + +ContractStateGenerator - + + + +com.r3corda.contracts.testing / ContractStateGenerator
+
+

ContractStateGenerator

+class ContractStateGenerator
+

This file contains generators for quickcheck style testing. The idea is that we can write random instance generators +for each type we have in the code and test against those instead of predefined mock data. This style of testing can +catch corner case bugs and test algebraic properties of the code, for example deserialize(serialize(generatedThing)) == generatedThing

+

TODO add combinators for easier Generator writing

+
+
+
+
+

Constructors

+ + + + + + + +
+<init> +ContractStateGenerator()

This file contains generators for quickcheck style testing. The idea is that we can write random instance generators +for each type we have in the code and test against those instead of predefined mock data. This style of testing can +catch corner case bugs and test algebraic properties of the code, for example deserialize(serialize(generatedThing)) == generatedThing

+
+

Functions

+ + + + + + + +
+generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): ContractState
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-exit-generator/-init-.html b/docs/build/html/api/com.r3corda.contracts.testing/-exit-generator/-init-.html new file mode 100644 index 0000000000..dd935c9009 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-exit-generator/-init-.html @@ -0,0 +1,14 @@ + + +ExitGenerator.<init> - + + + +com.r3corda.contracts.testing / ExitGenerator / <init>
+
+

<init>

+ExitGenerator()
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-exit-generator/generate.html b/docs/build/html/api/com.r3corda.contracts.testing/-exit-generator/generate.html new file mode 100644 index 0000000000..996876a459 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-exit-generator/generate.html @@ -0,0 +1,15 @@ + + +ExitGenerator.generate - + + + +com.r3corda.contracts.testing / ExitGenerator / generate
+
+

generate

+ +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Exit
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-exit-generator/index.html b/docs/build/html/api/com.r3corda.contracts.testing/-exit-generator/index.html new file mode 100644 index 0000000000..29aa55667e --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-exit-generator/index.html @@ -0,0 +1,36 @@ + + +ExitGenerator - + + + +com.r3corda.contracts.testing / ExitGenerator
+
+

ExitGenerator

+class ExitGenerator
+
+
+

Constructors

+ + + + + + + +
+<init> +ExitGenerator()
+

Functions

+ + + + + + + +
+generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Exit
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-issue-generator/-init-.html b/docs/build/html/api/com.r3corda.contracts.testing/-issue-generator/-init-.html new file mode 100644 index 0000000000..ea2fdde4d8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-issue-generator/-init-.html @@ -0,0 +1,14 @@ + + +IssueGenerator.<init> - + + + +com.r3corda.contracts.testing / IssueGenerator / <init>
+
+

<init>

+IssueGenerator()
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-issue-generator/generate.html b/docs/build/html/api/com.r3corda.contracts.testing/-issue-generator/generate.html new file mode 100644 index 0000000000..fbc4665b98 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-issue-generator/generate.html @@ -0,0 +1,15 @@ + + +IssueGenerator.generate - + + + +com.r3corda.contracts.testing / IssueGenerator / generate
+
+

generate

+ +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Issue
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-issue-generator/index.html b/docs/build/html/api/com.r3corda.contracts.testing/-issue-generator/index.html new file mode 100644 index 0000000000..1aa1a995c4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-issue-generator/index.html @@ -0,0 +1,36 @@ + + +IssueGenerator - + + + +com.r3corda.contracts.testing / IssueGenerator
+
+

IssueGenerator

+class IssueGenerator
+
+
+

Constructors

+ + + + + + + +
+<init> +IssueGenerator()
+

Functions

+ + + + + + + +
+generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Issue
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-move-generator/-init-.html b/docs/build/html/api/com.r3corda.contracts.testing/-move-generator/-init-.html new file mode 100644 index 0000000000..7ed0c4b324 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-move-generator/-init-.html @@ -0,0 +1,14 @@ + + +MoveGenerator.<init> - + + + +com.r3corda.contracts.testing / MoveGenerator / <init>
+
+

<init>

+MoveGenerator()
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-move-generator/generate.html b/docs/build/html/api/com.r3corda.contracts.testing/-move-generator/generate.html new file mode 100644 index 0000000000..bcd0e4c49e --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-move-generator/generate.html @@ -0,0 +1,15 @@ + + +MoveGenerator.generate - + + + +com.r3corda.contracts.testing / MoveGenerator / generate
+
+

generate

+ +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Move
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-move-generator/index.html b/docs/build/html/api/com.r3corda.contracts.testing/-move-generator/index.html new file mode 100644 index 0000000000..84d5400ede --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-move-generator/index.html @@ -0,0 +1,36 @@ + + +MoveGenerator - + + + +com.r3corda.contracts.testing / MoveGenerator
+
+

MoveGenerator

+class MoveGenerator
+
+
+

Constructors

+ + + + + + + +
+<init> +MoveGenerator()
+

Functions

+ + + + + + + +
+generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Move
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-signed-transaction-generator/-init-.html b/docs/build/html/api/com.r3corda.contracts.testing/-signed-transaction-generator/-init-.html new file mode 100644 index 0000000000..d953195181 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-signed-transaction-generator/-init-.html @@ -0,0 +1,14 @@ + + +SignedTransactionGenerator.<init> - + + + +com.r3corda.contracts.testing / SignedTransactionGenerator / <init>
+
+

<init>

+SignedTransactionGenerator()
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-signed-transaction-generator/generate.html b/docs/build/html/api/com.r3corda.contracts.testing/-signed-transaction-generator/generate.html new file mode 100644 index 0000000000..44fe6e4c9b --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-signed-transaction-generator/generate.html @@ -0,0 +1,15 @@ + + +SignedTransactionGenerator.generate - + + + +com.r3corda.contracts.testing / SignedTransactionGenerator / generate
+
+

generate

+ +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): SignedTransaction
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-signed-transaction-generator/index.html b/docs/build/html/api/com.r3corda.contracts.testing/-signed-transaction-generator/index.html new file mode 100644 index 0000000000..c481e47972 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-signed-transaction-generator/index.html @@ -0,0 +1,36 @@ + + +SignedTransactionGenerator - + + + +com.r3corda.contracts.testing / SignedTransactionGenerator
+
+

SignedTransactionGenerator

+class SignedTransactionGenerator
+
+
+

Constructors

+ + + + + + + +
+<init> +SignedTransactionGenerator()
+

Functions

+ + + + + + + +
+generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): SignedTransaction
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-wired-transaction-generator/-init-.html b/docs/build/html/api/com.r3corda.contracts.testing/-wired-transaction-generator/-init-.html new file mode 100644 index 0000000000..2051cf300c --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-wired-transaction-generator/-init-.html @@ -0,0 +1,14 @@ + + +WiredTransactionGenerator.<init> - + + + +com.r3corda.contracts.testing / WiredTransactionGenerator / <init>
+
+

<init>

+WiredTransactionGenerator()
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-wired-transaction-generator/generate.html b/docs/build/html/api/com.r3corda.contracts.testing/-wired-transaction-generator/generate.html new file mode 100644 index 0000000000..2c123a1ff9 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-wired-transaction-generator/generate.html @@ -0,0 +1,15 @@ + + +WiredTransactionGenerator.generate - + + + +com.r3corda.contracts.testing / WiredTransactionGenerator / generate
+
+

generate

+ +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): WireTransaction
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/-wired-transaction-generator/index.html b/docs/build/html/api/com.r3corda.contracts.testing/-wired-transaction-generator/index.html new file mode 100644 index 0000000000..7a4084751a --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts.testing/-wired-transaction-generator/index.html @@ -0,0 +1,36 @@ + + +WiredTransactionGenerator - + + + +com.r3corda.contracts.testing / WiredTransactionGenerator
+
+

WiredTransactionGenerator

+class WiredTransactionGenerator
+
+
+

Constructors

+ + + + + + + +
+<init> +WiredTransactionGenerator()
+

Functions

+ + + + + + + +
+generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): WireTransaction
+ + diff --git a/docs/build/html/api/com.r3corda.contracts.testing/fill-with-some-test-cash.html b/docs/build/html/api/com.r3corda.contracts.testing/fill-with-some-test-cash.html index e9f136f6d8..cde9f6639f 100644 --- a/docs/build/html/api/com.r3corda.contracts.testing/fill-with-some-test-cash.html +++ b/docs/build/html/api/com.r3corda.contracts.testing/fill-with-some-test-cash.html @@ -8,9 +8,9 @@

fillWithSomeTestCash

-fun ServiceHub.fillWithSomeTestCash(howMuch: Amount<Currency>, outputNotary: Party = DUMMY_NOTARY, atLeastThisManyStates: Int = 3, atMostThisManyStates: Int = 10, rng: Random = Random(), ref: OpaqueBytes = OpaqueBytes(ByteArray(1, { 1 })), ownedBy: PublicKey? = null): Wallet
+fun ServiceHub.fillWithSomeTestCash(howMuch: Amount<Currency>, outputNotary: Party = DUMMY_NOTARY, atLeastThisManyStates: Int = 3, atMostThisManyStates: Int = 10, rng: Random = Random(), ref: OpaqueBytes = OpaqueBytes(ByteArray(1, { 1 })), ownedBy: PublicKey? = null): Vault

Creates a random set of between (by default) 3 and 10 cash states that add up to the given amount and adds them -to the wallet. This is intended for unit tests. The cash is issued by DUMMY_CASH_ISSUER and owned by the legal +to the vault. This is intended for unit tests. The cash is issued by DUMMY_CASH_ISSUER and owned by the legal identity key from the storage service.

The service hub needs to provide at least a key management service and a storage service.


@@ -19,7 +19,7 @@ identity key from the storage service.

outputNotary - the notary to use for output states. The transaction is NOT signed by this notary.

Return
-a wallet object that represents the generated states (it will NOT be the full wallet from the service hub).

+a vault object that represents the generated states (it will NOT be the full vault from the service hub).



diff --git a/docs/build/html/api/com.r3corda.contracts.testing/index.html b/docs/build/html/api/com.r3corda.contracts.testing/index.html index 93f27e737a..11e1efa26f 100644 --- a/docs/build/html/api/com.r3corda.contracts.testing/index.html +++ b/docs/build/html/api/com.r3corda.contracts.testing/index.html @@ -7,6 +7,62 @@ com.r3corda.contracts.testing

Package com.r3corda.contracts.testing

+

Types

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+CommandDataGenerator +class CommandDataGenerator
+CommandGenerator +class CommandGenerator
+ContractStateGenerator +class ContractStateGenerator

This file contains generators for quickcheck style testing. The idea is that we can write random instance generators +for each type we have in the code and test against those instead of predefined mock data. This style of testing can +catch corner case bugs and test algebraic properties of the code, for example deserialize(serialize(generatedThing)) == generatedThing

+
+ExitGenerator +class ExitGenerator
+IssueGenerator +class IssueGenerator
+MoveGenerator +class MoveGenerator
+SignedTransactionGenerator +class SignedTransactionGenerator
+WiredTransactionGenerator +class WiredTransactionGenerator

Functions

@@ -14,8 +70,8 @@ diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/-commands/-issue/notary.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/-commands/-issue/notary.html deleted file mode 100644 index 2f7d4e631a..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/-commands/-issue/notary.html +++ /dev/null @@ -1,15 +0,0 @@ - - -CommercialPaperLegacy.Commands.Issue.notary - - - - -com.r3corda.contracts / CommercialPaperLegacy / Commands / Issue / notary
-
-

notary

- -val notary: Party
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/-commands/-redeem/notary.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/-commands/-redeem/notary.html deleted file mode 100644 index ebf6fab7ee..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/-commands/-redeem/notary.html +++ /dev/null @@ -1,15 +0,0 @@ - - -CommercialPaperLegacy.Commands.Redeem.notary - - - - -com.r3corda.contracts / CommercialPaperLegacy / Commands / Redeem / notary
-
-

notary

- -val notary: Party
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/-state/participants.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/-state/participants.html index ac2953666d..a396f3f957 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/-state/participants.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/-state/participants.html @@ -12,7 +12,7 @@ Overrides ContractState.participants

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 participants has to be involved and approve the transaction +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction so that they receive the updated state, and dont 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 diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/generate-issue.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/generate-issue.html index 80002486c6..a43ea9dc1a 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/generate-issue.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/generate-issue.html @@ -8,7 +8,7 @@

generateIssue

-fun generateIssue(issuance: PartyAndReference, faceValue: Amount<Issued<Currency>>, maturityDate: Instant, notary: Party): TransactionBuilder
+fun generateIssue(issuance: PartyAndReference, faceValue: Amount<Issued<Currency>>, maturityDate: Instant, notary: Party): TransactionBuilder


diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/generate-move.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/generate-move.html index 63c5984706..097dd6b8e3 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/generate-move.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/generate-move.html @@ -7,8 +7,8 @@ com.r3corda.contracts / CommercialPaperLegacy / generateMove

generateMove

- -fun generateMove(tx: TransactionBuilder, paper: StateAndRef<State>, newOwner: PublicKey): Unit
+ +fun generateMove(tx: TransactionBuilder, paper: StateAndRef<State>, newOwner: PublicKey): Unit


diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/generate-redeem.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/generate-redeem.html index cc24dfa6ea..e6ed892864 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/generate-redeem.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/generate-redeem.html @@ -7,8 +7,8 @@ com.r3corda.contracts / CommercialPaperLegacy / generateRedeem

generateRedeem

- -fun generateRedeem(tx: TransactionBuilder, paper: StateAndRef<State>, wallet: Wallet): Unit
+ +fun generateRedeem(tx: TransactionBuilder, paper: StateAndRef<State>, vault: Vault): Unit


diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/index.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/index.html index 7e916f254d..e8e4649176 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/index.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper-legacy/index.html @@ -58,19 +58,19 @@ the contracts contents).

+fun generateIssue(issuance: PartyAndReference, faceValue: Amount<Issued<Currency>>, maturityDate: Instant, notary: Party): TransactionBuilder +fun generateMove(tx: TransactionBuilder, paper: StateAndRef<State>, newOwner: PublicKey): Unit +fun generateRedeem(tx: TransactionBuilder, paper: StateAndRef<State>, vault: Vault): Unit diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-issue/required-commands.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-issue/required-commands.html index 1146aeae13..f882a3f9f8 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-issue/required-commands.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-issue/required-commands.html @@ -9,7 +9,7 @@

requiredCommands

val requiredCommands: Set<Class<out CommandData>>
-Overrides ConcreteClause.requiredCommands
+Overrides Clause.requiredCommands

Determine whether this clause runs or not



diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-issue/verify.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-issue/verify.html index 05b2524dbc..1cd4ce3db5 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-issue/verify.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-issue/verify.html @@ -8,7 +8,7 @@

verify

-fun verify(tx: TransactionForContract, inputs: List<State>, outputs: List<State>, commands: List<AuthenticatedObject<Commands>>, token: Issued<Terms>?): Set<Commands>
+fun verify(tx: TransactionForContract, inputs: List<State>, outputs: List<State>, commands: List<AuthenticatedObject<Commands>>, groupingKey: Issued<Terms>?): Set<Commands>

Verify the transaction matches the conditions from this clause. For example, a "no zero amount output" clause would check each of the output states that it applies to, looking for a zero amount, and throw IllegalStateException if any matched.

diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-move/index.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-move/index.html index d9cbb14343..a3cfb760c1 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-move/index.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-move/index.html @@ -7,7 +7,7 @@ com.r3corda.contracts / CommercialPaper / Clauses / Move

Move

-class Move : ConcreteClause<State, Commands, Issued<Terms>>
+class Move : Clause<State, Commands, Issued<Terms>>


Constructors

diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-move/required-commands.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-move/required-commands.html index d95a9de2d5..1aa43eff68 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-move/required-commands.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-move/required-commands.html @@ -9,7 +9,7 @@

requiredCommands

val requiredCommands: Set<Class<out CommandData>>
-Overrides ConcreteClause.requiredCommands
+Overrides Clause.requiredCommands

Determine whether this clause runs or not



diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-redeem/index.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-redeem/index.html index 9d70abed80..3ac9e6d599 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-redeem/index.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-redeem/index.html @@ -7,7 +7,7 @@ com.r3corda.contracts / CommercialPaper / Clauses / Redeem

Redeem

-class Redeem : ConcreteClause<State, Commands, Issued<Terms>>
+class Redeem : Clause<State, Commands, Issued<Terms>>


Constructors

diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-redeem/required-commands.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-redeem/required-commands.html index 33d634c36c..feddffdd82 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-redeem/required-commands.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-redeem/required-commands.html @@ -9,7 +9,7 @@

requiredCommands

val requiredCommands: Set<Class<out CommandData>>
-Overrides ConcreteClause.requiredCommands
+Overrides Clause.requiredCommands

Determine whether this clause runs or not



diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/index.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/index.html index f6f89d80db..8cc8859e80 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/index.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/index.html @@ -29,13 +29,13 @@ +class Move : Clause<State, Commands, Issued<Terms>> +class Redeem : Clause<State, Commands, Issued<Terms>>
fillWithSomeTestCash -fun ServiceHub.fillWithSomeTestCash(howMuch: Amount<Currency>, outputNotary: Party = DUMMY_NOTARY, atLeastThisManyStates: Int = 3, atMostThisManyStates: Int = 10, rng: Random = Random(), ref: OpaqueBytes = OpaqueBytes(ByteArray(1, { 1 })), ownedBy: PublicKey? = null): Wallet

Creates a random set of between (by default) 3 and 10 cash states that add up to the given amount and adds them -to the wallet. This is intended for unit tests. The cash is issued by DUMMY_CASH_ISSUER and owned by the legal +fun ServiceHub.fillWithSomeTestCash(howMuch: Amount<Currency>, outputNotary: Party = DUMMY_NOTARY, atLeastThisManyStates: Int = 3, atMostThisManyStates: Int = 10, rng: Random = Random(), ref: OpaqueBytes = OpaqueBytes(ByteArray(1, { 1 })), ownedBy: PublicKey? = null): Vault

Creates a random set of between (by default) 3 and 10 cash states that add up to the given amount and adds them +to the vault. This is intended for unit tests. The cash is issued by DUMMY_CASH_ISSUER and owned by the legal identity key from the storage service.

generateIssue -fun generateIssue(issuance: PartyAndReference, faceValue: Amount<Issued<Currency>>, maturityDate: Instant, notary: Party): TransactionBuilder
generateMove -fun generateMove(tx: TransactionBuilder, paper: StateAndRef<State>, newOwner: PublicKey): Unit
generateRedeem -fun generateRedeem(tx: TransactionBuilder, paper: StateAndRef<State>, wallet: Wallet): Unit
diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-abstract-group-clause/-init-.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-abstract-group-clause/-init-.html deleted file mode 100644 index 42e4f312c1..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-abstract-group-clause/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -CommercialPaper.Clauses.AbstractGroupClause.<init> - - - - -com.r3corda.contracts / CommercialPaper / Clauses / AbstractGroupClause / <init>
-
-

<init>

-AbstractGroupClause()
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-abstract-group-clause/if-matched.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-abstract-group-clause/if-matched.html deleted file mode 100644 index fa3e876630..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-abstract-group-clause/if-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -CommercialPaper.Clauses.AbstractGroupClause.ifMatched - - - - -com.r3corda.contracts / CommercialPaper / Clauses / AbstractGroupClause / ifMatched
-
-

ifMatched

- -open val ifMatched: MatchBehaviour
-Overrides Clause.ifMatched
-

Behaviour if this clause is not matches

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-abstract-group-clause/if-not-matched.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-abstract-group-clause/if-not-matched.html deleted file mode 100644 index 227deeb5f5..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-abstract-group-clause/if-not-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -CommercialPaper.Clauses.AbstractGroupClause.ifNotMatched - - - - -com.r3corda.contracts / CommercialPaper / Clauses / AbstractGroupClause / ifNotMatched
-
-

ifNotMatched

- -open val ifNotMatched: MatchBehaviour
-Overrides Clause.ifNotMatched
-

Behaviour if this clause is matched

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-abstract-group-clause/index.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-abstract-group-clause/index.html deleted file mode 100644 index 53fede6b57..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-abstract-group-clause/index.html +++ /dev/null @@ -1,61 +0,0 @@ - - -CommercialPaper.Clauses.AbstractGroupClause - - - - -com.r3corda.contracts / CommercialPaper / Clauses / AbstractGroupClause
-
-

AbstractGroupClause

-abstract class AbstractGroupClause : GroupClause<State, Issued<Terms>>
-
-
-

Constructors

- - - - - - - -
-<init> -AbstractGroupClause()
-

Properties

- - - - - - - - - - - -
-ifMatched -open val ifMatched: MatchBehaviour

Behaviour if this clause is not matches

-
-ifNotMatched -open val ifNotMatched: MatchBehaviour

Behaviour if this clause is matched

-
-

Inheritors

- - - - - - - - - - - -
-Move -class Move : AbstractGroupClause
-Redeem -class Redeem : AbstractGroupClause
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-group/clauses.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-group/clauses.html deleted file mode 100644 index 6453f144dc..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-group/clauses.html +++ /dev/null @@ -1,16 +0,0 @@ - - -CommercialPaper.Clauses.Group.clauses - - - - -com.r3corda.contracts / CommercialPaper / Clauses / Group / clauses
-
-

clauses

- -val clauses: <ERROR CLASS>
-Overrides GroupClauseVerifier.clauses
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-group/extract-groups.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-group/extract-groups.html deleted file mode 100644 index 556d05c400..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-group/extract-groups.html +++ /dev/null @@ -1,16 +0,0 @@ - - -CommercialPaper.Clauses.Group.extractGroups - - - - -com.r3corda.contracts / CommercialPaper / Clauses / Group / extractGroups
-
-

extractGroups

- -fun extractGroups(tx: TransactionForContract): List<InOutGroup<State, Issued<Terms>>>
-Overrides GroupClauseVerifier.extractGroups
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-group/if-matched.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-group/if-matched.html deleted file mode 100644 index 41109bb3f8..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-group/if-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -CommercialPaper.Clauses.Group.ifMatched - - - - -com.r3corda.contracts / CommercialPaper / Clauses / Group / ifMatched
-
-

ifMatched

- -val ifMatched: MatchBehaviour
-Overrides SingleClause.ifMatched
-

Behaviour if this clause is not matches

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-group/if-not-matched.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-group/if-not-matched.html deleted file mode 100644 index 530b3c58c2..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-group/if-not-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -CommercialPaper.Clauses.Group.ifNotMatched - - - - -com.r3corda.contracts / CommercialPaper / Clauses / Group / ifNotMatched
-
-

ifNotMatched

- -val ifNotMatched: MatchBehaviour
-Overrides SingleClause.ifNotMatched
-

Behaviour if this clause is matched

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-issue/index.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-issue/index.html index bdfe283a63..bf61b00ff7 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-issue/index.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-clauses/-issue/index.html @@ -57,7 +57,7 @@
verify -fun verify(tx: TransactionForContract, inputs: List<State>, outputs: List<State>, commands: List<AuthenticatedObject<Commands>>, token: Issued<Terms>?): Set<Commands>

Verify the transaction matches the conditions from this clause. For example, a "no zero amount output" clause +fun verify(tx: TransactionForContract, inputs: List<State>, outputs: List<State>, commands: List<AuthenticatedObject<Commands>>, groupingKey: Issued<Terms>?): Set<Commands>

Verify the transaction matches the conditions from this clause. For example, a "no zero amount output" clause would check each of the output states that it applies to, looking for a zero amount, and throw IllegalStateException if any matched.

Move -class Move : ConcreteClause<State, Commands, Issued<Terms>>
Redeem -class Redeem : ConcreteClause<State, Commands, Issued<Terms>>
diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-commands/-issue/notary.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-commands/-issue/notary.html deleted file mode 100644 index 8e827201b0..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-commands/-issue/notary.html +++ /dev/null @@ -1,15 +0,0 @@ - - -CommercialPaper.Commands.Issue.notary - - - - -com.r3corda.contracts / CommercialPaper / Commands / Issue / notary
-
-

notary

- -val notary: Party
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-commands/-redeem/notary.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-commands/-redeem/notary.html deleted file mode 100644 index b517e2561e..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-commands/-redeem/notary.html +++ /dev/null @@ -1,15 +0,0 @@ - - -CommercialPaper.Commands.Redeem.notary - - - - -com.r3corda.contracts / CommercialPaper / Commands / Redeem / notary
-
-

notary

- -val notary: Party
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-state/participants.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-state/participants.html index 272c1e6369..dd7f30d6ec 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-state/participants.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-state/participants.html @@ -12,7 +12,7 @@ Overrides ContractState.participants

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 participants has to be involved and approve the transaction +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction so that they receive the updated state, and dont 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 @@ -22,7 +22,7 @@ list should just contain the owner.

Getter

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 participants has to be involved and approve the transaction +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction so that they receive the updated state, and dont 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 diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-state/without-owner.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-state/without-owner.html deleted file mode 100644 index a1837ce55b..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/-state/without-owner.html +++ /dev/null @@ -1,15 +0,0 @@ - - -CommercialPaper.State.withoutOwner - - - - -com.r3corda.contracts / CommercialPaper / State / withoutOwner
-
-

withoutOwner

- -fun withoutOwner(): State
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/clauses.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/clauses.html deleted file mode 100644 index 93a7d8a737..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/clauses.html +++ /dev/null @@ -1,16 +0,0 @@ - - -CommercialPaper.clauses - - - - -com.r3corda.contracts / CommercialPaper / clauses
-
-

clauses

- -val clauses: <ERROR CLASS>
-Overrides ClauseVerifier.clauses
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/extract-commands.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/extract-commands.html deleted file mode 100644 index 69b22d2a38..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/extract-commands.html +++ /dev/null @@ -1,16 +0,0 @@ - - -CommercialPaper.extractCommands - - - - -com.r3corda.contracts / CommercialPaper / extractCommands
-
-

extractCommands

- -fun extractCommands(tx: TransactionForContract): List<AuthenticatedObject<CommandData>>
-Overrides ClauseVerifier.extractCommands
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/generate-issue.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/generate-issue.html index 9cdc80b72e..d3be99c41a 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/generate-issue.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/generate-issue.html @@ -8,7 +8,7 @@

generateIssue

-fun generateIssue(issuance: PartyAndReference, faceValue: Amount<Issued<Currency>>, maturityDate: Instant, notary: Party): TransactionBuilder
+fun generateIssue(issuance: PartyAndReference, faceValue: Amount<Issued<Currency>>, maturityDate: Instant, notary: Party): TransactionBuilder

Returns a transaction that issues commercial paper, owned by the issuing parties key. Does not update an existing transaction because you arent able to issue multiple pieces of CP in a single transaction at the moment: this restriction is not fundamental and may be lifted later.

diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/generate-move.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/generate-move.html index abf3ecb4c7..65ab2d15c8 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/generate-move.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/generate-move.html @@ -7,8 +7,8 @@ com.r3corda.contracts / CommercialPaper / generateMove

generateMove

- -fun generateMove(tx: TransactionBuilder, paper: StateAndRef<State>, newOwner: PublicKey): Unit
+ +fun generateMove(tx: TransactionBuilder, paper: StateAndRef<State>, newOwner: PublicKey): Unit

Updates the given partial transaction with an input/output/command to reassign ownership of the paper.



diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/generate-redeem.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/generate-redeem.html index a62427bccf..8df41c22c3 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/generate-redeem.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/generate-redeem.html @@ -7,14 +7,14 @@ com.r3corda.contracts / CommercialPaper / generateRedeem

generateRedeem

- -fun generateRedeem(tx: TransactionBuilder, paper: StateAndRef<State>, wallet: List<StateAndRef<State>>): Unit
+ +fun generateRedeem(tx: TransactionBuilder, paper: StateAndRef<State>, vault: List<StateAndRef<State>>): Unit

Intended to be called by the issuer of some commercial paper, when an owner has notified us that they wish to redeem the paper. We must therefore send enough money to the key that owns the paper to satisfy the face value, and then ensure the paper is removed from the ledger.

Exceptions

-InsufficientBalanceException - if the wallet doesnt contain enough money to pay the redeemer.
+InsufficientBalanceException - if the vault doesnt contain enough money to pay the redeemer.


diff --git a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/index.html b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/index.html index ce8bd6590b..38de4c84b0 100644 --- a/docs/build/html/api/com.r3corda.contracts/-commercial-paper/index.html +++ b/docs/build/html/api/com.r3corda.contracts/-commercial-paper/index.html @@ -70,7 +70,7 @@ the contracts contents).

generateIssue -fun generateIssue(issuance: PartyAndReference, faceValue: Amount<Issued<Currency>>, maturityDate: Instant, notary: Party): TransactionBuilder

Returns a transaction that issues commercial paper, owned by the issuing parties key. Does not update +fun generateIssue(issuance: PartyAndReference, faceValue: Amount<Issued<Currency>>, maturityDate: Instant, notary: Party): TransactionBuilder

Returns a transaction that issues commercial paper, owned by the issuing parties key. Does not update an existing transaction because you arent able to issue multiple pieces of CP in a single transaction at the moment: this restriction is not fundamental and may be lifted later.

@@ -79,14 +79,14 @@ at the moment: this restriction is not fundamental and may be lifted later.

generateMove -fun generateMove(tx: TransactionBuilder, paper: StateAndRef<State>, newOwner: PublicKey): Unit

Updates the given partial transaction with an input/output/command to reassign ownership of the paper.

+fun generateMove(tx: TransactionBuilder, paper: StateAndRef<State>, newOwner: PublicKey): Unit

Updates the given partial transaction with an input/output/command to reassign ownership of the paper.

generateRedeem -fun generateRedeem(tx: TransactionBuilder, paper: StateAndRef<State>, wallet: List<StateAndRef<State>>): Unit

Intended to be called by the issuer of some commercial paper, when an owner has notified us that they wish +fun generateRedeem(tx: TransactionBuilder, paper: StateAndRef<State>, vault: List<StateAndRef<State>>): Unit

Intended to be called by the issuer of some commercial paper, when an owner has notified us that they wish to redeem the paper. We must therefore send enough money to the key that owns the paper to satisfy the face value, and then ensure the paper is removed from the ledger.

diff --git a/docs/build/html/api/com.r3corda.contracts/-fixed-rate/to-string.html b/docs/build/html/api/com.r3corda.contracts/-fixed-rate/to-string.html deleted file mode 100644 index 1c758a888d..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-fixed-rate/to-string.html +++ /dev/null @@ -1,15 +0,0 @@ - - -FixedRate.toString - - - - -com.r3corda.contracts / FixedRate / toString
-
-

toString

- -fun toString(): String
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/-init-.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/-init-.html deleted file mode 100644 index 85564c0083..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/-init-.html +++ /dev/null @@ -1,16 +0,0 @@ - - -InterestRateSwap.Clause.AbstractIRSClause.<init> - - - - -com.r3corda.contracts / InterestRateSwap / Clause / AbstractIRSClause / <init>
-
-

<init>

-AbstractIRSClause()
-

Common superclass for IRS contract clauses, which defines behaviour on match/no-match, and provides -helper functions for the clauses.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/check-leg-amounts.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/check-leg-amounts.html deleted file mode 100644 index 4adf54feb1..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/check-leg-amounts.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InterestRateSwap.Clause.AbstractIRSClause.checkLegAmounts - - - - -com.r3corda.contracts / InterestRateSwap / Clause / AbstractIRSClause / checkLegAmounts
-
-

checkLegAmounts

- -fun checkLegAmounts(legs: List<CommonLeg>): Unit
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/check-leg-dates.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/check-leg-dates.html deleted file mode 100644 index 265b7a230b..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/check-leg-dates.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InterestRateSwap.Clause.AbstractIRSClause.checkLegDates - - - - -com.r3corda.contracts / InterestRateSwap / Clause / AbstractIRSClause / checkLegDates
-
-

checkLegDates

- -fun checkLegDates(legs: List<CommonLeg>): Unit
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/check-rates.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/check-rates.html deleted file mode 100644 index da83089162..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/check-rates.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InterestRateSwap.Clause.AbstractIRSClause.checkRates - - - - -com.r3corda.contracts / InterestRateSwap / Clause / AbstractIRSClause / checkRates
-
-

checkRates

- -fun checkRates(legs: List<CommonLeg>): Boolean
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/check-schedules.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/check-schedules.html deleted file mode 100644 index 1109024b4b..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/check-schedules.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InterestRateSwap.Clause.AbstractIRSClause.checkSchedules - - - - -com.r3corda.contracts / InterestRateSwap / Clause / AbstractIRSClause / checkSchedules
-
-

checkSchedules

- -fun checkSchedules(legs: List<CommonLeg>): Boolean
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/get-floating-leg-payments-differences.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/get-floating-leg-payments-differences.html deleted file mode 100644 index 67c044863f..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/get-floating-leg-payments-differences.html +++ /dev/null @@ -1,16 +0,0 @@ - - -InterestRateSwap.Clause.AbstractIRSClause.getFloatingLegPaymentsDifferences - - - - -com.r3corda.contracts / InterestRateSwap / Clause / AbstractIRSClause / getFloatingLegPaymentsDifferences
-
-

getFloatingLegPaymentsDifferences

- -fun getFloatingLegPaymentsDifferences(payments1: Map<LocalDate, Event>, payments2: Map<LocalDate, Event>): List<<ERROR CLASS><LocalDate, <ERROR CLASS><FloatingRatePaymentEvent, FloatingRatePaymentEvent>>>
-

Compares two schedules of Floating Leg Payments, returns the difference (i.e. omissions in either leg or changes to the values).

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/if-matched.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/if-matched.html deleted file mode 100644 index 6e2ec104ac..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/if-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -InterestRateSwap.Clause.AbstractIRSClause.ifMatched - - - - -com.r3corda.contracts / InterestRateSwap / Clause / AbstractIRSClause / ifMatched
-
-

ifMatched

- -open val ifMatched: MatchBehaviour
-Overrides Clause.ifMatched
-

Behaviour if this clause is not matches

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/if-not-matched.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/if-not-matched.html deleted file mode 100644 index ff9b373577..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/if-not-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -InterestRateSwap.Clause.AbstractIRSClause.ifNotMatched - - - - -com.r3corda.contracts / InterestRateSwap / Clause / AbstractIRSClause / ifNotMatched
-
-

ifNotMatched

- -open val ifNotMatched: MatchBehaviour
-Overrides Clause.ifNotMatched
-

Behaviour if this clause is matched

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/index.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/index.html deleted file mode 100644 index f67689d911..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-abstract-i-r-s-clause/index.html +++ /dev/null @@ -1,113 +0,0 @@ - - -InterestRateSwap.Clause.AbstractIRSClause - - - - -com.r3corda.contracts / InterestRateSwap / Clause / AbstractIRSClause
-
-

AbstractIRSClause

-abstract class AbstractIRSClause : GroupClause<State, UniqueIdentifier>
-

Common superclass for IRS contract clauses, which defines behaviour on match/no-match, and provides -helper functions for the clauses.

-
-
-

Constructors

- - - - - - - -
-<init> -AbstractIRSClause()

Common superclass for IRS contract clauses, which defines behaviour on match/no-match, and provides -helper functions for the clauses.

-
-

Properties

- - - - - - - - - - - -
-ifMatched -open val ifMatched: MatchBehaviour

Behaviour if this clause is not matches

-
-ifNotMatched -open val ifNotMatched: MatchBehaviour

Behaviour if this clause is matched

-
-

Functions

- - - - - - - - - - - - - - - - - - - - - - - -
-checkLegAmounts -fun checkLegAmounts(legs: List<CommonLeg>): Unit
-checkLegDates -fun checkLegDates(legs: List<CommonLeg>): Unit
-checkRates -fun checkRates(legs: List<CommonLeg>): Boolean
-checkSchedules -fun checkSchedules(legs: List<CommonLeg>): Boolean
-getFloatingLegPaymentsDifferences -fun getFloatingLegPaymentsDifferences(payments1: Map<LocalDate, Event>, payments2: Map<LocalDate, Event>): List<<ERROR CLASS><LocalDate, <ERROR CLASS><FloatingRatePaymentEvent, FloatingRatePaymentEvent>>>

Compares two schedules of Floating Leg Payments, returns the difference (i.e. omissions in either leg or changes to the values).

-
-

Inheritors

- - - - - - - - - - - - - - - - - - - -
-Agree -class Agree : AbstractIRSClause
-Fix -class Fix : AbstractIRSClause
-Mature -class Mature : AbstractIRSClause
-Pay -class Pay : AbstractIRSClause
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-agree/-init-.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-agree/-init-.html deleted file mode 100644 index 2774377bae..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-agree/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -InterestRateSwap.Clause.Agree.<init> - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Agree / <init>
-
-

<init>

-Agree()
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-agree/index.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-agree/index.html deleted file mode 100644 index 09c90a78e8..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-agree/index.html +++ /dev/null @@ -1,103 +0,0 @@ - - -InterestRateSwap.Clause.Agree - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Agree
-
-

Agree

-class Agree : AbstractIRSClause
-
-
-

Constructors

- - - - - - - -
-<init> -Agree()
-

Properties

- - - - - - - -
-requiredCommands -val requiredCommands: <ERROR CLASS>

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-

Inherited Properties

- - - - - - - - - - - -
-ifMatched -open val ifMatched: MatchBehaviour

Behaviour if this clause is not matches

-
-ifNotMatched -open val ifNotMatched: MatchBehaviour

Behaviour if this clause is matched

-
-

Functions

- - - - - - - -
-verify -fun verify(tx: TransactionForContract, inputs: List<State>, outputs: List<State>, commands: Collection<AuthenticatedObject<CommandData>>, token: UniqueIdentifier): Set<CommandData>
-

Inherited Functions

- - - - - - - - - - - - - - - - - - - - - - - -
-checkLegAmounts -fun checkLegAmounts(legs: List<CommonLeg>): Unit
-checkLegDates -fun checkLegDates(legs: List<CommonLeg>): Unit
-checkRates -fun checkRates(legs: List<CommonLeg>): Boolean
-checkSchedules -fun checkSchedules(legs: List<CommonLeg>): Boolean
-getFloatingLegPaymentsDifferences -fun getFloatingLegPaymentsDifferences(payments1: Map<LocalDate, Event>, payments2: Map<LocalDate, Event>): List<<ERROR CLASS><LocalDate, <ERROR CLASS><FloatingRatePaymentEvent, FloatingRatePaymentEvent>>>

Compares two schedules of Floating Leg Payments, returns the difference (i.e. omissions in either leg or changes to the values).

-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-agree/required-commands.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-agree/required-commands.html deleted file mode 100644 index cfe6b9d13b..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-agree/required-commands.html +++ /dev/null @@ -1,17 +0,0 @@ - - -InterestRateSwap.Clause.Agree.requiredCommands - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Agree / requiredCommands
-
-

requiredCommands

- -val requiredCommands: <ERROR CLASS>
-Overrides Clause.requiredCommands
-

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-agree/verify.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-agree/verify.html deleted file mode 100644 index fdc5ab961d..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-agree/verify.html +++ /dev/null @@ -1,18 +0,0 @@ - - -InterestRateSwap.Clause.Agree.verify - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Agree / verify
-
-

verify

- -fun verify(tx: TransactionForContract, inputs: List<State>, outputs: List<State>, commands: Collection<AuthenticatedObject<CommandData>>, token: UniqueIdentifier): Set<CommandData>
-

Return
-the set of commands that are consumed IF this clause is matched, and cannot be used to match a -later clause.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-fix/-init-.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-fix/-init-.html deleted file mode 100644 index 689d101f64..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-fix/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -InterestRateSwap.Clause.Fix.<init> - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Fix / <init>
-
-

<init>

-Fix()
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-fix/index.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-fix/index.html deleted file mode 100644 index a5494938f0..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-fix/index.html +++ /dev/null @@ -1,103 +0,0 @@ - - -InterestRateSwap.Clause.Fix - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Fix
-
-

Fix

-class Fix : AbstractIRSClause
-
-
-

Constructors

- - - - - - - -
-<init> -Fix()
-

Properties

- - - - - - - -
-requiredCommands -val requiredCommands: <ERROR CLASS>

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-

Inherited Properties

- - - - - - - - - - - -
-ifMatched -open val ifMatched: MatchBehaviour

Behaviour if this clause is not matches

-
-ifNotMatched -open val ifNotMatched: MatchBehaviour

Behaviour if this clause is matched

-
-

Functions

- - - - - - - -
-verify -fun verify(tx: TransactionForContract, inputs: List<State>, outputs: List<State>, commands: Collection<AuthenticatedObject<CommandData>>, token: UniqueIdentifier): Set<CommandData>
-

Inherited Functions

- - - - - - - - - - - - - - - - - - - - - - - -
-checkLegAmounts -fun checkLegAmounts(legs: List<CommonLeg>): Unit
-checkLegDates -fun checkLegDates(legs: List<CommonLeg>): Unit
-checkRates -fun checkRates(legs: List<CommonLeg>): Boolean
-checkSchedules -fun checkSchedules(legs: List<CommonLeg>): Boolean
-getFloatingLegPaymentsDifferences -fun getFloatingLegPaymentsDifferences(payments1: Map<LocalDate, Event>, payments2: Map<LocalDate, Event>): List<<ERROR CLASS><LocalDate, <ERROR CLASS><FloatingRatePaymentEvent, FloatingRatePaymentEvent>>>

Compares two schedules of Floating Leg Payments, returns the difference (i.e. omissions in either leg or changes to the values).

-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-fix/required-commands.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-fix/required-commands.html deleted file mode 100644 index 6329c03201..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-fix/required-commands.html +++ /dev/null @@ -1,17 +0,0 @@ - - -InterestRateSwap.Clause.Fix.requiredCommands - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Fix / requiredCommands
-
-

requiredCommands

- -val requiredCommands: <ERROR CLASS>
-Overrides Clause.requiredCommands
-

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-fix/verify.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-fix/verify.html deleted file mode 100644 index 76b372a720..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-fix/verify.html +++ /dev/null @@ -1,18 +0,0 @@ - - -InterestRateSwap.Clause.Fix.verify - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Fix / verify
-
-

verify

- -fun verify(tx: TransactionForContract, inputs: List<State>, outputs: List<State>, commands: Collection<AuthenticatedObject<CommandData>>, token: UniqueIdentifier): Set<CommandData>
-

Return
-the set of commands that are consumed IF this clause is matched, and cannot be used to match a -later clause.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/-init-.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/-init-.html deleted file mode 100644 index bdadb73df2..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -InterestRateSwap.Clause.Group.<init> - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Group / <init>
-
-

<init>

-Group()
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/clauses.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/clauses.html deleted file mode 100644 index a0b4fd0eab..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/clauses.html +++ /dev/null @@ -1,16 +0,0 @@ - - -InterestRateSwap.Clause.Group.clauses - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Group / clauses
-
-

clauses

- -val clauses: <ERROR CLASS>
-Overrides GroupClauseVerifier.clauses
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/extract-groups.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/extract-groups.html deleted file mode 100644 index 58dde2338b..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/extract-groups.html +++ /dev/null @@ -1,16 +0,0 @@ - - -InterestRateSwap.Clause.Group.extractGroups - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Group / extractGroups
-
-

extractGroups

- -fun extractGroups(tx: TransactionForContract): List<InOutGroup<State, String>>
-Overrides GroupClauseVerifier.extractGroups
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/group-states.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/group-states.html deleted file mode 100644 index 140b18e6ee..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/group-states.html +++ /dev/null @@ -1,16 +0,0 @@ - - -InterestRateSwap.Clause.Group.groupStates - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Group / groupStates
-
-

groupStates

- -fun groupStates(tx: TransactionForContract): List<InOutGroup<State, UniqueIdentifier>>
-Overrides GroupClauseVerifier.groupStates
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/if-matched.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/if-matched.html deleted file mode 100644 index ea71cc358a..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/if-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -InterestRateSwap.Clause.Group.ifMatched - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Group / ifMatched
-
-

ifMatched

- -val ifMatched: MatchBehaviour
-Overrides SingleClause.ifMatched
-

Behaviour if this clause is not matches

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/if-not-matched.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/if-not-matched.html deleted file mode 100644 index 8419ce716e..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/if-not-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -InterestRateSwap.Clause.Group.ifNotMatched - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Group / ifNotMatched
-
-

ifNotMatched

- -val ifNotMatched: MatchBehaviour
-Overrides SingleClause.ifNotMatched
-

Behaviour if this clause is matched

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/index.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/index.html deleted file mode 100644 index bb431ce748..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-group/index.html +++ /dev/null @@ -1,87 +0,0 @@ - - -InterestRateSwap.Clause.Group - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Group
-
-

Group

-class Group : GroupClauseVerifier<State, UniqueIdentifier>
-
-
-

Constructors

- - - - - - - -
-<init> -Group()
-

Properties

- - - - - - - - - - - - - - - -
-clauses -val clauses: <ERROR CLASS>
-ifMatched -val ifMatched: MatchBehaviour

Behaviour if this clause is not matches

-
-ifNotMatched -val ifNotMatched: MatchBehaviour

Behaviour if this clause is matched

-
-

Inherited Properties

- - - - - - - -
-requiredCommands -open val requiredCommands: Set<Class<out CommandData>>

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-

Functions

- - - - - - - -
-groupStates -fun groupStates(tx: TransactionForContract): List<InOutGroup<State, UniqueIdentifier>>
-

Inherited Functions

- - - - - - - -
-verify -open fun verify(tx: TransactionForContract, commands: Collection<AuthenticatedObject<CommandData>>): Set<CommandData>

Verify the transaction matches the conditions from this clause. For example, a "no zero amount output" clause -would check each of the output states that it applies to, looking for a zero amount, and throw IllegalStateException -if any matched.

-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-mature/-init-.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-mature/-init-.html deleted file mode 100644 index 56e2bcce0d..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-mature/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -InterestRateSwap.Clause.Mature.<init> - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Mature / <init>
-
-

<init>

-Mature()
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-mature/index.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-mature/index.html deleted file mode 100644 index 72caed3111..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-mature/index.html +++ /dev/null @@ -1,103 +0,0 @@ - - -InterestRateSwap.Clause.Mature - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Mature
-
-

Mature

-class Mature : AbstractIRSClause
-
-
-

Constructors

- - - - - - - -
-<init> -Mature()
-

Properties

- - - - - - - -
-requiredCommands -val requiredCommands: <ERROR CLASS>

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-

Inherited Properties

- - - - - - - - - - - -
-ifMatched -open val ifMatched: MatchBehaviour

Behaviour if this clause is not matches

-
-ifNotMatched -open val ifNotMatched: MatchBehaviour

Behaviour if this clause is matched

-
-

Functions

- - - - - - - -
-verify -fun verify(tx: TransactionForContract, inputs: List<State>, outputs: List<State>, commands: Collection<AuthenticatedObject<CommandData>>, token: UniqueIdentifier): Set<CommandData>
-

Inherited Functions

- - - - - - - - - - - - - - - - - - - - - - - -
-checkLegAmounts -fun checkLegAmounts(legs: List<CommonLeg>): Unit
-checkLegDates -fun checkLegDates(legs: List<CommonLeg>): Unit
-checkRates -fun checkRates(legs: List<CommonLeg>): Boolean
-checkSchedules -fun checkSchedules(legs: List<CommonLeg>): Boolean
-getFloatingLegPaymentsDifferences -fun getFloatingLegPaymentsDifferences(payments1: Map<LocalDate, Event>, payments2: Map<LocalDate, Event>): List<<ERROR CLASS><LocalDate, <ERROR CLASS><FloatingRatePaymentEvent, FloatingRatePaymentEvent>>>

Compares two schedules of Floating Leg Payments, returns the difference (i.e. omissions in either leg or changes to the values).

-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-mature/required-commands.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-mature/required-commands.html deleted file mode 100644 index b40f35b75f..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-mature/required-commands.html +++ /dev/null @@ -1,17 +0,0 @@ - - -InterestRateSwap.Clause.Mature.requiredCommands - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Mature / requiredCommands
-
-

requiredCommands

- -val requiredCommands: <ERROR CLASS>
-Overrides Clause.requiredCommands
-

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-mature/verify.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-mature/verify.html deleted file mode 100644 index a067455406..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-mature/verify.html +++ /dev/null @@ -1,18 +0,0 @@ - - -InterestRateSwap.Clause.Mature.verify - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Mature / verify
-
-

verify

- -fun verify(tx: TransactionForContract, inputs: List<State>, outputs: List<State>, commands: Collection<AuthenticatedObject<CommandData>>, token: UniqueIdentifier): Set<CommandData>
-

Return
-the set of commands that are consumed IF this clause is matched, and cannot be used to match a -later clause.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-pay/-init-.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-pay/-init-.html deleted file mode 100644 index 45dc071ca0..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-pay/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -InterestRateSwap.Clause.Pay.<init> - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Pay / <init>
-
-

<init>

-Pay()
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-pay/index.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-pay/index.html deleted file mode 100644 index 76c0208f21..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-pay/index.html +++ /dev/null @@ -1,103 +0,0 @@ - - -InterestRateSwap.Clause.Pay - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Pay
-
-

Pay

-class Pay : AbstractIRSClause
-
-
-

Constructors

- - - - - - - -
-<init> -Pay()
-

Properties

- - - - - - - -
-requiredCommands -val requiredCommands: <ERROR CLASS>

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-

Inherited Properties

- - - - - - - - - - - -
-ifMatched -open val ifMatched: MatchBehaviour

Behaviour if this clause is not matches

-
-ifNotMatched -open val ifNotMatched: MatchBehaviour

Behaviour if this clause is matched

-
-

Functions

- - - - - - - -
-verify -fun verify(tx: TransactionForContract, inputs: List<State>, outputs: List<State>, commands: Collection<AuthenticatedObject<CommandData>>, token: UniqueIdentifier): Set<CommandData>
-

Inherited Functions

- - - - - - - - - - - - - - - - - - - - - - - -
-checkLegAmounts -fun checkLegAmounts(legs: List<CommonLeg>): Unit
-checkLegDates -fun checkLegDates(legs: List<CommonLeg>): Unit
-checkRates -fun checkRates(legs: List<CommonLeg>): Boolean
-checkSchedules -fun checkSchedules(legs: List<CommonLeg>): Boolean
-getFloatingLegPaymentsDifferences -fun getFloatingLegPaymentsDifferences(payments1: Map<LocalDate, Event>, payments2: Map<LocalDate, Event>): List<<ERROR CLASS><LocalDate, <ERROR CLASS><FloatingRatePaymentEvent, FloatingRatePaymentEvent>>>

Compares two schedules of Floating Leg Payments, returns the difference (i.e. omissions in either leg or changes to the values).

-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-pay/required-commands.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-pay/required-commands.html deleted file mode 100644 index d69d45b5de..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-pay/required-commands.html +++ /dev/null @@ -1,17 +0,0 @@ - - -InterestRateSwap.Clause.Pay.requiredCommands - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Pay / requiredCommands
-
-

requiredCommands

- -val requiredCommands: <ERROR CLASS>
-Overrides Clause.requiredCommands
-

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-pay/verify.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-pay/verify.html deleted file mode 100644 index ae3401f796..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-pay/verify.html +++ /dev/null @@ -1,18 +0,0 @@ - - -InterestRateSwap.Clause.Pay.verify - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Pay / verify
-
-

verify

- -fun verify(tx: TransactionForContract, inputs: List<State>, outputs: List<State>, commands: Collection<AuthenticatedObject<CommandData>>, token: UniqueIdentifier): Set<CommandData>
-

Return
-the set of commands that are consumed IF this clause is matched, and cannot be used to match a -later clause.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/-init-.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/-init-.html deleted file mode 100644 index cbc05f0e8c..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -InterestRateSwap.Clause.Timestamped.<init> - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Timestamped / <init>
-
-

<init>

-Timestamped()
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/if-matched.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/if-matched.html deleted file mode 100644 index 659421b418..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/if-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -InterestRateSwap.Clause.Timestamped.ifMatched - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Timestamped / ifMatched
-
-

ifMatched

- -val ifMatched: MatchBehaviour
-Overrides Clause.ifMatched
-

Behaviour if this clause is not matches

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/if-not-matched.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/if-not-matched.html deleted file mode 100644 index 32994f4f21..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/if-not-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -InterestRateSwap.Clause.Timestamped.ifNotMatched - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Timestamped / ifNotMatched
-
-

ifNotMatched

- -val ifNotMatched: MatchBehaviour
-Overrides Clause.ifNotMatched
-

Behaviour if this clause is matched

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/index.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/index.html deleted file mode 100644 index 0465eb5c32..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - -InterestRateSwap.Clause.Timestamped - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Timestamped
-
-

Timestamped

-class Timestamped : SingleClause
-
-
-

Constructors

- - - - - - - -
-<init> -Timestamped()
-

Inherited Properties

- - - - - - - - - - - - - - - -
-ifMatched -open val ifMatched: MatchBehaviour

Behaviour if this clause is not matches

-
-ifNotMatched -open val ifNotMatched: MatchBehaviour

Behaviour if this clause is matched

-
-requiredCommands -open val requiredCommands: Set<Class<out CommandData>>

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-

Functions

- - - - - - - -
-verify -fun verify(tx: TransactionForContract, commands: Collection<AuthenticatedObject<CommandData>>): Set<CommandData>

Verify the transaction matches the conditions from this clause. For example, a "no zero amount output" clause -would check each of the output states that it applies to, looking for a zero amount, and throw IllegalStateException -if any matched.

-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/required-commands.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/required-commands.html deleted file mode 100644 index 84d613c22c..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/required-commands.html +++ /dev/null @@ -1,17 +0,0 @@ - - -InterestRateSwap.Clause.Timestamped.requiredCommands - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Timestamped / requiredCommands
-
-

requiredCommands

- -val requiredCommands: <ERROR CLASS>
-Overrides Clause.requiredCommands
-

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/verify.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/verify.html deleted file mode 100644 index a9c80c3cb4..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/-timestamped/verify.html +++ /dev/null @@ -1,24 +0,0 @@ - - -InterestRateSwap.Clause.Timestamped.verify - - - - -com.r3corda.contracts / InterestRateSwap / Clause / Timestamped / verify
-
-

verify

- -fun verify(tx: TransactionForContract, commands: Collection<AuthenticatedObject<CommandData>>): Set<CommandData>
-Overrides SingleVerify.verify
-

Verify the transaction matches the conditions from this clause. For example, a "no zero amount output" clause -would check each of the output states that it applies to, looking for a zero amount, and throw IllegalStateException -if any matched.

-

Return
-the set of commands that are consumed IF this clause is matched, and cannot be used to match a -later clause. This would normally be all commands matching "requiredCommands" for this clause, but some -verify() functions may do further filtering on possible matches, and return a subset. This may also include -commands that were not required (for example the Exit command for fungible assets is optional).

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/index.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/index.html deleted file mode 100644 index a83ed2b1f2..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clause/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - -InterestRateSwap.Clause - - - - -com.r3corda.contracts / InterestRateSwap / Clause
-
-

Clause

-interface Clause
-
-
-

Types

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-AbstractIRSClause -abstract class AbstractIRSClause : GroupClause<State, UniqueIdentifier>

Common superclass for IRS contract clauses, which defines behaviour on match/no-match, and provides -helper functions for the clauses.

-
-Agree -class Agree : AbstractIRSClause
-Fix -class Fix : AbstractIRSClause
-Group -class Group : GroupClauseVerifier<State, UniqueIdentifier>
-Mature -class Mature : AbstractIRSClause
-Pay -class Pay : AbstractIRSClause
-Timestamped -class Timestamped : SingleClause
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-abstract-i-r-s-clause/index.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-abstract-i-r-s-clause/index.html index b176f43a24..f2fbdce742 100644 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-abstract-i-r-s-clause/index.html +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-abstract-i-r-s-clause/index.html @@ -7,7 +7,7 @@ com.r3corda.contracts / InterestRateSwap / Clauses / AbstractIRSClause

AbstractIRSClause

-abstract class AbstractIRSClause : ConcreteClause<State, Commands, UniqueIdentifier>
+abstract class AbstractIRSClause : Clause<State, Commands, UniqueIdentifier>

Common superclass for IRS contract clauses, which defines behaviour on match/no-match, and provides helper functions for the clauses.


@@ -30,7 +30,7 @@ helper functions for the clauses.

-requiredCommands +requiredCommands open val requiredCommands: Set<Class<out CommandData>>

Determine whether this clause runs or not

diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-agree/required-commands.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-agree/required-commands.html index 00ee067c9f..d4f3d77ed9 100644 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-agree/required-commands.html +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-agree/required-commands.html @@ -9,7 +9,7 @@

requiredCommands

val requiredCommands: Set<Class<out CommandData>>
-Overrides ConcreteClause.requiredCommands
+Overrides Clause.requiredCommands

Determine whether this clause runs or not



diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-fix/required-commands.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-fix/required-commands.html index 6daf5fc146..005e161cfc 100644 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-fix/required-commands.html +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-fix/required-commands.html @@ -9,7 +9,7 @@

requiredCommands

val requiredCommands: Set<Class<out CommandData>>
-Overrides ConcreteClause.requiredCommands
+Overrides Clause.requiredCommands

Determine whether this clause runs or not



diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-mature/required-commands.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-mature/required-commands.html index 7c50ebe133..09f3798bcd 100644 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-mature/required-commands.html +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-mature/required-commands.html @@ -9,7 +9,7 @@

requiredCommands

val requiredCommands: Set<Class<out CommandData>>
-Overrides ConcreteClause.requiredCommands
+Overrides Clause.requiredCommands

Determine whether this clause runs or not



diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-pay/required-commands.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-pay/required-commands.html index 4d947248d1..ec48e8fd28 100644 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-pay/required-commands.html +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-pay/required-commands.html @@ -9,7 +9,7 @@

requiredCommands

val requiredCommands: Set<Class<out CommandData>>
-Overrides ConcreteClause.requiredCommands
+Overrides Clause.requiredCommands

Determine whether this clause runs or not



diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-timestamped/index.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-timestamped/index.html index 7969b594fc..098186b961 100644 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-timestamped/index.html +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/-timestamped/index.html @@ -7,7 +7,7 @@ com.r3corda.contracts / InterestRateSwap / Clauses / Timestamped

Timestamped

-class Timestamped : ConcreteClause<ContractState, Commands, Unit>
+class Timestamped : Clause<ContractState, Commands, Unit>


Constructors

@@ -26,7 +26,7 @@ -requiredCommands +requiredCommands open val requiredCommands: Set<Class<out CommandData>>

Determine whether this clause runs or not

diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/index.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/index.html index 59ecd08969..c9253eff31 100644 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/index.html +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-clauses/index.html @@ -17,7 +17,7 @@ AbstractIRSClause -abstract class AbstractIRSClause : ConcreteClause<State, Commands, UniqueIdentifier>

Common superclass for IRS contract clauses, which defines behaviour on match/no-match, and provides +abstract class AbstractIRSClause : Clause<State, Commands, UniqueIdentifier>

Common superclass for IRS contract clauses, which defines behaviour on match/no-match, and provides helper functions for the clauses.

@@ -55,7 +55,7 @@ helper functions for the clauses.

Timestamped -class Timestamped : ConcreteClause<ContractState, Commands, Unit> +class Timestamped : Clause<ContractState, Commands, Unit> diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-commands/-fix/-init-.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-commands/-fix/-init-.html deleted file mode 100644 index b377cdd2d7..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-commands/-fix/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -InterestRateSwap.Commands.Fix.<init> - - - - -com.r3corda.contracts / InterestRateSwap / Commands / Fix / <init>
-
-

<init>

-Fix()
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-commands/-fix/index.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-commands/-fix/index.html deleted file mode 100644 index 7fa4309191..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-commands/-fix/index.html +++ /dev/null @@ -1,42 +0,0 @@ - - -InterestRateSwap.Commands.Fix - - - - -com.r3corda.contracts / InterestRateSwap / Commands / Fix
-
-

Fix

-class Fix : TypeOnlyCommandData, Commands
-
-
-

Constructors

- - - - - - - -
-<init> -Fix()
-

Inherited Functions

- - - - - - - - - - - -
-equals -open fun equals(other: Any?): Boolean
-hashCode -open fun hashCode(): <ERROR CLASS>
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-oracle-type.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-oracle-type.html new file mode 100644 index 0000000000..b262502454 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-oracle-type.html @@ -0,0 +1,54 @@ + + +InterestRateSwap.OracleType - + + + +com.r3corda.contracts / InterestRateSwap / OracleType
+
+

OracleType

+object OracleType : ServiceType
+
+
+

Inherited Properties

+ + + + + + + +
+id +val id: String
+

Inherited Functions

+ + + + + + + + + + + + + + + + + + + +
+equals +open operator fun equals(other: Any?): Boolean
+hashCode +open fun hashCode(): Int
+isSubTypeOf +fun isSubTypeOf(superType: ServiceType): Boolean
+toString +open fun toString(): String
+ + diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/generate-agreement.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/generate-agreement.html index 2d3f06b97c..07ebec2e34 100644 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/generate-agreement.html +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/generate-agreement.html @@ -8,7 +8,7 @@

generateAgreement

-fun generateAgreement(notary: Party): TransactionBuilder
+fun generateAgreement(notary: Party): TransactionBuilder
Overrides DealState.generateAgreement

Generate a partial transaction representing an agreement (command) to this deal, allowing a general deal/agreement protocol to generate the necessary transaction for potential implementations.

diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/generate-fix.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/generate-fix.html index 3d4138189b..c8fa16e472 100644 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/generate-fix.html +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/generate-fix.html @@ -7,8 +7,8 @@ com.r3corda.contracts / InterestRateSwap / State / generateFix

generateFix

- -fun generateFix(ptx: TransactionBuilder, oldState: StateAndRef<*>, fix: Fix): Unit
+ +fun generateFix(ptx: TransactionBuilder, oldState: StateAndRef<*>, fix: Fix): Unit
Overrides FixableDealState.generateFix

Generate a fixing command for this deal and fix.

TODO: This would also likely move to methods on the Contract once the changes to reference diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/index.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/index.html index 6662e580b6..1762163b6a 100644 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/index.html +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/index.html @@ -61,13 +61,20 @@ linearId -val linearId: UniqueIdentifier

Unique id shared by all LinearState states throughout history within the wallets of all parties. +val linearId: UniqueIdentifier

Unique id shared by all LinearState states throughout history within the vaults of all parties. Verify methods should check that one input and one output share the id in a transaction, except at issuance/termination.

+oracleType + +val oracleType: ServiceType

What oracle service to use for the fixing

+ + + + participants val participants: List<PublicKey>

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

@@ -103,7 +110,7 @@ except at issuance/termination.

generateAgreement -fun generateAgreement(notary: Party): TransactionBuilder

Generate a partial transaction representing an agreement (command) to this deal, allowing a general +fun generateAgreement(notary: Party): TransactionBuilder

Generate a partial transaction representing an agreement (command) to this deal, allowing a general deal/agreement protocol to generate the necessary transaction for potential implementations.

@@ -111,14 +118,14 @@ deal/agreement protocol to generate the necessary transaction for potential impl generateFix -fun generateFix(ptx: TransactionBuilder, oldState: StateAndRef<*>, fix: Fix): Unit

Generate a fixing command for this deal and fix.

+fun generateFix(ptx: TransactionBuilder, oldState: StateAndRef<*>, fix: Fix): Unit

Generate a fixing command for this deal and fix.

isRelevant -fun isRelevant(ourKeys: Set<PublicKey>): Boolean

True if this should be tracked by our wallet(s).

+fun isRelevant(ourKeys: Set<PublicKey>): Boolean

True if this should be tracked by our vault(s).

diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/is-relevant.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/is-relevant.html index 6cb1a086fc..c37b1528b9 100644 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/is-relevant.html +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/is-relevant.html @@ -10,7 +10,7 @@ fun isRelevant(ourKeys: Set<PublicKey>): Boolean
Overrides LinearState.isRelevant
-

True if this should be tracked by our wallet(s).

+

True if this should be tracked by our vault(s).



diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/linear-id.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/linear-id.html index 6e03900ca9..e279111941 100644 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/linear-id.html +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/linear-id.html @@ -10,7 +10,7 @@ val linearId: UniqueIdentifier
Overrides LinearState.linearId
-

Unique id shared by all LinearState states throughout history within the wallets of all parties. +

Unique id shared by all LinearState states throughout history within the vaults of all parties. Verify methods should check that one input and one output share the id in a transaction, except at issuance/termination.


diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/oracle-type.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/oracle-type.html new file mode 100644 index 0000000000..9211b93e72 --- /dev/null +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/oracle-type.html @@ -0,0 +1,20 @@ + + +InterestRateSwap.State.oracleType - + + + +com.r3corda.contracts / InterestRateSwap / State / oracleType
+
+

oracleType

+ +val oracleType: ServiceType
+Overrides FixableDealState.oracleType
+

What oracle service to use for the fixing

+

Getter
+

What oracle service to use for the fixing

+

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/participants.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/participants.html index 1de142b7c2..03726ab371 100644 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/participants.html +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/participants.html @@ -12,7 +12,7 @@ Overrides ContractState.participants

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 participants has to be involved and approve the transaction +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction so that they receive the updated state, and dont 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 @@ -22,7 +22,7 @@ list should just contain the owner.

Getter

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 participants has to be involved and approve the transaction +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction so that they receive the updated state, and dont 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 diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/thread.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/thread.html deleted file mode 100644 index 65ce329ef9..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/-state/thread.html +++ /dev/null @@ -1,17 +0,0 @@ - - -InterestRateSwap.State.thread - - - - -com.r3corda.contracts / InterestRateSwap / State / thread
-
-

thread

- -val thread: <ERROR CLASS>
-Overrides LinearState.thread
-

Unique thread id within the wallets of all parties

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/check-leg-amounts.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/check-leg-amounts.html deleted file mode 100644 index 0e0d10d43a..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/check-leg-amounts.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InterestRateSwap.checkLegAmounts - - - - -com.r3corda.contracts / InterestRateSwap / checkLegAmounts
-
-

checkLegAmounts

- -fun checkLegAmounts(legs: Array<CommonLeg>): Unit
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/check-leg-dates.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/check-leg-dates.html deleted file mode 100644 index 06966d44c0..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/check-leg-dates.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InterestRateSwap.checkLegDates - - - - -com.r3corda.contracts / InterestRateSwap / checkLegDates
-
-

checkLegDates

- -fun checkLegDates(legs: Array<CommonLeg>): Unit
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/check-rates.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/check-rates.html deleted file mode 100644 index 2e6b1944ee..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/check-rates.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InterestRateSwap.checkRates - - - - -com.r3corda.contracts / InterestRateSwap / checkRates
-
-

checkRates

- -fun checkRates(legs: Array<CommonLeg>): Boolean
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/check-schedules.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/check-schedules.html deleted file mode 100644 index b80d8a649d..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/check-schedules.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InterestRateSwap.checkSchedules - - - - -com.r3corda.contracts / InterestRateSwap / checkSchedules
-
-

checkSchedules

- -fun checkSchedules(legs: Array<CommonLeg>): Boolean
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/clauses.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/clauses.html deleted file mode 100644 index 7b26cddc26..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/clauses.html +++ /dev/null @@ -1,16 +0,0 @@ - - -InterestRateSwap.clauses - - - - -com.r3corda.contracts / InterestRateSwap / clauses
-
-

clauses

- -val clauses: List<SingleClause>
-Overrides ClauseVerifier.clauses
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/extract-commands.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/extract-commands.html deleted file mode 100644 index 8531fb7183..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/extract-commands.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InterestRateSwap.extractCommands - - - - -com.r3corda.contracts / InterestRateSwap / extractCommands
-
-

extractCommands

- -fun extractCommands(tx: TransactionForContract): Collection<AuthenticatedObject<CommandData>>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/generate-agreement.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/generate-agreement.html index ea27ade1f8..6c2260a060 100644 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/generate-agreement.html +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/generate-agreement.html @@ -8,7 +8,7 @@

generateAgreement

-fun generateAgreement(floatingLeg: FloatingLeg, fixedLeg: FixedLeg, calculation: Calculation, common: Common, notary: Party): TransactionBuilder
+fun generateAgreement(floatingLeg: FloatingLeg, fixedLeg: FixedLeg, calculation: Calculation, common: Common, notary: Party): TransactionBuilder

This generates the agreement state and also the schedules from the initial data. Note: The day count, interest rate calculation etc are not finished yet, but they are demonstrable.


diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/generate-fix.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/generate-fix.html index fa5cd23676..76f8fd9373 100644 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/generate-fix.html +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/generate-fix.html @@ -7,8 +7,8 @@ com.r3corda.contracts / InterestRateSwap / generateFix

generateFix

- -fun generateFix(tx: TransactionBuilder, irs: StateAndRef<State>, fixing: Fix): Unit
+ +fun generateFix(tx: TransactionBuilder, irs: StateAndRef<State>, fixing: Fix): Unit


diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/get-floating-leg-payments-differences.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/get-floating-leg-payments-differences.html deleted file mode 100644 index 9576156e82..0000000000 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/get-floating-leg-payments-differences.html +++ /dev/null @@ -1,16 +0,0 @@ - - -InterestRateSwap.getFloatingLegPaymentsDifferences - - - - -com.r3corda.contracts / InterestRateSwap / getFloatingLegPaymentsDifferences
-
-

getFloatingLegPaymentsDifferences

- -fun getFloatingLegPaymentsDifferences(payments1: Map<LocalDate, Event>, payments2: Map<LocalDate, Event>): List<<ERROR CLASS><LocalDate, <ERROR CLASS><FloatingRatePaymentEvent, FloatingRatePaymentEvent>>>
-

Compares two schedules of Floating Leg Payments, returns the difference (i.e. omissions in either leg or changes to the values).

-
-
- - diff --git a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/index.html b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/index.html index 421ff2e28c..f75f3481a5 100644 --- a/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/index.html +++ b/docs/build/html/api/com.r3corda.contracts/-interest-rate-swap/index.html @@ -66,6 +66,12 @@ copy / update for each transition).

+OracleType + +object OracleType : ServiceType + + + State data class State : FixableDealState, SchedulableState

The state class contains the 4 major data classes.

@@ -109,7 +115,7 @@ the contracts contents).

generateAgreement -fun generateAgreement(floatingLeg: FloatingLeg, fixedLeg: FixedLeg, calculation: Calculation, common: Common, notary: Party): TransactionBuilder

This generates the agreement state and also the schedules from the initial data. +fun generateAgreement(floatingLeg: FloatingLeg, fixedLeg: FixedLeg, calculation: Calculation, common: Common, notary: Party): TransactionBuilder

This generates the agreement state and also the schedules from the initial data. Note: The day count, interest rate calculation etc are not finished yet, but they are demonstrable.

@@ -117,7 +123,7 @@ Note: The day count, interest rate calculation etc are not finished yet, but the generateFix -fun generateFix(tx: TransactionBuilder, irs: StateAndRef<State>, fixing: Fix): Unit +fun generateFix(tx: TransactionBuilder, irs: StateAndRef<State>, fixing: Fix): Unit diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-all-composition/index.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-all-composition/index.html index 73d8b93a91..729c566b37 100644 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-all-composition/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts.clauses/-all-composition/index.html @@ -35,18 +35,6 @@ -

Inherited Properties

- - - - - - - -
-requiredCommands -open val requiredCommands: Set<Class<out CommandData>>

Determine whether this clause runs or not

-

Functions

diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-any-composition/index.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-any-composition/index.html index f1de7e789d..771a2e5e95 100644 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-any-composition/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts.clauses/-any-composition/index.html @@ -33,24 +33,6 @@ val clauses: List<Clause<S, C, K>>

List of clauses under this composite clause

- - - - - -
-rawClauses -vararg val rawClauses: Array<out Clause<S, C, K>>
-

Inherited Properties

- - - - - -
-requiredCommands -open val requiredCommands: Set<Class<out CommandData>>

Determine whether this clause runs or not

-

Functions

diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-any-composition/raw-clauses.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-any-composition/raw-clauses.html deleted file mode 100644 index 6c22639ddb..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-any-composition/raw-clauses.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AnyComposition.rawClauses - - - - -com.r3corda.core.contracts.clauses / AnyComposition / rawClauses
-
-

rawClauses

- -vararg val rawClauses: Array<out Clause<S, C, K>>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/-init-.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/-init-.html deleted file mode 100644 index cb0569474c..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/-init-.html +++ /dev/null @@ -1,16 +0,0 @@ - - -ClauseVerifier.<init> - - - - -com.r3corda.core.contracts.clauses / ClauseVerifier / <init>
-
-

<init>

-ClauseVerifier()
-

Abstract superclass for clause-based contracts to extend, which provides a verify() function -that delegates to the supplied list of clauses.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/clauses.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/clauses.html deleted file mode 100644 index e81f200145..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/clauses.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ClauseVerifier.clauses - - - - -com.r3corda.core.contracts.clauses / ClauseVerifier / clauses
-
-

clauses

- -abstract val clauses: List<SingleClause>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/extract-commands.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/extract-commands.html deleted file mode 100644 index 552135a2be..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/extract-commands.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ClauseVerifier.extractCommands - - - - -com.r3corda.core.contracts.clauses / ClauseVerifier / extractCommands
-
-

extractCommands

- -abstract fun extractCommands(tx: TransactionForContract): Collection<AuthenticatedObject<CommandData>>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/index.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/index.html deleted file mode 100644 index 71f5d4b516..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/index.html +++ /dev/null @@ -1,116 +0,0 @@ - - -ClauseVerifier - - - - -com.r3corda.core.contracts.clauses / ClauseVerifier
-
-

ClauseVerifier

-abstract class ClauseVerifier : Contract
-

Abstract superclass for clause-based contracts to extend, which provides a verify() function -that delegates to the supplied list of clauses.

-
-
-

Constructors

- - - - - - - -
-<init> -ClauseVerifier()

Abstract superclass for clause-based contracts to extend, which provides a verify() function -that delegates to the supplied list of clauses.

-
-

Properties

- - - - - - - -
-clauses -abstract val clauses: List<SingleClause>
-

Inherited Properties

- - - - - - - -
-legalContractReference -abstract val legalContractReference: SecureHash

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

-
-

Functions

- - - - - - - - - - - -
-extractCommands -abstract fun extractCommands(tx: TransactionForContract): Collection<AuthenticatedObject<CommandData>>
-verify -open fun verify(tx: TransactionForContract): Unit

Takes an object that represents a state transition, and ensures the inputs/outputs/commands make sense. -Must throw an exception if theres 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.

-
-

Inheritors

- - - - - - - - - - - - - - - - - - - -
-CommercialPaper -class CommercialPaper : ClauseVerifier
-InterestRateSwap -class InterestRateSwap : ClauseVerifier

The Interest Rate Swap class. For a quick overview of what an IRS is, see here - http://www.pimco.co.uk/EN/Education/Pages/InterestRateSwapsBasics1-08.aspx (no endorsement). -This contract has 4 significant data classes within it, the "Common", "Calculation", "FixedLeg" and "FloatingLeg". -It also has 4 commands, "Agree", "Fix", "Pay" and "Mature". -Currently, we are not interested (excuse pun) in valuing the swap, calculating the PVs, DFs and all that good stuff (soon though). -This is just a representation of a vanilla Fixed vs Floating (same currency) IRS in the R3 prototype model.

-
-Obligation -class Obligation<P> : ClauseVerifier

An obligation contract commits the obligor to delivering a specified amount of a fungible asset (for example the -Cash contract) at a specified future point in time. Settlement transactions may split and merge contracts across -multiple input and output states. The goal of this design is to handle amounts owed, and these contracts are expected -to be netted/merged, with settlement only for any remainder amount.

-
-OnLedgerAsset -abstract class OnLedgerAsset<T : Any, S : FungibleAsset<T>> : ClauseVerifier

An asset transaction may split and merge assets represented by a set of (issuer, depositRef) pairs, across multiple -input and output states. Imagine a Bitcoin transaction but in which all UTXOs had a colour (a blend of -issuer+depositRef) and you couldnt merge outputs of two colours together, but you COULD put them in the same -transaction.

-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/verify.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/verify.html deleted file mode 100644 index c6579a7738..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause-verifier/verify.html +++ /dev/null @@ -1,20 +0,0 @@ - - -ClauseVerifier.verify - - - - -com.r3corda.core.contracts.clauses / ClauseVerifier / verify
-
-

verify

- -open fun verify(tx: TransactionForContract): Unit
-Overrides Contract.verify
-

Takes an object that represents a state transition, and ensures the inputs/outputs/commands make sense. -Must throw an exception if theres 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/com.r3corda.core.contracts.clauses/-clause/-init-.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/-init-.html new file mode 100644 index 0000000000..57a87e4d3c --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/-init-.html @@ -0,0 +1,28 @@ + + +Clause.<init> - + + + +com.r3corda.core.contracts.clauses / Clause / <init>
+
+

<init>

+Clause()
+

A clause of a contract, containing a chunk of verification logic. That logic may be delegated to other clauses, or +provided directly by this clause.

+

Parameters

+ +S - the type of contract state this clause operates on.
+
+ +C - a common supertype of commands this clause operates on.
+
+ +K - the type of the grouping key for states this clause operates on. Use Unit if not applicable.
+

See Also
+

CompositeClause

+

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/get-execution-path.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/get-execution-path.html index 9f5cfbff94..0ba28905ba 100644 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/get-execution-path.html +++ b/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/get-execution-path.html @@ -8,7 +8,7 @@

getExecutionPath

-abstract fun getExecutionPath(commands: List<AuthenticatedObject<C>>): List<Clause<*, *, *>>
+open fun getExecutionPath(commands: List<AuthenticatedObject<C>>): List<Clause<*, *, *>>

Determine the subclauses which will be verified as a result of verifying this clause.



diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/if-matched.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/if-matched.html deleted file mode 100644 index 0571d88947..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/if-matched.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Clause.ifMatched - - - - -com.r3corda.core.contracts.clauses / Clause / ifMatched
-
-

ifMatched

- -abstract val ifMatched: MatchBehaviour
-

Behaviour if this clause is not matches

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/if-not-matched.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/if-not-matched.html deleted file mode 100644 index fc01c995ad..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/if-not-matched.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Clause.ifNotMatched - - - - -com.r3corda.core.contracts.clauses / Clause / ifNotMatched
-
-

ifNotMatched

- -abstract val ifNotMatched: MatchBehaviour
-

Behaviour if this clause is matched

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/index.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/index.html index 64369a2de7..117ca2fbd5 100644 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/index.html @@ -7,7 +7,9 @@ com.r3corda.core.contracts.clauses / Clause

Clause

-interface Clause<in S : ContractState, C : CommandData, in K : Any>
+abstract class Clause<in S : ContractState, C : CommandData, in K : Any>
+

A clause of a contract, containing a chunk of verification logic. That logic may be delegated to other clauses, or +provided directly by this clause.

Parameters

S - the type of contract state this clause operates on.
@@ -17,8 +19,24 @@
K - the type of the grouping key for states this clause operates on. Use Unit if not applicable.
+

See Also
+

CompositeClause

+



+

Constructors

+ + + + + + + +
+<init> +Clause()

A clause of a contract, containing a chunk of verification logic. That logic may be delegated to other clauses, or +provided directly by this clause.

+

Properties

@@ -26,7 +44,7 @@ @@ -38,7 +56,7 @@ @@ -80,6 +98,37 @@ if any matched.

+ + + + + + + + + + + + + + + + +GroupClauseVerifier + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/required-commands.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/required-commands.html index 460b9b0317..fb3fcc8c41 100644 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/required-commands.html +++ b/docs/build/html/api/com.r3corda.core.contracts.clauses/-clause/required-commands.html @@ -8,7 +8,7 @@

requiredCommands

-abstract val requiredCommands: Set<Class<out CommandData>>
+open val requiredCommands: Set<Class<out CommandData>>

Determine whether this clause runs or not



diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-composite-clause/-init-.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-composite-clause/-init-.html index 9feff0501b..fb8dd92927 100644 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-composite-clause/-init-.html +++ b/docs/build/html/api/com.r3corda.core.contracts.clauses/-composite-clause/-init-.html @@ -9,9 +9,6 @@

<init>

CompositeClause()

Abstract supertype for clauses which compose other clauses together in some logical manner.

-

See Also
-

ConcreteClause

-



diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-composite-clause/index.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-composite-clause/index.html index d6fe3c9d05..e20ae88219 100644 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-composite-clause/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts.clauses/-composite-clause/index.html @@ -9,9 +9,6 @@

CompositeClause

abstract class CompositeClause<in S : ContractState, C : CommandData, in K : Any> : Clause<S, C, K>

Abstract supertype for clauses which compose other clauses together in some logical manner.

-

See Also
-

ConcreteClause

-



Constructors

@@ -36,9 +33,14 @@ abstract val clauses: List<Clause<S, C, K>>

List of clauses under this composite clause

+ +
requiredCommands -abstract val requiredCommands: Set<Class<out CommandData>>

Determine whether this clause runs or not

+open val requiredCommands: Set<Class<out CommandData>>

Determine whether this clause runs or not

getExecutionPath -abstract fun getExecutionPath(commands: List<AuthenticatedObject<C>>): List<Clause<*, *, *>>

Determine the subclauses which will be verified as a result of verifying this clause.

+open fun getExecutionPath(commands: List<AuthenticatedObject<C>>): List<Clause<*, *, *>>

Determine the subclauses which will be verified as a result of verifying this clause.

+AbstractConserveAmount +abstract class AbstractConserveAmount<S : FungibleAsset<T>, C : CommandData, T : Any> : Clause<S, C, Issued<T>>

Standardised clause for checking input/output balances of fungible assets. Requires that a +Move command is provided, and errors if absent. Must be the last clause under a grouping clause; +errors on no-match, ends on match.

+
+AbstractIRSClause +abstract class AbstractIRSClause : Clause<State, Commands, UniqueIdentifier>

Common superclass for IRS contract clauses, which defines behaviour on match/no-match, and provides +helper functions for the clauses.

+
+AbstractIssue +abstract class AbstractIssue<in S : ContractState, C : CommandData, T : Any> : Clause<S, C, Issued<T>>

Standard issue clause for contracts that issue fungible assets.

+
+ClauseVerifier +class ClauseVerifier<S : LinearState> : Clause<ContractState, CommandData, Unit>

Standard clause to verify the LinearState safety properties.

+
CompositeClause abstract class CompositeClause<in S : ContractState, C : CommandData, in K : Any> : Clause<S, C, K>

Abstract supertype for clauses which compose other clauses together in some logical manner.

@@ -87,10 +136,66 @@ if any matched.

-ConcreteClause -abstract class ConcreteClause<in S : ContractState, C : CommandData, in T : Any> : Clause<S, C, T>

Abstract supertype for clauses which provide their own verification logic, rather than delegating to subclauses. -By default these clauses are always matched (they have no required commands).

+abstract class GroupClauseVerifier<S : ContractState, C : CommandData, K : Any> : Clause<ContractState, C, Unit>
+Move +class Move : Clause<State, Commands, Issued<Terms>>
+NetClause +open class NetClause<C : CommandData, P> : Clause<ContractState, C, Unit>

Clause for netting contract states. Currently only supports obligation contract.

+
+NoZeroSizedOutputs +open class NoZeroSizedOutputs<in S : FungibleAsset<T>, C : CommandData, T : Any> : Clause<S, C, Issued<T>>

Clause for fungible asset contracts, which enforces that no output state should have +a balance of zero.

+
+Redeem +class Redeem : Clause<State, Commands, Issued<Terms>>
+SetLifecycle +class SetLifecycle<P> : Clause<State<P>, Commands, Issued<Terms<P>>>

Obligation-specific clause for changing the lifecycle of one or more states.

+
+Settle +class Settle<P> : Clause<State<P>, Commands, Issued<Terms<P>>>

Obligation-specific clause for settling an outstanding obligation by witnessing +change of ownership of other states to fulfil

+
+Timestamped +class Timestamped : Clause<ContractState, Commands, Unit>
+VerifyLifecycle +class VerifyLifecycle<S : ContractState, C : CommandData, T : Any, P> : Clause<S, C, T>

Obligation-specific clause for verifying that all states are in +normal lifecycle. In a group clause set, this must be run after +any lifecycle change clause, which is the only clause that involve +non-standard lifecycle states on input/output.

+

Inherited Properties

+ + +requiredCommands diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-composite-clause/required-commands.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-composite-clause/required-commands.html deleted file mode 100644 index d8f05c9050..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-composite-clause/required-commands.html +++ /dev/null @@ -1,17 +0,0 @@ - - -CompositeClause.requiredCommands - - - - -com.r3corda.core.contracts.clauses / CompositeClause / requiredCommands
-
-

requiredCommands

- -open val requiredCommands: Set<Class<out CommandData>>
-Overrides Clause.requiredCommands
-

Determine whether this clause runs or not

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-concrete-clause/-init-.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-concrete-clause/-init-.html deleted file mode 100644 index 7742bffcf7..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-concrete-clause/-init-.html +++ /dev/null @@ -1,19 +0,0 @@ - - -ConcreteClause.<init> - - - - -com.r3corda.core.contracts.clauses / ConcreteClause / <init>
-
-

<init>

-ConcreteClause()
-

Abstract supertype for clauses which provide their own verification logic, rather than delegating to subclauses. -By default these clauses are always matched (they have no required commands).

-

See Also
-

CompositeClause

-

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-concrete-clause/get-execution-path.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-concrete-clause/get-execution-path.html deleted file mode 100644 index dc88575ee5..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-concrete-clause/get-execution-path.html +++ /dev/null @@ -1,16 +0,0 @@ - - -ConcreteClause.getExecutionPath - - - - -com.r3corda.core.contracts.clauses / ConcreteClause / getExecutionPath
-
-

getExecutionPath

- -open fun getExecutionPath(commands: List<AuthenticatedObject<C>>): List<Clause<*, *, *>>
-

Determine the subclauses which will be verified as a result of verifying this clause.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-concrete-clause/index.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-concrete-clause/index.html deleted file mode 100644 index d09f2ab208..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-concrete-clause/index.html +++ /dev/null @@ -1,168 +0,0 @@ - - -ConcreteClause - - - - -com.r3corda.core.contracts.clauses / ConcreteClause
-
-

ConcreteClause

-abstract class ConcreteClause<in S : ContractState, C : CommandData, in T : Any> : Clause<S, C, T>
-

Abstract supertype for clauses which provide their own verification logic, rather than delegating to subclauses. -By default these clauses are always matched (they have no required commands).

-

See Also
-

CompositeClause

-

-
-
-

Constructors

-
-requiredCommands open val requiredCommands: Set<Class<out CommandData>>

Determine whether this clause runs or not

- - - - - - -
-<init> -ConcreteClause()

Abstract supertype for clauses which provide their own verification logic, rather than delegating to subclauses. -By default these clauses are always matched (they have no required commands).

-
-

Properties

- - - - - - - -
-requiredCommands -open val requiredCommands: Set<Class<out CommandData>>

Determine whether this clause runs or not

-
-

Functions

- - - - - - - -
-getExecutionPath -open fun getExecutionPath(commands: List<AuthenticatedObject<C>>): List<Clause<*, *, *>>

Determine the subclauses which will be verified as a result of verifying this clause.

-
-

Extension Functions

- - - - - - - -
-matches -fun <C : CommandData> Clause<*, C, *>.matches(commands: List<AuthenticatedObject<C>>): Boolean

Determine if the given list of commands matches the required commands for a clause to trigger.

-
-

Inheritors

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-AbstractConserveAmount -abstract class AbstractConserveAmount<S : FungibleAsset<T>, C : CommandData, T : Any> : ConcreteClause<S, C, Issued<T>>

Standardised clause for checking input/output balances of fungible assets. Requires that a -Move command is provided, and errors if absent. Must be the last clause under a grouping clause; -errors on no-match, ends on match.

-
-AbstractIRSClause -abstract class AbstractIRSClause : ConcreteClause<State, Commands, UniqueIdentifier>

Common superclass for IRS contract clauses, which defines behaviour on match/no-match, and provides -helper functions for the clauses.

-
-AbstractIssue -abstract class AbstractIssue<in S : ContractState, C : CommandData, T : Any> : ConcreteClause<S, C, Issued<T>>

Standard issue clause for contracts that issue fungible assets.

-
-ClauseVerifier -class ClauseVerifier<S : LinearState> : ConcreteClause<ContractState, CommandData, Unit>

Standard clause to verify the LinearState safety properties.

-
-GroupClauseVerifier -abstract class GroupClauseVerifier<S : ContractState, C : CommandData, K : Any> : ConcreteClause<ContractState, C, Unit>
-Move -class Move : ConcreteClause<State, Commands, Issued<Terms>>
-NetClause -open class NetClause<C : CommandData, P> : ConcreteClause<ContractState, C, Unit>

Clause for netting contract states. Currently only supports obligation contract.

-
-NoZeroSizedOutputs -open class NoZeroSizedOutputs<in S : FungibleAsset<T>, C : CommandData, T : Any> : ConcreteClause<S, C, Issued<T>>

Clause for fungible asset contracts, which enforces that no output state should have -a balance of zero.

-
-Redeem -class Redeem : ConcreteClause<State, Commands, Issued<Terms>>
-SetLifecycle -class SetLifecycle<P> : ConcreteClause<State<P>, Commands, Issued<Terms<P>>>

Obligation-specific clause for changing the lifecycle of one or more states.

-
-Settle -class Settle<P> : ConcreteClause<State<P>, Commands, Issued<Terms<P>>>

Obligation-specific clause for settling an outstanding obligation by witnessing -change of ownership of other states to fulfil

-
-Timestamped -class Timestamped : ConcreteClause<ContractState, Commands, Unit>
-VerifyLifecycle -class VerifyLifecycle<S : ContractState, C : CommandData, T : Any, P> : ConcreteClause<S, C, T>

Obligation-specific clause for verifying that all states are in -normal lifecycle. In a group clause set, this must be run after -any lifecycle change clause, which is the only clause that involve -non-standard lifecycle states on input/output.

-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-concrete-clause/required-commands.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-concrete-clause/required-commands.html deleted file mode 100644 index c8977a4f24..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-concrete-clause/required-commands.html +++ /dev/null @@ -1,17 +0,0 @@ - - -ConcreteClause.requiredCommands - - - - -com.r3corda.core.contracts.clauses / ConcreteClause / requiredCommands
-
-

requiredCommands

- -open val requiredCommands: Set<Class<out CommandData>>
-Overrides Clause.requiredCommands
-

Determine whether this clause runs or not

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-first-composition/index.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-first-composition/index.html index 077114fb88..f6b83eb0a0 100644 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-first-composition/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts.clauses/-first-composition/index.html @@ -41,18 +41,6 @@ -

Inherited Properties

- - - - - - - -
-requiredCommands -open val requiredCommands: Set<Class<out CommandData>>

Determine whether this clause runs or not

-

Functions

diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause-verifier/clauses.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause-verifier/clauses.html deleted file mode 100644 index 2049316556..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause-verifier/clauses.html +++ /dev/null @@ -1,15 +0,0 @@ - - -GroupClauseVerifier.clauses - - - - -com.r3corda.core.contracts.clauses / GroupClauseVerifier / clauses
-
-

clauses

- -abstract val clauses: List<GroupClause<S, T>>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause-verifier/extract-groups.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause-verifier/extract-groups.html deleted file mode 100644 index 143bd72392..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause-verifier/extract-groups.html +++ /dev/null @@ -1,15 +0,0 @@ - - -GroupClauseVerifier.extractGroups - - - - -com.r3corda.core.contracts.clauses / GroupClauseVerifier / extractGroups
-
-

extractGroups

- -abstract fun extractGroups(tx: TransactionForContract): List<InOutGroup<S, T>>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause-verifier/index.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause-verifier/index.html index 427eb9adca..a095ad22f4 100644 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause-verifier/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause-verifier/index.html @@ -7,7 +7,7 @@ com.r3corda.core.contracts.clauses / GroupClauseVerifier

GroupClauseVerifier

-abstract class GroupClauseVerifier<S : ContractState, C : CommandData, K : Any> : ConcreteClause<ContractState, C, Unit>
+abstract class GroupClauseVerifier<S : ContractState, C : CommandData, K : Any> : Clause<ContractState, C, Unit>


Constructors

@@ -37,7 +37,7 @@ +requiredCommands diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause-verifier/required-commands.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause-verifier/required-commands.html deleted file mode 100644 index 2f4fc20f30..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause-verifier/required-commands.html +++ /dev/null @@ -1,20 +0,0 @@ - - -GroupClauseVerifier.requiredCommands - - - - -com.r3corda.core.contracts.clauses / GroupClauseVerifier / requiredCommands
-
-

requiredCommands

- -open val requiredCommands: Set<Class<out CommandData>>
-Overrides SingleClause.requiredCommands
-

Classes for commands which must ALL be present in transaction for this clause to be triggered

-

Getter
-

Classes for commands which must ALL be present in transaction for this clause to be triggered

-

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause.html deleted file mode 100644 index bbe598cddf..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-clause.html +++ /dev/null @@ -1,108 +0,0 @@ - - -GroupClause - - - - -com.r3corda.core.contracts.clauses / GroupClause
-
-

GroupClause

-interface GroupClause<in S : ContractState, in T : Any> : Clause, GroupVerify<S, T>
-
-
-

Inherited Properties

-
-requiredCommands open val requiredCommands: Set<Class<out CommandData>>

Determine whether this clause runs or not

- - - - - - - - - - - - - - -
-ifMatched -abstract val ifMatched: MatchBehaviour

Behaviour if this clause is not matches

-
-ifNotMatched -abstract val ifNotMatched: MatchBehaviour

Behaviour if this clause is matched

-
-requiredCommands -abstract val requiredCommands: Set<Class<out CommandData>>

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-

Inheritors

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-AbstractConserveAmount -abstract class AbstractConserveAmount<S : FungibleAsset<T>, T : Any> : GroupClause<S, Issued<T>>

Standardised clause for checking input/output balances of fungible assets. Requires that a -Move command is provided, and errors if absent. Must be the last clause under a grouping clause; -errors on no-match, ends on match.

-
-AbstractGroupClause -abstract class AbstractGroupClause : GroupClause<State, Issued<Terms>>
-AbstractIRSClause -abstract class AbstractIRSClause : GroupClause<State, UniqueIdentifier>

Common superclass for IRS contract clauses, which defines behaviour on match/no-match, and provides -helper functions for the clauses.

-
-AbstractIssue -abstract class AbstractIssue<in S : ContractState, T : Any> : GroupClause<S, Issued<T>>

Standard issue clause for contracts that issue fungible assets.

-
-NoZeroSizedOutputs -open class NoZeroSizedOutputs<in S : FungibleAsset<T>, T : Any> : GroupClause<S, Issued<T>>

Clause for fungible asset contracts, which enforces that no output state should have -a balance of zero.

-
-SetLifecycle -class SetLifecycle<P> : GroupClause<State<P>, Issued<Terms<P>>>

Obligation-specific clause for changing the lifecycle of one or more states.

-
-Settle -class Settle<P> : GroupClause<State<P>, Issued<Terms<P>>>

Obligation-specific clause for settling an outstanding obligation by witnessing -change of ownership of other states to fulfil

-
-VerifyLifecycle -class VerifyLifecycle<P> : SingleClause, GroupClause<State<P>, Issued<Terms<P>>>

Obligation-specific clause for verifying that all states are in -normal lifecycle. In a group clause set, this must be run after -any lifecycle change clause, which is the only clause that involve -non-standard lifecycle states on input/output.

-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-verify/index.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-verify/index.html deleted file mode 100644 index 508364608c..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-verify/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - -GroupVerify - - - - -com.r3corda.core.contracts.clauses / GroupVerify
-
-

GroupVerify

-interface GroupVerify<in S, in T : Any>
-
-
-

Functions

- - - - - - - -
-verify -abstract fun verify(tx: TransactionForContract, inputs: List<S>, outputs: List<S>, commands: Collection<AuthenticatedObject<CommandData>>, token: T): Set<CommandData>
-

Inheritors

- - - - - - - -
-GroupClause -interface GroupClause<in S : ContractState, in T : Any> : Clause, GroupVerify<S, T>
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-verify/verify.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-verify/verify.html deleted file mode 100644 index 211fddf775..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-group-verify/verify.html +++ /dev/null @@ -1,18 +0,0 @@ - - -GroupVerify.verify - - - - -com.r3corda.core.contracts.clauses / GroupVerify / verify
-
-

verify

- -abstract fun verify(tx: TransactionForContract, inputs: List<S>, outputs: List<S>, commands: Collection<AuthenticatedObject<CommandData>>, token: T): Set<CommandData>
-

Return
-the set of commands that are consumed IF this clause is matched, and cannot be used to match a -later clause.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/-init-.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/-init-.html deleted file mode 100644 index 205981b86a..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/-init-.html +++ /dev/null @@ -1,16 +0,0 @@ - - -InterceptorClause.<init> - - - - -com.r3corda.core.contracts.clauses / InterceptorClause / <init>
-
-

<init>

-InterceptorClause(preclause: SingleVerify, clause: SingleClause)
-

A clause which intercepts calls to a wrapped clause, and passes them through verification -only from a pre-clause. This is similar to an inceptor in aspect orientated programming.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/clause.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/clause.html deleted file mode 100644 index 65c8c10089..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/clause.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InterceptorClause.clause - - - - -com.r3corda.core.contracts.clauses / InterceptorClause / clause
-
-

clause

- -val clause: SingleClause
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/if-matched.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/if-matched.html deleted file mode 100644 index ba5a60ea33..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/if-matched.html +++ /dev/null @@ -1,20 +0,0 @@ - - -InterceptorClause.ifMatched - - - - -com.r3corda.core.contracts.clauses / InterceptorClause / ifMatched
-
-

ifMatched

- -val ifMatched: MatchBehaviour
-Overrides SingleClause.ifMatched
-

Behaviour if this clause is not matches

-

Getter
-

Behaviour if this clause is not matches

-

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/if-not-matched.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/if-not-matched.html deleted file mode 100644 index ac7e06cc01..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/if-not-matched.html +++ /dev/null @@ -1,20 +0,0 @@ - - -InterceptorClause.ifNotMatched - - - - -com.r3corda.core.contracts.clauses / InterceptorClause / ifNotMatched
-
-

ifNotMatched

- -val ifNotMatched: MatchBehaviour
-Overrides SingleClause.ifNotMatched
-

Behaviour if this clause is matched

-

Getter
-

Behaviour if this clause is matched

-

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/index.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/index.html deleted file mode 100644 index fcad273a4a..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/index.html +++ /dev/null @@ -1,87 +0,0 @@ - - -InterceptorClause - - - - -com.r3corda.core.contracts.clauses / InterceptorClause
-
-

InterceptorClause

-class InterceptorClause : SingleClause
-

A clause which intercepts calls to a wrapped clause, and passes them through verification -only from a pre-clause. This is similar to an inceptor in aspect orientated programming.

-
-
-

Constructors

- - - - - - - -
-<init> -InterceptorClause(preclause: SingleVerify, clause: SingleClause)

A clause which intercepts calls to a wrapped clause, and passes them through verification -only from a pre-clause. This is similar to an inceptor in aspect orientated programming.

-
-

Properties

- - - - - - - - - - - - - - - - - - - - - - - -
-clause -val clause: SingleClause
-ifMatched -val ifMatched: MatchBehaviour

Behaviour if this clause is not matches

-
-ifNotMatched -val ifNotMatched: MatchBehaviour

Behaviour if this clause is matched

-
-preclause -val preclause: SingleVerify
-requiredCommands -val requiredCommands: Set<Class<out CommandData>>

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-

Functions

- - - - - - - - - - - -
-toString -fun toString(): String
-verify -fun verify(tx: TransactionForContract, commands: Collection<AuthenticatedObject<CommandData>>): Set<CommandData>

Verify the transaction matches the conditions from this clause. For example, a "no zero amount output" clause -would check each of the output states that it applies to, looking for a zero amount, and throw IllegalStateException -if any matched.

-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/preclause.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/preclause.html deleted file mode 100644 index 9db76bb382..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/preclause.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InterceptorClause.preclause - - - - -com.r3corda.core.contracts.clauses / InterceptorClause / preclause
-
-

preclause

- -val preclause: SingleVerify
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/required-commands.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/required-commands.html deleted file mode 100644 index 22bfe407fa..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/required-commands.html +++ /dev/null @@ -1,20 +0,0 @@ - - -InterceptorClause.requiredCommands - - - - -com.r3corda.core.contracts.clauses / InterceptorClause / requiredCommands
-
-

requiredCommands

- -val requiredCommands: Set<Class<out CommandData>>
-Overrides SingleClause.requiredCommands
-

Classes for commands which must ALL be present in transaction for this clause to be triggered

-

Getter
-

Classes for commands which must ALL be present in transaction for this clause to be triggered

-

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/to-string.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/to-string.html deleted file mode 100644 index 4bea1dddf0..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/to-string.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InterceptorClause.toString - - - - -com.r3corda.core.contracts.clauses / InterceptorClause / toString
-
-

toString

- -fun toString(): String
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/verify.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/verify.html deleted file mode 100644 index b971aed457..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-interceptor-clause/verify.html +++ /dev/null @@ -1,24 +0,0 @@ - - -InterceptorClause.verify - - - - -com.r3corda.core.contracts.clauses / InterceptorClause / verify
-
-

verify

- -fun verify(tx: TransactionForContract, commands: Collection<AuthenticatedObject<CommandData>>): Set<CommandData>
-Overrides SingleVerify.verify
-

Verify the transaction matches the conditions from this clause. For example, a "no zero amount output" clause -would check each of the output states that it applies to, looking for a zero amount, and throw IllegalStateException -if any matched.

-

Return
-the set of commands that are consumed IF this clause is matched, and cannot be used to match a -later clause. This would normally be all commands matching "requiredCommands" for this clause, but some -verify() functions may do further filtering on possible matches, and return a subset. This may also include -commands that were not required (for example the Exit command for fungible assets is optional).

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-match-behaviour/-c-o-n-t-i-n-u-e.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-match-behaviour/-c-o-n-t-i-n-u-e.html deleted file mode 100644 index d319243c1b..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-match-behaviour/-c-o-n-t-i-n-u-e.html +++ /dev/null @@ -1,14 +0,0 @@ - - -MatchBehaviour.CONTINUE - - - - -com.r3corda.core.contracts.clauses / MatchBehaviour / CONTINUE
-
-

CONTINUE

-CONTINUE
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-match-behaviour/-e-n-d.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-match-behaviour/-e-n-d.html deleted file mode 100644 index 3e874d45eb..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-match-behaviour/-e-n-d.html +++ /dev/null @@ -1,14 +0,0 @@ - - -MatchBehaviour.END - - - - -com.r3corda.core.contracts.clauses / MatchBehaviour / END
-
-

END

-END
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-match-behaviour/-e-r-r-o-r.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-match-behaviour/-e-r-r-o-r.html deleted file mode 100644 index 73f2231a3a..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-match-behaviour/-e-r-r-o-r.html +++ /dev/null @@ -1,14 +0,0 @@ - - -MatchBehaviour.ERROR - - - - -com.r3corda.core.contracts.clauses / MatchBehaviour / ERROR
-
-

ERROR

-ERROR
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-match-behaviour/index.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-match-behaviour/index.html deleted file mode 100644 index 8037fd5101..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-match-behaviour/index.html +++ /dev/null @@ -1,37 +0,0 @@ - - -MatchBehaviour - - - - -com.r3corda.core.contracts.clauses / MatchBehaviour
-
-

MatchBehaviour

-enum class MatchBehaviour
-
-
-

Enum Values

- - - - - - - - - - - - - - - -
-CONTINUE -
-END -
-ERROR -
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause.html deleted file mode 100644 index efb1d47490..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause.html +++ /dev/null @@ -1,96 +0,0 @@ - - -SingleClause - - - - -com.r3corda.core.contracts.clauses / SingleClause
-
-

SingleClause

-interface SingleClause : Clause, SingleVerify
-
-
-

Inherited Properties

- - - - - - - - - - - - - - - -
-ifMatched -abstract val ifMatched: MatchBehaviour

Behaviour if this clause is not matches

-
-ifNotMatched -abstract val ifNotMatched: MatchBehaviour

Behaviour if this clause is matched

-
-requiredCommands -abstract val requiredCommands: Set<Class<out CommandData>>

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-

Inherited Functions

- - - - - - - -
-verify -abstract fun verify(tx: TransactionForContract, commands: Collection<AuthenticatedObject<CommandData>>): Set<CommandData>

Verify the transaction matches the conditions from this clause. For example, a "no zero amount output" clause -would check each of the output states that it applies to, looking for a zero amount, and throw IllegalStateException -if any matched.

-
-

Inheritors

- - - - - - - - - - - - - - - - - - - - - - - -
-GroupClauseVerifier -abstract class GroupClauseVerifier<S : ContractState, T : Any> : SingleClause
-InterceptorClause -data class InterceptorClause : SingleClause

A clause which intercepts calls to a wrapped clause, and passes them through verification -only from a pre-clause. This is similar to an inceptor in aspect orientated programming.

-
-NetClause -open class NetClause<P> : SingleClause

Clause for netting contract states. Currently only supports obligation contract.

-
-Timestamped -class Timestamped : SingleClause
-VerifyLifecycle -class VerifyLifecycle<P> : SingleClause, GroupClause<State<P>, Issued<Terms<P>>>

Obligation-specific clause for verifying that all states are in -normal lifecycle. In a group clause set, this must be run after -any lifecycle change clause, which is the only clause that involve -non-standard lifecycle states on input/output.

-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/-init-.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/-init-.html deleted file mode 100644 index cecef47867..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/-init-.html +++ /dev/null @@ -1,16 +0,0 @@ - - -SingleClause.<init> - - - - -com.r3corda.core.contracts.clauses / SingleClause / <init>
-
-

<init>

-SingleClause()
-

A single verifiable clause. By default always matches, continues to the next clause when matched and errors -if not matched.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/if-matched.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/if-matched.html deleted file mode 100644 index 18cee90d7c..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/if-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -SingleClause.ifMatched - - - - -com.r3corda.core.contracts.clauses / SingleClause / ifMatched
-
-

ifMatched

- -open val ifMatched: MatchBehaviour
-Overrides Clause.ifMatched
-

Behaviour if this clause is not matches

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/if-not-matched.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/if-not-matched.html deleted file mode 100644 index f35cda6063..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/if-not-matched.html +++ /dev/null @@ -1,17 +0,0 @@ - - -SingleClause.ifNotMatched - - - - -com.r3corda.core.contracts.clauses / SingleClause / ifNotMatched
-
-

ifNotMatched

- -open val ifNotMatched: MatchBehaviour
-Overrides Clause.ifNotMatched
-

Behaviour if this clause is matched

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/index.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/index.html deleted file mode 100644 index 04472c3331..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/index.html +++ /dev/null @@ -1,118 +0,0 @@ - - -SingleClause - - - - -com.r3corda.core.contracts.clauses / SingleClause
-
-

SingleClause

-abstract class SingleClause : Clause, SingleVerify
-

A single verifiable clause. By default always matches, continues to the next clause when matched and errors -if not matched.

-
-
-

Constructors

- - - - - - - -
-<init> -SingleClause()

A single verifiable clause. By default always matches, continues to the next clause when matched and errors -if not matched.

-
-

Properties

- - - - - - - - - - - - - - - -
-ifMatched -open val ifMatched: MatchBehaviour

Behaviour if this clause is not matches

-
-ifNotMatched -open val ifNotMatched: MatchBehaviour

Behaviour if this clause is matched

-
-requiredCommands -open val requiredCommands: Set<Class<out CommandData>>

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-

Inherited Functions

- - - - - - - -
-verify -abstract fun verify(tx: TransactionForContract, commands: Collection<AuthenticatedObject<CommandData>>): Set<CommandData>

Verify the transaction matches the conditions from this clause. For example, a "no zero amount output" clause -would check each of the output states that it applies to, looking for a zero amount, and throw IllegalStateException -if any matched.

-
-

Inheritors

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
-ClauseVerifier -class ClauseVerifier<S : LinearState> : SingleClause

Standard clause to verify the LinearState safety properties.

-
-GroupClauseVerifier -abstract class GroupClauseVerifier<S : ContractState, T : Any> : SingleClause
-InterceptorClause -class InterceptorClause : SingleClause

A clause which intercepts calls to a wrapped clause, and passes them through verification -only from a pre-clause. This is similar to an inceptor in aspect orientated programming.

-
-NetClause -open class NetClause<P> : SingleClause

Clause for netting contract states. Currently only supports obligation contract.

-
-Timestamped -class Timestamped : SingleClause
-VerifyLifecycle -class VerifyLifecycle<P> : SingleClause, GroupClause<State<P>, Issued<Terms<P>>>

Obligation-specific clause for verifying that all states are in -normal lifecycle. In a group clause set, this must be run after -any lifecycle change clause, which is the only clause that involve -non-standard lifecycle states on input/output.

-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/required-commands.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/required-commands.html deleted file mode 100644 index 43edfb42b7..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-clause/required-commands.html +++ /dev/null @@ -1,17 +0,0 @@ - - -SingleClause.requiredCommands - - - - -com.r3corda.core.contracts.clauses / SingleClause / requiredCommands
-
-

requiredCommands

- -open val requiredCommands: Set<Class<out CommandData>>
-Overrides Clause.requiredCommands
-

Classes for commands which must ALL be present in transaction for this clause to be triggered

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-verify/index.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-verify/index.html deleted file mode 100644 index 3715c0ad39..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-verify/index.html +++ /dev/null @@ -1,41 +0,0 @@ - - -SingleVerify - - - - -com.r3corda.core.contracts.clauses / SingleVerify
-
-

SingleVerify

-interface SingleVerify
-
-
-

Functions

- - - - - - - -
-verify -abstract fun verify(tx: TransactionForContract, commands: Collection<AuthenticatedObject<CommandData>>): Set<CommandData>

Verify the transaction matches the conditions from this clause. For example, a "no zero amount output" clause -would check each of the output states that it applies to, looking for a zero amount, and throw IllegalStateException -if any matched.

-
-

Inheritors

- - - - - - - -
-SingleClause -abstract class SingleClause : Clause, SingleVerify

A single verifiable clause. By default always matches, continues to the next clause when matched and errors -if not matched.

-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-verify/verify.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-verify/verify.html deleted file mode 100644 index e20928a251..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/-single-verify/verify.html +++ /dev/null @@ -1,23 +0,0 @@ - - -SingleVerify.verify - - - - -com.r3corda.core.contracts.clauses / SingleVerify / verify
-
-

verify

- -abstract fun verify(tx: TransactionForContract, commands: Collection<AuthenticatedObject<CommandData>>): Set<CommandData>
-

Verify the transaction matches the conditions from this clause. For example, a "no zero amount output" clause -would check each of the output states that it applies to, looking for a zero amount, and throw IllegalStateException -if any matched.

-

Return
-the set of commands that are consumed IF this clause is matched, and cannot be used to match a -later clause. This would normally be all commands matching "requiredCommands" for this clause, but some -verify() functions may do further filtering on possible matches, and return a subset. This may also include -commands that were not required (for example the Exit command for fungible assets is optional).

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/index.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/index.html index 18b6eb7057..d04a0a2f9f 100644 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts.clauses/index.html @@ -28,7 +28,9 @@ Clause -interface Clause<in S : ContractState, C : CommandData, in K : Any> +abstract class Clause<in S : ContractState, C : CommandData, in K : Any>

A clause of a contract, containing a chunk of verification logic. That logic may be delegated to other clauses, or +provided directly by this clause.

+ @@ -39,14 +41,6 @@ -ConcreteClause - -abstract class ConcreteClause<in S : ContractState, C : CommandData, in T : Any> : Clause<S, C, T>

Abstract supertype for clauses which provide their own verification logic, rather than delegating to subclauses. -By default these clauses are always matched (they have no required commands).

- - - - FirstComposition class FirstComposition<S : ContractState, C : CommandData, K : Any> : CompositeClause<S, C, K>

Compose a number of clauses, such that the first match is run, and it errors if none is run.

@@ -56,7 +50,7 @@ By default these clauses are always matched (they have no required commands).

GroupClauseVerifier -abstract class GroupClauseVerifier<S : ContractState, C : CommandData, K : Any> : ConcreteClause<ContractState, C, Unit> +abstract class GroupClauseVerifier<S : ContractState, C : CommandData, K : Any> : Clause<ContractState, C, Unit> diff --git a/docs/build/html/api/com.r3corda.core.contracts.clauses/verify-clauses.html b/docs/build/html/api/com.r3corda.core.contracts.clauses/verify-clauses.html deleted file mode 100644 index 5628bd2112..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts.clauses/verify-clauses.html +++ /dev/null @@ -1,26 +0,0 @@ - - -verifyClauses - - - - -com.r3corda.core.contracts.clauses / verifyClauses
-
-

verifyClauses

- -fun verifyClauses(tx: TransactionForContract, clauses: List<SingleClause>, commands: Collection<AuthenticatedObject<CommandData>>): Unit
-

Verify a transaction against the given list of clauses.

-

Parameters

- -tx - transaction to be verified.
-
- -clauses - the clauses to verify.
-
- -commands - commands extracted from the transaction, which are relevant to the -clauses.
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-command-data.html b/docs/build/html/api/com.r3corda.core.contracts/-command-data.html index dd9ef487f2..a72211bcb4 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-command-data.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-command-data.html @@ -67,6 +67,13 @@ +NetCommand + +interface NetCommand : CommandData

A common netting command for contracts whose states can be netted.

+ + + + TypeOnlyCommandData abstract class TypeOnlyCommandData : CommandData

Commands that inherit from this are intended to have no data items: its only their presence that matters.

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-commodity/symbol.html b/docs/build/html/api/com.r3corda.core.contracts/-commodity/symbol.html deleted file mode 100644 index 87a191fa0a..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-commodity/symbol.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Commodity.symbol - - - - -com.r3corda.core.contracts / Commodity / symbol
-
-

symbol

- -val symbol: String
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-contract-state/encumbrance.html b/docs/build/html/api/com.r3corda.core.contracts/-contract-state/encumbrance.html new file mode 100644 index 0000000000..44040733df --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.contracts/-contract-state/encumbrance.html @@ -0,0 +1,29 @@ + + +ContractState.encumbrance - + + + +com.r3corda.core.contracts / ContractState / encumbrance
+
+

encumbrance

+ +open val encumbrance: Int?
+

All contract states may be encumbered by up to one other state.

+

The encumbrance state, if present, forces additional controls over the encumbered state, since the platform checks +that the encumbrance state is present as an input in the same transaction that consumes the encumbered state, and +the contract code and rules of the encumbrance state will also be verified during the execution of the transaction. +For example, a cash contract state could be encumbered with a time-lock contract state; the cash state is then only +processable in a transaction that verifies that the time specified in the encumbrance time-lock has passed.

+

The encumbered state refers to another by index, and the referred encumbrance state +is an output state in a particular position on the same transaction that created the encumbered state. An alternative +implementation would be encumber by reference to a StateRef., which would allow the specification of encumbrance +by a state created in a prior transaction.

+

Note that an encumbered state that is being consumed must have its encumbrance consumed in the same transaction, +otherwise the transaction is not valid.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-contract-state/index.html b/docs/build/html/api/com.r3corda.core.contracts/-contract-state/index.html index a1300bbcf4..5e71491ca7 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-contract-state/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-contract-state/index.html @@ -27,6 +27,13 @@ are all free.

+encumbrance + +open val encumbrance: Int?

All contract states may be encumbered by up to one other state.

+ + + + participants abstract val participants: List<PublicKey>

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

@@ -66,7 +73,7 @@ are all free.

DummyState -data class DummyState : ContractState

Dummy state for use in testing. Not part of any real contract.

+data class DummyState : ContractState

Dummy state for use in testing. Not part of any contract, not even the DummyContract.

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-contract-state/participants.html b/docs/build/html/api/com.r3corda.core.contracts/-contract-state/participants.html index f9fb2b13ec..c4c88d0f51 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-contract-state/participants.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-contract-state/participants.html @@ -11,7 +11,7 @@ abstract val participants: List<PublicKey>

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 participants has to be involved and approve the transaction +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction so that they receive the updated state, and dont 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 diff --git a/docs/build/html/api/com.r3corda.core.contracts/-contract/index.html b/docs/build/html/api/com.r3corda.core.contracts/-contract/index.html index 10b18a7f4f..351322a935 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-contract/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-contract/index.html @@ -9,7 +9,7 @@

Contract

interface Contract

Implemented by a program that implements business logic on the shared ledger. All participants run this code for -every LedgerTransaction they see on the network, for every input and output state. All contracts must accept the +every LedgerTransaction they see on the network, for every input and output state. All contracts must accept the 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.


@@ -47,12 +47,6 @@ existing contract code.

-AlwaysSucceedContract - -class AlwaysSucceedContract : Contract - - - CommercialPaper class CommercialPaper : Contract @@ -71,12 +65,6 @@ existing contract code.

-DummyLinearContract - -class DummyLinearContract : Contract - - - InterestRateSwap class InterestRateSwap : Contract

The Interest Rate Swap class. For a quick overview of what an IRS is, see here - http://www.pimco.co.uk/EN/Education/Pages/InterestRateSwapsBasics1-08.aspx (no endorsement). diff --git a/docs/build/html/api/com.r3corda.core.contracts/-deal-state/generate-agreement.html b/docs/build/html/api/com.r3corda.core.contracts/-deal-state/generate-agreement.html index ab6aee02f5..022587c846 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-deal-state/generate-agreement.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-deal-state/generate-agreement.html @@ -8,7 +8,7 @@

generateAgreement

-abstract fun generateAgreement(notary: Party): TransactionBuilder
+abstract fun generateAgreement(notary: Party): TransactionBuilder

Generate a partial transaction representing an agreement (command) to this deal, allowing a general deal/agreement protocol to generate the necessary transaction for potential implementations.

TODO: Currently this is the "inception" transaction but in future an offer of some description might be an input state ref

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-deal-state/index.html b/docs/build/html/api/com.r3corda.core.contracts/-deal-state/index.html index fe668a4dcb..4999a66f66 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-deal-state/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-deal-state/index.html @@ -38,7 +38,7 @@ implementation of general protocols that manipulate many agreement types.

linearId -abstract val linearId: UniqueIdentifier

Unique id shared by all LinearState states throughout history within the wallets of all parties. +abstract val linearId: UniqueIdentifier

Unique id shared by all LinearState states throughout history within the vaults of all parties. Verify methods should check that one input and one output share the id in a transaction, except at issuance/termination.

@@ -52,7 +52,7 @@ except at issuance/termination.

generateAgreement -abstract fun generateAgreement(notary: Party): TransactionBuilder

Generate a partial transaction representing an agreement (command) to this deal, allowing a general +abstract fun generateAgreement(notary: Party): TransactionBuilder

Generate a partial transaction representing an agreement (command) to this deal, allowing a general deal/agreement protocol to generate the necessary transaction for potential implementations.

@@ -71,7 +71,7 @@ deal/agreement protocol to generate the necessary transaction for potential impl isRelevant -abstract fun isRelevant(ourKeys: Set<PublicKey>): Boolean

True if this should be tracked by our wallet(s).

+abstract fun isRelevant(ourKeys: Set<PublicKey>): Boolean

True if this should be tracked by our vault(s).

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/-multi-owner-state/index.html b/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/-multi-owner-state/index.html index 992cfaf685..a5aaed999b 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/-multi-owner-state/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/-multi-owner-state/index.html @@ -58,5 +58,17 @@ in a different field, however this is a good example of a contract with multiple +

Inherited Properties

+ + + + + + + +
+encumbrance +open val encumbrance: Int?

All contract states may be encumbered by up to one other state.

+
diff --git a/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/-multi-owner-state/participants.html b/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/-multi-owner-state/participants.html index 202d1c290a..36091ec8da 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/-multi-owner-state/participants.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/-multi-owner-state/participants.html @@ -12,7 +12,7 @@ Overrides ContractState.participants

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 participants has to be involved and approve the transaction +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction so that they receive the updated state, and dont 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 @@ -22,7 +22,7 @@ list should just contain the owner.

Getter

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 participants has to be involved and approve the transaction +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction so that they receive the updated state, and dont 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 diff --git a/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/-single-owner-state/participants.html b/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/-single-owner-state/participants.html index 6aa4a749ff..246f486b78 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/-single-owner-state/participants.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/-single-owner-state/participants.html @@ -12,7 +12,7 @@ Overrides ContractState.participants

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 participants has to be involved and approve the transaction +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction so that they receive the updated state, and dont 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 @@ -22,7 +22,7 @@ list should just contain the owner.

Getter

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 participants has to be involved and approve the transaction +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction so that they receive the updated state, and dont 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 diff --git a/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/-state/index.html b/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/-state/index.html index 77c1761623..adf1e03480 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/-state/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/-state/index.html @@ -33,6 +33,13 @@ +encumbrance + +open val encumbrance: Int?

All contract states may be encumbered by up to one other state.

+ + + + participants abstract val participants: List<PublicKey>

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

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/generate-initial.html b/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/generate-initial.html index d519a7301a..bd911ef6df 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/generate-initial.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/generate-initial.html @@ -8,7 +8,7 @@

generateInitial

-fun generateInitial(owner: PartyAndReference, magicNumber: Int, notary: Party): TransactionBuilder
+fun generateInitial(owner: PartyAndReference, magicNumber: Int, notary: Party): TransactionBuilder


diff --git a/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/index.html b/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/index.html index 5b201ba356..dcf179f1e7 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/index.html @@ -88,13 +88,14 @@ existing contract code.

generateInitial -fun generateInitial(owner: PartyAndReference, magicNumber: Int, notary: Party): TransactionBuilder +fun generateInitial(owner: PartyAndReference, magicNumber: Int, notary: Party): TransactionBuilder move -fun move(prior: StateAndRef<SingleOwnerState>, newOwner: PublicKey): TransactionBuilder +fun move(prior: StateAndRef<SingleOwnerState>, newOwner: PublicKey): <ERROR CLASS>
+fun move(priors: List<StateAndRef<SingleOwnerState>>, newOwner: PublicKey): TransactionBuilder diff --git a/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/move.html b/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/move.html index 12e343e5e3..b551508a69 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/move.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-dummy-contract/move.html @@ -8,7 +8,9 @@

move

-fun move(prior: StateAndRef<SingleOwnerState>, newOwner: PublicKey): TransactionBuilder
+fun move(prior: StateAndRef<SingleOwnerState>, newOwner: PublicKey): <ERROR CLASS>
+ +fun move(priors: List<StateAndRef<SingleOwnerState>>, newOwner: PublicKey): TransactionBuilder


diff --git a/docs/build/html/api/com.r3corda.core.contracts/-dummy-state/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-dummy-state/-init-.html index 9d914540ad..4c18e2b0ed 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-dummy-state/-init-.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-dummy-state/-init-.html @@ -8,7 +8,7 @@

<init>

DummyState(magicNumber: Int = 0)
-

Dummy state for use in testing. Not part of any real contract.

+

Dummy state for use in testing. Not part of any contract, not even the DummyContract.



diff --git a/docs/build/html/api/com.r3corda.core.contracts/-dummy-state/index.html b/docs/build/html/api/com.r3corda.core.contracts/-dummy-state/index.html index 013a3c8211..4e415e6266 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-dummy-state/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-dummy-state/index.html @@ -8,7 +8,7 @@

DummyState

data class DummyState : ContractState
-

Dummy state for use in testing. Not part of any real contract.

+

Dummy state for use in testing. Not part of any contract, not even the DummyContract.



Constructors

@@ -18,7 +18,7 @@ <init> -DummyState(magicNumber: Int = 0)

Dummy state for use in testing. Not part of any real contract.

+DummyState(magicNumber: Int = 0)

Dummy state for use in testing. Not part of any contract, not even the DummyContract.

@@ -48,6 +48,18 @@ +

Inherited Properties

+ + + + + + + +
+encumbrance +open val encumbrance: Int?

All contract states may be encumbered by up to one other state.

+

Extension Functions

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-dummy-state/participants.html b/docs/build/html/api/com.r3corda.core.contracts/-dummy-state/participants.html index 4241d3c946..2cad3b9c10 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-dummy-state/participants.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-dummy-state/participants.html @@ -12,7 +12,7 @@ Overrides ContractState.participants

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 participants has to be involved and approve the transaction +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction so that they receive the updated state, and dont 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 @@ -22,7 +22,7 @@ list should just contain the owner.

Getter

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 participants has to be involved and approve the transaction +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction so that they receive the updated state, and dont 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 diff --git a/docs/build/html/api/com.r3corda.core.contracts/-fixable-deal-state/generate-fix.html b/docs/build/html/api/com.r3corda.core.contracts/-fixable-deal-state/generate-fix.html index 49a2c81676..d6975c98ab 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-fixable-deal-state/generate-fix.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-fixable-deal-state/generate-fix.html @@ -7,8 +7,8 @@ com.r3corda.core.contracts / FixableDealState / generateFix

generateFix

- -abstract fun generateFix(ptx: TransactionBuilder, oldState: StateAndRef<*>, fix: Fix): Unit
+ +abstract fun generateFix(ptx: TransactionBuilder, oldState: StateAndRef<*>, fix: Fix): Unit

Generate a fixing command for this deal and fix.

TODO: This would also likely move to methods on the Contract once the changes to reference the Contract from the ContractState are in.

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-fixable-deal-state/index.html b/docs/build/html/api/com.r3corda.core.contracts/-fixable-deal-state/index.html index e08bfc9847..338cbb7aa5 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-fixable-deal-state/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-fixable-deal-state/index.html @@ -11,6 +11,18 @@

Interface adding fixing specific methods.



+

Properties

+
+ + + + + + +
+oracleType +abstract val oracleType: ServiceType

What oracle service to use for the fixing

+

Inherited Properties

@@ -37,7 +49,7 @@ @@ -56,7 +68,7 @@ diff --git a/docs/build/html/api/com.r3corda.core.contracts/-fixable-deal-state/oracle-type.html b/docs/build/html/api/com.r3corda.core.contracts/-fixable-deal-state/oracle-type.html new file mode 100644 index 0000000000..4c76f48b0d --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.contracts/-fixable-deal-state/oracle-type.html @@ -0,0 +1,16 @@ + + +FixableDealState.oracleType - + + + +com.r3corda.core.contracts / FixableDealState / oracleType
+
+

oracleType

+ +abstract val oracleType: ServiceType
+

What oracle service to use for the fixing

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/-init-.html deleted file mode 100644 index 974943b406..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/-init-.html +++ /dev/null @@ -1,17 +0,0 @@ - - -LedgerTransaction.<init> - - - - -com.r3corda.core.contracts / LedgerTransaction / <init>
-
-

<init>

-LedgerTransaction(inputs: List<StateAndRef<*>>, outputs: List<TransactionState<*>>, commands: List<AuthenticatedObject<CommandData>>, attachments: List<Attachment>, id: SecureHash, notary: Party?, signers: List<PublicKey>, timestamp: Timestamp?, type: TransactionType)
-

A LedgerTransaction wraps the data needed to calculate one or more successor states from a set of input states. -It is the first step after extraction from a WireTransaction. The signatures at this point have been lined up -with the commands from the wire, and verified/looked up.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/attachments.html b/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/attachments.html deleted file mode 100644 index 5cc0422541..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/attachments.html +++ /dev/null @@ -1,16 +0,0 @@ - - -LedgerTransaction.attachments - - - - -com.r3corda.core.contracts / LedgerTransaction / attachments
-
-

attachments

- -val attachments: List<Attachment>
-

A list of Attachment objects identified by the transaction that are needed for this transaction to verify.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/commands.html b/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/commands.html deleted file mode 100644 index 42f2dd574a..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/commands.html +++ /dev/null @@ -1,16 +0,0 @@ - - -LedgerTransaction.commands - - - - -com.r3corda.core.contracts / LedgerTransaction / commands
-
-

commands

- -val commands: List<AuthenticatedObject<CommandData>>
-

Arbitrary data passed to the program of each input state.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/index.html b/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/index.html deleted file mode 100644 index d9f8a21cfa..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/index.html +++ /dev/null @@ -1,122 +0,0 @@ - - -LedgerTransaction - - - - -com.r3corda.core.contracts / LedgerTransaction
-
-

LedgerTransaction

-data class LedgerTransaction : NamedByHash
-

A LedgerTransaction wraps the data needed to calculate one or more successor states from a set of input states. -It is the first step after extraction from a WireTransaction. The signatures at this point have been lined up -with the commands from the wire, and verified/looked up.

-
-
-

Constructors

-
generateFix -abstract fun generateFix(ptx: TransactionBuilder, oldState: StateAndRef<*>, fix: Fix): Unit

Generate a fixing command for this deal and fix.

+abstract fun generateFix(ptx: TransactionBuilder, oldState: StateAndRef<*>, fix: Fix): Unit

Generate a fixing command for this deal and fix.

generateAgreement -abstract fun generateAgreement(notary: Party): TransactionBuilder

Generate a partial transaction representing an agreement (command) to this deal, allowing a general +abstract fun generateAgreement(notary: Party): TransactionBuilder

Generate a partial transaction representing an agreement (command) to this deal, allowing a general deal/agreement protocol to generate the necessary transaction for potential implementations.

- - - - - - -
-<init> -LedgerTransaction(inputs: List<StateAndRef<*>>, outputs: List<TransactionState<*>>, commands: List<AuthenticatedObject<CommandData>>, attachments: List<Attachment>, id: SecureHash, notary: Party?, signers: List<PublicKey>, timestamp: Timestamp?, type: TransactionType)

A LedgerTransaction wraps the data needed to calculate one or more successor states from a set of input states. -It is the first step after extraction from a WireTransaction. The signatures at this point have been lined up -with the commands from the wire, and verified/looked up.

-
-

Properties

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-attachments -val attachments: List<Attachment>

A list of Attachment objects identified by the transaction that are needed for this transaction to verify.

-
-commands -val commands: List<AuthenticatedObject<CommandData>>

Arbitrary data passed to the program of each input state.

-
-id -val id: SecureHash

The hash of the original serialised WireTransaction.

-
-inputs -val inputs: List<StateAndRef<*>>

The input states which will be consumed/invalidated by the execution of this transaction.

-
-notary -val notary: Party?

The notary for this party, may be null for transactions with no notary.

-
-outputs -val outputs: List<TransactionState<*>>

The states that will be generated by the execution of this transaction.

-
-signers -val signers: List<PublicKey>

The notary key and the command keys together: a signed transaction must provide signatures for all of these.

-
-timestamp -val timestamp: Timestamp?
-type -val type: TransactionType
-

Functions

- - - - - - - - - - - - - - - -
-outRef -fun <T : ContractState> outRef(index: Int): StateAndRef<T>
-toTransactionForContract -fun toTransactionForContract(): TransactionForContract

Strips the transaction down to a form that is usable by the contract verify functions

-
-verify -fun verify(): Unit

Verifies this transaction and throws an exception if not valid, depending on the type. For general transactions:

-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/inputs.html b/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/inputs.html deleted file mode 100644 index 00de581b57..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/inputs.html +++ /dev/null @@ -1,16 +0,0 @@ - - -LedgerTransaction.inputs - - - - -com.r3corda.core.contracts / LedgerTransaction / inputs
-
-

inputs

- -val inputs: List<StateAndRef<*>>
-

The input states which will be consumed/invalidated by the execution of this transaction.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/notary.html b/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/notary.html deleted file mode 100644 index cf2dfaf6c7..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/notary.html +++ /dev/null @@ -1,16 +0,0 @@ - - -LedgerTransaction.notary - - - - -com.r3corda.core.contracts / LedgerTransaction / notary
-
-

notary

- -val notary: Party?
-

The notary for this party, may be null for transactions with no notary.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/out-ref.html b/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/out-ref.html deleted file mode 100644 index 2bdfe99824..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/out-ref.html +++ /dev/null @@ -1,15 +0,0 @@ - - -LedgerTransaction.outRef - - - - -com.r3corda.core.contracts / LedgerTransaction / outRef
-
-

outRef

- -fun <T : ContractState> outRef(index: Int): StateAndRef<T>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/outputs.html b/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/outputs.html deleted file mode 100644 index 8b5138d562..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/outputs.html +++ /dev/null @@ -1,16 +0,0 @@ - - -LedgerTransaction.outputs - - - - -com.r3corda.core.contracts / LedgerTransaction / outputs
-
-

outputs

- -val outputs: List<TransactionState<*>>
-

The states that will be generated by the execution of this transaction.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/signers.html b/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/signers.html deleted file mode 100644 index 079a82f4c4..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/signers.html +++ /dev/null @@ -1,16 +0,0 @@ - - -LedgerTransaction.signers - - - - -com.r3corda.core.contracts / LedgerTransaction / signers
-
-

signers

- -val signers: List<PublicKey>
-

The notary key and the command keys together: a signed transaction must provide signatures for all of these.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/timestamp.html b/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/timestamp.html deleted file mode 100644 index fb1aa8dd5c..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/timestamp.html +++ /dev/null @@ -1,15 +0,0 @@ - - -LedgerTransaction.timestamp - - - - -com.r3corda.core.contracts / LedgerTransaction / timestamp
-
-

timestamp

- -val timestamp: Timestamp?
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/type.html b/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/type.html deleted file mode 100644 index c2bc0b4cea..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/type.html +++ /dev/null @@ -1,15 +0,0 @@ - - -LedgerTransaction.type - - - - -com.r3corda.core.contracts / LedgerTransaction / type
-
-

type

- -val type: TransactionType
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-linear-state/-clause-verifier/index.html b/docs/build/html/api/com.r3corda.core.contracts/-linear-state/-clause-verifier/index.html index 5b541d3e4b..9be62c7955 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-linear-state/-clause-verifier/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-linear-state/-clause-verifier/index.html @@ -7,7 +7,7 @@ com.r3corda.core.contracts / LinearState / ClauseVerifier

ClauseVerifier

-class ClauseVerifier<S : LinearState> : ConcreteClause<ContractState, CommandData, Unit>
+class ClauseVerifier<S : LinearState> : Clause<ContractState, CommandData, Unit>

Standard clause to verify the LinearState safety properties.



@@ -39,7 +39,7 @@ -requiredCommands +requiredCommands open val requiredCommands: Set<Class<out CommandData>>

Determine whether this clause runs or not

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-linear-state/index.html b/docs/build/html/api/com.r3corda.core.contracts/-linear-state/index.html index 8fb1607185..532cd720fd 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-linear-state/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-linear-state/index.html @@ -9,7 +9,7 @@

LinearState

interface LinearState : ContractState

A state that evolves by superseding itself, all of which share the common "linearId".

-

This simplifies the job of tracking the current version of certain types of state in e.g. a wallet.

+

This simplifies the job of tracking the current version of certain types of state in e.g. a vault.




@@ -21,7 +21,7 @@ ClauseVerifier -class ClauseVerifier<S : LinearState> : ConcreteClause<ContractState, CommandData, Unit>

Standard clause to verify the LinearState safety properties.

+class ClauseVerifier<S : LinearState> : Clause<ContractState, CommandData, Unit>

Standard clause to verify the LinearState safety properties.

@@ -33,7 +33,7 @@ linearId -abstract val linearId: UniqueIdentifier

Unique id shared by all LinearState states throughout history within the wallets of all parties. +abstract val linearId: UniqueIdentifier

Unique id shared by all LinearState states throughout history within the vaults of all parties. Verify methods should check that one input and one output share the id in a transaction, except at issuance/termination.

@@ -52,6 +52,13 @@ except at issuance/termination.

+encumbrance + +open val encumbrance: Int?

All contract states may be encumbered by up to one other state.

+ + + + participants abstract val participants: List<PublicKey>

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

@@ -66,7 +73,7 @@ except at issuance/termination.

isRelevant -abstract fun isRelevant(ourKeys: Set<PublicKey>): Boolean

True if this should be tracked by our wallet(s).

+abstract fun isRelevant(ourKeys: Set<PublicKey>): Boolean

True if this should be tracked by our vault(s).

@@ -94,12 +101,6 @@ except at issuance/termination.

implementation of general protocols that manipulate many agreement types.

- - -State - -class State : LinearState - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-linear-state/is-relevant.html b/docs/build/html/api/com.r3corda.core.contracts/-linear-state/is-relevant.html index 0495f1de08..73b7dd27d4 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-linear-state/is-relevant.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-linear-state/is-relevant.html @@ -9,7 +9,7 @@

isRelevant

abstract fun isRelevant(ourKeys: Set<PublicKey>): Boolean
-

True if this should be tracked by our wallet(s).

+

True if this should be tracked by our vault(s).



diff --git a/docs/build/html/api/com.r3corda.core.contracts/-linear-state/linear-id.html b/docs/build/html/api/com.r3corda.core.contracts/-linear-state/linear-id.html index ceb14ba362..62ad343e73 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-linear-state/linear-id.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-linear-state/linear-id.html @@ -9,7 +9,7 @@

linearId

abstract val linearId: UniqueIdentifier
-

Unique id shared by all LinearState states throughout history within the wallets of all parties. +

Unique id shared by all LinearState states throughout history within the vaults of all parties. Verify methods should check that one input and one output share the id in a transaction, except at issuance/termination.


diff --git a/docs/build/html/api/com.r3corda.core.contracts/-linear-state/thread.html b/docs/build/html/api/com.r3corda.core.contracts/-linear-state/thread.html deleted file mode 100644 index d276a13f8d..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-linear-state/thread.html +++ /dev/null @@ -1,16 +0,0 @@ - - -LinearState.thread - - - - -com.r3corda.core.contracts / LinearState / thread
-
-

thread

- -abstract val thread: SecureHash
-

Unique thread id within the wallets of all parties

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-named-by-hash/index.html b/docs/build/html/api/com.r3corda.core.contracts/-named-by-hash/index.html index 1c65fc9c0e..60064a0f2c 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-named-by-hash/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-named-by-hash/index.html @@ -36,25 +36,27 @@ of how attachments are meant to be used include:

-LedgerTransaction +BaseTransaction -data class LedgerTransaction : NamedByHash

A LedgerTransaction wraps the data needed to calculate one or more successor states from a set of input states. -It is the first step after extraction from a WireTransaction. The signatures at this point have been lined up -with the commands from the wire, and verified/looked up.

+abstract class BaseTransaction : NamedByHash

An abstract class defining fields shared by all transaction types in the system.

-SignedTransaction +SignaturesMissingException -data class SignedTransaction : NamedByHash

Container for a WireTransaction and attached signatures.

- +class SignaturesMissingException : NamedByHash, SignatureException -WireTransaction +SignedTransaction -data class WireTransaction : NamedByHash

Transaction ready for serialisation, without any signatures attached.

+data class SignedTransaction : NamedByHash

SignedTransaction wraps a serialized WireTransaction. It contains one or more signatures, each one for +a public key that is mentioned inside a transaction command. SignedTransaction is the top level transaction type +and the type most frequently passed around the network and stored. The identity of a transaction is the hash +of a WireTransaction, therefore if you are storing data keyed by WT hash be aware that multiple different STs may +map to the same key (and they could be different in important ways, like validity). The signatures on a +SignedTransaction might be invalid or missing: the type does not imply validity.

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-net-command/index.html b/docs/build/html/api/com.r3corda.core.contracts/-net-command/index.html new file mode 100644 index 0000000000..9561953a94 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.contracts/-net-command/index.html @@ -0,0 +1,40 @@ + + +NetCommand - + + + +com.r3corda.core.contracts / NetCommand
+
+

NetCommand

+interface NetCommand : CommandData
+

A common netting command for contracts whose states can be netted.

+
+
+

Properties

+ + + + + + + +
+type +abstract val type: NetType

The type of netting to apply, see NetType for options.

+
+

Inheritors

+ + + + + + + +
+Net +data class Net : NetCommand, Commands

Net two or more obligation states together in a close-out netting style. Limited to bilateral netting +as only the beneficiary (not the obligor) needs to sign.

+
+ + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-net-command/type.html b/docs/build/html/api/com.r3corda.core.contracts/-net-command/type.html new file mode 100644 index 0000000000..07cca275c1 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.contracts/-net-command/type.html @@ -0,0 +1,16 @@ + + +NetCommand.type - + + + +com.r3corda.core.contracts / NetCommand / type
+
+

type

+ +abstract val type: NetType
+

The type of netting to apply, see NetType for options.

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-ownable-state/index.html b/docs/build/html/api/com.r3corda.core.contracts/-ownable-state/index.html index d22eac3a17..2ed51bbd9b 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-ownable-state/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-ownable-state/index.html @@ -35,6 +35,13 @@ +encumbrance + +open val encumbrance: Int?

All contract states may be encumbered by up to one other state.

+ + + + participants abstract val participants: List<PublicKey>

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

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-schedulable-state/index.html b/docs/build/html/api/com.r3corda.core.contracts/-schedulable-state/index.html index 56ff7bbab1..943adc8571 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-schedulable-state/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-schedulable-state/index.html @@ -22,6 +22,13 @@ +encumbrance + +open val encumbrance: Int?

All contract states may be encumbered by up to one other state.

+ + + + participants abstract val participants: List<PublicKey>

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

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/-init-.html deleted file mode 100644 index e2d80d3700..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - -SignedTransaction.<init> - - - - -com.r3corda.core.contracts / SignedTransaction / <init>
-
-

<init>

-SignedTransaction(txBits: SerializedBytes<WireTransaction>, sigs: List<WithKey>)
-

Container for a WireTransaction and attached signatures.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/get-missing-signatures.html b/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/get-missing-signatures.html deleted file mode 100644 index f732b36919..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/get-missing-signatures.html +++ /dev/null @@ -1,16 +0,0 @@ - - -SignedTransaction.getMissingSignatures - - - - -com.r3corda.core.contracts / SignedTransaction / getMissingSignatures
-
-

getMissingSignatures

- -fun getMissingSignatures(): Set<PublicKey>
-

Returns the set of missing signatures - a signature must be present for each signer public key.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/index.html b/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/index.html deleted file mode 100644 index 1af017a5f4..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/index.html +++ /dev/null @@ -1,105 +0,0 @@ - - -SignedTransaction - - - - -com.r3corda.core.contracts / SignedTransaction
-
-

SignedTransaction

-data class SignedTransaction : NamedByHash
-

Container for a WireTransaction and attached signatures.

-
-
-

Constructors

- - - - - - - -
-<init> -SignedTransaction(txBits: SerializedBytes<WireTransaction>, sigs: List<WithKey>)

Container for a WireTransaction and attached signatures.

-
-

Properties

- - - - - - - - - - - - - - - - - - - -
-id -val id: SecureHash

A transaction ID is the hash of the WireTransaction. Thus adding or removing a signature does not change it.

-
-sigs -val sigs: List<WithKey>
-tx -val tx: WireTransaction

Lazily calculated access to the deserialised/hashed transaction data.

-
-txBits -val txBits: SerializedBytes<WireTransaction>
-

Functions

- - - - - - - - - - - - - - - - - - - -
-plus -operator fun plus(sig: WithKey): SignedTransaction

Alias for withAdditionalSignature to let you use Kotlin operator overloading.

-operator fun plus(sigList: Collection<WithKey>): SignedTransaction
-verifySignatures -fun verifySignatures(throwIfSignaturesAreMissing: Boolean = true): Set<PublicKey>

Verify the signatures, deserialise the wire transaction and then check that the set of signatures found contains -the set of pubkeys in the signers list. If any signatures are missing, either throws an exception (by default) or -returns the list of keys that have missing signatures, depending on the parameter.

-
-withAdditionalSignature -fun withAdditionalSignature(sig: WithKey): SignedTransaction

Returns the same transaction but with an additional (unchecked) signature

-
-withAdditionalSignatures -fun withAdditionalSignatures(sigList: Iterable<WithKey>): SignedTransaction
-

Extension Functions

- - - - - - - -
-toLedgerTransaction -fun SignedTransaction.toLedgerTransaction(services: ServiceHub): LedgerTransaction

Calls verify to check all required signatures are present, and then calls WireTransaction.toLedgerTransaction -with the passed in ServiceHub to resolve the dependencies, returning an unverified LedgerTransaction.

-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/plus.html b/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/plus.html deleted file mode 100644 index d8e3ac543a..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/plus.html +++ /dev/null @@ -1,20 +0,0 @@ - - -SignedTransaction.plus - - - - -com.r3corda.core.contracts / SignedTransaction / plus
-
-

plus

- -operator fun plus(sig: WithKey): SignedTransaction
-

Alias for withAdditionalSignature to let you use Kotlin operator overloading.

-
-
- -operator fun plus(sigList: Collection<WithKey>): SignedTransaction
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/verify-signatures.html b/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/verify-signatures.html deleted file mode 100644 index f313e0ee58..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/verify-signatures.html +++ /dev/null @@ -1,21 +0,0 @@ - - -SignedTransaction.verifySignatures - - - - -com.r3corda.core.contracts / SignedTransaction / verifySignatures
-
-

verifySignatures

- -fun verifySignatures(throwIfSignaturesAreMissing: Boolean = true): Set<PublicKey>
-

Verify the signatures, deserialise the wire transaction and then check that the set of signatures found contains -the set of pubkeys in the signers list. If any signatures are missing, either throws an exception (by default) or -returns the list of keys that have missing signatures, depending on the parameter.

-

Exceptions

- -SignatureException - if a signature is invalid, does not match or if any signature is missing.
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/verify.html b/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/verify.html deleted file mode 100644 index a2e9064ac6..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/verify.html +++ /dev/null @@ -1,21 +0,0 @@ - - -SignedTransaction.verify - - - - -com.r3corda.core.contracts / SignedTransaction / verify
-
-

verify

- -fun verify(throwIfSignaturesAreMissing: Boolean = true): Set<PublicKey>
-

Verify the signatures, deserialise the wire transaction and then check that the set of signatures found contains -the set of pubkeys in the signers list. If any signatures are missing, either throws an exception (by default) or -returns the list of keys that have missing signatures, depending on the parameter.

-

Exceptions

- -SignatureException - if a signature is invalid, does not match or if any signature is missing.
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/with-additional-signature.html b/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/with-additional-signature.html deleted file mode 100644 index 39037d4b89..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/with-additional-signature.html +++ /dev/null @@ -1,16 +0,0 @@ - - -SignedTransaction.withAdditionalSignature - - - - -com.r3corda.core.contracts / SignedTransaction / withAdditionalSignature
-
-

withAdditionalSignature

- -fun withAdditionalSignature(sig: WithKey): SignedTransaction
-

Returns the same transaction but with an additional (unchecked) signature

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/with-additional-signatures.html b/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/with-additional-signatures.html deleted file mode 100644 index 32618083f0..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/with-additional-signatures.html +++ /dev/null @@ -1,15 +0,0 @@ - - -SignedTransaction.withAdditionalSignatures - - - - -com.r3corda.core.contracts / SignedTransaction / withAdditionalSignatures
-
-

withAdditionalSignatures

- -fun withAdditionalSignatures(sigList: Iterable<WithKey>): SignedTransaction
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-state-and-ref/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-state-and-ref/-init-.html index f247f2f7c4..ab3ff1f655 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-state-and-ref/-init-.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-state-and-ref/-init-.html @@ -8,7 +8,7 @@

<init>

StateAndRef(state: TransactionState<T>, ref: StateRef)
-

A StateAndRef is simply a (state, ref) pair. For instance, a wallet (which holds available assets) contains these.

+

A StateAndRef is simply a (state, ref) pair. For instance, a vault (which holds available assets) contains these.



diff --git a/docs/build/html/api/com.r3corda.core.contracts/-state-and-ref/index.html b/docs/build/html/api/com.r3corda.core.contracts/-state-and-ref/index.html index e02e74e348..3eae3c0d6c 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-state-and-ref/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-state-and-ref/index.html @@ -8,7 +8,7 @@

StateAndRef

data class StateAndRef<out T : ContractState>
-

A StateAndRef is simply a (state, ref) pair. For instance, a wallet (which holds available assets) contains these.

+

A StateAndRef is simply a (state, ref) pair. For instance, a vault (which holds available assets) contains these.



Constructors

@@ -18,7 +18,7 @@ <init> -StateAndRef(state: TransactionState<T>, ref: StateRef)

A StateAndRef is simply a (state, ref) pair. For instance, a wallet (which holds available assets) contains these.

+StateAndRef(state: TransactionState<T>, ref: StateRef)

A StateAndRef is simply a (state, ref) pair. For instance, a vault (which holds available assets) contains these.

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/-init-.html deleted file mode 100644 index 1716a6a81a..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/-init-.html +++ /dev/null @@ -1,19 +0,0 @@ - - -TimestampCommand.<init> - - - - -com.r3corda.core.contracts / TimestampCommand / <init>
-
-

<init>

-TimestampCommand(time: Instant, tolerance: Duration)
-
-
-TimestampCommand(after: Instant?, before: Instant?)
-

If present in a transaction, contains a time that was verified by the timestamping authority/authorities whose -public keys are identified in the containing Command object. The true time must be between (after, before).

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/after.html b/docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/after.html deleted file mode 100644 index 5e11f8dc27..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/after.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TimestampCommand.after - - - - -com.r3corda.core.contracts / TimestampCommand / after
-
-

after

- -val after: Instant?
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/before.html b/docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/before.html deleted file mode 100644 index c6832fc28b..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/before.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TimestampCommand.before - - - - -com.r3corda.core.contracts / TimestampCommand / before
-
-

before

- -val before: Instant?
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/index.html b/docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/index.html deleted file mode 100644 index 8191360edd..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/index.html +++ /dev/null @@ -1,52 +0,0 @@ - - -TimestampCommand - - - - -com.r3corda.core.contracts / TimestampCommand
-
-

TimestampCommand

-data class TimestampCommand : CommandData
-

If present in a transaction, contains a time that was verified by the timestamping authority/authorities whose -public keys are identified in the containing Command object. The true time must be between (after, before).

-
-
-

Constructors

- - - - - - - -
-<init> -TimestampCommand(time: Instant, tolerance: Duration)TimestampCommand(after: Instant?, before: Instant?)

If present in a transaction, contains a time that was verified by the timestamping authority/authorities whose -public keys are identified in the containing Command object. The true time must be between (after, before).

-
-

Properties

- - - - - - - - - - - - - - - -
-after -val after: Instant?
-before -val before: Instant?
-midpoint -val midpoint: Instant
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/midpoint.html b/docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/midpoint.html deleted file mode 100644 index 3bc5aa7715..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-timestamp-command/midpoint.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TimestampCommand.midpoint - - - - -com.r3corda.core.contracts / TimestampCommand / midpoint
-
-

midpoint

- -val midpoint: Instant
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/-init-.html deleted file mode 100644 index c0980e541a..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/-init-.html +++ /dev/null @@ -1,26 +0,0 @@ - - -TransactionBuilder.<init> - - - - -com.r3corda.core.contracts / TransactionBuilder / <init>
-
-

<init>

-TransactionBuilder(type: TransactionType = TransactionType.General(), notary: Party? = null, inputs: MutableList<StateRef> = arrayListOf(), attachments: MutableList<SecureHash> = arrayListOf(), outputs: MutableList<TransactionState<ContractState>> = arrayListOf(), commands: MutableList<Command> = arrayListOf(), signers: MutableSet<PublicKey> = mutableSetOf(), timestamp: Timestamp? = null)
-

A TransactionBuilder is a transaction class thats mutable (unlike the others which are all immutable). It is -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.

-

The builder can be customised for specific transaction types, e.g. where additional processing is needed -before adding a state/command.

-
-
-

Parameters

- -notary - Notary used for the transaction. If null, this indicates the transaction DOES NOT have a notary. -When this is set to a non-null value, an output state can be added by just passing in a ContractState – a -TransactionState with this notary specified will be generated automatically.
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-attachment.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-attachment.html deleted file mode 100644 index 1ba4df872c..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-attachment.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionBuilder.addAttachment - - - - -com.r3corda.core.contracts / TransactionBuilder / addAttachment
-
-

addAttachment

- -fun addAttachment(attachmentId: SecureHash): Unit
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-command.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-command.html deleted file mode 100644 index 40f943a810..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-command.html +++ /dev/null @@ -1,19 +0,0 @@ - - -TransactionBuilder.addCommand - - - - -com.r3corda.core.contracts / TransactionBuilder / addCommand
-
-

addCommand

- -fun addCommand(arg: Command): Unit
- -fun addCommand(data: CommandData, vararg keys: PublicKey): <ERROR CLASS>
- -fun addCommand(data: CommandData, keys: List<PublicKey>): Unit
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-input-state.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-input-state.html deleted file mode 100644 index bceed5e8a4..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-input-state.html +++ /dev/null @@ -1,17 +0,0 @@ - - -TransactionBuilder.addInputState - - - - -com.r3corda.core.contracts / TransactionBuilder / addInputState
-
-

addInputState

- -open fun addInputState(stateAndRef: StateAndRef<*>): Unit
- -fun addInputState(stateRef: StateRef, notary: Party): Unit
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-output-state.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-output-state.html deleted file mode 100644 index 324b23dee8..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-output-state.html +++ /dev/null @@ -1,22 +0,0 @@ - - -TransactionBuilder.addOutputState - - - - -com.r3corda.core.contracts / TransactionBuilder / addOutputState
-
-

addOutputState

- -fun addOutputState(state: TransactionState<*>): Int
- -fun addOutputState(state: ContractState, notary: Party): Int
-
-
- -fun addOutputState(state: ContractState): Int
-

A default notary must be specified during builder construction to use this method

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-signature-unchecked.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-signature-unchecked.html deleted file mode 100644 index 5c5cfbb66d..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/add-signature-unchecked.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TransactionBuilder.addSignatureUnchecked - - - - -com.r3corda.core.contracts / TransactionBuilder / addSignatureUnchecked
-
-

addSignatureUnchecked

- -fun addSignatureUnchecked(sig: WithKey): TransactionBuilder
-

Adds the signature directly to the transaction, without checking it for validity.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/commands.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/commands.html deleted file mode 100644 index 18bee7c73b..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/commands.html +++ /dev/null @@ -1,17 +0,0 @@ - - -TransactionBuilder.commands - - - - -com.r3corda.core.contracts / TransactionBuilder / commands
-
-

commands

- -fun commands(): List<Command>
- -protected val commands: MutableList<Command>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/index.html deleted file mode 100644 index 5ff0c7eaab..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/index.html +++ /dev/null @@ -1,247 +0,0 @@ - - -TransactionBuilder - - - - -com.r3corda.core.contracts / TransactionBuilder
-
-

TransactionBuilder

-open class TransactionBuilder
-

A TransactionBuilder is a transaction class thats mutable (unlike the others which are all immutable). It is -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.

-

The builder can be customised for specific transaction types, e.g. where additional processing is needed -before adding a state/command.

-
-
-

Parameters

- -notary - Notary used for the transaction. If null, this indicates the transaction DOES NOT have a notary. -When this is set to a non-null value, an output state can be added by just passing in a ContractState – a -TransactionState with this notary specified will be generated automatically.
-
-
-

Constructors

- - - - - - - -
-<init> -TransactionBuilder(type: TransactionType = TransactionType.General(), notary: Party? = null, inputs: MutableList<StateRef> = arrayListOf(), attachments: MutableList<SecureHash> = arrayListOf(), outputs: MutableList<TransactionState<ContractState>> = arrayListOf(), commands: MutableList<Command> = arrayListOf(), signers: MutableSet<PublicKey> = mutableSetOf(), timestamp: Timestamp? = null)

A TransactionBuilder is a transaction class thats mutable (unlike the others which are all immutable). It is -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.

-
-

Properties

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-attachments -val attachments: MutableList<SecureHash>
-commands -val commands: MutableList<Command>
-currentSigs -val currentSigs: <ERROR CLASS>

The signatures that have been collected so far - might be incomplete

-
-inputs -val inputs: MutableList<StateRef>
-notary -var notary: Party?
-outputs -val outputs: MutableList<TransactionState<ContractState>>
-signers -val signers: MutableSet<PublicKey>
-time -val time: Timestamp?
-timestamp -var timestamp: Timestamp?
-type -val type: TransactionType
-

Functions

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-addAttachment -fun addAttachment(attachmentId: SecureHash): Unit
-addCommand -fun addCommand(arg: Command): Unit
-fun addCommand(data: CommandData, vararg keys: PublicKey): <ERROR CLASS>
-fun addCommand(data: CommandData, keys: List<PublicKey>): Unit
-addInputState -open fun addInputState(stateAndRef: StateAndRef<*>): Unit
-fun addInputState(stateRef: StateRef, notary: Party): Unit
-addOutputState -fun addOutputState(state: TransactionState<*>): Int
-fun addOutputState(state: ContractState, notary: Party): Intfun addOutputState(state: ContractState): Int

A default notary must be specified during builder construction to use this method

-
-addSignatureUnchecked -fun addSignatureUnchecked(sig: WithKey): TransactionBuilder

Adds the signature directly to the transaction, without checking it for validity.

-
-attachments -fun attachments(): List<SecureHash>
-checkAndAddSignature -fun checkAndAddSignature(sig: WithKey): Unit

Checks that the given signature matches one of the commands and that it is a correct signature over the tx, then -adds it.

-
-checkSignature -fun checkSignature(sig: WithKey): Unit

Checks that the given signature matches one of the commands and that it is a correct signature over the tx.

-
-commands -fun commands(): List<Command>
-copy -fun copy(): TransactionBuilder

Creates a copy of the builder.

-
-inputStates -fun inputStates(): List<StateRef>
-outputStates -fun outputStates(): List<TransactionState<*>>
-setTime -fun setTime(time: Instant, timeTolerance: Duration): Unit

Places a TimestampCommand in this transaction, removing any existing command if there is one. -The command requires a signature from the Notary service, which acts as a Timestamp Authority. -The signature can be obtained using NotaryProtocol.

-fun setTime(newTimestamp: Timestamp): Unit
-signWith -fun signWith(key: KeyPair): Unit
-toSignedTransaction -fun toSignedTransaction(checkSufficientSignatures: Boolean = true): SignedTransaction
-toWireTransaction -fun toWireTransaction(): WireTransaction
-withItems -fun withItems(vararg items: Any): TransactionBuilder

A more convenient way to add items to this transaction that calls the add* methods for you based on type

-
-

Inheritors

- - - - - - - - - - - -
-Builder -class Builder : TransactionBuilder

Just uses the default TransactionBuilder with no special logic

-
-Builder -class Builder : TransactionBuilder

A transaction builder that automatically sets the transaction type to NotaryChange -and adds the list of participants to the signers set for every input state.

-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/input-states.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/input-states.html deleted file mode 100644 index 79f58db968..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/input-states.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionBuilder.inputStates - - - - -com.r3corda.core.contracts / TransactionBuilder / inputStates
-
-

inputStates

- -fun inputStates(): List<StateRef>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/inputs.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/inputs.html deleted file mode 100644 index 0fe3c2ebc8..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/inputs.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionBuilder.inputs - - - - -com.r3corda.core.contracts / TransactionBuilder / inputs
-
-

inputs

- -protected val inputs: MutableList<StateRef>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/output-states.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/output-states.html deleted file mode 100644 index 927518ba49..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/output-states.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionBuilder.outputStates - - - - -com.r3corda.core.contracts / TransactionBuilder / outputStates
-
-

outputStates

- -fun outputStates(): List<TransactionState<*>>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/outputs.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/outputs.html deleted file mode 100644 index 7467bf59d1..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/outputs.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionBuilder.outputs - - - - -com.r3corda.core.contracts / TransactionBuilder / outputs
-
-

outputs

- -protected val outputs: MutableList<TransactionState<ContractState>>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/set-time.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/set-time.html deleted file mode 100644 index 27af0d26fc..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/set-time.html +++ /dev/null @@ -1,30 +0,0 @@ - - -TransactionBuilder.setTime - - - - -com.r3corda.core.contracts / TransactionBuilder / setTime
-
-

setTime

- -fun setTime(time: Instant, timeTolerance: Duration): Unit
-

Places a TimestampCommand in this transaction, removing any existing command if there is one. -The command requires a signature from the Notary service, which acts as a Timestamp Authority. -The signature can be obtained using NotaryProtocol.

-

The window of time in which the final timestamp may lie is defined as time +/- timeTolerance. -If you want a non-symmetrical time window you must add the command via addCommand yourself. The tolerance -should be chosen such that your code can finish building the transaction and sending it to the TSA within that -window of time, taking into account factors such as network latency. Transactions being built by a group of -collaborating parties may therefore require a higher time tolerance than a transaction being built by a single -node.

-
-
-
-
- -fun setTime(newTimestamp: Timestamp): Unit
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/sign-with.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/sign-with.html deleted file mode 100644 index c253ecb756..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/sign-with.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionBuilder.signWith - - - - -com.r3corda.core.contracts / TransactionBuilder / signWith
-
-

signWith

- -fun signWith(key: KeyPair): Unit
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/time.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/time.html deleted file mode 100644 index 99c15816fe..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/time.html +++ /dev/null @@ -1,17 +0,0 @@ - - -TransactionBuilder.time - - - - -com.r3corda.core.contracts / TransactionBuilder / time
-
-

time

- -val time: Timestamp?
-Deprecated: use timestamp instead
-
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/timestamp.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/timestamp.html deleted file mode 100644 index 2db3400565..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/timestamp.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionBuilder.timestamp - - - - -com.r3corda.core.contracts / TransactionBuilder / timestamp
-
-

timestamp

- -protected var timestamp: Timestamp?
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/to-signed-transaction.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/to-signed-transaction.html deleted file mode 100644 index c9898ecd5a..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/to-signed-transaction.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionBuilder.toSignedTransaction - - - - -com.r3corda.core.contracts / TransactionBuilder / toSignedTransaction
-
-

toSignedTransaction

- -fun toSignedTransaction(checkSufficientSignatures: Boolean = true): SignedTransaction
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/type.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/type.html deleted file mode 100644 index 7665ef3de4..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/type.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionBuilder.type - - - - -com.r3corda.core.contracts / TransactionBuilder / type
-
-

type

- -protected val type: TransactionType
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/with-items.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/with-items.html deleted file mode 100644 index b0b3163470..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/with-items.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TransactionBuilder.withItems - - - - -com.r3corda.core.contracts / TransactionBuilder / withItems
-
-

withItems

- -fun withItems(vararg items: Any): TransactionBuilder
-

A more convenient way to add items to this transaction that calls the add* methods for you based on type

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-conflict-exception/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-conflict-exception/-init-.html index ff204cdbcb..3db889e616 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-conflict-exception/-init-.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-conflict-exception/-init-.html @@ -7,7 +7,7 @@ com.r3corda.core.contracts / TransactionConflictException / <init>

<init>

-TransactionConflictException(conflictRef: StateRef, tx1: LedgerTransaction, tx2: LedgerTransaction)
+TransactionConflictException(conflictRef: StateRef, tx1: LedgerTransaction, tx2: LedgerTransaction)


diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-conflict-exception/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-conflict-exception/index.html index 1a081058bb..5d0705e557 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-conflict-exception/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-conflict-exception/index.html @@ -17,7 +17,7 @@ <init> -TransactionConflictException(conflictRef: StateRef, tx1: LedgerTransaction, tx2: LedgerTransaction) +TransactionConflictException(conflictRef: StateRef, tx1: LedgerTransaction, tx2: LedgerTransaction) @@ -34,13 +34,13 @@ tx1 -val tx1: LedgerTransaction +val tx1: LedgerTransaction tx2 -val tx2: LedgerTransaction +val tx2: LedgerTransaction diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-conflict-exception/tx1.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-conflict-exception/tx1.html index a8d22ecd79..12f9d8eaaf 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-conflict-exception/tx1.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-conflict-exception/tx1.html @@ -8,7 +8,7 @@

tx1

-val tx1: LedgerTransaction
+val tx1: LedgerTransaction


diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-conflict-exception/tx2.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-conflict-exception/tx2.html index 6ec73d806c..011d074430 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-conflict-exception/tx2.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-conflict-exception/tx2.html @@ -8,7 +8,7 @@

tx2

-val tx2: LedgerTransaction
+val tx2: LedgerTransaction


diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/get-timestamp-by-name.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/get-timestamp-by-name.html deleted file mode 100644 index 671b2920d5..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/get-timestamp-by-name.html +++ /dev/null @@ -1,18 +0,0 @@ - - -TransactionForContract.getTimestampByName - - - - -com.r3corda.core.contracts / TransactionForContract / getTimestampByName
-
-

getTimestampByName

- -fun getTimestampByName(vararg authorityName: String): TimestampCommand?
-Deprecated: Timestamping authority should always be notary for the transaction
-
-

Simply calls commands.getTimestampByName as a shortcut to make code completion more intuitive.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/get-timestamp-by.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/get-timestamp-by.html deleted file mode 100644 index d37ebd5123..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/get-timestamp-by.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TransactionForContract.getTimestampBy - - - - -com.r3corda.core.contracts / TransactionForContract / getTimestampBy
-
-

getTimestampBy

- -fun getTimestampBy(timestampingAuthority: Party): TimestampCommand?
-

Simply calls commands.getTimestampBy as a shortcut to make code completion more intuitive.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/group-commands.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/group-commands.html deleted file mode 100644 index eee8109e42..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/group-commands.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionForContract.groupCommands - - - - -com.r3corda.core.contracts / TransactionForContract / groupCommands
-
-

groupCommands

- -inline fun <reified T : CommandData, K> groupCommands(keySelector: (AuthenticatedObject<T>) -> K): Map<K, List<AuthenticatedObject<T>>>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/group-states.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/group-states.html index d1e842e179..22a216a5e6 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/group-states.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/group-states.html @@ -15,7 +15,7 @@ equals and hashCode).

The purpose of this function is to simplify the writing of verification logic for transactions that may contain similar but unrelated state evolutions which need to be checked independently. Consider a transaction that simultaneously moves both dollars and euros (e.g. is an atomic FX trade). There may be multiple dollar inputs and -multiple dollar outputs, depending on things like how fragmented the owners wallet is and whether various privacy +multiple dollar outputs, depending on things like how fragmented the owners vault is and whether various privacy techniques are in use. The quantity of dollars on the output side must sum to the same as on the input side, to ensure no money is being lost track of. This summation and checking must be repeated independently for each currency. To solve this, you would use groupStates with a type of Cash.State and a selector that returns the diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/in-states.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/in-states.html deleted file mode 100644 index b50ec12d39..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/in-states.html +++ /dev/null @@ -1,17 +0,0 @@ - - -TransactionForContract.inStates - - - - -com.r3corda.core.contracts / TransactionForContract / inStates
-
-

inStates

- -val inStates: List<ContractState>
-Deprecated: This property was renamed to inputs
-
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/out-states.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/out-states.html deleted file mode 100644 index 818d806c08..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-contract/out-states.html +++ /dev/null @@ -1,17 +0,0 @@ - - -TransactionForContract.outStates - - - - -com.r3corda.core.contracts / TransactionForContract / outStates
-
-

outStates

- -val outStates: List<ContractState>
-Deprecated: This property was renamed to outputs
-
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/-init-.html deleted file mode 100644 index f89bdd0b79..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionForVerification.<init> - - - - -com.r3corda.core.contracts / TransactionForVerification / <init>
-
-

<init>

-TransactionForVerification(inputs: List<TransactionState<ContractState>>, outputs: List<TransactionState<ContractState>>, attachments: List<Attachment>, commands: List<AuthenticatedObject<CommandData>>, origHash: SecureHash, signers: List<PublicKey>, type: TransactionType)
-

A transaction in fully resolved and sig-checked form, ready for passing as input to a verification function.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/attachments.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/attachments.html deleted file mode 100644 index 395ad18f80..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/attachments.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionForVerification.attachments - - - - -com.r3corda.core.contracts / TransactionForVerification / attachments
-
-

attachments

- -val attachments: List<Attachment>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/commands.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/commands.html deleted file mode 100644 index 7d27a5f433..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/commands.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionForVerification.commands - - - - -com.r3corda.core.contracts / TransactionForVerification / commands
-
-

commands

- -val commands: List<AuthenticatedObject<CommandData>>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/equals.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/equals.html deleted file mode 100644 index c68d2420cc..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/equals.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionForVerification.equals - - - - -com.r3corda.core.contracts / TransactionForVerification / equals
-
-

equals

- -fun equals(other: Any?): Boolean
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/hash-code.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/hash-code.html deleted file mode 100644 index e5c4d555d8..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/hash-code.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionForVerification.hashCode - - - - -com.r3corda.core.contracts / TransactionForVerification / hashCode
-
-

hashCode

- -fun hashCode(): Int
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/index.html deleted file mode 100644 index 466707e09e..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/index.html +++ /dev/null @@ -1,104 +0,0 @@ - - -TransactionForVerification - - - - -com.r3corda.core.contracts / TransactionForVerification
-
-

TransactionForVerification

-data class TransactionForVerification
-

A transaction in fully resolved and sig-checked form, ready for passing as input to a verification function.

-
-
-

Constructors

- - - - - - - -
-<init> -TransactionForVerification(inputs: List<TransactionState<ContractState>>, outputs: List<TransactionState<ContractState>>, attachments: List<Attachment>, commands: List<AuthenticatedObject<CommandData>>, origHash: SecureHash, signers: List<PublicKey>, type: TransactionType)

A transaction in fully resolved and sig-checked form, ready for passing as input to a verification function.

-
-

Properties

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-attachments -val attachments: List<Attachment>
-commands -val commands: List<AuthenticatedObject<CommandData>>
-inputs -val inputs: List<TransactionState<ContractState>>
-origHash -val origHash: SecureHash
-outputs -val outputs: List<TransactionState<ContractState>>
-signers -val signers: List<PublicKey>
-type -val type: TransactionType
-

Functions

- - - - - - - - - - - - - - - - - - - -
-equals -fun equals(other: Any?): Boolean
-hashCode -fun hashCode(): Int
-toTransactionForContract -fun toTransactionForContract(): TransactionForContract
-verify -fun verify(): Unit

Verifies that the transaction is valid by running type-specific validation logic.

-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/inputs.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/inputs.html deleted file mode 100644 index b4e9b297db..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/inputs.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionForVerification.inputs - - - - -com.r3corda.core.contracts / TransactionForVerification / inputs
-
-

inputs

- -val inputs: List<TransactionState<ContractState>>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/orig-hash.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/orig-hash.html deleted file mode 100644 index 4eeb15948b..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/orig-hash.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionForVerification.origHash - - - - -com.r3corda.core.contracts / TransactionForVerification / origHash
-
-

origHash

- -val origHash: SecureHash
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/outputs.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/outputs.html deleted file mode 100644 index 377942f9f1..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/outputs.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionForVerification.outputs - - - - -com.r3corda.core.contracts / TransactionForVerification / outputs
-
-

outputs

- -val outputs: List<TransactionState<ContractState>>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/signers.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/signers.html deleted file mode 100644 index 39cdb34a00..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/signers.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionForVerification.signers - - - - -com.r3corda.core.contracts / TransactionForVerification / signers
-
-

signers

- -val signers: List<PublicKey>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/to-transaction-for-contract.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/to-transaction-for-contract.html deleted file mode 100644 index 9402ba4104..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/to-transaction-for-contract.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionForVerification.toTransactionForContract - - - - -com.r3corda.core.contracts / TransactionForVerification / toTransactionForContract
-
-

toTransactionForContract

- -fun toTransactionForContract(): TransactionForContract
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/type.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/type.html deleted file mode 100644 index 4701b978a0..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/type.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionForVerification.type - - - - -com.r3corda.core.contracts / TransactionForVerification / type
-
-

type

- -val type: TransactionType
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/verify.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/verify.html deleted file mode 100644 index 513b6b3695..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-for-verification/verify.html +++ /dev/null @@ -1,23 +0,0 @@ - - -TransactionForVerification.verify - - - - -com.r3corda.core.contracts / TransactionForVerification / verify
-
-

verify

- -fun verify(): Unit
-

Verifies that the transaction is valid by running type-specific validation logic.

-

TODO: Move this out of the core data structure definitions, once unit tests are more cleanly separated.

-
-
-

Exceptions

- -TransactionVerificationException - if validation logic fails or if a contract throws an exception -(the original is in the cause field).
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-graph-search/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-graph-search/-init-.html index b91b886e07..9fa23a6baa 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-graph-search/-init-.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-graph-search/-init-.html @@ -7,8 +7,8 @@ com.r3corda.core.contracts / TransactionGraphSearch / <init>

<init>

-TransactionGraphSearch(transactions: ReadOnlyTransactionStorage, startPoints: List<WireTransaction>)
-

Given a map of transaction id to SignedTransaction, performs a breadth first search of the dependency graph from +TransactionGraphSearch(transactions: ReadOnlyTransactionStorage, startPoints: List<WireTransaction>)
+

Given a map of transaction id to SignedTransaction, performs a breadth first search of the dependency graph from the starting point down in order to find transactions that match the given query criteria.

Currently, only one kind of query is supported: find any transaction that contains a command of the given type.

In future, this should support restricting the search by time, and other types of useful query.

@@ -16,7 +16,7 @@ the starting point down in order to find transactions that match the given query

Parameters

-transactions - map of transaction id to SignedTransaction.
+transactions - map of transaction id to SignedTransaction.

startPoints - transactions to use as starting points for the search.
diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-graph-search/call.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-graph-search/call.html index 0d40f79770..ce10cc8ded 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-graph-search/call.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-graph-search/call.html @@ -8,7 +8,7 @@

call

-fun call(): List<WireTransaction>
+fun call(): List<WireTransaction>


diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-graph-search/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-graph-search/index.html index 4d240a1908..3f8273064e 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-graph-search/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-graph-search/index.html @@ -7,8 +7,8 @@ com.r3corda.core.contracts / TransactionGraphSearch

TransactionGraphSearch

-class TransactionGraphSearch : Callable<List<WireTransaction>>
-

Given a map of transaction id to SignedTransaction, performs a breadth first search of the dependency graph from +class TransactionGraphSearch : Callable<List<WireTransaction>>
+

Given a map of transaction id to SignedTransaction, performs a breadth first search of the dependency graph from the starting point down in order to find transactions that match the given query criteria.

Currently, only one kind of query is supported: find any transaction that contains a command of the given type.

In future, this should support restricting the search by time, and other types of useful query.

@@ -16,7 +16,7 @@ the starting point down in order to find transactions that match the given query

Parameters

-transactions - map of transaction id to SignedTransaction.
+transactions - map of transaction id to SignedTransaction.

startPoints - transactions to use as starting points for the search.
@@ -40,7 +40,7 @@ the starting point down in order to find transactions that match the given query <init> -TransactionGraphSearch(transactions: ReadOnlyTransactionStorage, startPoints: List<WireTransaction>)

Given a map of transaction id to SignedTransaction, performs a breadth first search of the dependency graph from +TransactionGraphSearch(transactions: ReadOnlyTransactionStorage, startPoints: List<WireTransaction>)

Given a map of transaction id to SignedTransaction, performs a breadth first search of the dependency graph from the starting point down in order to find transactions that match the given query criteria.

@@ -59,7 +59,7 @@ the starting point down in order to find transactions that match the given query startPoints -val startPoints: List<WireTransaction> +val startPoints: List<WireTransaction> @@ -76,7 +76,7 @@ the starting point down in order to find transactions that match the given query call -fun call(): List<WireTransaction> +fun call(): List<WireTransaction> diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-graph-search/start-points.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-graph-search/start-points.html index 188741facf..e7c54f67fb 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-graph-search/start-points.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-graph-search/start-points.html @@ -8,7 +8,7 @@

startPoints

-val startPoints: List<WireTransaction>
+val startPoints: List<WireTransaction>


diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-group/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-group/-init-.html deleted file mode 100644 index 776b9f42ab..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-group/-init-.html +++ /dev/null @@ -1,21 +0,0 @@ - - -TransactionGroup.<init> - - - - -com.r3corda.core.contracts / TransactionGroup / <init>
-
-

<init>

-TransactionGroup(transactions: Set<LedgerTransaction>, nonVerifiedRoots: Set<LedgerTransaction>)
-

A TransactionGroup defines a directed acyclic graph of transactions that can be resolved with each other and then -verified. Successful verification does not imply the non-existence of other conflicting transactions: simply that -this subgraph does not contain conflicts and is accepted by the involved contracts.

-

The inputs of the provided transactions must be resolvable either within the transactions set, or from the -nonVerifiedRoots set. Transactions in the non-verified set are ignored other than for looking up input states.

-
-
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-group/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-group/index.html deleted file mode 100644 index e354cd9326..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-group/index.html +++ /dev/null @@ -1,64 +0,0 @@ - - -TransactionGroup - - - - -com.r3corda.core.contracts / TransactionGroup
-
-

TransactionGroup

-class TransactionGroup
-

A TransactionGroup defines a directed acyclic graph of transactions that can be resolved with each other and then -verified. Successful verification does not imply the non-existence of other conflicting transactions: simply that -this subgraph does not contain conflicts and is accepted by the involved contracts.

-

The inputs of the provided transactions must be resolvable either within the transactions set, or from the -nonVerifiedRoots set. Transactions in the non-verified set are ignored other than for looking up input states.

-
-
-
-
-

Constructors

- - - - - - - -
-<init> -TransactionGroup(transactions: Set<LedgerTransaction>, nonVerifiedRoots: Set<LedgerTransaction>)

A TransactionGroup defines a directed acyclic graph of transactions that can be resolved with each other and then -verified. Successful verification does not imply the non-existence of other conflicting transactions: simply that -this subgraph does not contain conflicts and is accepted by the involved contracts.

-
-

Properties

- - - - - - - - - - - -
-nonVerifiedRoots -val nonVerifiedRoots: Set<LedgerTransaction>
-transactions -val transactions: Set<LedgerTransaction>
-

Functions

- - - - - - - -
-verify -fun verify(): Set<TransactionForVerification>

Verifies the group and returns the set of resolved transactions.

-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-group/non-verified-roots.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-group/non-verified-roots.html deleted file mode 100644 index fb50d918a3..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-group/non-verified-roots.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionGroup.nonVerifiedRoots - - - - -com.r3corda.core.contracts / TransactionGroup / nonVerifiedRoots
-
-

nonVerifiedRoots

- -val nonVerifiedRoots: Set<LedgerTransaction>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-group/transactions.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-group/transactions.html deleted file mode 100644 index 9bcc8f431e..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-group/transactions.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionGroup.transactions - - - - -com.r3corda.core.contracts / TransactionGroup / transactions
-
-

transactions

- -val transactions: Set<LedgerTransaction>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-group/verify.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-group/verify.html deleted file mode 100644 index eed933e93a..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-group/verify.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TransactionGroup.verify - - - - -com.r3corda.core.contracts / TransactionGroup / verify
-
-

verify

- -fun verify(): Set<TransactionForVerification>
-

Verifies the group and returns the set of resolved transactions.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/-builder/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/-builder/-init-.html index 1d79fac47c..f2be8d1cc4 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/-builder/-init-.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/-builder/-init-.html @@ -8,7 +8,7 @@

<init>

Builder(notary: Party?)
-

Just uses the default TransactionBuilder with no special logic

+

Just uses the default TransactionBuilder with no special logic



diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/-builder/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/-builder/index.html index 7995ef8a71..1318b3844a 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/-builder/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/-builder/index.html @@ -7,8 +7,8 @@ com.r3corda.core.contracts / TransactionType / General / Builder

Builder

-class Builder : TransactionBuilder
-

Just uses the default TransactionBuilder with no special logic

+class Builder : TransactionBuilder
+

Just uses the default TransactionBuilder with no special logic



Constructors

@@ -18,7 +18,7 @@ <init> -Builder(notary: Party?)

Just uses the default TransactionBuilder with no special logic

+Builder(notary: Party?)

Just uses the default TransactionBuilder with no special logic

@@ -28,62 +28,62 @@ -attachments +attachments val attachments: MutableList<SecureHash> -commands +commands val commands: MutableList<Command> -currentSigs +currentSigs val currentSigs: <ERROR CLASS>

The signatures that have been collected so far - might be incomplete

-inputs +inputs val inputs: MutableList<StateRef> -notary +notary var notary: Party? -outputs +outputs val outputs: MutableList<TransactionState<ContractState>> -signers +signers val signers: MutableSet<PublicKey> -time +time -val time: Timestamp? +val time: Timestamp? -timestamp +timestamp var timestamp: Timestamp? -type +type val type: TransactionType @@ -94,118 +94,117 @@ -addAttachment +addAttachment -fun addAttachment(attachmentId: SecureHash): Unit +fun addAttachment(attachmentId: SecureHash): Unit -addCommand +addCommand -fun addCommand(arg: Command): Unit
-fun addCommand(data: CommandData, vararg keys: PublicKey): <ERROR CLASS>
-fun addCommand(data: CommandData, keys: List<PublicKey>): Unit +fun addCommand(arg: Command): Unit
+fun addCommand(data: CommandData, vararg keys: PublicKey): <ERROR CLASS>
+fun addCommand(data: CommandData, keys: List<PublicKey>): Unit -addInputState +addInputState -open fun addInputState(stateAndRef: StateAndRef<*>): Unit
-fun addInputState(stateRef: StateRef, notary: Party): Unit +open fun addInputState(stateAndRef: StateAndRef<*>): Unit -addOutputState +addOutputState -fun addOutputState(state: TransactionState<*>): Int
-fun addOutputState(state: ContractState, notary: Party): Intfun addOutputState(state: ContractState): Int

A default notary must be specified during builder construction to use this method

+fun addOutputState(state: TransactionState<*>): Int
+fun addOutputState(state: ContractState, notary: Party): Intfun addOutputState(state: ContractState): Int

A default notary must be specified during builder construction to use this method

-addSignatureUnchecked +addSignatureUnchecked -fun addSignatureUnchecked(sig: WithKey): TransactionBuilder

Adds the signature directly to the transaction, without checking it for validity.

+fun addSignatureUnchecked(sig: WithKey): TransactionBuilder

Adds the signature directly to the transaction, without checking it for validity.

-attachments +attachments fun attachments(): List<SecureHash> -checkAndAddSignature +checkAndAddSignature -fun checkAndAddSignature(sig: WithKey): Unit

Checks that the given signature matches one of the commands and that it is a correct signature over the tx, then +fun checkAndAddSignature(sig: WithKey): Unit

Checks that the given signature matches one of the commands and that it is a correct signature over the tx, then adds it.

-checkSignature +checkSignature -fun checkSignature(sig: WithKey): Unit

Checks that the given signature matches one of the commands and that it is a correct signature over the tx.

+fun checkSignature(sig: WithKey): Unit

Checks that the given signature matches one of the commands and that it is a correct signature over the tx.

-commands +commands fun commands(): List<Command> -copy +copy -fun copy(): TransactionBuilder

Creates a copy of the builder.

+fun copy(): TransactionBuilder

Creates a copy of the builder.

-inputStates +inputStates fun inputStates(): List<StateRef> -outputStates +outputStates fun outputStates(): List<TransactionState<*>> -setTime +setTime -fun setTime(time: Instant, timeTolerance: Duration): Unit

Places a TimestampCommand in this transaction, removing any existing command if there is one. +fun setTime(time: Instant, timeTolerance: Duration): Unit

Places a TimestampCommand in this transaction, removing any existing command if there is one. The command requires a signature from the Notary service, which acts as a Timestamp Authority. The signature can be obtained using NotaryProtocol.

-fun setTime(newTimestamp: Timestamp): Unit +fun setTime(newTimestamp: Timestamp): Unit -signWith +signWith -fun signWith(key: KeyPair): Unit +fun signWith(key: KeyPair): TransactionBuilder -toSignedTransaction +toSignedTransaction -fun toSignedTransaction(checkSufficientSignatures: Boolean = true): SignedTransaction +fun toSignedTransaction(checkSufficientSignatures: Boolean = true): SignedTransaction -toWireTransaction +toWireTransaction -fun toWireTransaction(): WireTransaction +fun toWireTransaction(): WireTransaction -withItems +withItems -fun withItems(vararg items: Any): TransactionBuilder

A more convenient way to add items to this transaction that calls the add* methods for you based on type

+fun withItems(vararg items: Any): TransactionBuilder

A more convenient way to add items to this transaction that calls the add* methods for you based on type

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/get-required-signers.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/get-required-signers.html index ea44d34a59..2af869ac75 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/get-required-signers.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/get-required-signers.html @@ -7,8 +7,8 @@ com.r3corda.core.contracts / TransactionType / General / getRequiredSigners

getRequiredSigners

- -fun getRequiredSigners(tx: LedgerTransaction): <ERROR CLASS>
+ +fun getRequiredSigners(tx: LedgerTransaction): <ERROR CLASS>
Overrides TransactionType.getRequiredSigners

Return the list of public keys that that require signatures for the transaction type. Note: the notary key is checked separately for all transactions and need not be included.

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/index.html index d08bb7cc8c..ee422189a6 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/index.html @@ -18,7 +18,7 @@ Builder -class Builder : TransactionBuilder

Just uses the default TransactionBuilder with no special logic

+class Builder : TransactionBuilder

Just uses the default TransactionBuilder with no special logic

@@ -42,7 +42,7 @@ getRequiredSigners -fun getRequiredSigners(tx: LedgerTransaction): <ERROR CLASS>

Return the list of public keys that that require signatures for the transaction type. +fun getRequiredSigners(tx: LedgerTransaction): <ERROR CLASS>

Return the list of public keys that that require signatures for the transaction type. Note: the notary key is checked separately for all transactions and need not be included.

@@ -50,7 +50,7 @@ Note: the notary key is checked separately for all transactions and need not be verifyTransaction -fun verifyTransaction(tx: LedgerTransaction): Unit

Check the transaction is contract-valid by running the verify() for each input and output state contract. +fun verifyTransaction(tx: LedgerTransaction): Unit

Check the transaction is contract-valid by running the verify() for each input and output state contract. If any contract fails to verify, the whole transaction is considered to be invalid.

@@ -75,14 +75,14 @@ If any contract fails to verify, the whole transaction is considered to be inval verify -fun verify(tx: LedgerTransaction): Unit

Check that the transaction is valid based on:

+fun verify(tx: LedgerTransaction): Unit

Check that the transaction is valid based on:

verifySigners -fun verifySigners(tx: LedgerTransaction): Set<PublicKey>

Check that the list of signers includes all the necessary keys

+fun verifySigners(tx: LedgerTransaction): Set<PublicKey>

Check that the list of signers includes all the necessary keys

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/verify-transaction.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/verify-transaction.html index 29b727c973..e450befcc7 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/verify-transaction.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-general/verify-transaction.html @@ -7,8 +7,8 @@ com.r3corda.core.contracts / TransactionType / General / verifyTransaction

verifyTransaction

- -fun verifyTransaction(tx: LedgerTransaction): Unit
+ +fun verifyTransaction(tx: LedgerTransaction): Unit
Overrides TransactionType.verifyTransaction

Check the transaction is contract-valid by running the verify() for each input and output state contract. If any contract fails to verify, the whole transaction is considered to be invalid.

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/-builder/add-input-state.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/-builder/add-input-state.html index 96ab591cc3..cf43857008 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/-builder/add-input-state.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/-builder/add-input-state.html @@ -9,7 +9,7 @@

addInputState

fun addInputState(stateAndRef: StateAndRef<*>): Unit
-Overrides TransactionBuilder.addInputState
+Overrides TransactionBuilder.addInputState


diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/-builder/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/-builder/index.html index 514584e9ae..aa20b3b99a 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/-builder/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/-builder/index.html @@ -7,7 +7,7 @@ com.r3corda.core.contracts / TransactionType / NotaryChange / Builder

Builder

-class Builder : TransactionBuilder
+class Builder : TransactionBuilder

A transaction builder that automatically sets the transaction type to NotaryChange and adds the list of participants to the signers set for every input state.


@@ -30,62 +30,62 @@ and adds the list of participants to the signers set for every input state.

-attachments +attachments val attachments: MutableList<SecureHash> -commands +commands val commands: MutableList<Command> -currentSigs +currentSigs val currentSigs: <ERROR CLASS>

The signatures that have been collected so far - might be incomplete

-inputs +inputs val inputs: MutableList<StateRef> -notary +notary var notary: Party? -outputs +outputs val outputs: MutableList<TransactionState<ContractState>> -signers +signers val signers: MutableSet<PublicKey> -time +time -val time: Timestamp? +val time: Timestamp? -timestamp +timestamp var timestamp: Timestamp? -type +type val type: TransactionType @@ -107,117 +107,111 @@ and adds the list of participants to the signers set for every input state.

-addAttachment +addAttachment -fun addAttachment(attachmentId: SecureHash): Unit +fun addAttachment(attachmentId: SecureHash): Unit -addCommand +addCommand -fun addCommand(arg: Command): Unit
-fun addCommand(data: CommandData, vararg keys: PublicKey): <ERROR CLASS>
-fun addCommand(data: CommandData, keys: List<PublicKey>): Unit +fun addCommand(arg: Command): Unit
+fun addCommand(data: CommandData, vararg keys: PublicKey): <ERROR CLASS>
+fun addCommand(data: CommandData, keys: List<PublicKey>): Unit -addInputState +addOutputState -fun addInputState(stateRef: StateRef, notary: Party): Unit - - - -addOutputState - -fun addOutputState(state: TransactionState<*>): Int
-fun addOutputState(state: ContractState, notary: Party): Intfun addOutputState(state: ContractState): Int

A default notary must be specified during builder construction to use this method

+fun addOutputState(state: TransactionState<*>): Int
+fun addOutputState(state: ContractState, notary: Party): Intfun addOutputState(state: ContractState): Int

A default notary must be specified during builder construction to use this method

-addSignatureUnchecked +addSignatureUnchecked -fun addSignatureUnchecked(sig: WithKey): TransactionBuilder

Adds the signature directly to the transaction, without checking it for validity.

+fun addSignatureUnchecked(sig: WithKey): TransactionBuilder

Adds the signature directly to the transaction, without checking it for validity.

-attachments +attachments fun attachments(): List<SecureHash> -checkAndAddSignature +checkAndAddSignature -fun checkAndAddSignature(sig: WithKey): Unit

Checks that the given signature matches one of the commands and that it is a correct signature over the tx, then +fun checkAndAddSignature(sig: WithKey): Unit

Checks that the given signature matches one of the commands and that it is a correct signature over the tx, then adds it.

-checkSignature +checkSignature -fun checkSignature(sig: WithKey): Unit

Checks that the given signature matches one of the commands and that it is a correct signature over the tx.

+fun checkSignature(sig: WithKey): Unit

Checks that the given signature matches one of the commands and that it is a correct signature over the tx.

-commands +commands fun commands(): List<Command> -copy +copy -fun copy(): TransactionBuilder

Creates a copy of the builder.

+fun copy(): TransactionBuilder

Creates a copy of the builder.

-inputStates +inputStates fun inputStates(): List<StateRef> -outputStates +outputStates fun outputStates(): List<TransactionState<*>> -setTime +setTime -fun setTime(time: Instant, timeTolerance: Duration): Unit

Places a TimestampCommand in this transaction, removing any existing command if there is one. +fun setTime(time: Instant, timeTolerance: Duration): Unit

Places a TimestampCommand in this transaction, removing any existing command if there is one. The command requires a signature from the Notary service, which acts as a Timestamp Authority. The signature can be obtained using NotaryProtocol.

-fun setTime(newTimestamp: Timestamp): Unit +fun setTime(newTimestamp: Timestamp): Unit -signWith +signWith -fun signWith(key: KeyPair): Unit +fun signWith(key: KeyPair): TransactionBuilder -toSignedTransaction +toSignedTransaction -fun toSignedTransaction(checkSufficientSignatures: Boolean = true): SignedTransaction +fun toSignedTransaction(checkSufficientSignatures: Boolean = true): SignedTransaction -toWireTransaction +toWireTransaction -fun toWireTransaction(): WireTransaction +fun toWireTransaction(): WireTransaction -withItems +withItems -fun withItems(vararg items: Any): TransactionBuilder

A more convenient way to add items to this transaction that calls the add* methods for you based on type

+fun withItems(vararg items: Any): TransactionBuilder

A more convenient way to add items to this transaction that calls the add* methods for you based on type

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/get-required-signers.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/get-required-signers.html index 52f7b9a451..037970f8a8 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/get-required-signers.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/get-required-signers.html @@ -7,8 +7,8 @@ com.r3corda.core.contracts / TransactionType / NotaryChange / getRequiredSigners

getRequiredSigners

- -fun getRequiredSigners(tx: LedgerTransaction): <ERROR CLASS>
+ +fun getRequiredSigners(tx: LedgerTransaction): <ERROR CLASS>
Overrides TransactionType.getRequiredSigners

Return the list of public keys that that require signatures for the transaction type. Note: the notary key is checked separately for all transactions and need not be included.

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/index.html index 1228fdf343..146459bb5c 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/index.html @@ -19,7 +19,7 @@ any contract code, it just checks that the states are unmodified apart from the Builder -class Builder : TransactionBuilder

A transaction builder that automatically sets the transaction type to NotaryChange +class Builder : TransactionBuilder

A transaction builder that automatically sets the transaction type to NotaryChange and adds the list of participants to the signers set for every input state.

@@ -45,7 +45,7 @@ any contract code, it just checks that the states are unmodified apart from the getRequiredSigners -fun getRequiredSigners(tx: LedgerTransaction): <ERROR CLASS>

Return the list of public keys that that require signatures for the transaction type. +fun getRequiredSigners(tx: LedgerTransaction): <ERROR CLASS>

Return the list of public keys that that require signatures for the transaction type. Note: the notary key is checked separately for all transactions and need not be included.

@@ -53,7 +53,7 @@ Note: the notary key is checked separately for all transactions and need not be verifyTransaction -fun verifyTransaction(tx: LedgerTransaction): Unit

Check that the difference between inputs and outputs is only the notary field, and that all required signing +fun verifyTransaction(tx: LedgerTransaction): Unit

Check that the difference between inputs and outputs is only the notary field, and that all required signing public keys are present.

@@ -78,14 +78,14 @@ public keys are present.

verify -fun verify(tx: LedgerTransaction): Unit

Check that the transaction is valid based on:

+fun verify(tx: LedgerTransaction): Unit

Check that the transaction is valid based on:

verifySigners -fun verifySigners(tx: LedgerTransaction): Set<PublicKey>

Check that the list of signers includes all the necessary keys

+fun verifySigners(tx: LedgerTransaction): Set<PublicKey>

Check that the list of signers includes all the necessary keys

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/verify-transaction.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/verify-transaction.html index 28ce7e087c..6c002d08cd 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/verify-transaction.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/-notary-change/verify-transaction.html @@ -7,8 +7,8 @@ com.r3corda.core.contracts / TransactionType / NotaryChange / verifyTransaction

verifyTransaction

- -fun verifyTransaction(tx: LedgerTransaction): Unit
+ +fun verifyTransaction(tx: LedgerTransaction): Unit
Overrides TransactionType.verifyTransaction

Check that the difference between inputs and outputs is only the notary field, and that all required signing public keys are present.

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/get-required-signers.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/get-required-signers.html index 7b368226e8..af6fa6d96d 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/get-required-signers.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/get-required-signers.html @@ -7,8 +7,8 @@ com.r3corda.core.contracts / TransactionType / getRequiredSigners

getRequiredSigners

- -abstract fun getRequiredSigners(tx: LedgerTransaction): Set<PublicKey>
+ +abstract fun getRequiredSigners(tx: LedgerTransaction): Set<PublicKey>

Return the list of public keys that that require signatures for the transaction type. Note: the notary key is checked separately for all transactions and need not be included.


diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/index.html index 8e4f28512a..32bdf616b5 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/index.html @@ -44,7 +44,7 @@ any contract code, it just checks that the states are unmodified apart from the getRequiredSigners -abstract fun getRequiredSigners(tx: LedgerTransaction): Set<PublicKey>

Return the list of public keys that that require signatures for the transaction type. +abstract fun getRequiredSigners(tx: LedgerTransaction): Set<PublicKey>

Return the list of public keys that that require signatures for the transaction type. Note: the notary key is checked separately for all transactions and need not be included.

@@ -58,21 +58,21 @@ Note: the notary key is checked separately for all transactions and need not be verify -fun verify(tx: LedgerTransaction): Unit

Check that the transaction is valid based on:

+fun verify(tx: LedgerTransaction): Unit

Check that the transaction is valid based on:

verifySigners -fun verifySigners(tx: LedgerTransaction): Set<PublicKey>

Check that the list of signers includes all the necessary keys

+fun verifySigners(tx: LedgerTransaction): Set<PublicKey>

Check that the list of signers includes all the necessary keys

verifyTransaction -abstract fun verifyTransaction(tx: LedgerTransaction): Unit

Implement type specific transaction validation logic

+abstract fun verifyTransaction(tx: LedgerTransaction): Unit

Implement type specific transaction validation logic

diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/verify-signers.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/verify-signers.html index 1fce372d06..1f2ead78da 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/verify-signers.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/verify-signers.html @@ -7,8 +7,8 @@ com.r3corda.core.contracts / TransactionType / verifySigners

verifySigners

- -fun verifySigners(tx: LedgerTransaction): Set<PublicKey>
+ +fun verifySigners(tx: LedgerTransaction): Set<PublicKey>

Check that the list of signers includes all the necessary keys



diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/verify-transaction.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/verify-transaction.html index e3f5eee634..a99de5f8bb 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/verify-transaction.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/verify-transaction.html @@ -7,8 +7,8 @@ com.r3corda.core.contracts / TransactionType / verifyTransaction

verifyTransaction

- -abstract fun verifyTransaction(tx: LedgerTransaction): Unit
+ +abstract fun verifyTransaction(tx: LedgerTransaction): Unit

Implement type specific transaction validation logic



diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/verify.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/verify.html index 5523145743..18b1d87b15 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/verify.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-type/verify.html @@ -7,8 +7,8 @@ com.r3corda.core.contracts / TransactionType / verify

verify

- -fun verify(tx: LedgerTransaction): Unit
+ +fun verify(tx: LedgerTransaction): Unit

Check that the transaction is valid based on:

  • General platform rules

  • Rules for the specific transaction type

    diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-contract-rejection/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-contract-rejection/-init-.html index 2bfba830b9..4bf4060c19 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-contract-rejection/-init-.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-contract-rejection/-init-.html @@ -7,7 +7,7 @@ com.r3corda.core.contracts / TransactionVerificationException / ContractRejection / <init>

    <init>

    -ContractRejection(tx: LedgerTransaction, contract: Contract, cause: Throwable?)
    +ContractRejection(tx: LedgerTransaction, contract: Contract, cause: Throwable?)


    diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-contract-rejection/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-contract-rejection/index.html index eace426561..c4da84c12b 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-contract-rejection/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-contract-rejection/index.html @@ -17,7 +17,7 @@ <init> -ContractRejection(tx: LedgerTransaction, contract: Contract, cause: Throwable?) +ContractRejection(tx: LedgerTransaction, contract: Contract, cause: Throwable?) @@ -39,7 +39,7 @@ tx -val tx: LedgerTransaction +val tx: LedgerTransaction diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-direction/-i-n-p-u-t.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-direction/-i-n-p-u-t.html new file mode 100644 index 0000000000..1ec7ace5c3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-direction/-i-n-p-u-t.html @@ -0,0 +1,14 @@ + + +TransactionVerificationException.Direction.INPUT - + + + +com.r3corda.core.contracts / TransactionVerificationException / Direction / INPUT
    +
    +

    INPUT

    +INPUT
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-direction/-o-u-t-p-u-t.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-direction/-o-u-t-p-u-t.html new file mode 100644 index 0000000000..54f585c6d7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-direction/-o-u-t-p-u-t.html @@ -0,0 +1,14 @@ + + +TransactionVerificationException.Direction.OUTPUT - + + + +com.r3corda.core.contracts / TransactionVerificationException / Direction / OUTPUT
    +
    +

    OUTPUT

    +OUTPUT
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-direction/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-direction/index.html new file mode 100644 index 0000000000..ba963f9a87 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-direction/index.html @@ -0,0 +1,31 @@ + + +TransactionVerificationException.Direction - + + + +com.r3corda.core.contracts / TransactionVerificationException / Direction
    +
    +

    Direction

    +enum class Direction
    +
    +
    +

    Enum Values

    + + + + + + + + + + + +
    +INPUT +
    +OUTPUT +
    + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-invalid-notary-change/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-invalid-notary-change/-init-.html index b5c8350a99..4a9ebb7072 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-invalid-notary-change/-init-.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-invalid-notary-change/-init-.html @@ -7,7 +7,7 @@ com.r3corda.core.contracts / TransactionVerificationException / InvalidNotaryChange / <init>

    <init>

    -InvalidNotaryChange(tx: LedgerTransaction)
    +InvalidNotaryChange(tx: LedgerTransaction)


    diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-invalid-notary-change/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-invalid-notary-change/index.html index b26131c71d..02130ecac5 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-invalid-notary-change/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-invalid-notary-change/index.html @@ -17,7 +17,7 @@ <init> -InvalidNotaryChange(tx: LedgerTransaction) +InvalidNotaryChange(tx: LedgerTransaction) @@ -28,7 +28,7 @@ tx -val tx: LedgerTransaction +val tx: LedgerTransaction diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-more-than-one-notary/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-more-than-one-notary/-init-.html index 4f2cb652f2..ee359e5a51 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-more-than-one-notary/-init-.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-more-than-one-notary/-init-.html @@ -7,7 +7,7 @@ com.r3corda.core.contracts / TransactionVerificationException / MoreThanOneNotary / <init>

    <init>

    -MoreThanOneNotary(tx: LedgerTransaction)
    +MoreThanOneNotary(tx: LedgerTransaction)


    diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-more-than-one-notary/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-more-than-one-notary/index.html index f2f39ca760..1de05ee293 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-more-than-one-notary/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-more-than-one-notary/index.html @@ -17,7 +17,7 @@ <init> -MoreThanOneNotary(tx: LedgerTransaction) +MoreThanOneNotary(tx: LedgerTransaction) @@ -28,7 +28,7 @@ tx -val tx: LedgerTransaction +val tx: LedgerTransaction diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-notary-change-in-wrong-transaction-type/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-notary-change-in-wrong-transaction-type/-init-.html index 93f4df8dd7..ee9fc90e26 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-notary-change-in-wrong-transaction-type/-init-.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-notary-change-in-wrong-transaction-type/-init-.html @@ -7,7 +7,7 @@ com.r3corda.core.contracts / TransactionVerificationException / NotaryChangeInWrongTransactionType / <init>

    <init>

    -NotaryChangeInWrongTransactionType(tx: LedgerTransaction, outputNotary: Party)
    +NotaryChangeInWrongTransactionType(tx: LedgerTransaction, outputNotary: Party)


    diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-notary-change-in-wrong-transaction-type/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-notary-change-in-wrong-transaction-type/index.html index f3fda208be..4c3f32c5d6 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-notary-change-in-wrong-transaction-type/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-notary-change-in-wrong-transaction-type/index.html @@ -17,7 +17,7 @@ <init> -NotaryChangeInWrongTransactionType(tx: LedgerTransaction, outputNotary: Party) +NotaryChangeInWrongTransactionType(tx: LedgerTransaction, outputNotary: Party) @@ -39,7 +39,7 @@ tx -val tx: LedgerTransaction +val tx: LedgerTransaction diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-signers-missing/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-signers-missing/-init-.html index 6ac9aecef9..ed2ee9f48e 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-signers-missing/-init-.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-signers-missing/-init-.html @@ -7,7 +7,7 @@ com.r3corda.core.contracts / TransactionVerificationException / SignersMissing / <init>

    <init>

    -SignersMissing(tx: LedgerTransaction, missing: List<PublicKey>)
    +SignersMissing(tx: LedgerTransaction, missing: List<PublicKey>)


    diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-signers-missing/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-signers-missing/index.html index bb588e4c68..34999b4da8 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-signers-missing/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-signers-missing/index.html @@ -17,7 +17,7 @@ <init> -SignersMissing(tx: LedgerTransaction, missing: List<PublicKey>) +SignersMissing(tx: LedgerTransaction, missing: List<PublicKey>) @@ -39,7 +39,7 @@ tx -val tx: LedgerTransaction +val tx: LedgerTransaction diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/-init-.html new file mode 100644 index 0000000000..14ca8ef85b --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/-init-.html @@ -0,0 +1,14 @@ + + +TransactionVerificationException.TransactionMissingEncumbranceException.<init> - + + + +com.r3corda.core.contracts / TransactionVerificationException / TransactionMissingEncumbranceException / <init>
    +
    +

    <init>

    +TransactionMissingEncumbranceException(tx: LedgerTransaction, missing: Int, inOut: Direction)
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/in-out.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/in-out.html new file mode 100644 index 0000000000..1b232a3f4c --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/in-out.html @@ -0,0 +1,15 @@ + + +TransactionVerificationException.TransactionMissingEncumbranceException.inOut - + + + +com.r3corda.core.contracts / TransactionVerificationException / TransactionMissingEncumbranceException / inOut
    +
    +

    inOut

    + +val inOut: Direction
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/index.html new file mode 100644 index 0000000000..d6d3cacb8a --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/index.html @@ -0,0 +1,59 @@ + + +TransactionVerificationException.TransactionMissingEncumbranceException - + + + +com.r3corda.core.contracts / TransactionVerificationException / TransactionMissingEncumbranceException
    +
    +

    TransactionMissingEncumbranceException

    +class TransactionMissingEncumbranceException : TransactionVerificationException
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +TransactionMissingEncumbranceException(tx: LedgerTransaction, missing: Int, inOut: Direction)
    +

    Properties

    + + + + + + + + + + + + + + + +
    +inOut +val inOut: Direction
    +message +val message: String?
    +missing +val missing: Int
    +

    Inherited Properties

    + + + + + + + +
    +tx +val tx: LedgerTransaction
    + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/message.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/message.html new file mode 100644 index 0000000000..6ac9c266ba --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/message.html @@ -0,0 +1,15 @@ + + +TransactionVerificationException.TransactionMissingEncumbranceException.message - + + + +com.r3corda.core.contracts / TransactionVerificationException / TransactionMissingEncumbranceException / message
    +
    +

    message

    + +val message: String?
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/missing.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/missing.html new file mode 100644 index 0000000000..e509e4d214 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/-transaction-missing-encumbrance-exception/missing.html @@ -0,0 +1,15 @@ + + +TransactionVerificationException.TransactionMissingEncumbranceException.missing - + + + +com.r3corda.core.contracts / TransactionVerificationException / TransactionMissingEncumbranceException / missing
    +
    +

    missing

    + +val missing: Int
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/index.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/index.html index b05050f148..1cc1469f08 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/index.html @@ -10,6 +10,17 @@ sealed class TransactionVerificationException : Exception


    +

    Types

    + + + + + + + +
    +Direction +enum class Direction

    Exceptions

    @@ -43,6 +54,12 @@ + + + +
    class SignersMissing : TransactionVerificationException
    +TransactionMissingEncumbranceException +class TransactionMissingEncumbranceException : TransactionVerificationException

    Properties

    @@ -52,7 +69,7 @@ tx -val tx: LedgerTransaction +val tx: LedgerTransaction @@ -100,6 +117,12 @@ class SignersMissing : TransactionVerificationException + + +TransactionMissingEncumbranceException + +class TransactionMissingEncumbranceException : TransactionVerificationException + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/tx.html b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/tx.html index f46fdf2142..0de4e96c47 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/tx.html +++ b/docs/build/html/api/com.r3corda.core.contracts/-transaction-verification-exception/tx.html @@ -8,7 +8,7 @@

    tx

    -val tx: LedgerTransaction
    +val tx: LedgerTransaction


    diff --git a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/-init-.html b/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/-init-.html deleted file mode 100644 index 4e647a0da6..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - -WireTransaction.<init> - - - - -com.r3corda.core.contracts / WireTransaction / <init>
    -
    -

    <init>

    -WireTransaction(inputs: List<StateRef>, attachments: List<SecureHash>, outputs: List<TransactionState<ContractState>>, commands: List<Command>, notary: Party?, signers: List<PublicKey>, type: TransactionType, timestamp: Timestamp?)
    -

    Transaction ready for serialisation, without any signatures attached.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/commands.html b/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/commands.html deleted file mode 100644 index 39d9b48e69..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/commands.html +++ /dev/null @@ -1,15 +0,0 @@ - - -WireTransaction.commands - - - - -com.r3corda.core.contracts / WireTransaction / commands
    -
    -

    commands

    - -val commands: List<Command>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/deserialize.html b/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/deserialize.html deleted file mode 100644 index fc345ebde5..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/deserialize.html +++ /dev/null @@ -1,15 +0,0 @@ - - -WireTransaction.deserialize - - - - -com.r3corda.core.contracts / WireTransaction / deserialize
    -
    -

    deserialize

    - -fun deserialize(bits: SerializedBytes<WireTransaction>, kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): WireTransaction
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/index.html b/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/index.html deleted file mode 100644 index dda0f191c1..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/index.html +++ /dev/null @@ -1,135 +0,0 @@ - - -WireTransaction - - - - -com.r3corda.core.contracts / WireTransaction
    -
    -

    WireTransaction

    -data class WireTransaction : NamedByHash
    -

    Transaction ready for serialisation, without any signatures attached.

    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -WireTransaction(inputs: List<StateRef>, attachments: List<SecureHash>, outputs: List<TransactionState<ContractState>>, commands: List<Command>, notary: Party?, signers: List<PublicKey>, type: TransactionType, timestamp: Timestamp?)

    Transaction ready for serialisation, without any signatures attached.

    -
    -

    Properties

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -attachments -val attachments: List<SecureHash>
    -commands -val commands: List<Command>
    -id -val id: SecureHash
    -inputs -val inputs: List<StateRef>
    -notary -val notary: Party?
    -outputs -val outputs: List<TransactionState<ContractState>>
    -serialized -val serialized: SerializedBytes<WireTransaction>
    -signers -val signers: List<PublicKey>
    -timestamp -val timestamp: Timestamp?
    -type -val type: TransactionType
    -

    Functions

    - - - - - - - - - - - -
    -outRef -fun <T : ContractState> outRef(index: Int): StateAndRef<T>

    Returns a StateAndRef for the given output index.

    -fun <T : ContractState> outRef(state: ContractState): StateAndRef<T>

    Returns a StateAndRef for the requested output state, or throws IllegalArgumentException if not found.

    -
    -toString -fun toString(): String
    -

    Companion Object Functions

    - - - - - - - -
    -deserialize -fun deserialize(bits: SerializedBytes<WireTransaction>, kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): WireTransaction
    -

    Extension Functions

    - - - - - - - -
    -toLedgerTransaction -fun WireTransaction.toLedgerTransaction(services: ServiceHub): LedgerTransaction

    Looks up identities and attachments from storage to generate a LedgerTransaction. A transaction is expected to -have been fully resolved using the resolution protocol by this point.

    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/inputs.html b/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/inputs.html deleted file mode 100644 index 214fcc1664..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/inputs.html +++ /dev/null @@ -1,15 +0,0 @@ - - -WireTransaction.inputs - - - - -com.r3corda.core.contracts / WireTransaction / inputs
    -
    -

    inputs

    - -val inputs: List<StateRef>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/out-ref.html b/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/out-ref.html deleted file mode 100644 index 9a37f363e7..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/out-ref.html +++ /dev/null @@ -1,21 +0,0 @@ - - -WireTransaction.outRef - - - - -com.r3corda.core.contracts / WireTransaction / outRef
    -
    -

    outRef

    - -fun <T : ContractState> outRef(index: Int): StateAndRef<T>
    -

    Returns a StateAndRef for the given output index.

    -
    -
    - -fun <T : ContractState> outRef(state: ContractState): StateAndRef<T>
    -

    Returns a StateAndRef for the requested output state, or throws IllegalArgumentException if not found.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/outputs.html b/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/outputs.html deleted file mode 100644 index c40c443489..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/outputs.html +++ /dev/null @@ -1,15 +0,0 @@ - - -WireTransaction.outputs - - - - -com.r3corda.core.contracts / WireTransaction / outputs
    -
    -

    outputs

    - -val outputs: List<TransactionState<ContractState>>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/signers.html b/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/signers.html deleted file mode 100644 index a7ffee8878..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/signers.html +++ /dev/null @@ -1,15 +0,0 @@ - - -WireTransaction.signers - - - - -com.r3corda.core.contracts / WireTransaction / signers
    -
    -

    signers

    - -val signers: List<PublicKey>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/timestamp.html b/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/timestamp.html deleted file mode 100644 index ec5678093e..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/timestamp.html +++ /dev/null @@ -1,15 +0,0 @@ - - -WireTransaction.timestamp - - - - -com.r3corda.core.contracts / WireTransaction / timestamp
    -
    -

    timestamp

    - -val timestamp: Timestamp?
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/type.html b/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/type.html deleted file mode 100644 index 80029b131a..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/type.html +++ /dev/null @@ -1,15 +0,0 @@ - - -WireTransaction.type - - - - -com.r3corda.core.contracts / WireTransaction / type
    -
    -

    type

    - -val type: TransactionType
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.contracts/index.html b/docs/build/html/api/com.r3corda.core.contracts/index.html index 724580bc7d..f209c417eb 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/index.html +++ b/docs/build/html/api/com.r3corda.core.contracts/index.html @@ -93,7 +93,7 @@ no staff are around to handle problems.

    Contract interface Contract

    Implemented by a program that implements business logic on the shared ledger. All participants run this code for -every LedgerTransaction they see on the network, for every input and output state. All contracts must accept the +every LedgerTransaction they see on the network, for every input and output state. All contracts must accept the 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.

    @@ -160,7 +160,7 @@ implementation of general protocols that manipulate many agreement types.

    DummyState -data class DummyState : ContractState

    Dummy state for use in testing. Not part of any real contract.

    +data class DummyState : ContractState

    Dummy state for use in testing. Not part of any contract, not even the DummyContract.

    @@ -236,15 +236,6 @@ quantifiable with integer quantities.

    -LedgerTransaction - -data class LedgerTransaction : NamedByHash

    A LedgerTransaction wraps the data needed to calculate one or more successor states from a set of input states. -It is the first step after extraction from a WireTransaction. The signatures at this point have been lined up -with the commands from the wire, and verified/looked up.

    - - - - LinearState interface LinearState : ContractState

    A state that evolves by superseding itself, all of which share the common "linearId".

    @@ -273,6 +264,13 @@ with the commands from the wire, and verified/looked up.

    +NetCommand + +interface NetCommand : CommandData

    A common netting command for contracts whose states can be netted.

    + + + + NetType enum class NetType

    Enum for the types of netting that can be applied to state objects. Exact behaviour @@ -344,16 +342,9 @@ for that contract state.

    -SignedTransaction - -data class SignedTransaction : NamedByHash

    Container for a WireTransaction and attached signatures.

    - - - - StateAndRef -data class StateAndRef<out T : ContractState>

    A StateAndRef is simply a (state, ref) pair. For instance, a wallet (which holds available assets) contains these.

    +data class StateAndRef<out T : ContractState>

    A StateAndRef is simply a (state, ref) pair. For instance, a vault (which holds available assets) contains these.

    @@ -381,15 +372,6 @@ between (after, before).

    -TransactionBuilder - -open class TransactionBuilder

    A TransactionBuilder is a transaction class thats mutable (unlike the others which are all immutable). It is -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.

    - - - - TransactionForContract data class TransactionForContract

    A transaction to be passed as input to a contract verification function. Defines helper methods to @@ -400,7 +382,7 @@ simplify verification logic in contracts.

    TransactionGraphSearch -class TransactionGraphSearch : Callable<List<WireTransaction>>

    Given a map of transaction id to SignedTransaction, performs a breadth first search of the dependency graph from +class TransactionGraphSearch : Callable<List<WireTransaction>>

    Given a map of transaction id to SignedTransaction, performs a breadth first search of the dependency graph from the starting point down in order to find transactions that match the given query criteria.

    @@ -433,13 +415,6 @@ This is the definitive state that is stored on the ledger and used in transactio data class UniqueIdentifier

    This class provides a truly unique identifier of a trade, state, or other business object.

    - - -WireTransaction - -data class WireTransaction : NamedByHash

    Transaction ready for serialisation, without any signatures attached.

    - -

    Exceptions

    @@ -623,16 +598,6 @@ This is the definitive state that is stored on the ledger and used in transactio -toLedgerTransaction - -fun WireTransaction.toLedgerTransaction(services: ServiceHub): LedgerTransaction

    Looks up identities and attachments from storage to generate a LedgerTransaction. A transaction is expected to -have been fully resolved using the resolution protocol by this point.

    -fun SignedTransaction.toLedgerTransaction(services: ServiceHub): LedgerTransaction

    Calls verify to check all required signatures are present, and then calls WireTransaction.toLedgerTransaction -with the passed in ServiceHub to resolve the dependencies, returning an unverified LedgerTransaction.

    - - - - verifyMoveCommand fun <T : MoveCommand> verifyMoveCommand(inputs: List<OwnableState>, tx: TransactionForContract): MoveCommand
    diff --git a/docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/filter-states-of-type.html b/docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/filter-states-of-type.html deleted file mode 100644 index 2c096e5543..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/filter-states-of-type.html +++ /dev/null @@ -1,16 +0,0 @@ - - -filterStatesOfType - - - - -com.r3corda.core.contracts / kotlin.collections.List / filterStatesOfType
    -
    -

    filterStatesOfType

    - -inline fun <reified T : ContractState> List<StateAndRef<ContractState>>.filterStatesOfType(): List<StateAndRef<T>>
    -

    Filters a list of StateAndRef objects according to the type of the states

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/get-timestamp-by-name.html b/docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/get-timestamp-by-name.html deleted file mode 100644 index 69651bb133..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/get-timestamp-by-name.html +++ /dev/null @@ -1,20 +0,0 @@ - - -getTimestampByName - - - - -com.r3corda.core.contracts / kotlin.collections.List / getTimestampByName
    -
    -

    getTimestampByName

    - -fun List<AuthenticatedObject<CommandData>>.getTimestampByName(vararg names: String): TimestampCommand?
    -Deprecated: Timestamping authority should always be notary for the transaction
    -
    -

    Returns a timestamp that was signed by any of the the named authorities, or returns null if missing. -Note that matching here is done by (verified, legal) name, not by public key. Any signature by any -party with a name that matches (case insensitively) any of the given names will yield a match.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/get-timestamp-by.html b/docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/get-timestamp-by.html deleted file mode 100644 index da8f72f6c7..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/get-timestamp-by.html +++ /dev/null @@ -1,16 +0,0 @@ - - -getTimestampBy - - - - -com.r3corda.core.contracts / kotlin.collections.List / getTimestampBy
    -
    -

    getTimestampBy

    - -fun List<AuthenticatedObject<CommandData>>.getTimestampBy(timestampingAuthority: Party): TimestampCommand?
    -

    Returns a timestamp that was signed by the given authority, or returns null if missing.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/index.html b/docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/index.html deleted file mode 100644 index 64ee33f3d5..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/index.html +++ /dev/null @@ -1,38 +0,0 @@ - - -com.r3corda.core.contracts.kotlin.collections.List - - - - -com.r3corda.core.contracts / kotlin.collections.List
    -
    -

    Extensions for kotlin.collections.List

    - - - - - - - - - - - - - - - -
    -filterStatesOfType -fun <T : ContractState> List<StateAndRef<ContractState>>.filterStatesOfType(): List<StateAndRef<T>>

    Filters a list of StateAndRef objects according to the type of the states

    -
    -getTimestampBy -fun List<AuthenticatedObject<CommandData>>.getTimestampBy(timestampingAuthority: Party): TimestampCommand?

    Returns a timestamp that was signed by the given authority, or returns null if missing.

    -
    -getTimestampByName -fun List<AuthenticatedObject<CommandData>>.getTimestampByName(vararg names: String): TimestampCommand?

    Returns a timestamp that was signed by any of the the named authorities, or returns null if missing. -Note that matching here is done by (verified, legal) name, not by public key. Any signature by any -party with a name that matches (case insensitively) any of the given names will yield a match.

    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/require-single-command.html b/docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/require-single-command.html deleted file mode 100644 index ad0a2cb67d..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/kotlin.collections.-list/require-single-command.html +++ /dev/null @@ -1,15 +0,0 @@ - - -requireSingleCommand - - - - -com.r3corda.core.contracts / kotlin.collections.List / requireSingleCommand
    -
    -

    requireSingleCommand

    - -fun List<AuthenticatedObject<CommandData>>.requireSingleCommand(klass: Class<out CommandData>): <ERROR CLASS>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.contracts/to-ledger-transaction.html b/docs/build/html/api/com.r3corda.core.contracts/to-ledger-transaction.html deleted file mode 100644 index 45c389b9f6..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/to-ledger-transaction.html +++ /dev/null @@ -1,35 +0,0 @@ - - -toLedgerTransaction - - - - -com.r3corda.core.contracts / toLedgerTransaction
    -
    -

    toLedgerTransaction

    - -fun WireTransaction.toLedgerTransaction(services: ServiceHub): LedgerTransaction
    -

    Looks up identities and attachments from storage to generate a LedgerTransaction. A transaction is expected to -have been fully resolved using the resolution protocol by this point.

    -

    Exceptions

    - -FileNotFoundException - if a required attachment was not found in storage.
    -
    - -TransactionResolutionException - if an input points to a transaction not found in storage.
    -
    -
    - -fun SignedTransaction.toLedgerTransaction(services: ServiceHub): LedgerTransaction
    -

    Calls verify to check all required signatures are present, and then calls WireTransaction.toLedgerTransaction -with the passed in ServiceHub to resolve the dependencies, returning an unverified LedgerTransaction.

    -

    Exceptions

    - -FileNotFoundException - if a required attachment was not found in storage.
    -
    - -TransactionResolutionException - if an input points to a transaction not found in storage.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.contracts/verify-to-ledger-transaction.html b/docs/build/html/api/com.r3corda.core.contracts/verify-to-ledger-transaction.html deleted file mode 100644 index d579cf36dc..0000000000 --- a/docs/build/html/api/com.r3corda.core.contracts/verify-to-ledger-transaction.html +++ /dev/null @@ -1,17 +0,0 @@ - - -verifyToLedgerTransaction - - - - -com.r3corda.core.contracts / verifyToLedgerTransaction
    -
    -

    verifyToLedgerTransaction

    - -fun SignedTransaction.verifyToLedgerTransaction(identityService: IdentityService, attachmentStorage: AttachmentStorage): LedgerTransaction
    -

    Calls verify to check all required signatures are present, and then uses the passed IdentityService to call -WireTransaction.toLedgerTransaction to look up well known identities from pubkeys.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.crypto/-digital-signature/covering.html b/docs/build/html/api/com.r3corda.core.crypto/-digital-signature/covering.html deleted file mode 100644 index 097485e9af..0000000000 --- a/docs/build/html/api/com.r3corda.core.crypto/-digital-signature/covering.html +++ /dev/null @@ -1,15 +0,0 @@ - - -DigitalSignature.covering - - - - -com.r3corda.core.crypto / DigitalSignature / covering
    -
    -

    covering

    - -val covering: Int
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/-s-h-a256/-init-.html b/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/-s-h-a256/-init-.html index 4d3b4bb492..0bd85fec78 100644 --- a/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/-s-h-a256/-init-.html +++ b/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/-s-h-a256/-init-.html @@ -8,6 +8,7 @@

    <init>

    SHA256(bits: ByteArray)
    +

    SHA-256 is part of the SHA-2 hash function family. Generated hash is fixed size, 256-bits (32-bytes)



    diff --git a/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/-s-h-a256/index.html b/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/-s-h-a256/index.html index 1f872a0224..bd7ebcd461 100644 --- a/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/-s-h-a256/index.html +++ b/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/-s-h-a256/index.html @@ -8,6 +8,7 @@

    SHA256

    class SHA256 : SecureHash
    +

    SHA-256 is part of the SHA-2 hash function family. Generated hash is fixed size, 256-bits (32-bytes)



    Constructors

    @@ -17,18 +18,8 @@ <init> -SHA256(bits: ByteArray) - - - -

    Properties

    - - - - - +SHA256(bits: ByteArray)

    SHA-256 is part of the SHA-2 hash function family. Generated hash is fixed size, 256-bits (32-bytes)

    +
    -signatureAlgorithmName -val signatureAlgorithmName: String
    diff --git a/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/-s-h-a256/signature-algorithm-name.html b/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/-s-h-a256/signature-algorithm-name.html deleted file mode 100644 index dedcffb981..0000000000 --- a/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/-s-h-a256/signature-algorithm-name.html +++ /dev/null @@ -1,16 +0,0 @@ - - -SecureHash.SHA256.signatureAlgorithmName - - - - -com.r3corda.core.crypto / SecureHash / SHA256 / signatureAlgorithmName
    -
    -

    signatureAlgorithmName

    - -val signatureAlgorithmName: String
    -Overrides SecureHash.signatureAlgorithmName
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/index.html b/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/index.html index 72b501af3a..d35b4566d9 100644 --- a/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/index.html +++ b/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/index.html @@ -8,6 +8,8 @@

    SecureHash

    sealed class SecureHash : OpaqueBytes
    +

    Container for a cryptographically secure hash value. +Provides utilities for generating a cryptographic hash using different algorithms (currently only SHA-256 supported).



    Types

    @@ -17,18 +19,8 @@ SHA256 -class SHA256 : SecureHash - - - -

    Properties

    - - - - - +class SHA256 : SecureHash

    SHA-256 is part of the SHA-2 hash function family. Generated hash is fixed size, 256-bits (32-bytes)

    +
    -signatureAlgorithmName -abstract val signatureAlgorithmName: String
    @@ -144,7 +136,8 @@ SHA256 -class SHA256 : SecureHash +class SHA256 : SecureHash

    SHA-256 is part of the SHA-2 hash function family. Generated hash is fixed size, 256-bits (32-bytes)

    + diff --git a/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/signature-algorithm-name.html b/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/signature-algorithm-name.html deleted file mode 100644 index d88e6e3bae..0000000000 --- a/docs/build/html/api/com.r3corda.core.crypto/-secure-hash/signature-algorithm-name.html +++ /dev/null @@ -1,15 +0,0 @@ - - -SecureHash.signatureAlgorithmName - - - - -com.r3corda.core.crypto / SecureHash / signatureAlgorithmName
    -
    -

    signatureAlgorithmName

    - -abstract val signatureAlgorithmName: String
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a-cert-and-key/-init-.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a-cert-and-key/-init-.html index 31d217dbbc..8349eef6cf 100644 --- a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a-cert-and-key/-init-.html +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a-cert-and-key/-init-.html @@ -7,8 +7,8 @@ com.r3corda.core.crypto / X509Utilities / CACertAndKey / <init>

    <init>

    -CACertAndKey(certificate: X509Certificate, keypair: KeyPair)
    -

    Helper data class to pass around public certificate and KeyPair entities when using CA certs

    +CACertAndKey(certificate: X509Certificate, keyPair: KeyPair)
    +

    Helper data class to pass around public certificate and KeyPair entities when using CA certs.



    diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a-cert-and-key/index.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a-cert-and-key/index.html index e6f3a8ef4c..00e42a3022 100644 --- a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a-cert-and-key/index.html +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a-cert-and-key/index.html @@ -8,7 +8,7 @@

    CACertAndKey

    data class CACertAndKey
    -

    Helper data class to pass around public certificate and KeyPair entities when using CA certs

    +

    Helper data class to pass around public certificate and KeyPair entities when using CA certs.



    Constructors

    @@ -18,7 +18,7 @@ <init> -CACertAndKey(certificate: X509Certificate, keypair: KeyPair)

    Helper data class to pass around public certificate and KeyPair entities when using CA certs

    +CACertAndKey(certificate: X509Certificate, keyPair: KeyPair)

    Helper data class to pass around public certificate and KeyPair entities when using CA certs.

    @@ -34,9 +34,9 @@ -keypair +keyPair -val keypair: KeyPair +val keyPair: KeyPair diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a-cert-and-key/keypair.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a-cert-and-key/key-pair.html similarity index 62% rename from docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a-cert-and-key/keypair.html rename to docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a-cert-and-key/key-pair.html index a464ce3780..4e41dfc55c 100644 --- a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a-cert-and-key/keypair.html +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a-cert-and-key/key-pair.html @@ -1,14 +1,14 @@ -X509Utilities.CACertAndKey.keypair - +X509Utilities.CACertAndKey.keyPair - -com.r3corda.core.crypto / X509Utilities / CACertAndKey / keypair
    +com.r3corda.core.crypto / X509Utilities / CACertAndKey / keyPair

    -

    keypair

    - -val keypair: KeyPair
    +

    keyPair

    + +val keyPair: KeyPair


    diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-e-r-t_-p-r-i-v-a-t-e_-k-e-y_-a-l-i-a-s.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-e-r-t_-p-r-i-v-a-t-e_-k-e-y_-a-l-i-a-s.html deleted file mode 100644 index fbb33b4c95..0000000000 --- a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-e-r-t_-p-r-i-v-a-t-e_-k-e-y_-a-l-i-a-s.html +++ /dev/null @@ -1,15 +0,0 @@ - - -X509Utilities.CERT_PRIVATE_KEY_ALIAS - - - - -com.r3corda.core.crypto / X509Utilities / CERT_PRIVATE_KEY_ALIAS
    -
    -

    CERT_PRIVATE_KEY_ALIAS

    - -val CERT_PRIVATE_KEY_ALIAS: String
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-c-l-i-e-n-t_-c-a.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-c-l-i-e-n-t_-c-a.html new file mode 100644 index 0000000000..4aaa34f5c3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-c-l-i-e-n-t_-c-a.html @@ -0,0 +1,15 @@ + + +X509Utilities.CORDA_CLIENT_CA - + + + +com.r3corda.core.crypto / X509Utilities / CORDA_CLIENT_CA
    +
    +

    CORDA_CLIENT_CA

    + +val CORDA_CLIENT_CA: String
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-c-l-i-e-n-t_-c-a_-p-r-i-v-a-t-e_-k-e-y.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-c-l-i-e-n-t_-c-a_-p-r-i-v-a-t-e_-k-e-y.html new file mode 100644 index 0000000000..cb33799de3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-c-l-i-e-n-t_-c-a_-p-r-i-v-a-t-e_-k-e-y.html @@ -0,0 +1,15 @@ + + +X509Utilities.CORDA_CLIENT_CA_PRIVATE_KEY - + + + +com.r3corda.core.crypto / X509Utilities / CORDA_CLIENT_CA_PRIVATE_KEY
    +
    +

    CORDA_CLIENT_CA_PRIVATE_KEY

    + +val CORDA_CLIENT_CA_PRIVATE_KEY: String
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-i-n-t-e-r-m-e-d-i-a-t-e_-c-a.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-i-n-t-e-r-m-e-d-i-a-t-e_-c-a.html new file mode 100644 index 0000000000..761be368a2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-i-n-t-e-r-m-e-d-i-a-t-e_-c-a.html @@ -0,0 +1,15 @@ + + +X509Utilities.CORDA_INTERMEDIATE_CA - + + + +com.r3corda.core.crypto / X509Utilities / CORDA_INTERMEDIATE_CA
    +
    +

    CORDA_INTERMEDIATE_CA

    + +val CORDA_INTERMEDIATE_CA: String
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-i-n-t-e-r-m-e-d-i-a-t-e_-c-a_-p-r-i-v-a-t-e_-k-e-y.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-i-n-t-e-r-m-e-d-i-a-t-e_-c-a_-p-r-i-v-a-t-e_-k-e-y.html new file mode 100644 index 0000000000..148609e6d1 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-i-n-t-e-r-m-e-d-i-a-t-e_-c-a_-p-r-i-v-a-t-e_-k-e-y.html @@ -0,0 +1,15 @@ + + +X509Utilities.CORDA_INTERMEDIATE_CA_PRIVATE_KEY - + + + +com.r3corda.core.crypto / X509Utilities / CORDA_INTERMEDIATE_CA_PRIVATE_KEY
    +
    +

    CORDA_INTERMEDIATE_CA_PRIVATE_KEY

    + +val CORDA_INTERMEDIATE_CA_PRIVATE_KEY: String
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a_-c-e-r-t_-a-l-i-a-s.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-r-o-o-t_-c-a.html similarity index 60% rename from docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a_-c-e-r-t_-a-l-i-a-s.html rename to docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-r-o-o-t_-c-a.html index c4ed62c9a2..c61233d8af 100644 --- a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-a_-c-e-r-t_-a-l-i-a-s.html +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-r-o-o-t_-c-a.html @@ -1,14 +1,14 @@ -X509Utilities.CA_CERT_ALIAS - +X509Utilities.CORDA_ROOT_CA - -com.r3corda.core.crypto / X509Utilities / CA_CERT_ALIAS
    +com.r3corda.core.crypto / X509Utilities / CORDA_ROOT_CA

    -

    CA_CERT_ALIAS

    - -val CA_CERT_ALIAS: String
    +

    CORDA_ROOT_CA

    + +val CORDA_ROOT_CA: String


    diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-r-o-o-t_-c-a_-p-r-i-v-a-t-e_-k-e-y.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-r-o-o-t_-c-a_-p-r-i-v-a-t-e_-k-e-y.html new file mode 100644 index 0000000000..740e49eedb --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-c-o-r-d-a_-r-o-o-t_-c-a_-p-r-i-v-a-t-e_-k-e-y.html @@ -0,0 +1,15 @@ + + +X509Utilities.CORDA_ROOT_CA_PRIVATE_KEY - + + + +com.r3corda.core.crypto / X509Utilities / CORDA_ROOT_CA_PRIVATE_KEY
    +
    +

    CORDA_ROOT_CA_PRIVATE_KEY

    + +val CORDA_ROOT_CA_PRIVATE_KEY: String
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-i-n-t-e-r-m-e-d-i-a-t-e_-c-a_-p-r-i-v-a-t-e_-k-e-y_-a-l-i-a-s.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-i-n-t-e-r-m-e-d-i-a-t-e_-c-a_-p-r-i-v-a-t-e_-k-e-y_-a-l-i-a-s.html deleted file mode 100644 index 4d914ceacf..0000000000 --- a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-i-n-t-e-r-m-e-d-i-a-t-e_-c-a_-p-r-i-v-a-t-e_-k-e-y_-a-l-i-a-s.html +++ /dev/null @@ -1,15 +0,0 @@ - - -X509Utilities.INTERMEDIATE_CA_PRIVATE_KEY_ALIAS - - - - -com.r3corda.core.crypto / X509Utilities / INTERMEDIATE_CA_PRIVATE_KEY_ALIAS
    -
    -

    INTERMEDIATE_CA_PRIVATE_KEY_ALIAS

    - -val INTERMEDIATE_CA_PRIVATE_KEY_ALIAS: String
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-r-o-o-t_-c-a_-c-e-r-t_-p-r-i-v-a-t-e_-k-e-y_-a-l-i-a-s.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-r-o-o-t_-c-a_-c-e-r-t_-p-r-i-v-a-t-e_-k-e-y_-a-l-i-a-s.html deleted file mode 100644 index 8449827bae..0000000000 --- a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/-r-o-o-t_-c-a_-c-e-r-t_-p-r-i-v-a-t-e_-k-e-y_-a-l-i-a-s.html +++ /dev/null @@ -1,15 +0,0 @@ - - -X509Utilities.ROOT_CA_CERT_PRIVATE_KEY_ALIAS - - - - -com.r3corda.core.crypto / X509Utilities / ROOT_CA_CERT_PRIVATE_KEY_ALIAS
    -
    -

    ROOT_CA_CERT_PRIVATE_KEY_ALIAS

    - -val ROOT_CA_CERT_PRIVATE_KEY_ALIAS: String
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/add-or-replace-certificate.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/add-or-replace-certificate.html new file mode 100644 index 0000000000..307a8a09de --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/add-or-replace-certificate.html @@ -0,0 +1,22 @@ + + +X509Utilities.addOrReplaceCertificate - + + + +com.r3corda.core.crypto / X509Utilities / addOrReplaceCertificate
    +
    +

    addOrReplaceCertificate

    + +fun KeyStore.addOrReplaceCertificate(alias: String, cert: Certificate): Unit
    +

    Helper extension method to add, or overwrite any public certificate data in store

    +

    Parameters

    + +alias - name to record the public certificate under
    +
    + +cert - certificate to store
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/add-or-replace-key.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/add-or-replace-key.html new file mode 100644 index 0000000000..8c92a3c7d9 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/add-or-replace-key.html @@ -0,0 +1,29 @@ + + +X509Utilities.addOrReplaceKey - + + + +com.r3corda.core.crypto / X509Utilities / addOrReplaceKey
    +
    +

    addOrReplaceKey

    + +fun KeyStore.addOrReplaceKey(alias: String, key: Key, password: CharArray, chain: Array<Certificate>): Unit
    +

    Helper extension method to add, or overwrite any key data in store

    +

    Parameters

    + +alias - name to record the private key and certificate chain under
    +
    + +key - cryptographic key to store
    +
    + +password - password for unlocking the key entry in the future. This does not have to be the same password as any keys stored, +but for SSL purposes this is recommended.
    +
    + +chain - the sequence of certificates starting with the public key certificate for this key and extending to the root CA cert
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/create-certificate-signing-request.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/create-certificate-signing-request.html new file mode 100644 index 0000000000..b5f4cfe01d --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/create-certificate-signing-request.html @@ -0,0 +1,30 @@ + + +X509Utilities.createCertificateSigningRequest - + + + +com.r3corda.core.crypto / X509Utilities / createCertificateSigningRequest
    +
    +

    createCertificateSigningRequest

    + +fun createCertificateSigningRequest(myLegalName: String, nearestCity: String, email: String, keyPair: KeyPair): <ERROR CLASS>
    +

    Create certificate signing request using provided information.

    +

    Parameters

    + +myLegalName - The legal name of your organization. This should not be abbreviated and should include suffixes such as Inc, Corp, or LLC.
    +
    + +nearestCity - The city where your organization is located.
    +
    + +email - An email address used to contact your organization.
    +
    + +keyPair - Standard curve ECDSA KeyPair generated for TLS.
    +

    Return
    +The generated Certificate signing request.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/create-self-signed-c-a-cert.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/create-self-signed-c-a-cert.html index f33d633642..7c7d820bc6 100644 --- a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/create-self-signed-c-a-cert.html +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/create-self-signed-c-a-cert.html @@ -8,13 +8,13 @@

    createSelfSignedCACert

    -fun createSelfSignedCACert(domain: String): CACertAndKey
    -

    Create a de novo root self-signed X509 v3 CA cert and KeyPair.

    +fun createSelfSignedCACert(myLegalName: String): CACertAndKey
    +

    Create a de novo root self-signed X509 v3 CA cert and KeyPair.

    Parameters

    domain - The Common (CN) field of the cert Subject will be populated with the domain string

    Return
    -A data class is returned containing the new root CA Cert and its KeyPair for signing downstream certificates. +A data class is returned containing the new root CA Cert and its KeyPair for signing downstream certificates. Note the generated certificate tree is capped at max depth of 2 to be in line with commercially available certificates



    diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/get-x509-name.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/get-x509-name.html new file mode 100644 index 0000000000..4cc78f856e --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/get-x509-name.html @@ -0,0 +1,15 @@ + + +X509Utilities.getX509Name - + + + +com.r3corda.core.crypto / X509Utilities / getX509Name
    +
    +

    getX509Name

    + +fun getX509Name(myLegalName: String, nearestCity: String, email: String): <ERROR CLASS>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/index.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/index.html index 560582e741..528fbd92fb 100644 --- a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/index.html +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/index.html @@ -17,7 +17,7 @@ CACertAndKey -data class CACertAndKey

    Helper data class to pass around public certificate and KeyPair entities when using CA certs

    +data class CACertAndKey

    Helper data class to pass around public certificate and KeyPair entities when using CA certs.

    @@ -27,15 +27,39 @@ -CA_CERT_ALIAS +CORDA_CLIENT_CA -val CA_CERT_ALIAS: String +val CORDA_CLIENT_CA: String -CERT_PRIVATE_KEY_ALIAS +CORDA_CLIENT_CA_PRIVATE_KEY -val CERT_PRIVATE_KEY_ALIAS: String +val CORDA_CLIENT_CA_PRIVATE_KEY: String + + + +CORDA_INTERMEDIATE_CA + +val CORDA_INTERMEDIATE_CA: String + + + +CORDA_INTERMEDIATE_CA_PRIVATE_KEY + +val CORDA_INTERMEDIATE_CA_PRIVATE_KEY: String + + + +CORDA_ROOT_CA + +val CORDA_ROOT_CA: String + + + +CORDA_ROOT_CA_PRIVATE_KEY + +val CORDA_ROOT_CA_PRIVATE_KEY: String @@ -45,12 +69,6 @@ -INTERMEDIATE_CA_PRIVATE_KEY_ALIAS - -val INTERMEDIATE_CA_PRIVATE_KEY_ALIAS: String - - - KEYSTORE_TYPE val KEYSTORE_TYPE: String @@ -63,12 +81,6 @@ -ROOT_CA_CERT_PRIVATE_KEY_ALIAS - -val ROOT_CA_CERT_PRIVATE_KEY_ALIAS: String - - - SIGNATURE_ALGORITHM val SIGNATURE_ALGORITHM: String @@ -80,6 +92,20 @@ +addOrReplaceCertificate + +fun KeyStore.addOrReplaceCertificate(alias: String, cert: Certificate): Unit

    Helper extension method to add, or overwrite any public certificate data in store

    + + + + +addOrReplaceKey + +fun KeyStore.addOrReplaceKey(alias: String, key: Key, password: CharArray, chain: Array<Certificate>): Unit

    Helper extension method to add, or overwrite any key data in store

    + + + + createCAKeyStoreAndTrustStore fun createCAKeyStoreAndTrustStore(keyStoreFilePath: Path, storePassword: String, keyPassword: String, trustStoreFilePath: Path, trustStorePassword: String): KeyStore

    All in one wrapper to manufacture a root CA cert and an Intermediate CA cert. @@ -88,6 +114,13 @@ Normally this would be run once and then the outputs would be re-used repeatedly +createCertificateSigningRequest + +fun createCertificateSigningRequest(myLegalName: String, nearestCity: String, email: String, keyPair: KeyPair): <ERROR CLASS>

    Create certificate signing request using provided information.

    + + + + createIntermediateCert fun createIntermediateCert(domain: String, certificateAuthority: CACertAndKey): CACertAndKey

    Create a de novo root intermediate X509 v3 CA cert and KeyPair.

    @@ -104,7 +137,7 @@ Normally this would be run once and then the outputs would be re-used repeatedly createSelfSignedCACert -fun createSelfSignedCACert(domain: String): CACertAndKey

    Create a de novo root self-signed X509 v3 CA cert and KeyPair.

    +fun createSelfSignedCACert(myLegalName: String): CACertAndKey

    Create a de novo root self-signed X509 v3 CA cert and KeyPair.

    @@ -130,6 +163,12 @@ Normally this would be run once and then the outputs would be re-used repeatedly +getX509Name + +fun getX509Name(myLegalName: String, nearestCity: String, email: String): <ERROR CLASS> + + + loadCertificateAndKey fun loadCertificateAndKey(keyStore: KeyStore, keyPassword: String, alias: String): CACertAndKey

    Helper method to load a Certificate and KeyPair from their KeyStore. @@ -154,7 +193,7 @@ The access details should match those of the createCAKeyStoreAndTrustStore call loadKeyPairFromKeyStore -fun loadKeyPairFromKeyStore(keyStoreFilePath: Path, storePassword: String, keyPassword: String, alias: String): KeyPair

    Extract public and private keys from a KeyStore file assuming storage alias is know

    +fun loadKeyPairFromKeyStore(keyStoreFilePath: Path, storePassword: String, keyPassword: String, alias: String): KeyPair

    Extract public and private keys from a KeyStore file assuming storage alias is known.

    @@ -167,9 +206,17 @@ The access details should match those of the createCAKeyStoreAndTrustStore call +loadOrCreateKeyPairFromKeyStore + +fun loadOrCreateKeyPairFromKeyStore(keyStoreFilePath: Path, storePassword: String, keyPassword: String, alias: String, keyGenerator: () -> CACertAndKey): KeyPair

    Extract public and private keys from a KeyStore file assuming storage alias is known, or +create a new pair of keys using the provided function if the keys not exist.

    + + + + loadOrCreateKeyStore -fun loadOrCreateKeyStore(keyStoreFilePath: Path, storePassword: String): KeyStore

    Helper method to either open an existing keystore for modification, or create a new blank keystore

    +fun loadOrCreateKeyStore(keyStoreFilePath: Path, storePassword: String): KeyStore

    Helper method to either open an existing keystore for modification, or create a new blank keystore.

    diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/load-key-pair-from-key-store.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/load-key-pair-from-key-store.html index 21525b9a92..68aa9aa972 100644 --- a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/load-key-pair-from-key-store.html +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/load-key-pair-from-key-store.html @@ -9,7 +9,7 @@

    loadKeyPairFromKeyStore

    fun loadKeyPairFromKeyStore(keyStoreFilePath: Path, storePassword: String, keyPassword: String, alias: String): KeyPair
    -

    Extract public and private keys from a KeyStore file assuming storage alias is know

    +

    Extract public and private keys from a KeyStore file assuming storage alias is known.

    Parameters

    keyStoreFilePath - Path to load KeyStore from
    diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/load-or-create-key-pair-from-key-store.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/load-or-create-key-pair-from-key-store.html new file mode 100644 index 0000000000..0f301bd3ea --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/load-or-create-key-pair-from-key-store.html @@ -0,0 +1,34 @@ + + +X509Utilities.loadOrCreateKeyPairFromKeyStore - + + + +com.r3corda.core.crypto / X509Utilities / loadOrCreateKeyPairFromKeyStore
    +
    +

    loadOrCreateKeyPairFromKeyStore

    + +fun loadOrCreateKeyPairFromKeyStore(keyStoreFilePath: Path, storePassword: String, keyPassword: String, alias: String, keyGenerator: () -> CACertAndKey): KeyPair
    +

    Extract public and private keys from a KeyStore file assuming storage alias is known, or +create a new pair of keys using the provided function if the keys not exist.

    +

    Parameters

    + +keyStoreFilePath - Path to load KeyStore from
    +
    + +storePassword - Password to unlock the KeyStore
    +
    + +keyPassword - Password to unlock the private key entries
    +
    + +alias - The name to lookup the Key and Certificate chain from
    +
    + +keyGenerator - Function for generating new keys
    +

    Return
    +The KeyPair found in the KeyStore under the specified alias

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/load-or-create-key-store.html b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/load-or-create-key-store.html index e093d1f9f2..b4d03e555e 100644 --- a/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/load-or-create-key-store.html +++ b/docs/build/html/api/com.r3corda.core.crypto/-x509-utilities/load-or-create-key-store.html @@ -9,7 +9,7 @@

    loadOrCreateKeyStore

    fun loadOrCreateKeyStore(keyStoreFilePath: Path, storePassword: String): KeyStore
    -

    Helper method to either open an existing keystore for modification, or create a new blank keystore

    +

    Helper method to either open an existing keystore for modification, or create a new blank keystore.

    Parameters

    keyStoreFilePath - location of KeyStore file
    diff --git a/docs/build/html/api/com.r3corda.core.crypto/entropy-to-key-pair.html b/docs/build/html/api/com.r3corda.core.crypto/entropy-to-key-pair.html index 11f926829a..db0cfed71a 100644 --- a/docs/build/html/api/com.r3corda.core.crypto/entropy-to-key-pair.html +++ b/docs/build/html/api/com.r3corda.core.crypto/entropy-to-key-pair.html @@ -9,7 +9,7 @@

    entropyToKeyPair

    fun entropyToKeyPair(entropy: BigInteger): KeyPair
    -

    Returns a keypair derived from the given private key entropy. This is useful for unit tests and other cases where +

    Returns a key pair derived from the given private key entropy. This is useful for unit tests and other cases where you want hard-coded private keys.



    diff --git a/docs/build/html/api/com.r3corda.core.crypto/index.html b/docs/build/html/api/com.r3corda.core.crypto/index.html index 932b895e83..1defe380f8 100644 --- a/docs/build/html/api/com.r3corda.core.crypto/index.html +++ b/docs/build/html/api/com.r3corda.core.crypto/index.html @@ -49,7 +49,9 @@ building partially signed transactions.

    SecureHash -sealed class SecureHash : OpaqueBytes +sealed class SecureHash : OpaqueBytes

    Container for a cryptographically secure hash value. +Provides utilities for generating a cryptographic hash using different algorithms (currently only SHA-256 supported).

    + @@ -144,7 +146,7 @@ that we can delegate most of the checking to the proper Java code. We simply add entropyToKeyPair -fun entropyToKeyPair(entropy: BigInteger): KeyPair

    Returns a keypair derived from the given private key entropy. This is useful for unit tests and other cases where +fun entropyToKeyPair(entropy: BigInteger): KeyPair

    Returns a key pair derived from the given private key entropy. This is useful for unit tests and other cases where you want hard-coded private keys.

    diff --git a/docs/build/html/api/com.r3corda.core.messaging/-message-handler-registration.html b/docs/build/html/api/com.r3corda.core.messaging/-message-handler-registration.html index cf259778ee..0356614988 100644 --- a/docs/build/html/api/com.r3corda.core.messaging/-message-handler-registration.html +++ b/docs/build/html/api/com.r3corda.core.messaging/-message-handler-registration.html @@ -15,17 +15,11 @@ -Handler +Handler data class Handler : MessageHandlerRegistration

    A registration to handle messages of different types

    - - -Handler - -inner class Handler : MessageHandlerRegistration - diff --git a/docs/build/html/api/com.r3corda.core.messaging/-messaging-service-builder/index.html b/docs/build/html/api/com.r3corda.core.messaging/-messaging-service-builder/index.html deleted file mode 100644 index cbeb379ad9..0000000000 --- a/docs/build/html/api/com.r3corda.core.messaging/-messaging-service-builder/index.html +++ /dev/null @@ -1,44 +0,0 @@ - - -MessagingServiceBuilder - - - - -com.r3corda.core.messaging / MessagingServiceBuilder
    -
    -

    MessagingServiceBuilder

    -interface MessagingServiceBuilder<out T : MessagingService>
    -

    This class lets you start up a MessagingService. Its purpose is to stop you from getting access to the methods -on the messaging service interface until you have successfully started up the system. One of these objects should -be the only way to obtain a reference to a MessagingService. Startup may be a slow process: some implementations -may let you cast the returned future to an object that lets you get status info.

    -

    A specific implementation of the controller class will have extra features that let you customise it before starting -it up.

    -
    -
    -
    -
    -

    Functions

    - - - - - - - -
    -start -abstract fun start(): <ERROR CLASS><out T>
    -

    Inheritors

    - - - - - - - -
    -Builder -inner class Builder : MessagingServiceBuilder<InMemoryMessaging>
    - - diff --git a/docs/build/html/api/com.r3corda.core.messaging/-messaging-service-builder/start.html b/docs/build/html/api/com.r3corda.core.messaging/-messaging-service-builder/start.html deleted file mode 100644 index d0f2b84a6a..0000000000 --- a/docs/build/html/api/com.r3corda.core.messaging/-messaging-service-builder/start.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MessagingServiceBuilder.start - - - - -com.r3corda.core.messaging / MessagingServiceBuilder / start
    -
    -

    start

    - -abstract fun start(): <ERROR CLASS><out T>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.messaging/-messaging-service/stop.html b/docs/build/html/api/com.r3corda.core.messaging/-messaging-service/stop.html deleted file mode 100644 index feadfb5f0c..0000000000 --- a/docs/build/html/api/com.r3corda.core.messaging/-messaging-service/stop.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MessagingService.stop - - - - -com.r3corda.core.messaging / MessagingService / stop
    -
    -

    stop

    - -abstract fun stop(): Unit
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.messaging/-single-message-recipient.html b/docs/build/html/api/com.r3corda.core.messaging/-single-message-recipient.html index 8ca345d08d..4e0bca15fd 100644 --- a/docs/build/html/api/com.r3corda.core.messaging/-single-message-recipient.html +++ b/docs/build/html/api/com.r3corda.core.messaging/-single-message-recipient.html @@ -16,18 +16,6 @@ -Handle - -class Handle : SingleMessageRecipient - - - -MockAddress - -data class MockAddress : SingleMessageRecipient - - - NetworkMapAddress data class NetworkMapAddress : SingleMessageRecipient, ArtemisAddress @@ -36,7 +24,10 @@ NodeAddress -data class NodeAddress : SingleMessageRecipient, ArtemisAddress +data class NodeAddress : SingleMessageRecipient, ArtemisAddress

    This is the class used to implement SingleMessageRecipient, for now. Note that in future this class +may change or evolve and code that relies upon it being a simple host/port may not function correctly. +For instance it may contain onion routing data.

    + diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/-init-.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/-init-.html deleted file mode 100644 index 52b0edba72..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -MockAttachmentStorage.<init> - - - - -com.r3corda.core.node.services.testing / MockAttachmentStorage / <init>
    -
    -

    <init>

    -MockAttachmentStorage()
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/files.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/files.html deleted file mode 100644 index e19f20eeef..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/files.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockAttachmentStorage.files - - - - -com.r3corda.core.node.services.testing / MockAttachmentStorage / files
    -
    -

    files

    - -val files: HashMap<SecureHash, ByteArray>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/import-attachment.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/import-attachment.html deleted file mode 100644 index 4424efad39..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/import-attachment.html +++ /dev/null @@ -1,31 +0,0 @@ - - -MockAttachmentStorage.importAttachment - - - - -com.r3corda.core.node.services.testing / MockAttachmentStorage / importAttachment
    -
    -

    importAttachment

    - -fun importAttachment(jar: InputStream): SecureHash
    -Overrides AttachmentStorage.importAttachment
    -

    Inserts the given attachment into the store, does not close the input stream. This can be an intensive -operation due to the need to copy the bytes to disk and hash them along the way.

    -

    Note that you should not pass a JarInputStream into this method and it will throw if you do, because access -to the raw byte stream is required.

    -
    -
    -

    Exceptions

    - -FileAlreadyExistsException - if the given byte stream has already been inserted.
    -
    - -IllegalArgumentException - if the given byte stream is empty or a JarInputStream.
    -
    - -IOException - if something went wrong.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/index.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/index.html deleted file mode 100644 index dd67c061d4..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - -MockAttachmentStorage - - - - -com.r3corda.core.node.services.testing / MockAttachmentStorage
    -
    -

    MockAttachmentStorage

    -class MockAttachmentStorage : AttachmentStorage
    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -MockAttachmentStorage()
    -

    Properties

    - - - - - - - -
    -files -val files: HashMap<SecureHash, ByteArray>
    -

    Functions

    - - - - - - - - - - - -
    -importAttachment -fun importAttachment(jar: InputStream): SecureHash

    Inserts the given attachment into the store, does not close the input stream. This can be an intensive -operation due to the need to copy the bytes to disk and hash them along the way.

    -
    -openAttachment -fun openAttachment(id: SecureHash): Attachment?

    Returns a handle to a locally stored attachment, or null if its not known. The handle can be used to open -a stream for the data, which will be a zip/jar file.

    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/open-attachment.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/open-attachment.html deleted file mode 100644 index 82b57d800d..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-attachment-storage/open-attachment.html +++ /dev/null @@ -1,18 +0,0 @@ - - -MockAttachmentStorage.openAttachment - - - - -com.r3corda.core.node.services.testing / MockAttachmentStorage / openAttachment
    -
    -

    openAttachment

    - -fun openAttachment(id: SecureHash): Attachment?
    -Overrides AttachmentStorage.openAttachment
    -

    Returns a handle to a locally stored attachment, or null if its not known. The handle can be used to open -a stream for the data, which will be a zip/jar file.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/-init-.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/-init-.html deleted file mode 100644 index 460301928b..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -MockIdentityService.<init> - - - - -com.r3corda.core.node.services.testing / MockIdentityService / <init>
    -
    -

    <init>

    -MockIdentityService(identities: List<Party>)
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/identities.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/identities.html deleted file mode 100644 index 3f99db6612..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/identities.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockIdentityService.identities - - - - -com.r3corda.core.node.services.testing / MockIdentityService / identities
    -
    -

    identities

    - -val identities: List<Party>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/index.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/index.html deleted file mode 100644 index 10196f16dc..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/index.html +++ /dev/null @@ -1,70 +0,0 @@ - - -MockIdentityService - - - - -com.r3corda.core.node.services.testing / MockIdentityService
    -
    -

    MockIdentityService

    -class MockIdentityService : IdentityService, SingletonSerializeAsToken
    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -MockIdentityService(identities: List<Party>)
    -

    Properties

    - - - - - - - -
    -identities -val identities: List<Party>
    -

    Functions

    - - - - - - - - - - - - - - - -
    -partyFromKey -fun partyFromKey(key: PublicKey): Party?
    -partyFromName -fun partyFromName(name: String): Party?
    -registerIdentity -fun registerIdentity(party: Party): Unit
    -

    Inherited Functions

    - - - - - - - -
    -toToken -open fun toToken(context: SerializeAsTokenContext): SerializationToken
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/party-from-key.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/party-from-key.html deleted file mode 100644 index 1d88d19c3b..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/party-from-key.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockIdentityService.partyFromKey - - - - -com.r3corda.core.node.services.testing / MockIdentityService / partyFromKey
    -
    -

    partyFromKey

    - -fun partyFromKey(key: PublicKey): Party?
    -Overrides IdentityService.partyFromKey
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/party-from-name.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/party-from-name.html deleted file mode 100644 index 1893dd60be..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/party-from-name.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockIdentityService.partyFromName - - - - -com.r3corda.core.node.services.testing / MockIdentityService / partyFromName
    -
    -

    partyFromName

    - -fun partyFromName(name: String): Party?
    -Overrides IdentityService.partyFromName
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/register-identity.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/register-identity.html deleted file mode 100644 index eb5305ff53..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-identity-service/register-identity.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockIdentityService.registerIdentity - - - - -com.r3corda.core.node.services.testing / MockIdentityService / registerIdentity
    -
    -

    registerIdentity

    - -fun registerIdentity(party: Party): Unit
    -Overrides IdentityService.registerIdentity
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/-init-.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/-init-.html deleted file mode 100644 index 481b147d76..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -MockKeyManagementService.<init> - - - - -com.r3corda.core.node.services.testing / MockKeyManagementService / <init>
    -
    -

    <init>

    -MockKeyManagementService(vararg initialKeys: KeyPair)
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/keys.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/keys.html deleted file mode 100644 index f8d3610f4d..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/keys.html +++ /dev/null @@ -1,17 +0,0 @@ - - -MockKeyManagementService.keys - - - - -com.r3corda.core.node.services.testing / MockKeyManagementService / keys
    -
    -

    keys

    - -val keys: MutableMap<PublicKey, PrivateKey>
    -Overrides KeyManagementService.keys
    -

    Returns a snapshot of the current pubkey->privkey mapping.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/next-keys.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/next-keys.html deleted file mode 100644 index 3dc433af9f..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/next-keys.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockKeyManagementService.nextKeys - - - - -com.r3corda.core.node.services.testing / MockKeyManagementService / nextKeys
    -
    -

    nextKeys

    - -val nextKeys: LinkedList<KeyPair>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/-init-.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/-init-.html deleted file mode 100644 index a5362cd93c..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/-init-.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockServices.<init> - - - - -com.r3corda.core.node.services.testing / MockServices / <init>
    -
    -

    <init>

    -MockServices(key: KeyPair = generateKeyPair())
    -

    A singleton utility that only provides a mock identity, key and storage service. However, this is sufficient for -building chains of transactions and verifying them. It isnt sufficient for testing protocols however.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/clock.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/clock.html deleted file mode 100644 index 16f049b198..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/clock.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockServices.clock - - - - -com.r3corda.core.node.services.testing / MockServices / clock
    -
    -

    clock

    - -open val clock: Clock
    -Overrides ServiceHub.clock
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/identity-service.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/identity-service.html deleted file mode 100644 index 4826c70134..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/identity-service.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockServices.identityService - - - - -com.r3corda.core.node.services.testing / MockServices / identityService
    -
    -

    identityService

    - -open val identityService: MockIdentityService
    -Overrides ServiceHub.identityService
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/index.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/index.html deleted file mode 100644 index 09cbe973c4..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/index.html +++ /dev/null @@ -1,142 +0,0 @@ - - -MockServices - - - - -com.r3corda.core.node.services.testing / MockServices
    -
    -

    MockServices

    -open class MockServices : ServiceHub
    -

    A singleton utility that only provides a mock identity, key and storage service. However, this is sufficient for -building chains of transactions and verifying them. It isnt sufficient for testing protocols however.

    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -MockServices(key: KeyPair = generateKeyPair())

    A singleton utility that only provides a mock identity, key and storage service. However, this is sufficient for -building chains of transactions and verifying them. It isnt sufficient for testing protocols however.

    -
    -

    Properties

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -clock -open val clock: Clock
    -identityService -open val identityService: MockIdentityService
    -key -val key: KeyPair
    -keyManagementService -open val keyManagementService: MockKeyManagementService
    -networkMapCache -open val networkMapCache: NetworkMapCache
    -networkService -open val networkService: MessagingService
    -schedulerService -open val schedulerService: SchedulerService
    -storageService -open val storageService: TxWritableStorageService
    -walletService -open val walletService: WalletService
    -

    Functions

    - - - - - - - - - - - -
    -invokeProtocolAsync -open fun <T : Any> invokeProtocolAsync(logicType: Class<out ProtocolLogic<T>>, vararg args: Any?): <ERROR CLASS><T>

    Will check logicType and args against a whitelist and if acceptable then construct and initiate the protocol.

    -
    -recordTransactions -open fun recordTransactions(txs: Iterable<SignedTransaction>): Unit

    Given a list of SignedTransactions, writes them to the local storage for validated transactions and then -sends them to the wallet for further processing.

    -
    -

    Inherited Functions

    - - - - - - - - - - - -
    -loadState -open fun loadState(stateRef: StateRef): TransactionState<*>

    Given a StateRef loads the referenced transaction and looks up the specified output ContractState.

    -
    -recordTransactions -open fun recordTransactions(vararg txs: SignedTransaction): <ERROR CLASS>

    Given some SignedTransactions, writes them to the local storage for validated transactions and then -sends them to the wallet for further processing.

    -
    -

    Extension Functions

    - - - - - - - -
    -fillWithSomeTestCash -fun ServiceHub.fillWithSomeTestCash(howMuch: Amount<Currency>, outputNotary: Party = DUMMY_NOTARY, atLeastThisManyStates: Int = 3, atMostThisManyStates: Int = 10, rng: Random = Random(), ref: OpaqueBytes = OpaqueBytes(ByteArray(1, { 1 })), ownedBy: PublicKey? = null): Wallet

    Creates a random set of between (by default) 3 and 10 cash states that add up to the given amount and adds them -to the wallet. This is intended for unit tests. The cash is issued by DUMMY_CASH_ISSUER and owned by the legal -identity key from the storage service.

    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/invoke-protocol-async.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/invoke-protocol-async.html deleted file mode 100644 index c557defffd..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/invoke-protocol-async.html +++ /dev/null @@ -1,20 +0,0 @@ - - -MockServices.invokeProtocolAsync - - - - -com.r3corda.core.node.services.testing / MockServices / invokeProtocolAsync
    -
    -

    invokeProtocolAsync

    - -open fun <T : Any> invokeProtocolAsync(logicType: Class<out ProtocolLogic<T>>, vararg args: Any?): <ERROR CLASS><T>
    -Overrides ServiceHub.invokeProtocolAsync
    -

    Will check logicType and args against a whitelist and if acceptable then construct and initiate the protocol.

    -

    Exceptions

    - -IllegalProtocolLogicException - or IllegalArgumentException if there are problems with the logicType or args.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/key-management-service.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/key-management-service.html deleted file mode 100644 index f661e7fe9d..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/key-management-service.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockServices.keyManagementService - - - - -com.r3corda.core.node.services.testing / MockServices / keyManagementService
    -
    -

    keyManagementService

    - -open val keyManagementService: MockKeyManagementService
    -Overrides ServiceHub.keyManagementService
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/key.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/key.html deleted file mode 100644 index 46cd4c6610..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/key.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockServices.key - - - - -com.r3corda.core.node.services.testing / MockServices / key
    -
    -

    key

    - -val key: KeyPair
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/network-map-cache.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/network-map-cache.html deleted file mode 100644 index 72a56fe25b..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/network-map-cache.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockServices.networkMapCache - - - - -com.r3corda.core.node.services.testing / MockServices / networkMapCache
    -
    -

    networkMapCache

    - -open val networkMapCache: NetworkMapCache
    -Overrides ServiceHub.networkMapCache
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/network-service.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/network-service.html deleted file mode 100644 index 3eb734c488..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/network-service.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockServices.networkService - - - - -com.r3corda.core.node.services.testing / MockServices / networkService
    -
    -

    networkService

    - -open val networkService: MessagingService
    -Overrides ServiceHub.networkService
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/record-transactions.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/record-transactions.html deleted file mode 100644 index 168b4797e4..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/record-transactions.html +++ /dev/null @@ -1,21 +0,0 @@ - - -MockServices.recordTransactions - - - - -com.r3corda.core.node.services.testing / MockServices / recordTransactions
    -
    -

    recordTransactions

    - -open fun recordTransactions(txs: Iterable<SignedTransaction>): Unit
    -Overrides ServiceHub.recordTransactions
    -

    Given a list of SignedTransactions, writes them to the local storage for validated transactions and then -sends them to the wallet for further processing.

    -

    Parameters

    - -txs - The transactions to record.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/scheduler-service.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/scheduler-service.html deleted file mode 100644 index 285fe047ce..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/scheduler-service.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockServices.schedulerService - - - - -com.r3corda.core.node.services.testing / MockServices / schedulerService
    -
    -

    schedulerService

    - -open val schedulerService: SchedulerService
    -Overrides ServiceHub.schedulerService
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/storage-service.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/storage-service.html deleted file mode 100644 index f9fa981d15..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/storage-service.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockServices.storageService - - - - -com.r3corda.core.node.services.testing / MockServices / storageService
    -
    -

    storageService

    - -open val storageService: TxWritableStorageService
    -Overrides ServiceHub.storageService
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/wallet-service.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/wallet-service.html deleted file mode 100644 index 26631aa228..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-services/wallet-service.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockServices.walletService - - - - -com.r3corda.core.node.services.testing / MockServices / walletService
    -
    -

    walletService

    - -open val walletService: WalletService
    -Overrides ServiceHub.walletService
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/-init-.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/-init-.html deleted file mode 100644 index aa46841a25..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -MockStorageService.<init> - - - - -com.r3corda.core.node.services.testing / MockStorageService / <init>
    -
    -

    <init>

    -MockStorageService(attachments: AttachmentStorage = MockAttachmentStorage(), validatedTransactions: TransactionStorage = MockTransactionStorage(), myLegalIdentityKey: KeyPair = generateKeyPair(), myLegalIdentity: Party = Party("Unit test party", myLegalIdentityKey.public))
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/attachments.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/attachments.html deleted file mode 100644 index 6153143c08..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/attachments.html +++ /dev/null @@ -1,17 +0,0 @@ - - -MockStorageService.attachments - - - - -com.r3corda.core.node.services.testing / MockStorageService / attachments
    -
    -

    attachments

    - -val attachments: AttachmentStorage
    -Overrides StorageService.attachments
    -

    Provides access to storage of arbitrary JAR files (which may contain only data, no code).

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/index.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/index.html deleted file mode 100644 index d033940e28..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/index.html +++ /dev/null @@ -1,71 +0,0 @@ - - -MockStorageService - - - - -com.r3corda.core.node.services.testing / MockStorageService
    -
    -

    MockStorageService

    -class MockStorageService : SingletonSerializeAsToken, TxWritableStorageService
    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -MockStorageService(attachments: AttachmentStorage = MockAttachmentStorage(), validatedTransactions: TransactionStorage = MockTransactionStorage(), myLegalIdentityKey: KeyPair = generateKeyPair(), myLegalIdentity: Party = Party("Unit test party", myLegalIdentityKey.public))
    -

    Properties

    - - - - - - - - - - - - - - - - - - - -
    -attachments -val attachments: AttachmentStorage

    Provides access to storage of arbitrary JAR files (which may contain only data, no code).

    -
    -myLegalIdentity -val myLegalIdentity: Party

    Returns the legal identity that this node is configured with. Assumed to be initialised when the node is -first installed.

    -
    -myLegalIdentityKey -val myLegalIdentityKey: KeyPair
    -validatedTransactions -val validatedTransactions: TransactionStorage

    A map of hash->tx where tx has been signature/contract validated and the states are known to be correct. -The signatures arent technically needed after that point, but we keep them around so that we can relay -the transaction data to other nodes that need it.

    -
    -

    Inherited Functions

    - - - - - - - -
    -toToken -open fun toToken(context: SerializeAsTokenContext): SerializationToken
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/my-legal-identity-key.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/my-legal-identity-key.html deleted file mode 100644 index 1be4c9c614..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/my-legal-identity-key.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockStorageService.myLegalIdentityKey - - - - -com.r3corda.core.node.services.testing / MockStorageService / myLegalIdentityKey
    -
    -

    myLegalIdentityKey

    - -val myLegalIdentityKey: KeyPair
    -Overrides StorageService.myLegalIdentityKey
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/my-legal-identity.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/my-legal-identity.html deleted file mode 100644 index 5049580d39..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/my-legal-identity.html +++ /dev/null @@ -1,18 +0,0 @@ - - -MockStorageService.myLegalIdentity - - - - -com.r3corda.core.node.services.testing / MockStorageService / myLegalIdentity
    -
    -

    myLegalIdentity

    - -val myLegalIdentity: Party
    -Overrides StorageService.myLegalIdentity
    -

    Returns the legal identity that this node is configured with. Assumed to be initialised when the node is -first installed.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/validated-transactions.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/validated-transactions.html deleted file mode 100644 index c91ef2bebf..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-storage-service/validated-transactions.html +++ /dev/null @@ -1,19 +0,0 @@ - - -MockStorageService.validatedTransactions - - - - -com.r3corda.core.node.services.testing / MockStorageService / validatedTransactions
    -
    -

    validatedTransactions

    - -val validatedTransactions: TransactionStorage
    -Overrides TxWritableStorageService.validatedTransactions
    -

    A map of hash->tx where tx has been signature/contract validated and the states are known to be correct. -The signatures arent technically needed after that point, but we keep them around so that we can relay -the transaction data to other nodes that need it.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/-init-.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/-init-.html deleted file mode 100644 index 55b72f9e69..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -MockTransactionStorage.<init> - - - - -com.r3corda.core.node.services.testing / MockTransactionStorage / <init>
    -
    -

    <init>

    -MockTransactionStorage()
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/add-transaction.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/add-transaction.html deleted file mode 100644 index 989a045834..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/add-transaction.html +++ /dev/null @@ -1,18 +0,0 @@ - - -MockTransactionStorage.addTransaction - - - - -com.r3corda.core.node.services.testing / MockTransactionStorage / addTransaction
    -
    -

    addTransaction

    - -open fun addTransaction(transaction: SignedTransaction): Unit
    -Overrides TransactionStorage.addTransaction
    -

    Add a new transaction to the store. If the store already has a transaction with the same id it will be -overwritten.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/get-transaction.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/get-transaction.html deleted file mode 100644 index e50af76719..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/get-transaction.html +++ /dev/null @@ -1,17 +0,0 @@ - - -MockTransactionStorage.getTransaction - - - - -com.r3corda.core.node.services.testing / MockTransactionStorage / getTransaction
    -
    -

    getTransaction

    - -open fun getTransaction(id: SecureHash): SignedTransaction?
    -Overrides ReadOnlyTransactionStorage.getTransaction
    -

    Return the transaction with the given id, or null if no such transaction exists.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/index.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/index.html deleted file mode 100644 index fb5c6fbf7c..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/index.html +++ /dev/null @@ -1,58 +0,0 @@ - - -MockTransactionStorage - - - - -com.r3corda.core.node.services.testing / MockTransactionStorage
    -
    -

    MockTransactionStorage

    -open class MockTransactionStorage : TransactionStorage
    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -MockTransactionStorage()
    -

    Properties

    - - - - - - - -
    -updates -open val updates: <ERROR CLASS><SignedTransaction>

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the Wallet will already incorporate -the update.

    -
    -

    Functions

    - - - - - - - - - - - -
    -addTransaction -open fun addTransaction(transaction: SignedTransaction): Unit

    Add a new transaction to the store. If the store already has a transaction with the same id it will be -overwritten.

    -
    -getTransaction -open fun getTransaction(id: SecureHash): SignedTransaction?

    Return the transaction with the given id, or null if no such transaction exists.

    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/updates.html b/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/updates.html deleted file mode 100644 index 82581e2e49..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-transaction-storage/updates.html +++ /dev/null @@ -1,22 +0,0 @@ - - -MockTransactionStorage.updates - - - - -com.r3corda.core.node.services.testing / MockTransactionStorage / updates
    -
    -

    updates

    - -open val updates: <ERROR CLASS><SignedTransaction>
    -Overrides ReadOnlyTransactionStorage.updates
    -

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the Wallet will already incorporate -the update.

    -

    Getter
    -

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the Wallet will already incorporate -the update.

    -

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/index.html b/docs/build/html/api/com.r3corda.core.node.services.testing/index.html deleted file mode 100644 index 1d542a1fb1..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/index.html +++ /dev/null @@ -1,66 +0,0 @@ - - -com.r3corda.core.node.services.testing - - - - -com.r3corda.core.node.services.testing
    -
    -

    Package com.r3corda.core.node.services.testing

    -

    Types

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -MockAttachmentStorage -class MockAttachmentStorage : AttachmentStorage
    -MockIdentityService -class MockIdentityService : IdentityService, SingletonSerializeAsToken
    -MockKeyManagementService -class MockKeyManagementService : SingletonSerializeAsToken, KeyManagementService
    -MockServices -open class MockServices : ServiceHub

    A singleton utility that only provides a mock identity, key and storage service. However, this is sufficient for -building chains of transactions and verifying them. It isnt sufficient for testing protocols however.

    -
    -MockStorageService -class MockStorageService : SingletonSerializeAsToken, TxWritableStorageService
    -MockTransactionStorage -open class MockTransactionStorage : TransactionStorage
    -

    Functions

    - - - - - - - -
    -makeTestDataSourceProperties -fun makeTestDataSourceProperties(nodeName: String = SecureHash.randomSHA256().toString()): Properties

    Make properties appropriate for creating a DataSource for unit tests.

    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/make-test-data-source-properties.html b/docs/build/html/api/com.r3corda.core.node.services.testing/make-test-data-source-properties.html deleted file mode 100644 index 4f9f13d9a5..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/make-test-data-source-properties.html +++ /dev/null @@ -1,19 +0,0 @@ - - -makeTestDataSourceProperties - - - - -com.r3corda.core.node.services.testing / makeTestDataSourceProperties
    -
    -

    makeTestDataSourceProperties

    - -fun makeTestDataSourceProperties(nodeName: String = SecureHash.randomSHA256().toString()): Properties
    -

    Make properties appropriate for creating a DataSource for unit tests.

    -

    Parameters

    - -nodeName - Reflects the "instance" of the in-memory database. Defaults to a random string.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services/-attachment-storage/index.html b/docs/build/html/api/com.r3corda.core.node.services/-attachment-storage/index.html index 008415df37..cc66c743f4 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-attachment-storage/index.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-attachment-storage/index.html @@ -37,12 +37,6 @@ a stream for the data, which will be a zip/jar file.

    -MockAttachmentStorage - -class MockAttachmentStorage : AttachmentStorage - - - NodeAttachmentService class NodeAttachmentService : AttachmentStorage, AcceptsFileUpload

    Stores attachments in the specified local directory, which must exist. Doesnt allow new attachments to be uploaded.

    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-identity-service/index.html b/docs/build/html/api/com.r3corda.core.node.services/-identity-service/index.html index 60696486bc..24ca179a90 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-identity-service/index.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-identity-service/index.html @@ -46,12 +46,6 @@ service would provide.

    class InMemoryIdentityService : SingletonSerializeAsToken, IdentityService

    Simple identity service which caches parties and provides functionality for efficient lookup.

    - - -MockIdentityService - -class MockIdentityService : IdentityService, SingletonSerializeAsToken - diff --git a/docs/build/html/api/com.r3corda.core.node.services/-key-management-service/index.html b/docs/build/html/api/com.r3corda.core.node.services/-key-management-service/index.html index 0e77f0e70a..b019a7b624 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-key-management-service/index.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-key-management-service/index.html @@ -64,9 +64,10 @@ interface if/when one is developed.

    -MockKeyManagementService +PersistentKeyManagementService -class MockKeyManagementService : SingletonSerializeAsToken, KeyManagementService +class PersistentKeyManagementService : SingletonSerializeAsToken, KeyManagementService

    A persistent re-implementation of E2ETestKeyManagementService to support node re-start.

    + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/add-map-service.html b/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/add-map-service.html index 342f629cc0..0631b9bbc7 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/add-map-service.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/add-map-service.html @@ -7,16 +7,16 @@ com.r3corda.core.node.services / NetworkMapCache / addMapService

    addMapService

    - -abstract fun addMapService(net: MessagingService, service: NodeInfo, subscribe: Boolean, ifChangedSinceVer: Int? = null): <ERROR CLASS><Unit>
    + +abstract fun addMapService(net: MessagingService, networkMapAddress: SingleMessageRecipient, subscribe: Boolean, ifChangedSinceVer: Int? = null): <ERROR CLASS><Unit>

    Add a network map service; fetches a copy of the latest map from the service and subscribes to any further updates.

    Parameters

    net - the network messaging service.

    - -service - the network map service to fetch current state from.
    + +networkMapAddress - the network map service to fetch current state from.

    subscribe - if the cache should subscribe to updates.
    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/index.html b/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/index.html index 92f89da57e..e0f7689c64 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/index.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/index.html @@ -43,6 +43,13 @@ with a specified network map service, which it fetches data from and then subscr +mapServiceRegistered + +abstract val mapServiceRegistered: <ERROR CLASS><Unit>

    Future to track completion of the NetworkMapService registration.

    + + + + networkMapNodes abstract val networkMapNodes: List<NodeInfo>

    A list of nodes that advertise a network map service

    @@ -64,13 +71,6 @@ with a specified network map service, which it fetches data from and then subscr -ratesOracleNodes - -abstract val ratesOracleNodes: List<NodeInfo>

    A list of nodes that advertise a rates oracle service

    - - - - regulators abstract val regulators: List<NodeInfo>

    A list of nodes that advertise a regulatory service. Identifying the correct regulator for a trade is outside @@ -87,7 +87,7 @@ elsewhere.

    addMapService -abstract fun addMapService(net: MessagingService, service: NodeInfo, subscribe: Boolean, ifChangedSinceVer: Int? = null): <ERROR CLASS><Unit>

    Add a network map service; fetches a copy of the latest map from the service and subscribes to any further +abstract fun addMapService(net: MessagingService, networkMapAddress: SingleMessageRecipient, subscribe: Boolean, ifChangedSinceVer: Int? = null): <ERROR CLASS><Unit>

    Add a network map service; fetches a copy of the latest map from the service and subscribes to any further updates.

    @@ -143,6 +143,13 @@ or the appropriate oracle for a contract.

    abstract fun removeNode(node: NodeInfo): Unit

    Removes a node from the local cache.

    + + +runWithoutMapService + +abstract fun runWithoutMapService(): Unit

    For testing where the network map cache is manipulated marks the service as immediately ready.

    + +

    Companion Object Properties

    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/map-service-registered.html b/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/map-service-registered.html new file mode 100644 index 0000000000..08b434bb80 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/map-service-registered.html @@ -0,0 +1,16 @@ + + +NetworkMapCache.mapServiceRegistered - + + + +com.r3corda.core.node.services / NetworkMapCache / mapServiceRegistered
    +
    +

    mapServiceRegistered

    + +abstract val mapServiceRegistered: <ERROR CLASS><Unit>
    +

    Future to track completion of the NetworkMapService registration.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/rates-oracle-nodes.html b/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/rates-oracle-nodes.html deleted file mode 100644 index c6889abbf1..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/rates-oracle-nodes.html +++ /dev/null @@ -1,16 +0,0 @@ - - -NetworkMapCache.ratesOracleNodes - - - - -com.r3corda.core.node.services / NetworkMapCache / ratesOracleNodes
    -
    -

    ratesOracleNodes

    - -abstract val ratesOracleNodes: List<NodeInfo>
    -

    A list of nodes that advertise a rates oracle service

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/run-without-map-service.html b/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/run-without-map-service.html new file mode 100644 index 0000000000..ebe0ef120f --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.node.services/-network-map-cache/run-without-map-service.html @@ -0,0 +1,16 @@ + + +NetworkMapCache.runWithoutMapService - + + + +com.r3corda.core.node.services / NetworkMapCache / runWithoutMapService
    +
    +

    runWithoutMapService

    + +abstract fun runWithoutMapService(): Unit
    +

    For testing where the network map cache is manipulated marks the service as immediately ready.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-read-only-transaction-storage/get-transaction.html b/docs/build/html/api/com.r3corda.core.node.services/-read-only-transaction-storage/get-transaction.html index d9aaeed402..5d2a94b654 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-read-only-transaction-storage/get-transaction.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-read-only-transaction-storage/get-transaction.html @@ -8,7 +8,7 @@

    getTransaction

    -abstract fun getTransaction(id: SecureHash): SignedTransaction?
    +abstract fun getTransaction(id: SecureHash): SignedTransaction?

    Return the transaction with the given id, or null if no such transaction exists.



    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-read-only-transaction-storage/index.html b/docs/build/html/api/com.r3corda.core.node.services/-read-only-transaction-storage/index.html index dcceceb1aa..ece721c71d 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-read-only-transaction-storage/index.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-read-only-transaction-storage/index.html @@ -18,8 +18,8 @@ updates -abstract val updates: <ERROR CLASS><SignedTransaction>

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the Wallet will already incorporate -the update.

    +abstract val updates: <ERROR CLASS><SignedTransaction>

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the vault will already +incorporate the update.

    @@ -31,7 +31,7 @@ the update.

    getTransaction -abstract fun getTransaction(id: SecureHash): SignedTransaction?

    Return the transaction with the given id, or null if no such transaction exists.

    +abstract fun getTransaction(id: SecureHash): SignedTransaction?

    Return the transaction with the given id, or null if no such transaction exists.

    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-read-only-transaction-storage/updates.html b/docs/build/html/api/com.r3corda.core.node.services/-read-only-transaction-storage/updates.html index 9ba5c0d1fe..2bd492e799 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-read-only-transaction-storage/updates.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-read-only-transaction-storage/updates.html @@ -8,9 +8,9 @@

    updates

    -abstract val updates: <ERROR CLASS><SignedTransaction>
    -

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the Wallet will already incorporate -the update.

    +abstract val updates: <ERROR CLASS><SignedTransaction>
    +

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the vault will already +incorporate the update.



    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-scheduler-service/index.html b/docs/build/html/api/com.r3corda.core.node.services/-scheduler-service/index.html index 45874f344b..d92f9238b4 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-scheduler-service/index.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-scheduler-service/index.html @@ -11,7 +11,7 @@

    Provides access to schedule activity at some point in time. This interface might well be expanded to increase the feature set in the future.

    If the point in time is in the past, the expectation is that the activity will happen shortly after it is scheduled.

    -

    The main consumer initially is an observer of the wallet to schedule activities based on transactions as they are +

    The main consumer initially is an observer of the vault to schedule activities based on transactions as they are recorded.



    @@ -44,7 +44,7 @@ recorded.

    NodeSchedulerService class NodeSchedulerService : SchedulerService, SingletonSerializeAsToken

    A first pass of a simple SchedulerService that works with MutableClocks for testing, demonstrations and simulations -that also encompasses the Wallet observer for processing transactions.

    +that also encompasses the Vault observer for processing transactions.

    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-service-type/index.html b/docs/build/html/api/com.r3corda.core.node.services/-service-type/index.html index c0b0381d24..d5e8c41a31 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-service-type/index.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-service-type/index.html @@ -72,13 +72,13 @@ dont need a declared service type.

    -Type +OracleType -object Type : ServiceType +object OracleType : ServiceType -Type +Type object Type : ServiceType @@ -106,6 +106,12 @@ dont need a declared service type.

    object Type : ServiceType + + +Type + +object Type : ServiceType + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-t-o-p-i-c_-d-e-f-a-u-l-t_-p-o-s-t-f-i-x.html b/docs/build/html/api/com.r3corda.core.node.services/-t-o-p-i-c_-d-e-f-a-u-l-t_-p-o-s-t-f-i-x.html deleted file mode 100644 index f92ed8b8c1..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services/-t-o-p-i-c_-d-e-f-a-u-l-t_-p-o-s-t-f-i-x.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TOPIC_DEFAULT_POSTFIX - - - - -com.r3corda.core.node.services / TOPIC_DEFAULT_POSTFIX
    -
    -

    TOPIC_DEFAULT_POSTFIX

    - -val TOPIC_DEFAULT_POSTFIX: String
    -

    Postfix for base topics when sending a request to a service.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services/-transaction-storage/add-transaction.html b/docs/build/html/api/com.r3corda.core.node.services/-transaction-storage/add-transaction.html index 2518ccec46..3eab7a0b09 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-transaction-storage/add-transaction.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-transaction-storage/add-transaction.html @@ -7,8 +7,8 @@ com.r3corda.core.node.services / TransactionStorage / addTransaction

    addTransaction

    - -abstract fun addTransaction(transaction: SignedTransaction): Unit
    + +abstract fun addTransaction(transaction: SignedTransaction): Unit

    Add a new transaction to the store. If the store already has a transaction with the same id it will be overwritten.


    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-transaction-storage/index.html b/docs/build/html/api/com.r3corda.core.node.services/-transaction-storage/index.html index 8f767687aa..a4eb2e6fcd 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-transaction-storage/index.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-transaction-storage/index.html @@ -18,8 +18,8 @@ updates -abstract val updates: <ERROR CLASS><SignedTransaction>

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the Wallet will already incorporate -the update.

    +abstract val updates: <ERROR CLASS><SignedTransaction>

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the vault will already +incorporate the update.

    @@ -31,7 +31,7 @@ the update.

    addTransaction -abstract fun addTransaction(transaction: SignedTransaction): Unit

    Add a new transaction to the store. If the store already has a transaction with the same id it will be +abstract fun addTransaction(transaction: SignedTransaction): Unit

    Add a new transaction to the store. If the store already has a transaction with the same id it will be overwritten.

    @@ -44,7 +44,7 @@ overwritten.

    getTransaction -abstract fun getTransaction(id: SecureHash): SignedTransaction?

    Return the transaction with the given id, or null if no such transaction exists.

    +abstract fun getTransaction(id: SecureHash): SignedTransaction?

    Return the transaction with the given id, or null if no such transaction exists.

    @@ -54,12 +54,6 @@ overwritten.

    -MockTransactionStorage - -open class MockTransactionStorage : TransactionStorage - - - PerFileTransactionStorage class PerFileTransactionStorage : TransactionStorage

    File-based transaction storage, storing transactions per file.

    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-tx-writable-storage-service/index.html b/docs/build/html/api/com.r3corda.core.node.services/-tx-writable-storage-service/index.html index afdc8ad5bd..1155efbb28 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-tx-writable-storage-service/index.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-tx-writable-storage-service/index.html @@ -56,12 +56,6 @@ first installed.

    -MockStorageService - -class MockStorageService : SingletonSerializeAsToken, TxWritableStorageService - - - StorageServiceImpl open class StorageServiceImpl : SingletonSerializeAsToken, TxWritableStorageService diff --git a/docs/build/html/api/com.r3corda.core.node.services/-uniqueness-provider/index.html b/docs/build/html/api/com.r3corda.core.node.services/-uniqueness-provider/index.html index 37f5bd939f..ec05cfbc00 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-uniqueness-provider/index.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-uniqueness-provider/index.html @@ -54,6 +54,13 @@ the caller identity requesting the commit.

    class InMemoryUniquenessProvider : UniquenessProvider

    A dummy Uniqueness provider that stores the whole history of consumed states in memory

    + + +PersistentUniquenessProvider + +class PersistentUniquenessProvider : UniquenessProvider, SingletonSerializeAsToken

    A RDBMS backed Uniqueness provider

    + + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-vault-service/current-vault.html b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/current-vault.html new file mode 100644 index 0000000000..1f055a8106 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/current-vault.html @@ -0,0 +1,17 @@ + + +VaultService.currentVault - + + + +com.r3corda.core.node.services / VaultService / currentVault
    +
    +

    currentVault

    + +abstract val currentVault: Vault
    +

    Returns a read-only snapshot of the vault at the time the call is made. Note that if you consume states or +keys in this vault, you must inform the vault service so it can update its internal state.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-vault-service/index.html b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/index.html new file mode 100644 index 0000000000..60a176f12d --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/index.html @@ -0,0 +1,122 @@ + + +VaultService - + + + +com.r3corda.core.node.services / VaultService
    +
    +

    VaultService

    +interface VaultService
    +

    A VaultService is responsible for securely and safely persisting the current state of a vault to storage. The +vault service vends immutable snapshots of the current vault for working with: if you build a transaction based +on a vault that isnt current, be aware that it may end up being invalid if the states that were used have been +consumed by someone else first

    +

    Note that transactions weve seen are held by the storage service, not the vault.

    +
    +
    +
    +
    +

    Properties

    + + + + + + + + + + + + + + + +
    +currentVault +abstract val currentVault: Vault

    Returns a read-only snapshot of the vault at the time the call is made. Note that if you consume states or +keys in this vault, you must inform the vault service so it can update its internal state.

    +
    +linearHeads +abstract val linearHeads: Map<UniqueIdentifier, StateAndRef<LinearState>>

    Returns a snapshot of the heads of LinearStates.

    +
    +updates +abstract val updates: <ERROR CLASS><Update>

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the vault will already +incorporate the update.

    +
    +

    Functions

    + + + + + + + + + + + + + + + + + + + + + + + +
    +linearHeadsOfType_ +open fun <T : LinearState> linearHeadsOfType_(stateType: Class<T>): Map<UniqueIdentifier, StateAndRef<T>>

    Returns the linearHeads only when the type of the state would be considered an instanceof the given type.

    +
    +notify +open fun notify(tx: WireTransaction): Vault

    Same as notifyAll but with a single transaction.

    +
    +notifyAll +abstract fun notifyAll(txns: Iterable<WireTransaction>): Vault

    Possibly update the vault by marking as spent states that these transactions consume, and adding any relevant +new states that they create. You should only insert transactions that have been successfully verified here

    +
    +statesForRefs +open fun statesForRefs(refs: List<StateRef>): Map<StateRef, TransactionState<*>?>
    +whenConsumed +open fun whenConsumed(ref: StateRef): <ERROR CLASS><Update>

    Provide a Future for when a StateRef is consumed, which can be very useful in building tests.

    +
    +

    Extension Functions

    + + + + + + + +
    +linearHeadsOfType +fun <T : LinearState> VaultService.linearHeadsOfType(): <ERROR CLASS>
    +

    Inheritors

    + + + + + + + + + + + +
    +InMemoryVaultService +open class InMemoryVaultService : SingletonSerializeAsToken, VaultService

    This class implements a simple, in memory vault that tracks states that are owned by us, and also has a convenience +method to auto-generate some self-issued cash states that can be used for test trading. A real vault would persist +states relevant to us into a database and once such a vault is implemented, this scaffolding can be removed.

    +
    +NodeVaultService +class NodeVaultService : SingletonSerializeAsToken, VaultService

    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.

    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-vault-service/linear-heads-of-type_.html b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/linear-heads-of-type_.html new file mode 100644 index 0000000000..3c3b2864b2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/linear-heads-of-type_.html @@ -0,0 +1,16 @@ + + +VaultService.linearHeadsOfType_ - + + + +com.r3corda.core.node.services / VaultService / linearHeadsOfType_
    +
    +

    linearHeadsOfType_

    + +open fun <T : LinearState> linearHeadsOfType_(stateType: Class<T>): Map<UniqueIdentifier, StateAndRef<T>>
    +

    Returns the linearHeads only when the type of the state would be considered an instanceof the given type.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/linear-heads.html b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/linear-heads.html similarity index 82% rename from docs/build/html/api/com.r3corda.core.node.services/-wallet-service/linear-heads.html rename to docs/build/html/api/com.r3corda.core.node.services/-vault-service/linear-heads.html index b410dcbc49..3327c5bd39 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/linear-heads.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/linear-heads.html @@ -1,13 +1,13 @@ -WalletService.linearHeads - +VaultService.linearHeads - -com.r3corda.core.node.services / WalletService / linearHeads
    +com.r3corda.core.node.services / VaultService / linearHeads

    linearHeads

    - + abstract val linearHeads: Map<UniqueIdentifier, StateAndRef<LinearState>>

    Returns a snapshot of the heads of LinearStates.


    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-vault-service/notify-all.html b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/notify-all.html new file mode 100644 index 0000000000..32640903b1 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/notify-all.html @@ -0,0 +1,21 @@ + + +VaultService.notifyAll - + + + +com.r3corda.core.node.services / VaultService / notifyAll
    +
    +

    notifyAll

    + +abstract fun notifyAll(txns: Iterable<WireTransaction>): Vault
    +

    Possibly update the vault by marking as spent states that these transactions consume, and adding any relevant +new states that they create. You should only insert transactions that have been successfully verified here

    +

    Returns the new vault that resulted from applying the transactions (note: it may quickly become out of date).

    +

    TODO: Consider if theres a good way to enforce the must-be-verified requirement in the type system.

    +
    +
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-vault-service/notify.html b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/notify.html new file mode 100644 index 0000000000..e191fe142f --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/notify.html @@ -0,0 +1,16 @@ + + +VaultService.notify - + + + +com.r3corda.core.node.services / VaultService / notify
    +
    +

    notify

    + +open fun notify(tx: WireTransaction): Vault
    +

    Same as notifyAll but with a single transaction.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-vault-service/states-for-refs.html b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/states-for-refs.html new file mode 100644 index 0000000000..3da195e6b3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/states-for-refs.html @@ -0,0 +1,15 @@ + + +VaultService.statesForRefs - + + + +com.r3corda.core.node.services / VaultService / statesForRefs
    +
    +

    statesForRefs

    + +open fun statesForRefs(refs: List<StateRef>): Map<StateRef, TransactionState<*>?>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/updates.html b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/updates.html similarity index 50% rename from docs/build/html/api/com.r3corda.core.node.services/-wallet-service/updates.html rename to docs/build/html/api/com.r3corda.core.node.services/-vault-service/updates.html index 7dfca2c43c..e712cb3528 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/updates.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/updates.html @@ -1,16 +1,16 @@ -WalletService.updates - +VaultService.updates - -com.r3corda.core.node.services / WalletService / updates
    +com.r3corda.core.node.services / VaultService / updates

    updates

    - -abstract val updates: <ERROR CLASS><Update>
    -

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the Wallet will already incorporate -the update.

    + +abstract val updates: <ERROR CLASS><Update>
    +

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the vault will already +incorporate the update.



    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-vault-service/when-consumed.html b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/when-consumed.html new file mode 100644 index 0000000000..ea033eaea3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault-service/when-consumed.html @@ -0,0 +1,16 @@ + + +VaultService.whenConsumed - + + + +com.r3corda.core.node.services / VaultService / whenConsumed
    +
    +

    whenConsumed

    + +open fun whenConsumed(ref: StateRef): <ERROR CLASS><Update>
    +

    Provide a Future for when a StateRef is consumed, which can be very useful in building tests.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-vault/-init-.html b/docs/build/html/api/com.r3corda.core.node.services/-vault/-init-.html new file mode 100644 index 0000000000..9728efc905 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault/-init-.html @@ -0,0 +1,24 @@ + + +Vault.<init> - + + + +com.r3corda.core.node.services / Vault / <init>
    +
    +

    <init>

    +Vault(states: Iterable<StateAndRef<ContractState>>)
    +

    A vault (name may be temporary) wraps a set of states that are useful for us to keep track of, for instance, +because we own them. This class represents an immutable, stable state of a vault: it is guaranteed not to +change out from underneath you, even though the canonical currently-best-known vault may change as we learn +about new transactions from our peers and generate new transactions that consume states ourselves.

    +

    This abstract class has no references to Cash contracts.

    +

    states Holds the states that are active and relevant. +Active means they havent been consumed yet (or we dont know about it). +Relevant means they contain at least one of our pubkeys.

    +
    +
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet/-no-update.html b/docs/build/html/api/com.r3corda.core.node.services/-vault/-no-update.html similarity index 67% rename from docs/build/html/api/com.r3corda.core.node.services/-wallet/-no-update.html rename to docs/build/html/api/com.r3corda.core.node.services/-vault/-no-update.html index ea9d97aa02..3b6b50ee7c 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet/-no-update.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault/-no-update.html @@ -1,13 +1,13 @@ -Wallet.NoUpdate - +Vault.NoUpdate - -com.r3corda.core.node.services / Wallet / NoUpdate
    +com.r3corda.core.node.services / Vault / NoUpdate

    NoUpdate

    - + val NoUpdate: Update


    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-vault/-update/-init-.html b/docs/build/html/api/com.r3corda.core.node.services/-vault/-update/-init-.html new file mode 100644 index 0000000000..d2eeb23d15 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault/-update/-init-.html @@ -0,0 +1,21 @@ + + +Vault.Update.<init> - + + + +com.r3corda.core.node.services / Vault / Update / <init>
    +
    +

    <init>

    +Update(consumed: Set<StateRef>, produced: Set<StateAndRef<ContractState>>)
    +

    Represents an update observed by the vault that will be notified to observers. Include the StateRefs of +transaction outputs that were consumed (inputs) and the ContractStates produced (outputs) to/by the transaction +or transactions observed and the vault.

    +

    If the vault observes multiple transactions simultaneously, where some transactions consume the outputs of some of the +other transactions observed, then the changes are observed "net" of those.

    +
    +
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/consumed.html b/docs/build/html/api/com.r3corda.core.node.services/-vault/-update/consumed.html similarity index 68% rename from docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/consumed.html rename to docs/build/html/api/com.r3corda.core.node.services/-vault/-update/consumed.html index 346f045694..fec58fe15f 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/consumed.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault/-update/consumed.html @@ -1,13 +1,13 @@ -Wallet.Update.consumed - +Vault.Update.consumed - -com.r3corda.core.node.services / Wallet / Update / consumed
    +com.r3corda.core.node.services / Vault / Update / consumed

    consumed

    - + val consumed: Set<StateRef>


    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-vault/-update/index.html b/docs/build/html/api/com.r3corda.core.node.services/-vault/-update/index.html new file mode 100644 index 0000000000..afc465bc6a --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault/-update/index.html @@ -0,0 +1,71 @@ + + +Vault.Update - + + + +com.r3corda.core.node.services / Vault / Update
    +
    +

    Update

    +data class Update
    +

    Represents an update observed by the vault that will be notified to observers. Include the StateRefs of +transaction outputs that were consumed (inputs) and the ContractStates produced (outputs) to/by the transaction +or transactions observed and the vault.

    +

    If the vault observes multiple transactions simultaneously, where some transactions consume the outputs of some of the +other transactions observed, then the changes are observed "net" of those.

    +
    +
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +Update(consumed: Set<StateRef>, produced: Set<StateAndRef<ContractState>>)

    Represents an update observed by the vault that will be notified to observers. Include the StateRefs of +transaction outputs that were consumed (inputs) and the ContractStates produced (outputs) to/by the transaction +or transactions observed and the vault.

    +
    +

    Properties

    + + + + + + + + + + + +
    +consumed +val consumed: Set<StateRef>
    +produced +val produced: Set<StateAndRef<ContractState>>
    +

    Functions

    + + + + + + + + + + + +
    +plus +operator fun plus(rhs: Update): Update

    Combine two updates into a single update with the combined inputs and outputs of the two updates but net +any outputs of the left-hand-side (this) that are consumed by the inputs of the right-hand-side (rhs).

    +
    +toString +fun toString(): String
    + + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/plus.html b/docs/build/html/api/com.r3corda.core.node.services/-vault/-update/plus.html similarity index 55% rename from docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/plus.html rename to docs/build/html/api/com.r3corda.core.node.services/-vault/-update/plus.html index 969c8f95f8..836037a6ce 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/plus.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault/-update/plus.html @@ -1,14 +1,14 @@ -Wallet.Update.plus - +Vault.Update.plus - -com.r3corda.core.node.services / Wallet / Update / plus
    +com.r3corda.core.node.services / Vault / Update / plus

    plus

    - -operator fun plus(rhs: Update): Update
    + +operator fun plus(rhs: Update): Update

    Combine two updates into a single update with the combined inputs and outputs of the two updates but net any outputs of the left-hand-side (this) that are consumed by the inputs of the right-hand-side (rhs).

    i.e. the net effect in terms of state live-ness of receiving the combined update is the same as receiving this followed by rhs.

    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/produced.html b/docs/build/html/api/com.r3corda.core.node.services/-vault/-update/produced.html similarity index 74% rename from docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/produced.html rename to docs/build/html/api/com.r3corda.core.node.services/-vault/-update/produced.html index 27a799f4f7..4909dce981 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/produced.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault/-update/produced.html @@ -1,13 +1,13 @@ -Wallet.Update.produced - +Vault.Update.produced - -com.r3corda.core.node.services / Wallet / Update / produced
    +com.r3corda.core.node.services / Vault / Update / produced

    produced

    - + val produced: Set<StateAndRef<ContractState>>


    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-vault/-update/to-string.html b/docs/build/html/api/com.r3corda.core.node.services/-vault/-update/to-string.html new file mode 100644 index 0000000000..83595d71e7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault/-update/to-string.html @@ -0,0 +1,15 @@ + + +Vault.Update.toString - + + + +com.r3corda.core.node.services / Vault / Update / toString
    +
    +

    toString

    + +fun toString(): String
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet/index.html b/docs/build/html/api/com.r3corda.core.node.services/-vault/index.html similarity index 50% rename from docs/build/html/api/com.r3corda.core.node.services/-wallet/index.html rename to docs/build/html/api/com.r3corda.core.node.services/-vault/index.html index 2d5a09232c..c2203b273b 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet/index.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault/index.html @@ -1,19 +1,19 @@ -Wallet - +Vault - -com.r3corda.core.node.services / Wallet
    +com.r3corda.core.node.services / Vault

    -

    Wallet

    -class Wallet
    -

    A wallet (name may be temporary) wraps a set of states that are useful for us to keep track of, for instance, -because we own them. This class represents an immutable, stable state of a wallet: it is guaranteed not to -change out from underneath you, even though the canonical currently-best-known wallet may change as we learn +

    Vault

    +class Vault
    +

    A vault (name may be temporary) wraps a set of states that are useful for us to keep track of, for instance, +because we own them. This class represents an immutable, stable state of a vault: it is guaranteed not to +change out from underneath you, even though the canonical currently-best-known vault may change as we learn about new transactions from our peers and generate new transactions that consume states ourselves.

    This abstract class has no references to Cash contracts.

    -

    states Holds the list of states that are active and relevant. +

    states Holds the states that are active and relevant. Active means they havent been consumed yet (or we dont know about it). Relevant means they contain at least one of our pubkeys.


    @@ -27,9 +27,9 @@ Relevant means they contain at least one of our pubkeys.

    Update -data class Update

    Represents an update observed by the Wallet that will be notified to observers. Include the StateRefs of +data class Update

    Represents an update observed by the vault that will be notified to observers. Include the StateRefs of transaction outputs that were consumed (inputs) and the ContractStates produced (outputs) to/by the transaction -or transactions observed and the Wallet.

    +or transactions observed and the vault.

    @@ -41,9 +41,9 @@ or transactions observed and the Wallet.

    <init> -Wallet(states: Iterable<StateAndRef<ContractState>>)

    A wallet (name may be temporary) wraps a set of states that are useful for us to keep track of, for instance, -because we own them. This class represents an immutable, stable state of a wallet: it is guaranteed not to -change out from underneath you, even though the canonical currently-best-known wallet may change as we learn +Vault(states: Iterable<StateAndRef<ContractState>>)

    A vault (name may be temporary) wraps a set of states that are useful for us to keep track of, for instance, +because we own them. This class represents an immutable, stable state of a vault: it is guaranteed not to +change out from underneath you, even though the canonical currently-best-known vault may change as we learn about new transactions from our peers and generate new transactions that consume states ourselves.

    @@ -67,7 +67,7 @@ about new transactions from our peers and generate new transactions that consume statesOfType -fun <T : OwnableState> statesOfType(): List<StateAndRef<T>> +fun <T : ContractState> statesOfType(): List<StateAndRef<T>> @@ -89,7 +89,7 @@ about new transactions from our peers and generate new transactions that consume cashBalances -val Wallet.cashBalances: Map<Currency, Amount<Currency>>

    Returns a map of how much cash we have in each currency, ignoring details like issuer. Note: currencies for +val Vault.cashBalances: Map<Currency, Amount<Currency>>

    Returns a map of how much cash we have in each currency, ignoring details like issuer. Note: currencies for which we have no cash evaluate to null (not present in map), not 0.

    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-vault/states-of-type.html b/docs/build/html/api/com.r3corda.core.node.services/-vault/states-of-type.html new file mode 100644 index 0000000000..042271b31a --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault/states-of-type.html @@ -0,0 +1,15 @@ + + +Vault.statesOfType - + + + +com.r3corda.core.node.services / Vault / statesOfType
    +
    +

    statesOfType

    + +inline fun <reified T : ContractState> statesOfType(): List<StateAndRef<T>>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet/states.html b/docs/build/html/api/com.r3corda.core.node.services/-vault/states.html similarity index 80% rename from docs/build/html/api/com.r3corda.core.node.services/-wallet/states.html rename to docs/build/html/api/com.r3corda.core.node.services/-vault/states.html index 5e2c8a89d5..4979570b7b 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet/states.html +++ b/docs/build/html/api/com.r3corda.core.node.services/-vault/states.html @@ -1,13 +1,13 @@ -Wallet.states - +Vault.states - -com.r3corda.core.node.services / Wallet / states
    +com.r3corda.core.node.services / Vault / states

    states

    - + val states: Iterable<StateAndRef<ContractState>>


    diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/current-wallet.html b/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/current-wallet.html deleted file mode 100644 index d39e086805..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/current-wallet.html +++ /dev/null @@ -1,17 +0,0 @@ - - -WalletService.currentWallet - - - - -com.r3corda.core.node.services / WalletService / currentWallet
    -
    -

    currentWallet

    - -abstract val currentWallet: Wallet
    -

    Returns a read-only snapshot of the wallet at the time the call is made. Note that if you consume states or -keys in this wallet, you must inform the wallet service so it can update its internal state.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/index.html b/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/index.html deleted file mode 100644 index 7a572e7c87..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/index.html +++ /dev/null @@ -1,114 +0,0 @@ - - -WalletService - - - - -com.r3corda.core.node.services / WalletService
    -
    -

    WalletService

    -interface WalletService
    -

    A WalletService is responsible for securely and safely persisting the current state of a wallet to storage. The -wallet service vends immutable snapshots of the current wallet for working with: if you build a transaction based -on a wallet that isnt current, be aware that it may end up being invalid if the states that were used have been -consumed by someone else first

    -

    Note that transactions weve seen are held by the storage service, not the wallet.

    -
    -
    -
    -
    -

    Properties

    - - - - - - - - - - - - - - - -
    -currentWallet -abstract val currentWallet: Wallet

    Returns a read-only snapshot of the wallet at the time the call is made. Note that if you consume states or -keys in this wallet, you must inform the wallet service so it can update its internal state.

    -
    -linearHeads -abstract val linearHeads: Map<UniqueIdentifier, StateAndRef<LinearState>>

    Returns a snapshot of the heads of LinearStates.

    -
    -updates -abstract val updates: <ERROR CLASS><Update>

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the Wallet will already incorporate -the update.

    -
    -

    Functions

    - - - - - - - - - - - - - - - - - - - - - - - -
    -linearHeadsOfType_ -open fun <T : LinearState> linearHeadsOfType_(stateType: Class<T>): Map<UniqueIdentifier, StateAndRef<T>>

    Returns the linearHeads only when the type of the state would be considered an instanceof the given type.

    -
    -notify -open fun notify(tx: WireTransaction): Wallet

    Same as notifyAll but with a single transaction.

    -
    -notifyAll -abstract fun notifyAll(txns: Iterable<WireTransaction>): Wallet

    Possibly update the wallet by marking as spent states that these transactions consume, and adding any relevant -new states that they create. You should only insert transactions that have been successfully verified here

    -
    -statesForRefs -open fun statesForRefs(refs: List<StateRef>): Map<StateRef, TransactionState<*>?>
    -whenConsumed -open fun whenConsumed(ref: StateRef): <ERROR CLASS><Update>

    Provide a Future for when a StateRef is consumed, which can be very useful in building tests.

    -
    -

    Extension Functions

    - - - - - - - -
    -linearHeadsOfType -fun <T : LinearState> WalletService.linearHeadsOfType(): <ERROR CLASS>
    -

    Inheritors

    - - - - - - - -
    -InMemoryWalletService -open class InMemoryWalletService : SingletonSerializeAsToken, WalletService

    This class implements a simple, in memory wallet that tracks states that are owned by us, and also has a convenience -method to auto-generate some self-issued cash states that can be used for test trading. A real wallet would persist -states relevant to us into a database and once such a wallet is implemented, this scaffolding can be removed.

    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/linear-heads-of-type_.html b/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/linear-heads-of-type_.html deleted file mode 100644 index 3cd0d61529..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/linear-heads-of-type_.html +++ /dev/null @@ -1,16 +0,0 @@ - - -WalletService.linearHeadsOfType_ - - - - -com.r3corda.core.node.services / WalletService / linearHeadsOfType_
    -
    -

    linearHeadsOfType_

    - -open fun <T : LinearState> linearHeadsOfType_(stateType: Class<T>): Map<UniqueIdentifier, StateAndRef<T>>
    -

    Returns the linearHeads only when the type of the state would be considered an instanceof the given type.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/notify-all.html b/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/notify-all.html deleted file mode 100644 index 415502951c..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/notify-all.html +++ /dev/null @@ -1,21 +0,0 @@ - - -WalletService.notifyAll - - - - -com.r3corda.core.node.services / WalletService / notifyAll
    -
    -

    notifyAll

    - -abstract fun notifyAll(txns: Iterable<WireTransaction>): Wallet
    -

    Possibly update the wallet by marking as spent states that these transactions consume, and adding any relevant -new states that they create. You should only insert transactions that have been successfully verified here

    -

    Returns the new wallet that resulted from applying the transactions (note: it may quickly become out of date).

    -

    TODO: Consider if theres a good way to enforce the must-be-verified requirement in the type system.

    -
    -
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/notify.html b/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/notify.html deleted file mode 100644 index 58a4045e7f..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/notify.html +++ /dev/null @@ -1,16 +0,0 @@ - - -WalletService.notify - - - - -com.r3corda.core.node.services / WalletService / notify
    -
    -

    notify

    - -open fun notify(tx: WireTransaction): Wallet
    -

    Same as notifyAll but with a single transaction.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/states-for-refs.html b/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/states-for-refs.html deleted file mode 100644 index 455112fee1..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/states-for-refs.html +++ /dev/null @@ -1,15 +0,0 @@ - - -WalletService.statesForRefs - - - - -com.r3corda.core.node.services / WalletService / statesForRefs
    -
    -

    statesForRefs

    - -open fun statesForRefs(refs: List<StateRef>): Map<StateRef, TransactionState<*>?>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/when-consumed.html b/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/when-consumed.html deleted file mode 100644 index 60012714d5..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet-service/when-consumed.html +++ /dev/null @@ -1,16 +0,0 @@ - - -WalletService.whenConsumed - - - - -com.r3corda.core.node.services / WalletService / whenConsumed
    -
    -

    whenConsumed

    - -open fun whenConsumed(ref: StateRef): <ERROR CLASS><Update>
    -

    Provide a Future for when a StateRef is consumed, which can be very useful in building tests.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet/-init-.html b/docs/build/html/api/com.r3corda.core.node.services/-wallet/-init-.html deleted file mode 100644 index 12175ca456..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet/-init-.html +++ /dev/null @@ -1,24 +0,0 @@ - - -Wallet.<init> - - - - -com.r3corda.core.node.services / Wallet / <init>
    -
    -

    <init>

    -Wallet(states: Iterable<StateAndRef<ContractState>>)
    -

    A wallet (name may be temporary) wraps a set of states that are useful for us to keep track of, for instance, -because we own them. This class represents an immutable, stable state of a wallet: it is guaranteed not to -change out from underneath you, even though the canonical currently-best-known wallet may change as we learn -about new transactions from our peers and generate new transactions that consume states ourselves.

    -

    This abstract class has no references to Cash contracts.

    -

    states Holds the list of states that are active and relevant. -Active means they havent been consumed yet (or we dont know about it). -Relevant means they contain at least one of our pubkeys.

    -
    -
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/-init-.html b/docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/-init-.html deleted file mode 100644 index 9f59d3a356..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/-init-.html +++ /dev/null @@ -1,21 +0,0 @@ - - -Wallet.Update.<init> - - - - -com.r3corda.core.node.services / Wallet / Update / <init>
    -
    -

    <init>

    -Update(consumed: Set<StateRef>, produced: Set<StateAndRef<ContractState>>)
    -

    Represents an update observed by the Wallet that will be notified to observers. Include the StateRefs of -transaction outputs that were consumed (inputs) and the ContractStates produced (outputs) to/by the transaction -or transactions observed and the Wallet.

    -

    If the Wallet observes multiple transactions simultaneously, where some transactions consume the outputs of some of the -other transactions observed, then the changes are observed "net" of those.

    -
    -
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/index.html b/docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/index.html deleted file mode 100644 index cebe5f0ab1..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet/-update/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - -Wallet.Update - - - - -com.r3corda.core.node.services / Wallet / Update
    -
    -

    Update

    -data class Update
    -

    Represents an update observed by the Wallet that will be notified to observers. Include the StateRefs of -transaction outputs that were consumed (inputs) and the ContractStates produced (outputs) to/by the transaction -or transactions observed and the Wallet.

    -

    If the Wallet observes multiple transactions simultaneously, where some transactions consume the outputs of some of the -other transactions observed, then the changes are observed "net" of those.

    -
    -
    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -Update(consumed: Set<StateRef>, produced: Set<StateAndRef<ContractState>>)

    Represents an update observed by the Wallet that will be notified to observers. Include the StateRefs of -transaction outputs that were consumed (inputs) and the ContractStates produced (outputs) to/by the transaction -or transactions observed and the Wallet.

    -
    -

    Properties

    - - - - - - - - - - - -
    -consumed -val consumed: Set<StateRef>
    -produced -val produced: Set<StateAndRef<ContractState>>
    -

    Functions

    - - - - - - - -
    -plus -operator fun plus(rhs: Update): Update

    Combine two updates into a single update with the combined inputs and outputs of the two updates but net -any outputs of the left-hand-side (this) that are consumed by the inputs of the right-hand-side (rhs).

    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services/-wallet/states-of-type.html b/docs/build/html/api/com.r3corda.core.node.services/-wallet/states-of-type.html deleted file mode 100644 index aa790fdef4..0000000000 --- a/docs/build/html/api/com.r3corda.core.node.services/-wallet/states-of-type.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Wallet.statesOfType - - - - -com.r3corda.core.node.services / Wallet / statesOfType
    -
    -

    statesOfType

    - -inline fun <reified T : OwnableState> statesOfType(): List<StateAndRef<T>>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node.services/index.html b/docs/build/html/api/com.r3corda.core.node.services/index.html index 9a02c0e11b..3113d6277e 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/index.html +++ b/docs/build/html/api/com.r3corda.core.node.services/index.html @@ -108,21 +108,21 @@ if any of the inputs have already been used in another transaction.

    -Wallet +Vault -class Wallet

    A wallet (name may be temporary) wraps a set of states that are useful for us to keep track of, for instance, -because we own them. This class represents an immutable, stable state of a wallet: it is guaranteed not to -change out from underneath you, even though the canonical currently-best-known wallet may change as we learn +class Vault

    A vault (name may be temporary) wraps a set of states that are useful for us to keep track of, for instance, +because we own them. This class represents an immutable, stable state of a vault: it is guaranteed not to +change out from underneath you, even though the canonical currently-best-known vault may change as we learn about new transactions from our peers and generate new transactions that consume states ourselves.

    -WalletService +VaultService -interface WalletService

    A WalletService is responsible for securely and safely persisting the current state of a wallet to storage. The -wallet service vends immutable snapshots of the current wallet for working with: if you build a transaction based -on a wallet that isnt current, be aware that it may end up being invalid if the states that were used have been +interface VaultService

    A VaultService is responsible for securely and safely persisting the current state of a vault to storage. The +vault service vends immutable snapshots of the current vault for working with: if you build a transaction based +on a vault that isnt current, be aware that it may end up being invalid if the states that were used have been consumed by someone else first

    @@ -165,7 +165,7 @@ specific session ID has been established).

    linearHeadsOfType -fun <T : LinearState> WalletService.linearHeadsOfType(): <ERROR CLASS> +fun <T : LinearState> VaultService.linearHeadsOfType(): <ERROR CLASS> diff --git a/docs/build/html/api/com.r3corda.core.node.services/linear-heads-of-type.html b/docs/build/html/api/com.r3corda.core.node.services/linear-heads-of-type.html index cb99bde3ec..a5df971a03 100644 --- a/docs/build/html/api/com.r3corda.core.node.services/linear-heads-of-type.html +++ b/docs/build/html/api/com.r3corda.core.node.services/linear-heads-of-type.html @@ -7,8 +7,8 @@ com.r3corda.core.node.services / linearHeadsOfType

    linearHeadsOfType

    - -inline fun <reified T : LinearState> WalletService.linearHeadsOfType(): <ERROR CLASS>
    + +inline fun <reified T : LinearState> VaultService.linearHeadsOfType(): <ERROR CLASS>


    diff --git a/docs/build/html/api/com.r3corda.core.node/-corda-plugin-registry/index.html b/docs/build/html/api/com.r3corda.core.node/-corda-plugin-registry/index.html index c79b5d571e..8cfe67ae72 100644 --- a/docs/build/html/api/com.r3corda.core.node/-corda-plugin-registry/index.html +++ b/docs/build/html/api/com.r3corda.core.node/-corda-plugin-registry/index.html @@ -86,13 +86,6 @@ Cordapp code can be loaded dynamically.

    -Plugin - -class Plugin : CordaPluginRegistry

    Register the protocol that is used with the Fixing integration tests.

    - - - - Plugin class Plugin : CordaPluginRegistry @@ -105,6 +98,13 @@ Cordapp code can be loaded dynamically.

    +Plugin + +class Plugin : CordaPluginRegistry

    Register the protocol that is used with the Fixing integration tests.

    + + + + Plugin class Plugin : CordaPluginRegistry diff --git a/docs/build/html/api/com.r3corda.core.node/-service-hub/index.html b/docs/build/html/api/com.r3corda.core.node/-service-hub/index.html index 95bdf47307..a49b538cdf 100644 --- a/docs/build/html/api/com.r3corda.core.node/-service-hub/index.html +++ b/docs/build/html/api/com.r3corda.core.node/-service-hub/index.html @@ -64,9 +64,9 @@ state from being serialized in checkpoints.

    -walletService +vaultService -abstract val walletService: WalletService +abstract val vaultService: VaultService @@ -91,10 +91,10 @@ state from being serialized in checkpoints.

    recordTransactions -abstract fun recordTransactions(txs: Iterable<SignedTransaction>): Unit

    Given a list of SignedTransactions, writes them to the local storage for validated transactions and then -sends them to the wallet for further processing.

    -open fun recordTransactions(vararg txs: SignedTransaction): <ERROR CLASS>

    Given some SignedTransactions, writes them to the local storage for validated transactions and then -sends them to the wallet for further processing.

    +abstract fun recordTransactions(txs: Iterable<SignedTransaction>): Unit

    Given a list of SignedTransactions, writes them to the local storage for validated transactions and then +sends them to the vault for further processing.

    +open fun recordTransactions(vararg txs: SignedTransaction): <ERROR CLASS>

    Given some SignedTransactions, writes them to the local storage for validated transactions and then +sends them to the vault for further processing.

    @@ -106,8 +106,8 @@ sends them to the wallet for further processing.

    fillWithSomeTestCash -fun ServiceHub.fillWithSomeTestCash(howMuch: Amount<Currency>, outputNotary: Party = DUMMY_NOTARY, atLeastThisManyStates: Int = 3, atMostThisManyStates: Int = 10, rng: Random = Random(), ref: OpaqueBytes = OpaqueBytes(ByteArray(1, { 1 })), ownedBy: PublicKey? = null): Wallet

    Creates a random set of between (by default) 3 and 10 cash states that add up to the given amount and adds them -to the wallet. This is intended for unit tests. The cash is issued by DUMMY_CASH_ISSUER and owned by the legal +fun ServiceHub.fillWithSomeTestCash(howMuch: Amount<Currency>, outputNotary: Party = DUMMY_NOTARY, atLeastThisManyStates: Int = 3, atMostThisManyStates: Int = 10, rng: Random = Random(), ref: OpaqueBytes = OpaqueBytes(ByteArray(1, { 1 })), ownedBy: PublicKey? = null): Vault

    Creates a random set of between (by default) 3 and 10 cash states that add up to the given amount and adds them +to the vault. This is intended for unit tests. The cash is issued by DUMMY_CASH_ISSUER and owned by the legal identity key from the storage service.

    @@ -118,14 +118,6 @@ identity key from the storage service.

    -MockServices - -open class MockServices : ServiceHub

    A singleton utility that only provides a mock identity, key and storage service. However, this is sufficient for -building chains of transactions and verifying them. It isnt sufficient for testing protocols however.

    - - - - ServiceHubInternal abstract class ServiceHubInternal : ServiceHub diff --git a/docs/build/html/api/com.r3corda.core.node/-service-hub/record-transactions.html b/docs/build/html/api/com.r3corda.core.node/-service-hub/record-transactions.html index f308bfcb1d..475717e713 100644 --- a/docs/build/html/api/com.r3corda.core.node/-service-hub/record-transactions.html +++ b/docs/build/html/api/com.r3corda.core.node/-service-hub/record-transactions.html @@ -7,19 +7,19 @@ com.r3corda.core.node / ServiceHub / recordTransactions

    recordTransactions

    - -abstract fun recordTransactions(txs: Iterable<SignedTransaction>): Unit
    -

    Given a list of SignedTransactions, writes them to the local storage for validated transactions and then -sends them to the wallet for further processing.

    + +abstract fun recordTransactions(txs: Iterable<SignedTransaction>): Unit
    +

    Given a list of SignedTransactions, writes them to the local storage for validated transactions and then +sends them to the vault for further processing.

    Parameters

    txs - The transactions to record.


    - -open fun recordTransactions(vararg txs: SignedTransaction): <ERROR CLASS>
    -

    Given some SignedTransactions, writes them to the local storage for validated transactions and then -sends them to the wallet for further processing.

    + +open fun recordTransactions(vararg txs: SignedTransaction): <ERROR CLASS>
    +

    Given some SignedTransactions, writes them to the local storage for validated transactions and then +sends them to the vault for further processing.

    Parameters

    txs - The transactions to record.
    diff --git a/docs/build/html/api/com.r3corda.core.node/-service-hub/vault-service.html b/docs/build/html/api/com.r3corda.core.node/-service-hub/vault-service.html new file mode 100644 index 0000000000..94d60605f3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.node/-service-hub/vault-service.html @@ -0,0 +1,15 @@ + + +ServiceHub.vaultService - + + + +com.r3corda.core.node / ServiceHub / vaultService
    +
    +

    vaultService

    + +abstract val vaultService: VaultService
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.node/-service-hub/verify-transaction.html b/docs/build/html/api/com.r3corda.core.node/-service-hub/verify-transaction.html deleted file mode 100644 index 2d1c21750d..0000000000 --- a/docs/build/html/api/com.r3corda.core.node/-service-hub/verify-transaction.html +++ /dev/null @@ -1,18 +0,0 @@ - - -ServiceHub.verifyTransaction - - - - -com.r3corda.core.node / ServiceHub / verifyTransaction
    -
    -

    verifyTransaction

    - -open fun verifyTransaction(ltx: LedgerTransaction): Unit
    -

    Given a LedgerTransaction, looks up all its dependencies in the local database, uses the identity service to map -the SignedTransactions the DB gives back into LedgerTransactions, and then runs the smart contracts for the -transaction. If no exception is thrown, the transaction is valid.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.node/-service-hub/wallet-service.html b/docs/build/html/api/com.r3corda.core.node/-service-hub/wallet-service.html deleted file mode 100644 index ae802f9074..0000000000 --- a/docs/build/html/api/com.r3corda.core.node/-service-hub/wallet-service.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ServiceHub.walletService - - - - -com.r3corda.core.node / ServiceHub / walletService
    -
    -

    walletService

    - -abstract val walletService: WalletService
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/index.html b/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/index.html index 2bee4712e2..92c10216e2 100644 --- a/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/index.html +++ b/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/index.html @@ -98,26 +98,36 @@ Note that this is temporary until protocol sessions are properly implemented.

    receive -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
    -fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party): UntrustworthyData<T>
    +fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

    If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

    + send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
    +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

    Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

    Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

    @@ -130,7 +140,7 @@ Note that this is temporary until protocol sessions are properly implemented.

    Acceptor -abstract class Acceptor<in T> : ProtocolLogic<Unit> +abstract class Acceptor<T> : ProtocolLogic<Unit> @@ -158,7 +168,7 @@ we do not support coercing numeric types in the reflective search for matching c Buyer -class Buyer : ProtocolLogic<SignedTransaction> +class Buyer : ProtocolLogic<SignedTransaction> @@ -199,7 +209,7 @@ timestamp is correct and none of its inputs have been used in another completed Primary -abstract class Primary<out U> : ProtocolLogic<SignedTransaction>

    Abstracted bilateral deal protocol participant that initiates communication/handshake.

    +abstract class Primary<out U> : ProtocolLogic<SignedTransaction>

    Abstracted bilateral deal protocol participant that initiates communication/handshake.

    @@ -216,13 +226,13 @@ for each step.

    Requester -class Requester : ProtocolLogic<SignedTransaction> +class Requester : ProtocolLogic<SignedTransaction> ResolveTransactionsProtocol -class ResolveTransactionsProtocol : ProtocolLogic<List<LedgerTransaction>>

    This protocol is used to verify the validity of a transaction by recursively checking the validity of all the +class ResolveTransactionsProtocol : ProtocolLogic<List<LedgerTransaction>>

    This protocol is used to verify the validity of a transaction by recursively checking the validity of all the dependencies. Once a transaction is checked its inserted into local storage so it can be relayed and wont be checked again.

    @@ -231,14 +241,14 @@ checked again.

    Secondary -abstract class Secondary<U> : ProtocolLogic<SignedTransaction>

    Abstracted bilateral deal protocol participant that is recipient of initial communication.

    +abstract class Secondary<U> : ProtocolLogic<SignedTransaction>

    Abstracted bilateral deal protocol participant that is recipient of initial communication.

    Seller -class Seller : ProtocolLogic<SignedTransaction> +class Seller : ProtocolLogic<SignedTransaction> diff --git a/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/receive.html b/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/receive.html index 7f3e19e234..b68c3acbe5 100644 --- a/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/receive.html +++ b/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/receive.html @@ -7,10 +7,10 @@ com.r3corda.core.protocols / ProtocolLogic / receive

    receive

    - -inline fun <reified T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
    - -fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T>
    + +inline fun <reified T : Any> receive(otherParty: Party): UntrustworthyData<T>
    + +fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T>


    diff --git a/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/register-session.html b/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/register-session.html new file mode 100644 index 0000000000..51704308ac --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/register-session.html @@ -0,0 +1,18 @@ + + +ProtocolLogic.registerSession - + + + +com.r3corda.core.protocols / ProtocolLogic / registerSession
    +
    +

    registerSession

    + +fun registerSession(receivedHandshake: HandshakeMessage): Unit
    +

    If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/send-and-receive.html b/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/send-and-receive.html index 0101e96878..ed4f8628aa 100644 --- a/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/send-and-receive.html +++ b/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/send-and-receive.html @@ -7,8 +7,10 @@ com.r3corda.core.protocols / ProtocolLogic / sendAndReceive

    sendAndReceive

    - -inline fun <reified T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T>
    + +inline fun <reified T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
    + +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T>


    diff --git a/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/send.html b/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/send.html index 722f7bfdd7..54419251f1 100644 --- a/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/send.html +++ b/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/send.html @@ -7,8 +7,8 @@ com.r3corda.core.protocols / ProtocolLogic / send

    send

    - -fun send(destination: Party, sessionID: Long, payload: Any): Unit
    + +fun send(otherParty: Party, payload: Any): Unit


    diff --git a/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/sub-protocol.html b/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/sub-protocol.html index ff9f758b77..a778101449 100644 --- a/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/sub-protocol.html +++ b/docs/build/html/api/com.r3corda.core.protocols/-protocol-logic/sub-protocol.html @@ -7,10 +7,15 @@ com.r3corda.core.protocols / ProtocolLogic / subProtocol

    subProtocol

    - -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R
    + +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

    Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

    +

    Parameters

    + +inheritParentSessions - In certain situations the subprotocol needs to inherit and use the same open +sessions of the parent. However in most cases this is not desirable as it prevents the subprotocol from +communicating with the same party on a different topic. For this reason the default value is false.


    diff --git a/docs/build/html/api/com.r3corda.core.protocols/-protocol-state-machine/index.html b/docs/build/html/api/com.r3corda.core.protocols/-protocol-state-machine/index.html index a0850c6444..42c43fc744 100644 --- a/docs/build/html/api/com.r3corda.core.protocols/-protocol-state-machine/index.html +++ b/docs/build/html/api/com.r3corda.core.protocols/-protocol-state-machine/index.html @@ -49,7 +49,7 @@ receive -abstract fun <T : Any> receive(topic: String, sessionIDForReceive: Long, recvType: Class<T>): UntrustworthyData<T> +abstract fun <T : Any> receive(topic: String, sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> @@ -61,7 +61,7 @@ sendAndReceive -abstract fun <T : Any> sendAndReceive(topic: String, destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any, recvType: Class<T>): UntrustworthyData<T> +abstract fun <T : Any> sendAndReceive(topic: String, destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any, receiveType: Class<T>): UntrustworthyData<T> diff --git a/docs/build/html/api/com.r3corda.core.protocols/-protocol-state-machine/receive.html b/docs/build/html/api/com.r3corda.core.protocols/-protocol-state-machine/receive.html index 5704db7376..efb99054b3 100644 --- a/docs/build/html/api/com.r3corda.core.protocols/-protocol-state-machine/receive.html +++ b/docs/build/html/api/com.r3corda.core.protocols/-protocol-state-machine/receive.html @@ -8,7 +8,7 @@

    receive

    -abstract fun <T : Any> receive(topic: String, sessionIDForReceive: Long, recvType: Class<T>): UntrustworthyData<T>
    +abstract fun <T : Any> receive(topic: String, sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T>


    diff --git a/docs/build/html/api/com.r3corda.core.protocols/-protocol-state-machine/send-and-receive.html b/docs/build/html/api/com.r3corda.core.protocols/-protocol-state-machine/send-and-receive.html index 1977e31a8a..5d193f113f 100644 --- a/docs/build/html/api/com.r3corda.core.protocols/-protocol-state-machine/send-and-receive.html +++ b/docs/build/html/api/com.r3corda.core.protocols/-protocol-state-machine/send-and-receive.html @@ -8,7 +8,7 @@

    sendAndReceive

    -abstract fun <T : Any> sendAndReceive(topic: String, destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any, recvType: Class<T>): UntrustworthyData<T>
    +abstract fun <T : Any> sendAndReceive(topic: String, destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any, receiveType: Class<T>): UntrustworthyData<T>


    diff --git a/docs/build/html/api/com.r3corda.core.serialization/-ed25519-private-key-serializer/ed25519-curve.html b/docs/build/html/api/com.r3corda.core.serialization/-ed25519-private-key-serializer/ed25519-curve.html deleted file mode 100644 index cdf43d0e49..0000000000 --- a/docs/build/html/api/com.r3corda.core.serialization/-ed25519-private-key-serializer/ed25519-curve.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Ed25519PrivateKeySerializer.ed25519Curve - - - - -com.r3corda.core.serialization / Ed25519PrivateKeySerializer / ed25519Curve
    -
    -

    ed25519Curve

    - -val ed25519Curve: <ERROR CLASS>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.serialization/-ed25519-public-key-serializer/ed25519-curve.html b/docs/build/html/api/com.r3corda.core.serialization/-ed25519-public-key-serializer/ed25519-curve.html deleted file mode 100644 index 45242ffe71..0000000000 --- a/docs/build/html/api/com.r3corda.core.serialization/-ed25519-public-key-serializer/ed25519-curve.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Ed25519PublicKeySerializer.ed25519Curve - - - - -com.r3corda.core.serialization / Ed25519PublicKeySerializer / ed25519Curve
    -
    -

    ed25519Curve

    - -val ed25519Curve: <ERROR CLASS>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.serialization/-missing-attachments-exception/-init-.html b/docs/build/html/api/com.r3corda.core.serialization/-missing-attachments-exception/-init-.html index fbf95ee9d4..6020af094b 100644 --- a/docs/build/html/api/com.r3corda.core.serialization/-missing-attachments-exception/-init-.html +++ b/docs/build/html/api/com.r3corda.core.serialization/-missing-attachments-exception/-init-.html @@ -8,7 +8,7 @@

    <init>

    MissingAttachmentsException(ids: List<SecureHash>)
    -

    Thrown during deserialisation to indicate that an attachment needed to construct the WireTransaction is not found

    +

    Thrown during deserialisation to indicate that an attachment needed to construct the WireTransaction is not found



    diff --git a/docs/build/html/api/com.r3corda.core.serialization/-missing-attachments-exception/index.html b/docs/build/html/api/com.r3corda.core.serialization/-missing-attachments-exception/index.html index 52fbed48ea..1625450ed4 100644 --- a/docs/build/html/api/com.r3corda.core.serialization/-missing-attachments-exception/index.html +++ b/docs/build/html/api/com.r3corda.core.serialization/-missing-attachments-exception/index.html @@ -8,7 +8,7 @@

    MissingAttachmentsException

    class MissingAttachmentsException : Exception
    -

    Thrown during deserialisation to indicate that an attachment needed to construct the WireTransaction is not found

    +

    Thrown during deserialisation to indicate that an attachment needed to construct the WireTransaction is not found



    Constructors

    @@ -18,7 +18,7 @@ <init> -MissingAttachmentsException(ids: List<SecureHash>)

    Thrown during deserialisation to indicate that an attachment needed to construct the WireTransaction is not found

    +MissingAttachmentsException(ids: List<SecureHash>)

    Thrown during deserialisation to indicate that an attachment needed to construct the WireTransaction is not found

    diff --git a/docs/build/html/api/com.r3corda.core.serialization/-opaque-bytes/index.html b/docs/build/html/api/com.r3corda.core.serialization/-opaque-bytes/index.html index e670ef31f4..dfae8a3274 100644 --- a/docs/build/html/api/com.r3corda.core.serialization/-opaque-bytes/index.html +++ b/docs/build/html/api/com.r3corda.core.serialization/-opaque-bytes/index.html @@ -118,7 +118,9 @@ building partially signed transactions.

    SecureHash -sealed class SecureHash : OpaqueBytes +sealed class SecureHash : OpaqueBytes

    Container for a cryptographically secure hash value. +Provides utilities for generating a cryptographic hash using different algorithms (currently only SHA-256 supported).

    + diff --git a/docs/build/html/api/com.r3corda.core.serialization/-serialize-as-token/index.html b/docs/build/html/api/com.r3corda.core.serialization/-serialize-as-token/index.html index df4a372f96..9ba2788c6a 100644 --- a/docs/build/html/api/com.r3corda.core.serialization/-serialize-as-token/index.html +++ b/docs/build/html/api/com.r3corda.core.serialization/-serialize-as-token/index.html @@ -51,13 +51,6 @@ they are serialized because they have a lot of internal state that does not seri to indicate which instance the token is a serialized form of.

    - - -TestClock - -class TestClock : MutableClock, SerializeAsToken

    A Clock that can have the time advanced for use in testing.

    - - diff --git a/docs/build/html/api/com.r3corda.core.serialization/-serialized-bytes/index.html b/docs/build/html/api/com.r3corda.core.serialization/-serialized-bytes/index.html index 3d0c63187f..6e77d9f017 100644 --- a/docs/build/html/api/com.r3corda.core.serialization/-serialized-bytes/index.html +++ b/docs/build/html/api/com.r3corda.core.serialization/-serialized-bytes/index.html @@ -101,7 +101,7 @@ to get the original object back.

    deserialize -fun SerializedBytes<WireTransaction>.deserialize(kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): WireTransaction
    +fun SerializedBytes<WireTransaction>.deserialize(kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): WireTransaction
    fun <T : Any> SerializedBytes<T>.deserialize(kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): T
    fun <T : Any> OpaqueBytes.deserialize(kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): T diff --git a/docs/build/html/api/com.r3corda.core.serialization/-singleton-serialize-as-token/index.html b/docs/build/html/api/com.r3corda.core.serialization/-singleton-serialize-as-token/index.html index 1c6a85d72d..52b76f9ebb 100644 --- a/docs/build/html/api/com.r3corda.core.serialization/-singleton-serialize-as-token/index.html +++ b/docs/build/html/api/com.r3corda.core.serialization/-singleton-serialize-as-token/index.html @@ -77,26 +77,6 @@ I/O), or a mock implementation suitable for unit test environments.

    -InMemoryMessaging - -inner class InMemoryMessaging : SingletonSerializeAsToken, MessagingServiceInternal

    An InMemoryMessaging provides a MessagingService that isnt backed by any kind of network or disk storage -system, but just uses regular queues on the heap instead. It is intended for unit testing and developer convenience -when all entities on the network are being simulated in-process.

    - - - - -InMemoryMessagingNetwork - -class InMemoryMessagingNetwork : SingletonSerializeAsToken

    An in-memory network allows you to manufacture InMemoryMessagings for a set of participants. Each -InMemoryMessaging maintains a queue of messages it has received, and a background thread that dispatches -messages one by one to registered handlers. Alternatively, a messaging system may be manually pumped, in which -case no thread is created and a caller is expected to force delivery one at a time (this is useful for unit -testing).

    - - - - InMemoryNetworkMapCache open class InMemoryNetworkMapCache : SingletonSerializeAsToken, NetworkMapCache

    Extremely simple in-memory cache of the network map.

    @@ -104,33 +84,15 @@ testing).

    -InMemoryWalletService +InMemoryVaultService -open class InMemoryWalletService : SingletonSerializeAsToken, WalletService

    This class implements a simple, in memory wallet that tracks states that are owned by us, and also has a convenience -method to auto-generate some self-issued cash states that can be used for test trading. A real wallet would persist -states relevant to us into a database and once such a wallet is implemented, this scaffolding can be removed.

    +open class InMemoryVaultService : SingletonSerializeAsToken, VaultService

    This class implements a simple, in memory vault that tracks states that are owned by us, and also has a convenience +method to auto-generate some self-issued cash states that can be used for test trading. A real vault would persist +states relevant to us into a database and once such a vault is implemented, this scaffolding can be removed.

    -MockIdentityService - -class MockIdentityService : IdentityService, SingletonSerializeAsToken - - - -MockKeyManagementService - -class MockKeyManagementService : SingletonSerializeAsToken, KeyManagementService - - - -MockStorageService - -class MockStorageService : SingletonSerializeAsToken, TxWritableStorageService - - - MonitoringService class MonitoringService : SingletonSerializeAsToken

    Provides access to various metrics and ways to notify monitoring services of things, for sysadmin purposes. @@ -142,7 +104,29 @@ This is not an interface because it is too lightweight to bother mocking out.

    NodeSchedulerService class NodeSchedulerService : SchedulerService, SingletonSerializeAsToken

    A first pass of a simple SchedulerService that works with MutableClocks for testing, demonstrations and simulations -that also encompasses the Wallet observer for processing transactions.

    +that also encompasses the Vault observer for processing transactions.

    + + + + +NodeVaultService + +class NodeVaultService : SingletonSerializeAsToken, VaultService

    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.

    + + + + +PersistentKeyManagementService + +class PersistentKeyManagementService : SingletonSerializeAsToken, KeyManagementService

    A persistent re-implementation of E2ETestKeyManagementService to support node re-start.

    + + + + +PersistentUniquenessProvider + +class PersistentUniquenessProvider : UniquenessProvider, SingletonSerializeAsToken

    A RDBMS backed Uniqueness provider

    diff --git a/docs/build/html/api/com.r3corda.core.serialization/-wire-transaction-serializer/index.html b/docs/build/html/api/com.r3corda.core.serialization/-wire-transaction-serializer/index.html index c7ed2994a4..158a77c223 100644 --- a/docs/build/html/api/com.r3corda.core.serialization/-wire-transaction-serializer/index.html +++ b/docs/build/html/api/com.r3corda.core.serialization/-wire-transaction-serializer/index.html @@ -18,13 +18,13 @@ read -fun read(kryo: <ERROR CLASS>, input: <ERROR CLASS>, type: Class<WireTransaction>): WireTransaction +fun read(kryo: <ERROR CLASS>, input: <ERROR CLASS>, type: Class<WireTransaction>): WireTransaction write -fun write(kryo: <ERROR CLASS>, output: <ERROR CLASS>, obj: WireTransaction): Unit +fun write(kryo: <ERROR CLASS>, output: <ERROR CLASS>, obj: WireTransaction): Unit diff --git a/docs/build/html/api/com.r3corda.core.serialization/-wire-transaction-serializer/read.html b/docs/build/html/api/com.r3corda.core.serialization/-wire-transaction-serializer/read.html index 0aacf97d96..887e55d83a 100644 --- a/docs/build/html/api/com.r3corda.core.serialization/-wire-transaction-serializer/read.html +++ b/docs/build/html/api/com.r3corda.core.serialization/-wire-transaction-serializer/read.html @@ -7,8 +7,8 @@ com.r3corda.core.serialization / WireTransactionSerializer / read

    read

    - -fun read(kryo: <ERROR CLASS>, input: <ERROR CLASS>, type: Class<WireTransaction>): WireTransaction
    + +fun read(kryo: <ERROR CLASS>, input: <ERROR CLASS>, type: Class<WireTransaction>): WireTransaction


    diff --git a/docs/build/html/api/com.r3corda.core.serialization/-wire-transaction-serializer/write.html b/docs/build/html/api/com.r3corda.core.serialization/-wire-transaction-serializer/write.html index 07083d191b..0320be4ee2 100644 --- a/docs/build/html/api/com.r3corda.core.serialization/-wire-transaction-serializer/write.html +++ b/docs/build/html/api/com.r3corda.core.serialization/-wire-transaction-serializer/write.html @@ -7,8 +7,8 @@ com.r3corda.core.serialization / WireTransactionSerializer / write

    write

    - -fun write(kryo: <ERROR CLASS>, output: <ERROR CLASS>, obj: WireTransaction): Unit
    + +fun write(kryo: <ERROR CLASS>, output: <ERROR CLASS>, obj: WireTransaction): Unit


    diff --git a/docs/build/html/api/com.r3corda.core.serialization/deserialize.html b/docs/build/html/api/com.r3corda.core.serialization/deserialize.html index b875647444..f86acbdece 100644 --- a/docs/build/html/api/com.r3corda.core.serialization/deserialize.html +++ b/docs/build/html/api/com.r3corda.core.serialization/deserialize.html @@ -9,8 +9,8 @@

    deserialize

    fun <T : Any> OpaqueBytes.deserialize(kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): T
    - -fun SerializedBytes<WireTransaction>.deserialize(kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): WireTransaction
    + +fun SerializedBytes<WireTransaction>.deserialize(kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): WireTransaction
    fun <T : Any> SerializedBytes<T>.deserialize(kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): T

    diff --git a/docs/build/html/api/com.r3corda.core.serialization/index.html b/docs/build/html/api/com.r3corda.core.serialization/index.html index f8902e2b15..d5a7772e3b 100644 --- a/docs/build/html/api/com.r3corda.core.serialization/index.html +++ b/docs/build/html/api/com.r3corda.core.serialization/index.html @@ -145,7 +145,7 @@ to indicate which instance the token is a serialized form of.

    MissingAttachmentsException -class MissingAttachmentsException : Exception

    Thrown during deserialisation to indicate that an attachment needed to construct the WireTransaction is not found

    +class MissingAttachmentsException : Exception

    Thrown during deserialisation to indicate that an attachment needed to construct the WireTransaction is not found

    @@ -200,7 +200,7 @@ simple, totally non-extensible binary (sub)format.

    deserialize fun <T : Any> OpaqueBytes.deserialize(kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): T
    -fun SerializedBytes<WireTransaction>.deserialize(kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): WireTransaction
    +fun SerializedBytes<WireTransaction>.deserialize(kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): WireTransaction
    fun <T : Any> SerializedBytes<T>.deserialize(kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): T diff --git a/docs/build/html/api/com.r3corda.core.testing/-a-l-i-c-e.html b/docs/build/html/api/com.r3corda.core.testing/-a-l-i-c-e.html deleted file mode 100644 index 8d986336e1..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-a-l-i-c-e.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ALICE - - - - -com.r3corda.core.testing / ALICE
    -
    -

    ALICE

    - -val ALICE: Party
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-a-l-i-c-e_-k-e-y.html b/docs/build/html/api/com.r3corda.core.testing/-a-l-i-c-e_-k-e-y.html deleted file mode 100644 index 0e114e8266..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-a-l-i-c-e_-k-e-y.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ALICE_KEY - - - - -com.r3corda.core.testing / ALICE_KEY
    -
    -

    ALICE_KEY

    - -val ALICE_KEY: KeyPair
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-a-l-i-c-e_-p-u-b-k-e-y.html b/docs/build/html/api/com.r3corda.core.testing/-a-l-i-c-e_-p-u-b-k-e-y.html deleted file mode 100644 index e0e3256b53..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-a-l-i-c-e_-p-u-b-k-e-y.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ALICE_PUBKEY - - - - -com.r3corda.core.testing / ALICE_PUBKEY
    -
    -

    ALICE_PUBKEY

    - -val ALICE_PUBKEY: PublicKey
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-a-l-l_-t-e-s-t_-k-e-y-s.html b/docs/build/html/api/com.r3corda.core.testing/-a-l-l_-t-e-s-t_-k-e-y-s.html deleted file mode 100644 index cfca05a6d5..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-a-l-l_-t-e-s-t_-k-e-y-s.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ALL_TEST_KEYS - - - - -com.r3corda.core.testing / ALL_TEST_KEYS
    -
    -

    ALL_TEST_KEYS

    - -val ALL_TEST_KEYS: List<KeyPair>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-always-succeed-contract/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-always-succeed-contract/-init-.html deleted file mode 100644 index e34050e4e9..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-always-succeed-contract/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -AlwaysSucceedContract.<init> - - - - -com.r3corda.core.testing / AlwaysSucceedContract / <init>
    -
    -

    <init>

    -AlwaysSucceedContract(legalContractReference: SecureHash = SecureHash.sha256("Always succeed contract"))
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-always-succeed-contract/index.html b/docs/build/html/api/com.r3corda.core.testing/-always-succeed-contract/index.html deleted file mode 100644 index ea2c7e7570..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-always-succeed-contract/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - -AlwaysSucceedContract - - - - -com.r3corda.core.testing / AlwaysSucceedContract
    -
    -

    AlwaysSucceedContract

    -class AlwaysSucceedContract : Contract
    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -AlwaysSucceedContract(legalContractReference: SecureHash = SecureHash.sha256("Always succeed contract"))
    -

    Properties

    - - - - - - - -
    -legalContractReference -val legalContractReference: SecureHash

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

    -
    -

    Functions

    - - - - - - - -
    -verify -fun verify(tx: TransactionForContract): Unit

    Takes an object that represents a state transition, and ensures the inputs/outputs/commands make sense. -Must throw an exception if theres 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/com.r3corda.core.testing/-always-succeed-contract/legal-contract-reference.html b/docs/build/html/api/com.r3corda.core.testing/-always-succeed-contract/legal-contract-reference.html deleted file mode 100644 index 38c44cf4ad..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-always-succeed-contract/legal-contract-reference.html +++ /dev/null @@ -1,18 +0,0 @@ - - -AlwaysSucceedContract.legalContractReference - - - - -com.r3corda.core.testing / AlwaysSucceedContract / legalContractReference
    -
    -

    legalContractReference

    - -val legalContractReference: SecureHash
    -Overrides Contract.legalContractReference
    -

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

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-always-succeed-contract/verify.html b/docs/build/html/api/com.r3corda.core.testing/-always-succeed-contract/verify.html deleted file mode 100644 index 05c1367d5c..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-always-succeed-contract/verify.html +++ /dev/null @@ -1,20 +0,0 @@ - - -AlwaysSucceedContract.verify - - - - -com.r3corda.core.testing / AlwaysSucceedContract / verify
    -
    -

    verify

    - -fun verify(tx: TransactionForContract): Unit
    -Overrides Contract.verify
    -

    Takes an object that represents a state transition, and ensures the inputs/outputs/commands make sense. -Must throw an exception if theres 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/com.r3corda.core.testing/-amount-generator/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-amount-generator/-init-.html new file mode 100644 index 0000000000..6bca6baf28 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-amount-generator/-init-.html @@ -0,0 +1,14 @@ + + +AmountGenerator.<init> - + + + +com.r3corda.core.testing / AmountGenerator / <init>
    +
    +

    <init>

    +AmountGenerator(tokenGenerator: <ERROR CLASS><T>)
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-amount-generator/generate.html b/docs/build/html/api/com.r3corda.core.testing/-amount-generator/generate.html new file mode 100644 index 0000000000..4495987919 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-amount-generator/generate.html @@ -0,0 +1,15 @@ + + +AmountGenerator.generate - + + + +com.r3corda.core.testing / AmountGenerator / generate
    +
    +

    generate

    + +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Amount<T>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-amount-generator/index.html b/docs/build/html/api/com.r3corda.core.testing/-amount-generator/index.html new file mode 100644 index 0000000000..a8a8a44a21 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-amount-generator/index.html @@ -0,0 +1,47 @@ + + +AmountGenerator - + + + +com.r3corda.core.testing / AmountGenerator
    +
    +

    AmountGenerator

    +class AmountGenerator<T>
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +AmountGenerator(tokenGenerator: <ERROR CLASS><T>)
    +

    Properties

    + + + + + + + +
    +tokenGenerator +val tokenGenerator: <ERROR CLASS><T>
    +

    Functions

    + + + + + + + +
    +generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Amount<T>
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-amount-generator/token-generator.html b/docs/build/html/api/com.r3corda.core.testing/-amount-generator/token-generator.html new file mode 100644 index 0000000000..b11a518f8f --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-amount-generator/token-generator.html @@ -0,0 +1,15 @@ + + +AmountGenerator.tokenGenerator - + + + +com.r3corda.core.testing / AmountGenerator / tokenGenerator
    +
    +

    tokenGenerator

    + +val tokenGenerator: <ERROR CLASS><T>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-attachment-resolution-exception/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-attachment-resolution-exception/-init-.html deleted file mode 100644 index 910be25cbf..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-attachment-resolution-exception/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -AttachmentResolutionException.<init> - - - - -com.r3corda.core.testing / AttachmentResolutionException / <init>
    -
    -

    <init>

    -AttachmentResolutionException(attachmentId: SecureHash)
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-attachment-resolution-exception/index.html b/docs/build/html/api/com.r3corda.core.testing/-attachment-resolution-exception/index.html deleted file mode 100644 index 6741408003..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-attachment-resolution-exception/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - -AttachmentResolutionException - - - - -com.r3corda.core.testing / AttachmentResolutionException
    -
    -

    AttachmentResolutionException

    -class AttachmentResolutionException : Exception
    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -AttachmentResolutionException(attachmentId: SecureHash)
    -

    Extension Properties

    - - - - - - - -
    -rootCause -val Throwable.rootCause: Throwable
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-b-o-b.html b/docs/build/html/api/com.r3corda.core.testing/-b-o-b.html deleted file mode 100644 index 627fa0c048..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-b-o-b.html +++ /dev/null @@ -1,15 +0,0 @@ - - -BOB - - - - -com.r3corda.core.testing / BOB
    -
    -

    BOB

    - -val BOB: Party
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-b-o-b_-k-e-y.html b/docs/build/html/api/com.r3corda.core.testing/-b-o-b_-k-e-y.html deleted file mode 100644 index db1ad8df56..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-b-o-b_-k-e-y.html +++ /dev/null @@ -1,15 +0,0 @@ - - -BOB_KEY - - - - -com.r3corda.core.testing / BOB_KEY
    -
    -

    BOB_KEY

    - -val BOB_KEY: KeyPair
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-b-o-b_-p-u-b-k-e-y.html b/docs/build/html/api/com.r3corda.core.testing/-b-o-b_-p-u-b-k-e-y.html deleted file mode 100644 index bfa26bc4e9..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-b-o-b_-p-u-b-k-e-y.html +++ /dev/null @@ -1,15 +0,0 @@ - - -BOB_PUBKEY - - - - -com.r3corda.core.testing / BOB_PUBKEY
    -
    -

    BOB_PUBKEY

    - -val BOB_PUBKEY: PublicKey
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-c-h-a-r-l-i-e.html b/docs/build/html/api/com.r3corda.core.testing/-c-h-a-r-l-i-e.html deleted file mode 100644 index 53d2e95fac..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-c-h-a-r-l-i-e.html +++ /dev/null @@ -1,15 +0,0 @@ - - -CHARLIE - - - - -com.r3corda.core.testing / CHARLIE
    -
    -

    CHARLIE

    - -val CHARLIE: Party
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-c-h-a-r-l-i-e_-k-e-y.html b/docs/build/html/api/com.r3corda.core.testing/-c-h-a-r-l-i-e_-k-e-y.html deleted file mode 100644 index 7b7aaefb61..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-c-h-a-r-l-i-e_-k-e-y.html +++ /dev/null @@ -1,15 +0,0 @@ - - -CHARLIE_KEY - - - - -com.r3corda.core.testing / CHARLIE_KEY
    -
    -

    CHARLIE_KEY

    - -val CHARLIE_KEY: KeyPair
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-c-h-a-r-l-i-e_-p-u-b-k-e-y.html b/docs/build/html/api/com.r3corda.core.testing/-c-h-a-r-l-i-e_-p-u-b-k-e-y.html deleted file mode 100644 index 007be9e476..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-c-h-a-r-l-i-e_-p-u-b-k-e-y.html +++ /dev/null @@ -1,15 +0,0 @@ - - -CHARLIE_PUBKEY - - - - -com.r3corda.core.testing / CHARLIE_PUBKEY
    -
    -

    CHARLIE_PUBKEY

    - -val CHARLIE_PUBKEY: PublicKey
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-currency-generator/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-currency-generator/-init-.html new file mode 100644 index 0000000000..c84148e492 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-currency-generator/-init-.html @@ -0,0 +1,14 @@ + + +CurrencyGenerator.<init> - + + + +com.r3corda.core.testing / CurrencyGenerator / <init>
    +
    +

    <init>

    +CurrencyGenerator()
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-currency-generator/currencies.html b/docs/build/html/api/com.r3corda.core.testing/-currency-generator/currencies.html new file mode 100644 index 0000000000..acb5493ff0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-currency-generator/currencies.html @@ -0,0 +1,15 @@ + + +CurrencyGenerator.currencies - + + + +com.r3corda.core.testing / CurrencyGenerator / currencies
    +
    +

    currencies

    + +val currencies: <ERROR CLASS>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-currency-generator/generate.html b/docs/build/html/api/com.r3corda.core.testing/-currency-generator/generate.html new file mode 100644 index 0000000000..bbbd943437 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-currency-generator/generate.html @@ -0,0 +1,15 @@ + + +CurrencyGenerator.generate - + + + +com.r3corda.core.testing / CurrencyGenerator / generate
    +
    +

    generate

    + +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Currency
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-currency-generator/index.html b/docs/build/html/api/com.r3corda.core.testing/-currency-generator/index.html new file mode 100644 index 0000000000..ff78130fce --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-currency-generator/index.html @@ -0,0 +1,47 @@ + + +CurrencyGenerator - + + + +com.r3corda.core.testing / CurrencyGenerator
    +
    +

    CurrencyGenerator

    +class CurrencyGenerator
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +CurrencyGenerator()
    +

    Functions

    + + + + + + + +
    +generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Currency
    +

    Companion Object Properties

    + + + + + + + +
    +currencies +val currencies: <ERROR CLASS>
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-k-e-y_3.html b/docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-k-e-y_3.html deleted file mode 100644 index 9e55fa03d9..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-k-e-y_3.html +++ /dev/null @@ -1,15 +0,0 @@ - - -DUMMY_KEY_3 - - - - -com.r3corda.core.testing / DUMMY_KEY_3
    -
    -

    DUMMY_KEY_3

    - -val DUMMY_KEY_3: KeyPair
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/-init-.html deleted file mode 100644 index 916ee2b09d..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -DummyLinearContract.State.<init> - - - - -com.r3corda.core.testing / DummyLinearContract / State / <init>
    -
    -

    <init>

    -State(linearId: UniqueIdentifier = UniqueIdentifier(), contract: Contract = DummyLinearContract(), participants: List<PublicKey> = listOf(), nonce: SecureHash = SecureHash.randomSHA256())
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/contract.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/contract.html deleted file mode 100644 index aab7534c78..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/contract.html +++ /dev/null @@ -1,43 +0,0 @@ - - -DummyLinearContract.State.contract - - - - -com.r3corda.core.testing / DummyLinearContract / State / contract
    -
    -

    contract

    - -val contract: Contract
    -Overrides ContractState.contract
    -

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

    -

    Discussion

    -

    This field is not the final design, its 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 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

    -
    -
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/index.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/index.html deleted file mode 100644 index 678bc5f272..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/index.html +++ /dev/null @@ -1,71 +0,0 @@ - - -DummyLinearContract.State - - - - -com.r3corda.core.testing / DummyLinearContract / State
    -
    -

    State

    -class State : LinearState
    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -State(linearId: UniqueIdentifier = UniqueIdentifier(), contract: Contract = DummyLinearContract(), participants: List<PublicKey> = listOf(), nonce: SecureHash = SecureHash.randomSHA256())
    -

    Properties

    - - - - - - - - - - - - - - - - - - - -
    -contract -val contract: Contract

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

    -
    -linearId -val linearId: UniqueIdentifier

    Unique id shared by all LinearState states throughout history within the wallets of all parties. -Verify methods should check that one input and one output share the id in a transaction, -except at issuance/termination.

    -
    -nonce -val nonce: SecureHash
    -participants -val participants: List<PublicKey>

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

    -
    -

    Functions

    - - - - - - - -
    -isRelevant -fun isRelevant(ourKeys: Set<PublicKey>): Boolean

    True if this should be tracked by our wallet(s).

    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/is-relevant.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/is-relevant.html deleted file mode 100644 index 18ff618c7b..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/is-relevant.html +++ /dev/null @@ -1,17 +0,0 @@ - - -DummyLinearContract.State.isRelevant - - - - -com.r3corda.core.testing / DummyLinearContract / State / isRelevant
    -
    -

    isRelevant

    - -fun isRelevant(ourKeys: Set<PublicKey>): Boolean
    -Overrides LinearState.isRelevant
    -

    True if this should be tracked by our wallet(s).

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/linear-id.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/linear-id.html deleted file mode 100644 index a3bbf2f27e..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/linear-id.html +++ /dev/null @@ -1,19 +0,0 @@ - - -DummyLinearContract.State.linearId - - - - -com.r3corda.core.testing / DummyLinearContract / State / linearId
    -
    -

    linearId

    - -val linearId: UniqueIdentifier
    -Overrides LinearState.linearId
    -

    Unique id shared by all LinearState states throughout history within the wallets of all parties. -Verify methods should check that one input and one output share the id in a transaction, -except at issuance/termination.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/nonce.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/nonce.html deleted file mode 100644 index 5794fd2c75..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/nonce.html +++ /dev/null @@ -1,15 +0,0 @@ - - -DummyLinearContract.State.nonce - - - - -com.r3corda.core.testing / DummyLinearContract / State / nonce
    -
    -

    nonce

    - -val nonce: SecureHash
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/participants.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/participants.html deleted file mode 100644 index 84e6269fb0..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-state/participants.html +++ /dev/null @@ -1,25 +0,0 @@ - - -DummyLinearContract.State.participants - - - - -com.r3corda.core.testing / DummyLinearContract / State / participants
    -
    -

    participants

    - -val participants: List<PublicKey>
    -Overrides ContractState.participants
    -

    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 participants has to be involved and approve the transaction -so that they receive the updated state, and dont 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.

    -
    -
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/clause.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/clause.html deleted file mode 100644 index e42d3912d1..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/clause.html +++ /dev/null @@ -1,15 +0,0 @@ - - -DummyLinearContract.clause - - - - -com.r3corda.core.testing / DummyLinearContract / clause
    -
    -

    clause

    - -val clause: Clause<ContractState, CommandData, Unit>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/index.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/index.html deleted file mode 100644 index dbdd472a85..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/index.html +++ /dev/null @@ -1,70 +0,0 @@ - - -DummyLinearContract - - - - -com.r3corda.core.testing / DummyLinearContract
    -
    -

    DummyLinearContract

    -class DummyLinearContract : Contract
    -
    -
    -

    Types

    - - - - - - - -
    -State -class State : LinearState
    -

    Constructors

    - - - - - - - -
    -<init> -DummyLinearContract()
    -

    Properties

    - - - - - - - - - - - -
    -clause -val clause: Clause<ContractState, CommandData, Unit>
    -legalContractReference -val legalContractReference: SecureHash

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

    -
    -

    Functions

    - - - - - - - -
    -verify -fun verify(tx: TransactionForContract): Unit

    Takes an object that represents a state transition, and ensures the inputs/outputs/commands make sense. -Must throw an exception if theres 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/com.r3corda.core.testing/-dummy-linear-contract/legal-contract-reference.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/legal-contract-reference.html deleted file mode 100644 index d1a63e839e..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/legal-contract-reference.html +++ /dev/null @@ -1,18 +0,0 @@ - - -DummyLinearContract.legalContractReference - - - - -com.r3corda.core.testing / DummyLinearContract / legalContractReference
    -
    -

    legalContractReference

    - -val legalContractReference: SecureHash
    -Overrides Contract.legalContractReference
    -

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

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/verify.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/verify.html deleted file mode 100644 index da116cc8ae..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/verify.html +++ /dev/null @@ -1,20 +0,0 @@ - - -DummyLinearContract.verify - - - - -com.r3corda.core.testing / DummyLinearContract / verify
    -
    -

    verify

    - -fun verify(tx: TransactionForContract): Unit
    -Overrides Contract.verify
    -

    Takes an object that represents a state transition, and ensures the inputs/outputs/commands make sense. -Must throw an exception if theres 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/com.r3corda.core.testing/-dummy-linear-state/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/-init-.html deleted file mode 100644 index 34f9cffd86..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -DummyLinearState.<init> - - - - -com.r3corda.core.testing / DummyLinearState / <init>
    -
    -

    <init>

    -DummyLinearState(thread: SecureHash = SecureHash.randomSHA256(), contract: Contract = AlwaysSucceedContract(), participants: List<PublicKey> = listOf(), nonce: SecureHash = SecureHash.randomSHA256())
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/contract.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/contract.html deleted file mode 100644 index c86f9eefd6..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/contract.html +++ /dev/null @@ -1,43 +0,0 @@ - - -DummyLinearState.contract - - - - -com.r3corda.core.testing / DummyLinearState / contract
    -
    -

    contract

    - -val contract: Contract
    -Overrides ContractState.contract
    -

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

    -

    Discussion

    -

    This field is not the final design, its 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 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

    -
    -
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/index.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/index.html deleted file mode 100644 index 1eade1812c..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/index.html +++ /dev/null @@ -1,81 +0,0 @@ - - -DummyLinearState - - - - -com.r3corda.core.testing / DummyLinearState
    -
    -

    DummyLinearState

    -class DummyLinearState : LinearState
    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -DummyLinearState(thread: SecureHash = SecureHash.randomSHA256(), contract: Contract = AlwaysSucceedContract(), participants: List<PublicKey> = listOf(), nonce: SecureHash = SecureHash.randomSHA256())
    -

    Properties

    - - - - - - - - - - - - - - - - - - - -
    -contract -val contract: Contract

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

    -
    -nonce -val nonce: SecureHash
    -participants -val participants: List<PublicKey>

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

    -
    -thread -val thread: SecureHash

    Unique thread id within the wallets of all parties

    -
    -

    Functions

    - - - - - - - -
    -isRelevant -fun isRelevant(ourKeys: Set<PublicKey>): Boolean

    true if this should be tracked by our wallet(s)

    -
    -

    Extension Functions

    - - - - - - - -
    -hash -fun ContractState.hash(): SecureHash

    Returns the SHA-256 hash of the serialised contents of this state (not cached)

    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/is-relevant.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/is-relevant.html deleted file mode 100644 index cc20a0b156..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/is-relevant.html +++ /dev/null @@ -1,17 +0,0 @@ - - -DummyLinearState.isRelevant - - - - -com.r3corda.core.testing / DummyLinearState / isRelevant
    -
    -

    isRelevant

    - -fun isRelevant(ourKeys: Set<PublicKey>): Boolean
    -Overrides LinearState.isRelevant
    -

    true if this should be tracked by our wallet(s)

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/nonce.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/nonce.html deleted file mode 100644 index 65100719da..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/nonce.html +++ /dev/null @@ -1,15 +0,0 @@ - - -DummyLinearState.nonce - - - - -com.r3corda.core.testing / DummyLinearState / nonce
    -
    -

    nonce

    - -val nonce: SecureHash
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/participants.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/participants.html deleted file mode 100644 index 2c70d42cab..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/participants.html +++ /dev/null @@ -1,25 +0,0 @@ - - -DummyLinearState.participants - - - - -com.r3corda.core.testing / DummyLinearState / participants
    -
    -

    participants

    - -val participants: List<PublicKey>
    -Overrides ContractState.participants
    -

    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 participants has to be involved and approve the transaction -so that they receive the updated state, and dont 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.

    -
    -
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/thread.html b/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/thread.html deleted file mode 100644 index fe71473f89..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-state/thread.html +++ /dev/null @@ -1,17 +0,0 @@ - - -DummyLinearState.thread - - - - -com.r3corda.core.testing / DummyLinearState / thread
    -
    -

    thread

    - -val thread: SecureHash
    -Overrides LinearState.thread
    -

    Unique thread id within the wallets of all parties

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-duplicate-output-label/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-duplicate-output-label/-init-.html deleted file mode 100644 index 6aab69e8db..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-duplicate-output-label/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -DuplicateOutputLabel.<init> - - - - -com.r3corda.core.testing / DuplicateOutputLabel / <init>
    -
    -

    <init>

    -DuplicateOutputLabel(label: String)
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-duplicate-output-label/index.html b/docs/build/html/api/com.r3corda.core.testing/-duplicate-output-label/index.html deleted file mode 100644 index dd582d65d8..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-duplicate-output-label/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - -DuplicateOutputLabel - - - - -com.r3corda.core.testing / DuplicateOutputLabel
    -
    -

    DuplicateOutputLabel

    -class DuplicateOutputLabel : Exception
    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -DuplicateOutputLabel(label: String)
    -

    Extension Properties

    - - - - - - - -
    -rootCause -val Throwable.rootCause: Throwable
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-duration-generator/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-duration-generator/-init-.html new file mode 100644 index 0000000000..02930db624 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-duration-generator/-init-.html @@ -0,0 +1,14 @@ + + +DurationGenerator.<init> - + + + +com.r3corda.core.testing / DurationGenerator / <init>
    +
    +

    <init>

    +DurationGenerator()
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-duration-generator/generate.html b/docs/build/html/api/com.r3corda.core.testing/-duration-generator/generate.html new file mode 100644 index 0000000000..c7fb2e77cc --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-duration-generator/generate.html @@ -0,0 +1,15 @@ + + +DurationGenerator.generate - + + + +com.r3corda.core.testing / DurationGenerator / generate
    +
    +

    generate

    + +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Duration
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-duration-generator/index.html b/docs/build/html/api/com.r3corda.core.testing/-duration-generator/index.html new file mode 100644 index 0000000000..b7230acd1b --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-duration-generator/index.html @@ -0,0 +1,36 @@ + + +DurationGenerator - + + + +com.r3corda.core.testing / DurationGenerator
    +
    +

    DurationGenerator

    +class DurationGenerator
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +DurationGenerator()
    +

    Functions

    + + + + + + + +
    +generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Duration
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-enforce-verify-or-fail.html b/docs/build/html/api/com.r3corda.core.testing/-enforce-verify-or-fail.html deleted file mode 100644 index 77d3e08ddd..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-enforce-verify-or-fail.html +++ /dev/null @@ -1,18 +0,0 @@ - - -EnforceVerifyOrFail - - - - -com.r3corda.core.testing / EnforceVerifyOrFail
    -
    -

    EnforceVerifyOrFail

    -sealed class EnforceVerifyOrFail
    -

    If you jumped here from a compiler error make sure the last line of your test tests for a transaction verify or fail. -This is a dummy type that can only be instantiated by functions in this module. This way we can ensure that all tests -will have as the last line either an accept or a failure test. The name is deliberately long to help make sense of -the triggered diagnostic.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/-init-.html new file mode 100644 index 0000000000..816466f06b --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/-init-.html @@ -0,0 +1,17 @@ + + +InMemoryVaultService.<init> - + + + +com.r3corda.core.testing / InMemoryVaultService / <init>
    +
    +

    <init>

    +InMemoryVaultService(services: ServiceHub)
    +

    This class implements a simple, in memory vault that tracks states that are owned by us, and also has a convenience +method to auto-generate some self-issued cash states that can be used for test trading. A real vault would persist +states relevant to us into a database and once such a vault is implemented, this scaffolding can be removed.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-inner-state/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/-inner-state/-init-.html similarity index 60% rename from docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-inner-state/-init-.html rename to docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/-inner-state/-init-.html index 970b9772cb..4d3a7ff366 100644 --- a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-inner-state/-init-.html +++ b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/-inner-state/-init-.html @@ -1,10 +1,10 @@ -InMemoryWalletService.InnerState.<init> - +InMemoryVaultService.InnerState.<init> - -com.r3corda.core.testing / InMemoryWalletService / InnerState / <init>
    +com.r3corda.core.testing / InMemoryVaultService / InnerState / <init>

    <init>

    InnerState()
    diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-inner-state/index.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/-inner-state/index.html similarity index 66% rename from docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-inner-state/index.html rename to docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/-inner-state/index.html index 08bbb6c1c9..1983c6657a 100644 --- a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-inner-state/index.html +++ b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/-inner-state/index.html @@ -1,10 +1,10 @@ -InMemoryWalletService.InnerState - +InMemoryVaultService.InnerState - -com.r3corda.core.testing / InMemoryWalletService / InnerState
    +com.r3corda.core.testing / InMemoryVaultService / InnerState

    InnerState

    protected class InnerState
    @@ -26,9 +26,9 @@ -wallet +vault -var wallet: Wallet +var vault: Vault diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/-inner-state/vault.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/-inner-state/vault.html new file mode 100644 index 0000000000..cc4823dbc7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/-inner-state/vault.html @@ -0,0 +1,15 @@ + + +InMemoryVaultService.InnerState.vault - + + + +com.r3corda.core.testing / InMemoryVaultService / InnerState / vault
    +
    +

    vault

    + +var vault: Vault
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/current-vault.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/current-vault.html new file mode 100644 index 0000000000..35cbfc4b7c --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/current-vault.html @@ -0,0 +1,22 @@ + + +InMemoryVaultService.currentVault - + + + +com.r3corda.core.testing / InMemoryVaultService / currentVault
    +
    +

    currentVault

    + +open val currentVault: Vault
    +Overrides VaultService.currentVault
    +

    Returns a read-only snapshot of the vault at the time the call is made. Note that if you consume states or +keys in this vault, you must inform the vault service so it can update its internal state.

    +

    Getter
    +

    Returns a read-only snapshot of the vault at the time the call is made. Note that if you consume states or +keys in this vault, you must inform the vault service so it can update its internal state.

    +

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/index.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/index.html new file mode 100644 index 0000000000..969a887f42 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/index.html @@ -0,0 +1,150 @@ + + +InMemoryVaultService - + + + +com.r3corda.core.testing / InMemoryVaultService
    +
    +

    InMemoryVaultService

    +open class InMemoryVaultService : SingletonSerializeAsToken, VaultService
    +

    This class implements a simple, in memory vault that tracks states that are owned by us, and also has a convenience +method to auto-generate some self-issued cash states that can be used for test trading. A real vault would persist +states relevant to us into a database and once such a vault is implemented, this scaffolding can be removed.

    +
    +
    +

    Types

    + + + + + + + +
    +InnerState +class InnerState
    +

    Constructors

    + + + + + + + +
    +<init> +InMemoryVaultService(services: ServiceHub)

    This class implements a simple, in memory vault that tracks states that are owned by us, and also has a convenience +method to auto-generate some self-issued cash states that can be used for test trading. A real vault would persist +states relevant to us into a database and once such a vault is implemented, this scaffolding can be removed.

    +
    +

    Properties

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +currentVault +open val currentVault: Vault

    Returns a read-only snapshot of the vault at the time the call is made. Note that if you consume states or +keys in this vault, you must inform the vault service so it can update its internal state.

    +
    +linearHeads +open val linearHeads: Map<UniqueIdentifier, StateAndRef<LinearState>>

    Returns a snapshot of the heads of LinearStates.

    +
    +log +open val log: <ERROR CLASS>
    +mutex +val mutex: ThreadBox<InnerState>
    +services +val services: ServiceHub
    +updates +open val updates: <ERROR CLASS><Update>

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the vault will already +incorporate the update.

    +
    +

    Functions

    + + + + + + + +
    +notifyAll +open fun notifyAll(txns: Iterable<WireTransaction>): Vault

    Possibly update the vault by marking as spent states that these transactions consume, and adding any relevant +new states that they create. You should only insert transactions that have been successfully verified here

    +
    +

    Inherited Functions

    + + + + + + + + + + + + + + + + + + + + + + + +
    +linearHeadsOfType_ +open fun <T : LinearState> linearHeadsOfType_(stateType: Class<T>): Map<UniqueIdentifier, StateAndRef<T>>

    Returns the linearHeads only when the type of the state would be considered an instanceof the given type.

    +
    +notify +open fun notify(tx: WireTransaction): Vault

    Same as notifyAll but with a single transaction.

    +
    +statesForRefs +open fun statesForRefs(refs: List<StateRef>): Map<StateRef, TransactionState<*>?>
    +toToken +open fun toToken(context: SerializeAsTokenContext): SerializationToken
    +whenConsumed +open fun whenConsumed(ref: StateRef): <ERROR CLASS><Update>

    Provide a Future for when a StateRef is consumed, which can be very useful in building tests.

    +
    +

    Extension Functions

    + + + + + + + +
    +linearHeadsOfType +fun <T : LinearState> VaultService.linearHeadsOfType(): <ERROR CLASS>
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/linear-heads.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/linear-heads.html similarity index 75% rename from docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/linear-heads.html rename to docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/linear-heads.html index c8f5cc7594..901cae176f 100644 --- a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/linear-heads.html +++ b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/linear-heads.html @@ -1,15 +1,15 @@ -InMemoryWalletService.linearHeads - +InMemoryVaultService.linearHeads - -com.r3corda.core.testing / InMemoryWalletService / linearHeads
    +com.r3corda.core.testing / InMemoryVaultService / linearHeads

    linearHeads

    - + open val linearHeads: Map<UniqueIdentifier, StateAndRef<LinearState>>
    -Overrides WalletService.linearHeads
    +Overrides VaultService.linearHeads

    Returns a snapshot of the heads of LinearStates.

    Getter

    Returns a snapshot of the heads of LinearStates.

    diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/log.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/log.html similarity index 68% rename from docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/log.html rename to docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/log.html index 5147591a8d..0e6917765f 100644 --- a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/log.html +++ b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/log.html @@ -1,13 +1,13 @@ -InMemoryWalletService.log - +InMemoryVaultService.log - -com.r3corda.core.testing / InMemoryWalletService / log
    +com.r3corda.core.testing / InMemoryVaultService / log

    log

    - + protected open val log: <ERROR CLASS>


    diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/mutex.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/mutex.html similarity index 74% rename from docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/mutex.html rename to docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/mutex.html index ab959f01f2..00aacf69da 100644 --- a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/mutex.html +++ b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/mutex.html @@ -1,13 +1,13 @@ -InMemoryWalletService.mutex - +InMemoryVaultService.mutex - -com.r3corda.core.testing / InMemoryWalletService / mutex
    +com.r3corda.core.testing / InMemoryVaultService / mutex

    mutex

    - + protected val mutex: ThreadBox<InnerState>


    diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/notify-all.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/notify-all.html new file mode 100644 index 0000000000..975b5a9a66 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/notify-all.html @@ -0,0 +1,22 @@ + + +InMemoryVaultService.notifyAll - + + + +com.r3corda.core.testing / InMemoryVaultService / notifyAll
    +
    +

    notifyAll

    + +open fun notifyAll(txns: Iterable<WireTransaction>): Vault
    +Overrides VaultService.notifyAll
    +

    Possibly update the vault by marking as spent states that these transactions consume, and adding any relevant +new states that they create. You should only insert transactions that have been successfully verified here

    +

    Returns the new vault that resulted from applying the transactions (note: it may quickly become out of date).

    +

    TODO: Consider if theres a good way to enforce the must-be-verified requirement in the type system.

    +
    +
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/services.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/services.html similarity index 68% rename from docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/services.html rename to docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/services.html index f455ace76b..2435fb87c7 100644 --- a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/services.html +++ b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/services.html @@ -1,13 +1,13 @@ -InMemoryWalletService.services - +InMemoryVaultService.services - -com.r3corda.core.testing / InMemoryWalletService / services
    +com.r3corda.core.testing / InMemoryVaultService / services

    services

    - + protected val services: ServiceHub


    diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/updates.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/updates.html similarity index 50% rename from docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/updates.html rename to docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/updates.html index 7d63274c5d..b0d42ed140 100644 --- a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/updates.html +++ b/docs/build/html/api/com.r3corda.core.testing/-in-memory-vault-service/updates.html @@ -1,20 +1,20 @@ -InMemoryWalletService.updates - +InMemoryVaultService.updates - -com.r3corda.core.testing / InMemoryWalletService / updates
    +com.r3corda.core.testing / InMemoryVaultService / updates

    updates

    - -open val updates: <ERROR CLASS><Update>
    -Overrides WalletService.updates
    -

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the Wallet will already incorporate -the update.

    + +open val updates: <ERROR CLASS><Update>
    +Overrides VaultService.updates
    +

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the vault will already +incorporate the update.

    Getter
    -

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the Wallet will already incorporate -the update.

    +

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the vault will already +incorporate the update.



    diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-clashing-threads/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-clashing-threads/-init-.html deleted file mode 100644 index 36c42a1c67..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-clashing-threads/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -InMemoryWalletService.ClashingThreads.<init> - - - - -com.r3corda.core.testing / InMemoryWalletService / ClashingThreads / <init>
    -
    -

    <init>

    -ClashingThreads(threads: Set<SecureHash>, transactions: Iterable<WireTransaction>)
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-clashing-threads/index.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-clashing-threads/index.html deleted file mode 100644 index e1bd3df3f4..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-clashing-threads/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - -InMemoryWalletService.ClashingThreads - - - - -com.r3corda.core.testing / InMemoryWalletService / ClashingThreads
    -
    -

    ClashingThreads

    -class ClashingThreads : Exception
    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -ClashingThreads(threads: Set<SecureHash>, transactions: Iterable<WireTransaction>)
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-init-.html deleted file mode 100644 index def33d7482..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-init-.html +++ /dev/null @@ -1,17 +0,0 @@ - - -InMemoryWalletService.<init> - - - - -com.r3corda.core.testing / InMemoryWalletService / <init>
    -
    -

    <init>

    -InMemoryWalletService(services: ServiceHub)
    -

    This class implements a simple, in memory wallet that tracks states that are owned by us, and also has a convenience -method to auto-generate some self-issued cash states that can be used for test trading. A real wallet would persist -states relevant to us into a database and once such a wallet is implemented, this scaffolding can be removed.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-inner-state/wallet.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-inner-state/wallet.html deleted file mode 100644 index 00e71990e3..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/-inner-state/wallet.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryWalletService.InnerState.wallet - - - - -com.r3corda.core.testing / InMemoryWalletService / InnerState / wallet
    -
    -

    wallet

    - -var wallet: Wallet
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/clashing-threads.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/clashing-threads.html deleted file mode 100644 index b154bbd28c..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/clashing-threads.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryWalletService.clashingThreads - - - - -com.r3corda.core.testing / InMemoryWalletService / clashingThreads
    -
    -

    clashingThreads

    - -val Wallet.clashingThreads: Set<SecureHash>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/current-wallet.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/current-wallet.html deleted file mode 100644 index 4c8165450e..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/current-wallet.html +++ /dev/null @@ -1,22 +0,0 @@ - - -InMemoryWalletService.currentWallet - - - - -com.r3corda.core.testing / InMemoryWalletService / currentWallet
    -
    -

    currentWallet

    - -open val currentWallet: Wallet
    -Overrides WalletService.currentWallet
    -

    Returns a read-only snapshot of the wallet at the time the call is made. Note that if you consume states or -keys in this wallet, you must inform the wallet service so it can update its internal state.

    -

    Getter
    -

    Returns a read-only snapshot of the wallet at the time the call is made. Note that if you consume states or -keys in this wallet, you must inform the wallet service so it can update its internal state.

    -

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/index.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/index.html deleted file mode 100644 index 22d0401789..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/index.html +++ /dev/null @@ -1,163 +0,0 @@ - - -InMemoryWalletService - - - - -com.r3corda.core.testing / InMemoryWalletService
    -
    -

    InMemoryWalletService

    -open class InMemoryWalletService : SingletonSerializeAsToken, WalletService
    -

    This class implements a simple, in memory wallet that tracks states that are owned by us, and also has a convenience -method to auto-generate some self-issued cash states that can be used for test trading. A real wallet would persist -states relevant to us into a database and once such a wallet is implemented, this scaffolding can be removed.

    -
    -
    -

    Types

    - - - - - - - -
    -InnerState -class InnerState
    -

    Constructors

    - - - - - - - -
    -<init> -InMemoryWalletService(services: ServiceHub)

    This class implements a simple, in memory wallet that tracks states that are owned by us, and also has a convenience -method to auto-generate some self-issued cash states that can be used for test trading. A real wallet would persist -states relevant to us into a database and once such a wallet is implemented, this scaffolding can be removed.

    -
    -

    Properties

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -currentWallet -open val currentWallet: Wallet

    Returns a read-only snapshot of the wallet at the time the call is made. Note that if you consume states or -keys in this wallet, you must inform the wallet service so it can update its internal state.

    -
    -linearHeads -open val linearHeads: Map<UniqueIdentifier, StateAndRef<LinearState>>

    Returns a snapshot of the heads of LinearStates.

    -
    -log -open val log: <ERROR CLASS>
    -mutex -val mutex: ThreadBox<InnerState>
    -services -val services: ServiceHub
    -updates -open val updates: <ERROR CLASS><Update>

    Get a synchronous Observable of updates. When observations are pushed to the Observer, the Wallet will already incorporate -the update.

    -
    -

    Functions

    - - - - - - - -
    -notifyAll -open fun notifyAll(txns: Iterable<WireTransaction>): Wallet

    Possibly update the wallet by marking as spent states that these transactions consume, and adding any relevant -new states that they create. You should only insert transactions that have been successfully verified here

    -
    -

    Inherited Functions

    - - - - - - - - - - - - - - - - - - - - - - - -
    -linearHeadsOfType_ -open fun <T : LinearState> linearHeadsOfType_(stateType: Class<T>): Map<UniqueIdentifier, StateAndRef<T>>

    Returns the linearHeads only when the type of the state would be considered an instanceof the given type.

    -
    -notify -open fun notify(tx: WireTransaction): Wallet

    Same as notifyAll but with a single transaction.

    -
    -statesForRefs -open fun statesForRefs(refs: List<StateRef>): Map<StateRef, TransactionState<*>?>
    -toToken -open fun toToken(context: SerializeAsTokenContext): SerializationToken
    -whenConsumed -open fun whenConsumed(ref: StateRef): <ERROR CLASS><Update>

    Provide a Future for when a StateRef is consumed, which can be very useful in building tests.

    -
    -

    Extension Functions

    - - - - - - - -
    -linearHeadsOfType -fun <T : LinearState> WalletService.linearHeadsOfType(): <ERROR CLASS>
    -

    Inheritors

    - - - - - - - -
    -NodeWalletService -class NodeWalletService : InMemoryWalletService

    Currently, the node wallet service is a very simple RDBMS backed implementation. It will change significantly when -we add further functionality as the design for the wallet and wallet service matures.

    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/notify-all.html b/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/notify-all.html deleted file mode 100644 index fcd90b2fd4..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-in-memory-wallet-service/notify-all.html +++ /dev/null @@ -1,22 +0,0 @@ - - -InMemoryWalletService.notifyAll - - - - -com.r3corda.core.testing / InMemoryWalletService / notifyAll
    -
    -

    notifyAll

    - -open fun notifyAll(txns: Iterable<WireTransaction>): Wallet
    -Overrides WalletService.notifyAll
    -

    Possibly update the wallet by marking as spent states that these transactions consume, and adding any relevant -new states that they create. You should only insert transactions that have been successfully verified here

    -

    Returns the new wallet that resulted from applying the transactions (note: it may quickly become out of date).

    -

    TODO: Consider if theres a good way to enforce the must-be-verified requirement in the type system.

    -
    -
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-instant-generator/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-instant-generator/-init-.html new file mode 100644 index 0000000000..4fc2be759c --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-instant-generator/-init-.html @@ -0,0 +1,14 @@ + + +InstantGenerator.<init> - + + + +com.r3corda.core.testing / InstantGenerator / <init>
    +
    +

    <init>

    +InstantGenerator()
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-instant-generator/generate.html b/docs/build/html/api/com.r3corda.core.testing/-instant-generator/generate.html new file mode 100644 index 0000000000..f798909968 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-instant-generator/generate.html @@ -0,0 +1,15 @@ + + +InstantGenerator.generate - + + + +com.r3corda.core.testing / InstantGenerator / generate
    +
    +

    generate

    + +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Instant
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-instant-generator/index.html b/docs/build/html/api/com.r3corda.core.testing/-instant-generator/index.html new file mode 100644 index 0000000000..1711751652 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-instant-generator/index.html @@ -0,0 +1,36 @@ + + +InstantGenerator - + + + +com.r3corda.core.testing / InstantGenerator
    +
    +

    InstantGenerator

    +class InstantGenerator
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +InstantGenerator()
    +

    Functions

    + + + + + + + +
    +generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Instant
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-issued-generator/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-issued-generator/-init-.html new file mode 100644 index 0000000000..d63f3a3147 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-issued-generator/-init-.html @@ -0,0 +1,14 @@ + + +IssuedGenerator.<init> - + + + +com.r3corda.core.testing / IssuedGenerator / <init>
    +
    +

    <init>

    +IssuedGenerator(productGenerator: <ERROR CLASS><T>)
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-issued-generator/generate.html b/docs/build/html/api/com.r3corda.core.testing/-issued-generator/generate.html new file mode 100644 index 0000000000..2441cef631 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-issued-generator/generate.html @@ -0,0 +1,15 @@ + + +IssuedGenerator.generate - + + + +com.r3corda.core.testing / IssuedGenerator / generate
    +
    +

    generate

    + +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Issued<T>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-issued-generator/index.html b/docs/build/html/api/com.r3corda.core.testing/-issued-generator/index.html new file mode 100644 index 0000000000..3178e74ab0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-issued-generator/index.html @@ -0,0 +1,47 @@ + + +IssuedGenerator - + + + +com.r3corda.core.testing / IssuedGenerator
    +
    +

    IssuedGenerator

    +class IssuedGenerator<T>
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +IssuedGenerator(productGenerator: <ERROR CLASS><T>)
    +

    Properties

    + + + + + + + +
    +productGenerator +val productGenerator: <ERROR CLASS><T>
    +

    Functions

    + + + + + + + +
    +generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Issued<T>
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-issued-generator/product-generator.html b/docs/build/html/api/com.r3corda.core.testing/-issued-generator/product-generator.html new file mode 100644 index 0000000000..1e5158c358 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-issued-generator/product-generator.html @@ -0,0 +1,15 @@ + + +IssuedGenerator.productGenerator - + + + +com.r3corda.core.testing / IssuedGenerator / productGenerator
    +
    +

    productGenerator

    + +val productGenerator: <ERROR CLASS><T>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/_transaction.html b/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/_transaction.html deleted file mode 100644 index de50a07a9a..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/_transaction.html +++ /dev/null @@ -1,27 +0,0 @@ - - -LedgerDSLInterpreter._transaction - - - - -com.r3corda.core.testing / LedgerDSLInterpreter / _transaction
    -
    -

    _transaction

    - -abstract fun _transaction(transactionLabel: String?, transactionBuilder: TransactionBuilder, dsl: TransactionDSL<T>.() -> EnforceVerifyOrFail): WireTransaction
    -

    Creates and adds a transaction to the ledger.

    -

    Parameters

    - -transactionLabel - Optional label of the transaction, to be used in diagnostic messages.
    -
    - -transactionBuilder - The base transactionBuilder that will be used to build the transaction.
    -
    - -dsl - The dsl that should be interpreted for building the transaction.
    -

    Return
    -The final WireTransaction of the built transaction.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/_unverified-transaction.html b/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/_unverified-transaction.html deleted file mode 100644 index 0295e653ac..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/_unverified-transaction.html +++ /dev/null @@ -1,27 +0,0 @@ - - -LedgerDSLInterpreter._unverifiedTransaction - - - - -com.r3corda.core.testing / LedgerDSLInterpreter / _unverifiedTransaction
    -
    -

    _unverifiedTransaction

    - -abstract fun _unverifiedTransaction(transactionLabel: String?, transactionBuilder: TransactionBuilder, dsl: TransactionDSL<T>.() -> Unit): WireTransaction
    -

    Creates and adds a transaction to the ledger that will not be verified by verifies.

    -

    Parameters

    - -transactionLabel - Optional label of the transaction, to be used in diagnostic messages.
    -
    - -transactionBuilder - The base transactionBuilder that will be used to build the transaction.
    -
    - -dsl - The dsl that should be interpreted for building the transaction.
    -

    Return
    -The final WireTransaction of the built transaction.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/attachment.html b/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/attachment.html deleted file mode 100644 index 08c8914fa1..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/attachment.html +++ /dev/null @@ -1,21 +0,0 @@ - - -LedgerDSLInterpreter.attachment - - - - -com.r3corda.core.testing / LedgerDSLInterpreter / attachment
    -
    -

    attachment

    - -abstract fun attachment(attachment: InputStream): SecureHash
    -

    Adds an attachment to the ledger.

    -

    Parameters

    - -attachment - The InputStream defining the contents of the attachment.
    -

    Return
    -The SecureHash that identifies the attachment, to be used in transactions.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/index.html b/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/index.html deleted file mode 100644 index 6875f18bf7..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/index.html +++ /dev/null @@ -1,122 +0,0 @@ - - -LedgerDSLInterpreter - - - - -com.r3corda.core.testing / LedgerDSLInterpreter
    -
    -

    LedgerDSLInterpreter

    -interface LedgerDSLInterpreter<out T : TransactionDSLInterpreter> : Verifies, OutputStateLookup
    -

    This interface defines the bare bone functionality that a Ledger DSL interpreter should implement.

    -

    TODO (Kotlin 1.1): Use type synonyms to make the type params less unwieldy

    -
    -
    -
    -
    -

    Functions

    - - - - - - - - - - - - - - - - - - - -
    -_transaction -abstract fun _transaction(transactionLabel: String?, transactionBuilder: TransactionBuilder, dsl: TransactionDSL<T>.() -> EnforceVerifyOrFail): WireTransaction

    Creates and adds a transaction to the ledger.

    -
    -_unverifiedTransaction -abstract fun _unverifiedTransaction(transactionLabel: String?, transactionBuilder: TransactionBuilder, dsl: TransactionDSL<T>.() -> Unit): WireTransaction

    Creates and adds a transaction to the ledger that will not be verified by verifies.

    -
    -attachment -abstract fun attachment(attachment: InputStream): SecureHash

    Adds an attachment to the ledger.

    -
    -tweak -abstract fun tweak(dsl: LedgerDSL<T, LedgerDSLInterpreter<T>>.() -> Unit): Unit

    Creates a local scoped copy of the ledger.

    -
    -

    Inherited Functions

    - - - - - - - - - - - - - - - - - - - - - - - -
    -fails -open fun fails(): EnforceVerifyOrFail

    Asserts that verifies throws, with no condition on the exception message.

    -
    -fails with -open infix fun fails with(msg: String): EnforceVerifyOrFail
    -failsWith -open fun failsWith(expectedMessage: String?): EnforceVerifyOrFail

    Asserts that verifies() throws.

    -
    -retrieveOutputStateAndRef -abstract fun <S : ContractState> retrieveOutputStateAndRef(clazz: Class<S>, label: String): StateAndRef<S>

    Retrieves an output previously defined by TransactionDSLInterpreter._output with a label passed in.

    -
    -verifies -abstract fun verifies(): EnforceVerifyOrFail

    Verifies the ledger/transaction, throws if the verification fails.

    -
    -

    Extension Functions

    - - - - - - - -
    -ledger -fun LedgerDSLInterpreter<TransactionDSLInterpreter>.ledger(dsl: LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.() -> Unit): Unit
    -

    Inheritors

    - - - - - - - - - - - -
    -LedgerDSL -class LedgerDSL<out T : TransactionDSLInterpreter, out L : LedgerDSLInterpreter<T>> : LedgerDSLInterpreter<TransactionDSLInterpreter>

    This is the class that defines the syntactic sugar of the ledger Test DSL and delegates to the contained interpreter, -and what is actually used in ledger{(...)}. Add convenience functions here, or if you want to extend the DSL -functionality then first add your primitive to LedgerDSLInterpreter and then add the convenience defaults/extension -methods here.

    -
    -TestLedgerDSLInterpreter -data class TestLedgerDSLInterpreter : LedgerDSLInterpreter<TestTransactionDSLInterpreter>
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/tweak.html b/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/tweak.html deleted file mode 100644 index a865c7389f..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l-interpreter/tweak.html +++ /dev/null @@ -1,19 +0,0 @@ - - -LedgerDSLInterpreter.tweak - - - - -com.r3corda.core.testing / LedgerDSLInterpreter / tweak
    -
    -

    tweak

    - -abstract fun tweak(dsl: LedgerDSL<T, LedgerDSLInterpreter<T>>.() -> Unit): Unit
    -

    Creates a local scoped copy of the ledger.

    -

    Parameters

    - -dsl - The ledger DSL to be interpreted using the copy.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/-init-.html deleted file mode 100644 index c8b414f292..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/-init-.html +++ /dev/null @@ -1,18 +0,0 @@ - - -LedgerDSL.<init> - - - - -com.r3corda.core.testing / LedgerDSL / <init>
    -
    -

    <init>

    -LedgerDSL(interpreter: L)
    -

    This is the class that defines the syntactic sugar of the ledger Test DSL and delegates to the contained interpreter, -and what is actually used in ledger{(...)}. Add convenience functions here, or if you want to extend the DSL -functionality then first add your primitive to LedgerDSLInterpreter and then add the convenience defaults/extension -methods here.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/index.html b/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/index.html deleted file mode 100644 index ae065f0ca4..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/index.html +++ /dev/null @@ -1,98 +0,0 @@ - - -LedgerDSL - - - - -com.r3corda.core.testing / LedgerDSL
    -
    -

    LedgerDSL

    -class LedgerDSL<out T : TransactionDSLInterpreter, out L : LedgerDSLInterpreter<T>> : LedgerDSLInterpreter<TransactionDSLInterpreter>
    -

    This is the class that defines the syntactic sugar of the ledger Test DSL and delegates to the contained interpreter, -and what is actually used in ledger{(...)}. Add convenience functions here, or if you want to extend the DSL -functionality then first add your primitive to LedgerDSLInterpreter and then add the convenience defaults/extension -methods here.

    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -LedgerDSL(interpreter: L)

    This is the class that defines the syntactic sugar of the ledger Test DSL and delegates to the contained interpreter, -and what is actually used in ledger{(...)}. Add convenience functions here, or if you want to extend the DSL -functionality then first add your primitive to LedgerDSLInterpreter and then add the convenience defaults/extension -methods here.

    -
    -

    Properties

    - - - - - - - -
    -interpreter -val interpreter: L
    -

    Functions

    - - - - - - - - - - - - - - - - - - - - - - - -
    -output -fun <S : ContractState> String.output(): S

    Retrieves the output TransactionState based on the label.

    -
    -outputStateAndRef -fun <S : ContractState> String.outputStateAndRef(): StateAndRef<S>
    -retrieveOutput -fun <S : ContractState> retrieveOutput(clazz: Class<S>, label: String): S
    -transaction -fun transaction(label: String? = null, transactionBuilder: TransactionBuilder = TransactionBuilder(notary = DUMMY_NOTARY), dsl: TransactionDSL<TransactionDSLInterpreter>.() -> EnforceVerifyOrFail): WireTransaction
    -unverifiedTransaction -fun unverifiedTransaction(label: String? = null, transactionBuilder: TransactionBuilder = TransactionBuilder(notary = DUMMY_NOTARY), dsl: TransactionDSL<TransactionDSLInterpreter>.() -> Unit): WireTransaction
    -

    Extension Functions

    - - - - - - - - - - - -
    -ledger -fun LedgerDSLInterpreter<TransactionDSLInterpreter>.ledger(dsl: LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.() -> Unit): Unit
    -signAll -fun LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.signAll(vararg extraKeys: KeyPair): <ERROR CLASS>

    Signs all transactions in the ledger.

    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/interpreter.html b/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/interpreter.html deleted file mode 100644 index 88c8d832ad..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/interpreter.html +++ /dev/null @@ -1,15 +0,0 @@ - - -LedgerDSL.interpreter - - - - -com.r3corda.core.testing / LedgerDSL / interpreter
    -
    -

    interpreter

    - -val interpreter: L
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/output-ref.html b/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/output-ref.html deleted file mode 100644 index a585571600..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/output-ref.html +++ /dev/null @@ -1,19 +0,0 @@ - - -LedgerDSL.outputRef - - - - -com.r3corda.core.testing / LedgerDSL / outputRef
    -
    -

    outputRef

    - -fun String.outputRef(): StateRef
    -

    Retrieves the output StateRef based on the label.

    -

    See Also
    -

    OutputStateLookup.retrieveOutputStateAndRef

    -

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/output-state-and-ref.html b/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/output-state-and-ref.html deleted file mode 100644 index 81dac0c444..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/output-state-and-ref.html +++ /dev/null @@ -1,18 +0,0 @@ - - -LedgerDSL.outputStateAndRef - - - - -com.r3corda.core.testing / LedgerDSL / outputStateAndRef
    -
    -

    outputStateAndRef

    - -inline fun <reified S : ContractState> String.outputStateAndRef(): StateAndRef<S>
    -

    See Also
    -

    OutputStateLookup.retrieveOutputStateAndRef

    -

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/output.html b/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/output.html deleted file mode 100644 index d5c6e54747..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/output.html +++ /dev/null @@ -1,19 +0,0 @@ - - -LedgerDSL.output - - - - -com.r3corda.core.testing / LedgerDSL / output
    -
    -

    output

    - -inline fun <reified S : ContractState> String.output(): S
    -

    Retrieves the output TransactionState based on the label.

    -

    See Also
    -

    OutputStateLookup.retrieveOutputStateAndRef

    -

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/retrieve-output.html b/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/retrieve-output.html deleted file mode 100644 index 5d52834e53..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/retrieve-output.html +++ /dev/null @@ -1,18 +0,0 @@ - - -LedgerDSL.retrieveOutput - - - - -com.r3corda.core.testing / LedgerDSL / retrieveOutput
    -
    -

    retrieveOutput

    - -fun <S : ContractState> retrieveOutput(clazz: Class<S>, label: String): S
    -

    See Also
    -

    OutputStateLookup.retrieveOutputStateAndRef

    -

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/transaction.html b/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/transaction.html deleted file mode 100644 index 80ad7214d1..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/transaction.html +++ /dev/null @@ -1,18 +0,0 @@ - - -LedgerDSL.transaction - - - - -com.r3corda.core.testing / LedgerDSL / transaction
    -
    -

    transaction

    - -fun transaction(label: String? = null, transactionBuilder: TransactionBuilder = TransactionBuilder(notary = DUMMY_NOTARY), dsl: TransactionDSL<TransactionDSLInterpreter>.() -> EnforceVerifyOrFail): WireTransaction
    -

    See Also
    -

    LedgerDSLInterpreter._transaction

    -

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/unverified-transaction.html b/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/unverified-transaction.html deleted file mode 100644 index a5dc702da4..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-ledger-d-s-l/unverified-transaction.html +++ /dev/null @@ -1,18 +0,0 @@ - - -LedgerDSL.unverifiedTransaction - - - - -com.r3corda.core.testing / LedgerDSL / unverifiedTransaction
    -
    -

    unverifiedTransaction

    - -fun unverifiedTransaction(label: String? = null, transactionBuilder: TransactionBuilder = TransactionBuilder(notary = DUMMY_NOTARY), dsl: TransactionDSL<TransactionDSLInterpreter>.() -> Unit): WireTransaction
    -

    See Also
    -

    LedgerDSLInterpreter._unverifiedTransaction

    -

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-m-e-g-a_-c-o-r-p.html b/docs/build/html/api/com.r3corda.core.testing/-m-e-g-a_-c-o-r-p.html deleted file mode 100644 index 747158a1e0..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-m-e-g-a_-c-o-r-p.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MEGA_CORP - - - - -com.r3corda.core.testing / MEGA_CORP
    -
    -

    MEGA_CORP

    - -val MEGA_CORP: Party
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-m-e-g-a_-c-o-r-p_-k-e-y.html b/docs/build/html/api/com.r3corda.core.testing/-m-e-g-a_-c-o-r-p_-k-e-y.html deleted file mode 100644 index e36b1d42ca..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-m-e-g-a_-c-o-r-p_-k-e-y.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MEGA_CORP_KEY - - - - -com.r3corda.core.testing / MEGA_CORP_KEY
    -
    -

    MEGA_CORP_KEY

    - -val MEGA_CORP_KEY: KeyPair
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-m-e-g-a_-c-o-r-p_-p-u-b-k-e-y.html b/docs/build/html/api/com.r3corda.core.testing/-m-e-g-a_-c-o-r-p_-p-u-b-k-e-y.html deleted file mode 100644 index 560091e4fd..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-m-e-g-a_-c-o-r-p_-p-u-b-k-e-y.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MEGA_CORP_PUBKEY - - - - -com.r3corda.core.testing / MEGA_CORP_PUBKEY
    -
    -

    MEGA_CORP_PUBKEY

    - -val MEGA_CORP_PUBKEY: PublicKey
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-m-i-n-i_-c-o-r-p.html b/docs/build/html/api/com.r3corda.core.testing/-m-i-n-i_-c-o-r-p.html deleted file mode 100644 index 9623e89a7d..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-m-i-n-i_-c-o-r-p.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MINI_CORP - - - - -com.r3corda.core.testing / MINI_CORP
    -
    -

    MINI_CORP

    - -val MINI_CORP: Party
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-m-i-n-i_-c-o-r-p_-k-e-y.html b/docs/build/html/api/com.r3corda.core.testing/-m-i-n-i_-c-o-r-p_-k-e-y.html deleted file mode 100644 index 241a20f992..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-m-i-n-i_-c-o-r-p_-k-e-y.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MINI_CORP_KEY - - - - -com.r3corda.core.testing / MINI_CORP_KEY
    -
    -

    MINI_CORP_KEY

    - -val MINI_CORP_KEY: KeyPair
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-m-i-n-i_-c-o-r-p_-p-u-b-k-e-y.html b/docs/build/html/api/com.r3corda.core.testing/-m-i-n-i_-c-o-r-p_-p-u-b-k-e-y.html deleted file mode 100644 index b5838cff64..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-m-i-n-i_-c-o-r-p_-p-u-b-k-e-y.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MINI_CORP_PUBKEY - - - - -com.r3corda.core.testing / MINI_CORP_PUBKEY
    -
    -

    MINI_CORP_PUBKEY

    - -val MINI_CORP_PUBKEY: PublicKey
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-m-o-c-k_-i-d-e-n-t-i-t-y_-s-e-r-v-i-c-e.html b/docs/build/html/api/com.r3corda.core.testing/-m-o-c-k_-i-d-e-n-t-i-t-y_-s-e-r-v-i-c-e.html deleted file mode 100644 index 2a159a15ff..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-m-o-c-k_-i-d-e-n-t-i-t-y_-s-e-r-v-i-c-e.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MOCK_IDENTITY_SERVICE - - - - -com.r3corda.core.testing / MOCK_IDENTITY_SERVICE
    -
    -

    MOCK_IDENTITY_SERVICE

    - -val MOCK_IDENTITY_SERVICE: MockIdentityService
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-o-r-a-c-l-e_-k-e-y.html b/docs/build/html/api/com.r3corda.core.testing/-o-r-a-c-l-e_-k-e-y.html deleted file mode 100644 index 354c1c4098..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-o-r-a-c-l-e_-k-e-y.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ORACLE_KEY - - - - -com.r3corda.core.testing / ORACLE_KEY
    -
    -

    ORACLE_KEY

    - -val ORACLE_KEY: KeyPair
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-o-r-a-c-l-e_-p-u-b-k-e-y.html b/docs/build/html/api/com.r3corda.core.testing/-o-r-a-c-l-e_-p-u-b-k-e-y.html deleted file mode 100644 index ffbd6b8e4a..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-o-r-a-c-l-e_-p-u-b-k-e-y.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ORACLE_PUBKEY - - - - -com.r3corda.core.testing / ORACLE_PUBKEY
    -
    -

    ORACLE_PUBKEY

    - -val ORACLE_PUBKEY: PublicKey
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-output-state-lookup/index.html b/docs/build/html/api/com.r3corda.core.testing/-output-state-lookup/index.html deleted file mode 100644 index 0220fd85ea..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-output-state-lookup/index.html +++ /dev/null @@ -1,55 +0,0 @@ - - -OutputStateLookup - - - - -com.r3corda.core.testing / OutputStateLookup
    -
    -

    OutputStateLookup

    -interface OutputStateLookup
    -

    This interface defines output state lookup by label. It is split from the interpreter interfaces so that outputs may -be looked up both in ledger{..} and transaction{..} blocks.

    -
    -
    -

    Functions

    - - - - - - - -
    -retrieveOutputStateAndRef -abstract fun <S : ContractState> retrieveOutputStateAndRef(clazz: Class<S>, label: String): StateAndRef<S>

    Retrieves an output previously defined by TransactionDSLInterpreter._output with a label passed in.

    -
    -

    Inheritors

    - - - - - - - - - - - - - - - -
    -LedgerDSLInterpreter -interface LedgerDSLInterpreter<out T : TransactionDSLInterpreter> : Verifies, OutputStateLookup

    This interface defines the bare bone functionality that a Ledger DSL interpreter should implement.

    -
    -TestTransactionDSLInterpreter -data class TestTransactionDSLInterpreter : TransactionDSLInterpreter, OutputStateLookup

    This interpreter builds a transaction, and TransactionDSL.verifies that the resolved transaction is correct. Note -that transactions corresponding to input states are not verified. Use LedgerDSL.verifies for that.

    -
    -TransactionDSLInterpreter -interface TransactionDSLInterpreter : Verifies, OutputStateLookup

    This interface defines the bare bone functionality that a Transaction DSL interpreter should implement.

    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-output-state-lookup/retrieve-output-state-and-ref.html b/docs/build/html/api/com.r3corda.core.testing/-output-state-lookup/retrieve-output-state-and-ref.html deleted file mode 100644 index 8213a461d7..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-output-state-lookup/retrieve-output-state-and-ref.html +++ /dev/null @@ -1,24 +0,0 @@ - - -OutputStateLookup.retrieveOutputStateAndRef - - - - -com.r3corda.core.testing / OutputStateLookup / retrieveOutputStateAndRef
    -
    -

    retrieveOutputStateAndRef

    - -abstract fun <S : ContractState> retrieveOutputStateAndRef(clazz: Class<S>, label: String): StateAndRef<S>
    -

    Retrieves an output previously defined by TransactionDSLInterpreter._output with a label passed in.

    -

    Parameters

    - -clazz - The class object holding the type of the output state expected.
    -
    - -label - The label of the to-be-retrieved output state.
    -

    Return
    -The output StateAndRef.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-party-and-reference-generator/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-party-and-reference-generator/-init-.html new file mode 100644 index 0000000000..84ffa41f02 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-party-and-reference-generator/-init-.html @@ -0,0 +1,14 @@ + + +PartyAndReferenceGenerator.<init> - + + + +com.r3corda.core.testing / PartyAndReferenceGenerator / <init>
    +
    +

    <init>

    +PartyAndReferenceGenerator()
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-party-and-reference-generator/generate.html b/docs/build/html/api/com.r3corda.core.testing/-party-and-reference-generator/generate.html new file mode 100644 index 0000000000..65c99ac847 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-party-and-reference-generator/generate.html @@ -0,0 +1,15 @@ + + +PartyAndReferenceGenerator.generate - + + + +com.r3corda.core.testing / PartyAndReferenceGenerator / generate
    +
    +

    generate

    + +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): PartyAndReference
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-party-and-reference-generator/index.html b/docs/build/html/api/com.r3corda.core.testing/-party-and-reference-generator/index.html new file mode 100644 index 0000000000..57098a9cb3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-party-and-reference-generator/index.html @@ -0,0 +1,36 @@ + + +PartyAndReferenceGenerator - + + + +com.r3corda.core.testing / PartyAndReferenceGenerator
    +
    +

    PartyAndReferenceGenerator

    +class PartyAndReferenceGenerator
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +PartyAndReferenceGenerator()
    +

    Functions

    + + + + + + + +
    +generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): PartyAndReference
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-party-generator/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-party-generator/-init-.html new file mode 100644 index 0000000000..a849e2ebb8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-party-generator/-init-.html @@ -0,0 +1,14 @@ + + +PartyGenerator.<init> - + + + +com.r3corda.core.testing / PartyGenerator / <init>
    +
    +

    <init>

    +PartyGenerator()
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-party-generator/generate.html b/docs/build/html/api/com.r3corda.core.testing/-party-generator/generate.html new file mode 100644 index 0000000000..fca476e382 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-party-generator/generate.html @@ -0,0 +1,15 @@ + + +PartyGenerator.generate - + + + +com.r3corda.core.testing / PartyGenerator / generate
    +
    +

    generate

    + +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Party
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-party-generator/index.html b/docs/build/html/api/com.r3corda.core.testing/-party-generator/index.html new file mode 100644 index 0000000000..594d275c2c --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-party-generator/index.html @@ -0,0 +1,36 @@ + + +PartyGenerator - + + + +com.r3corda.core.testing / PartyGenerator
    +
    +

    PartyGenerator

    +class PartyGenerator
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +PartyGenerator()
    +

    Functions

    + + + + + + + +
    +generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Party
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-private-key-generator/-init-.html similarity index 62% rename from docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-init-.html rename to docs/build/html/api/com.r3corda.core.testing/-private-key-generator/-init-.html index bfb32685fd..c7cde89ad3 100644 --- a/docs/build/html/api/com.r3corda.core.testing/-dummy-linear-contract/-init-.html +++ b/docs/build/html/api/com.r3corda.core.testing/-private-key-generator/-init-.html @@ -1,13 +1,13 @@ -DummyLinearContract.<init> - +PrivateKeyGenerator.<init> - -com.r3corda.core.testing / DummyLinearContract / <init>
    +com.r3corda.core.testing / PrivateKeyGenerator / <init>

    <init>

    -DummyLinearContract()
    +PrivateKeyGenerator()


    diff --git a/docs/build/html/api/com.r3corda.core.testing/-private-key-generator/generate.html b/docs/build/html/api/com.r3corda.core.testing/-private-key-generator/generate.html new file mode 100644 index 0000000000..91705431de --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-private-key-generator/generate.html @@ -0,0 +1,15 @@ + + +PrivateKeyGenerator.generate - + + + +com.r3corda.core.testing / PrivateKeyGenerator / generate
    +
    +

    generate

    + +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): PrivateKey
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-private-key-generator/index.html b/docs/build/html/api/com.r3corda.core.testing/-private-key-generator/index.html new file mode 100644 index 0000000000..10529d8cec --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-private-key-generator/index.html @@ -0,0 +1,36 @@ + + +PrivateKeyGenerator - + + + +com.r3corda.core.testing / PrivateKeyGenerator
    +
    +

    PrivateKeyGenerator

    +class PrivateKeyGenerator
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +PrivateKeyGenerator()
    +

    Functions

    + + + + + + + +
    +generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): PrivateKey
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-public-key-generator/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-public-key-generator/-init-.html new file mode 100644 index 0000000000..161b3cb8db --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-public-key-generator/-init-.html @@ -0,0 +1,14 @@ + + +PublicKeyGenerator.<init> - + + + +com.r3corda.core.testing / PublicKeyGenerator / <init>
    +
    +

    <init>

    +PublicKeyGenerator()
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-public-key-generator/generate.html b/docs/build/html/api/com.r3corda.core.testing/-public-key-generator/generate.html new file mode 100644 index 0000000000..2c1a5a5367 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-public-key-generator/generate.html @@ -0,0 +1,15 @@ + + +PublicKeyGenerator.generate - + + + +com.r3corda.core.testing / PublicKeyGenerator / generate
    +
    +

    generate

    + +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): PublicKey
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-public-key-generator/index.html b/docs/build/html/api/com.r3corda.core.testing/-public-key-generator/index.html new file mode 100644 index 0000000000..767476ffc3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-public-key-generator/index.html @@ -0,0 +1,36 @@ + + +PublicKeyGenerator - + + + +com.r3corda.core.testing / PublicKeyGenerator
    +
    +

    PublicKeyGenerator

    +class PublicKeyGenerator
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +PublicKeyGenerator()
    +

    Functions

    + + + + + + + +
    +generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): PublicKey
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-secure-hash-generator/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-secure-hash-generator/-init-.html new file mode 100644 index 0000000000..e521dda22c --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-secure-hash-generator/-init-.html @@ -0,0 +1,14 @@ + + +SecureHashGenerator.<init> - + + + +com.r3corda.core.testing / SecureHashGenerator / <init>
    +
    +

    <init>

    +SecureHashGenerator()
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-secure-hash-generator/generate.html b/docs/build/html/api/com.r3corda.core.testing/-secure-hash-generator/generate.html new file mode 100644 index 0000000000..d0e7c3db94 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-secure-hash-generator/generate.html @@ -0,0 +1,15 @@ + + +SecureHashGenerator.generate - + + + +com.r3corda.core.testing / SecureHashGenerator / generate
    +
    +

    generate

    + +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): SecureHash
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-secure-hash-generator/index.html b/docs/build/html/api/com.r3corda.core.testing/-secure-hash-generator/index.html new file mode 100644 index 0000000000..2fc35552a0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-secure-hash-generator/index.html @@ -0,0 +1,36 @@ + + +SecureHashGenerator - + + + +com.r3corda.core.testing / SecureHashGenerator
    +
    +

    SecureHashGenerator

    +class SecureHashGenerator
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +SecureHashGenerator()
    +

    Functions

    + + + + + + + +
    +generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): SecureHash
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-state-ref-generator/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-state-ref-generator/-init-.html new file mode 100644 index 0000000000..574ea3d692 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-state-ref-generator/-init-.html @@ -0,0 +1,14 @@ + + +StateRefGenerator.<init> - + + + +com.r3corda.core.testing / StateRefGenerator / <init>
    +
    +

    <init>

    +StateRefGenerator()
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-state-ref-generator/generate.html b/docs/build/html/api/com.r3corda.core.testing/-state-ref-generator/generate.html new file mode 100644 index 0000000000..2eda6bb943 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-state-ref-generator/generate.html @@ -0,0 +1,15 @@ + + +StateRefGenerator.generate - + + + +com.r3corda.core.testing / StateRefGenerator / generate
    +
    +

    generate

    + +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): StateRef
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-state-ref-generator/index.html b/docs/build/html/api/com.r3corda.core.testing/-state-ref-generator/index.html new file mode 100644 index 0000000000..f202062778 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-state-ref-generator/index.html @@ -0,0 +1,36 @@ + + +StateRefGenerator - + + + +com.r3corda.core.testing / StateRefGenerator
    +
    +

    StateRefGenerator

    +class StateRefGenerator
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +StateRefGenerator()
    +

    Functions

    + + + + + + + +
    +generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): StateRef
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-t-e-s-t_-t-x_-t-i-m-e.html b/docs/build/html/api/com.r3corda.core.testing/-t-e-s-t_-t-x_-t-i-m-e.html deleted file mode 100644 index 5598891d30..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-t-e-s-t_-t-x_-t-i-m-e.html +++ /dev/null @@ -1,28 +0,0 @@ - - -TEST_TX_TIME - - - - -com.r3corda.core.testing / TEST_TX_TIME
    -
    -

    TEST_TX_TIME

    - -val TEST_TX_TIME: Instant
    -JAVA INTEROP

    Please keep the following points in mind when extending the Kotlin DSL:

    -
    • Annotate functions with Kotlin defaults with @JvmOverloads. This produces the relevant overloads for Java.

      -
    • Void closures in arguments are inconvenient in Java, use overloading to define non-closure variants as well.

      -
    • Top-level vals are trickier. DO NOT USE@JvmField at the top level Its surprisingly easy to -introduce a static init cycle because of the way Kotlin compiles top-level things, which can cause -non-deterministic behaviour, including your field not being initialized at all Instead opt for a proper Kotlin -val either with a custom @JvmStatic get() or a lazy delegate if the initialiser has side-effects. See examples below.

      -
    • Infix functions work as regular ones from Java, but symbols with spaces in them dont Define a camelCase variant -as well.

      -
    • varargs are exposed as array types in Java. Define overloads for common cases.

      -
    • The Int.DOLLARS syntax doesnt work from Java. Use the DOLLARS(int) function instead.

      -

    -
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-init-.html deleted file mode 100644 index 4155cc2f8e..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -TestLedgerDSLInterpreter.<init> - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / <init>
    -
    -

    <init>

    -TestLedgerDSLInterpreter(services: ServiceHub)
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-type-mismatch/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-type-mismatch/-init-.html deleted file mode 100644 index 538aa5e095..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-type-mismatch/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -TestLedgerDSLInterpreter.TypeMismatch.<init> - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / TypeMismatch / <init>
    -
    -

    <init>

    -TypeMismatch(requested: Class<*>, actual: Class<*>)
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-type-mismatch/index.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-type-mismatch/index.html deleted file mode 100644 index a128759508..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-type-mismatch/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - -TestLedgerDSLInterpreter.TypeMismatch - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / TypeMismatch
    -
    -

    TypeMismatch

    -class TypeMismatch : Exception
    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -TypeMismatch(requested: Class<*>, actual: Class<*>)
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-verifies-failed/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-verifies-failed/-init-.html deleted file mode 100644 index e8f5f9f17b..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-verifies-failed/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -TestLedgerDSLInterpreter.VerifiesFailed.<init> - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / VerifiesFailed / <init>
    -
    -

    <init>

    -VerifiesFailed(transactionName: String, cause: Throwable)
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-verifies-failed/index.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-verifies-failed/index.html deleted file mode 100644 index 37a5eaf9fc..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/-verifies-failed/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - -TestLedgerDSLInterpreter.VerifiesFailed - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / VerifiesFailed
    -
    -

    VerifiesFailed

    -class VerifiesFailed : Exception
    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -VerifiesFailed(transactionName: String, cause: Throwable)
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/_transaction.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/_transaction.html deleted file mode 100644 index 6d7e36b6bc..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/_transaction.html +++ /dev/null @@ -1,27 +0,0 @@ - - -TestLedgerDSLInterpreter._transaction - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / _transaction
    -
    -

    _transaction

    - -fun _transaction(transactionLabel: String?, transactionBuilder: TransactionBuilder, dsl: TransactionDSL<TestTransactionDSLInterpreter>.() -> EnforceVerifyOrFail): WireTransaction
    -

    Creates and adds a transaction to the ledger.

    -

    Parameters

    - -transactionLabel - Optional label of the transaction, to be used in diagnostic messages.
    -
    - -transactionBuilder - The base transactionBuilder that will be used to build the transaction.
    -
    - -dsl - The dsl that should be interpreted for building the transaction.
    -

    Return
    -The final WireTransaction of the built transaction.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/_unverified-transaction.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/_unverified-transaction.html deleted file mode 100644 index ee89fd9270..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/_unverified-transaction.html +++ /dev/null @@ -1,27 +0,0 @@ - - -TestLedgerDSLInterpreter._unverifiedTransaction - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / _unverifiedTransaction
    -
    -

    _unverifiedTransaction

    - -fun _unverifiedTransaction(transactionLabel: String?, transactionBuilder: TransactionBuilder, dsl: TransactionDSL<TestTransactionDSLInterpreter>.() -> Unit): WireTransaction
    -

    Creates and adds a transaction to the ledger that will not be verified by verifies.

    -

    Parameters

    - -transactionLabel - Optional label of the transaction, to be used in diagnostic messages.
    -
    - -transactionBuilder - The base transactionBuilder that will be used to build the transaction.
    -
    - -dsl - The dsl that should be interpreted for building the transaction.
    -

    Return
    -The final WireTransaction of the built transaction.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/attachment.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/attachment.html deleted file mode 100644 index ebd1610fd1..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/attachment.html +++ /dev/null @@ -1,22 +0,0 @@ - - -TestLedgerDSLInterpreter.attachment - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / attachment
    -
    -

    attachment

    - -fun attachment(attachment: InputStream): SecureHash
    -Overrides LedgerDSLInterpreter.attachment
    -

    Adds an attachment to the ledger.

    -

    Parameters

    - -attachment - The InputStream defining the contents of the attachment.
    -

    Return
    -The SecureHash that identifies the attachment, to be used in transactions.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/index.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/index.html deleted file mode 100644 index c03bf38a0c..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/index.html +++ /dev/null @@ -1,141 +0,0 @@ - - -TestLedgerDSLInterpreter - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter
    -
    -

    TestLedgerDSLInterpreter

    -data class TestLedgerDSLInterpreter : LedgerDSLInterpreter<TestTransactionDSLInterpreter>
    -
    -
    -

    Exceptions

    - - - - - - - - - - - -
    -TypeMismatch -class TypeMismatch : Exception
    -VerifiesFailed -class VerifiesFailed : Exception
    -

    Constructors

    - - - - - - - -
    -<init> -TestLedgerDSLInterpreter(services: ServiceHub)
    -

    Properties

    - - - - - - - - - - - - - - - - - - - -
    -services -val services: ServiceHub
    -transactionsToVerify -val transactionsToVerify: List<WireTransaction>
    -transactionsUnverified -val transactionsUnverified: List<WireTransaction>
    -wireTransactions -val wireTransactions: List<WireTransaction>
    -

    Functions

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -_transaction -fun _transaction(transactionLabel: String?, transactionBuilder: TransactionBuilder, dsl: TransactionDSL<TestTransactionDSLInterpreter>.() -> EnforceVerifyOrFail): WireTransaction

    Creates and adds a transaction to the ledger.

    -
    -_unverifiedTransaction -fun _unverifiedTransaction(transactionLabel: String?, transactionBuilder: TransactionBuilder, dsl: TransactionDSL<TestTransactionDSLInterpreter>.() -> Unit): WireTransaction

    Creates and adds a transaction to the ledger that will not be verified by verifies.

    -
    -attachment -fun attachment(attachment: InputStream): SecureHash

    Adds an attachment to the ledger.

    -
    -outputToLabel -fun outputToLabel(state: ContractState): String?
    -retrieveOutputStateAndRef -fun <S : ContractState> retrieveOutputStateAndRef(clazz: Class<S>, label: String): StateAndRef<S>

    Retrieves an output previously defined by TransactionDSLInterpreter._output with a label passed in.

    -
    -transactionName -fun transactionName(transactionHash: SecureHash): String?
    -tweak -fun tweak(dsl: LedgerDSL<TestTransactionDSLInterpreter, LedgerDSLInterpreter<TestTransactionDSLInterpreter>>.() -> Unit): Unit

    Creates a local scoped copy of the ledger.

    -
    -verifies -fun verifies(): EnforceVerifyOrFail

    Verifies the ledger/transaction, throws if the verification fails.

    -
    -

    Extension Functions

    - - - - - - - -
    -ledger -fun LedgerDSLInterpreter<TransactionDSLInterpreter>.ledger(dsl: LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.() -> Unit): Unit
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/output-to-label.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/output-to-label.html deleted file mode 100644 index 7461257cbb..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/output-to-label.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TestLedgerDSLInterpreter.outputToLabel - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / outputToLabel
    -
    -

    outputToLabel

    - -fun outputToLabel(state: ContractState): String?
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/retrieve-output-state-and-ref.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/retrieve-output-state-and-ref.html deleted file mode 100644 index d6b8a30a04..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/retrieve-output-state-and-ref.html +++ /dev/null @@ -1,25 +0,0 @@ - - -TestLedgerDSLInterpreter.retrieveOutputStateAndRef - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / retrieveOutputStateAndRef
    -
    -

    retrieveOutputStateAndRef

    - -fun <S : ContractState> retrieveOutputStateAndRef(clazz: Class<S>, label: String): StateAndRef<S>
    -Overrides OutputStateLookup.retrieveOutputStateAndRef
    -

    Retrieves an output previously defined by TransactionDSLInterpreter._output with a label passed in.

    -

    Parameters

    - -clazz - The class object holding the type of the output state expected.
    -
    - -label - The label of the to-be-retrieved output state.
    -

    Return
    -The output StateAndRef.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/services.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/services.html deleted file mode 100644 index d914ef4b8c..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/services.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TestLedgerDSLInterpreter.services - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / services
    -
    -

    services

    - -val services: ServiceHub
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/to-transaction-group.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/to-transaction-group.html deleted file mode 100644 index cbade5d8b8..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/to-transaction-group.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TestLedgerDSLInterpreter.toTransactionGroup - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / toTransactionGroup
    -
    -

    toTransactionGroup

    - -fun toTransactionGroup(): TransactionGroup
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/transaction-name.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/transaction-name.html deleted file mode 100644 index ee0ebdece4..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/transaction-name.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TestLedgerDSLInterpreter.transactionName - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / transactionName
    -
    -

    transactionName

    - -fun transactionName(transactionHash: SecureHash): String?
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/transactions-to-verify.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/transactions-to-verify.html deleted file mode 100644 index 8e3c21fbb6..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/transactions-to-verify.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TestLedgerDSLInterpreter.transactionsToVerify - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / transactionsToVerify
    -
    -

    transactionsToVerify

    - -val transactionsToVerify: List<WireTransaction>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/transactions-unverified.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/transactions-unverified.html deleted file mode 100644 index a4e754d695..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/transactions-unverified.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TestLedgerDSLInterpreter.transactionsUnverified - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / transactionsUnverified
    -
    -

    transactionsUnverified

    - -val transactionsUnverified: List<WireTransaction>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/tweak.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/tweak.html deleted file mode 100644 index b3d5440161..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/tweak.html +++ /dev/null @@ -1,19 +0,0 @@ - - -TestLedgerDSLInterpreter.tweak - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / tweak
    -
    -

    tweak

    - -fun tweak(dsl: LedgerDSL<TestTransactionDSLInterpreter, LedgerDSLInterpreter<TestTransactionDSLInterpreter>>.() -> Unit): Unit
    -

    Creates a local scoped copy of the ledger.

    -

    Parameters

    - -dsl - The ledger DSL to be interpreted using the copy.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/verifies.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/verifies.html deleted file mode 100644 index c23f8280d9..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/verifies.html +++ /dev/null @@ -1,17 +0,0 @@ - - -TestLedgerDSLInterpreter.verifies - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / verifies
    -
    -

    verifies

    - -fun verifies(): EnforceVerifyOrFail
    -Overrides Verifies.verifies
    -

    Verifies the ledger/transaction, throws if the verification fails.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/wire-transactions.html b/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/wire-transactions.html deleted file mode 100644 index fe50666f13..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-ledger-d-s-l-interpreter/wire-transactions.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TestLedgerDSLInterpreter.wireTransactions - - - - -com.r3corda.core.testing / TestLedgerDSLInterpreter / wireTransactions
    -
    -

    wireTransactions

    - -val wireTransactions: List<WireTransaction>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/-init-.html deleted file mode 100644 index ac62d3909f..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -TestTransactionDSLInterpreter.<init> - - - - -com.r3corda.core.testing / TestTransactionDSLInterpreter / <init>
    -
    -

    <init>

    -TestTransactionDSLInterpreter(ledgerInterpreter: TestLedgerDSLInterpreter, transactionBuilder: TransactionBuilder)
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/_command.html b/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/_command.html deleted file mode 100644 index f12493ee3c..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/_command.html +++ /dev/null @@ -1,23 +0,0 @@ - - -TestTransactionDSLInterpreter._command - - - - -com.r3corda.core.testing / TestTransactionDSLInterpreter / _command
    -
    -

    _command

    - -fun _command(signers: List<PublicKey>, commandData: CommandData): Unit
    -Overrides TransactionDSLInterpreter._command
    -

    Adds a command to the transaction.

    -

    Parameters

    - -signers - The signer public keys.
    -
    - -commandData - The contents of the command.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/_output.html b/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/_output.html deleted file mode 100644 index 17914908ee..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/_output.html +++ /dev/null @@ -1,26 +0,0 @@ - - -TestTransactionDSLInterpreter._output - - - - -com.r3corda.core.testing / TestTransactionDSLInterpreter / _output
    -
    -

    _output

    - -fun _output(label: String?, notary: Party, contractState: ContractState): Unit
    -Overrides TransactionDSLInterpreter._output
    -

    Adds an output to the transaction.

    -

    Parameters

    - -label - An optional label that may be later used to retrieve the output probably in other transactions.
    -
    - -notary - The associated notary.
    -
    - -contractState - The state itself.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/attachment.html b/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/attachment.html deleted file mode 100644 index 15568f5f86..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/attachment.html +++ /dev/null @@ -1,20 +0,0 @@ - - -TestTransactionDSLInterpreter.attachment - - - - -com.r3corda.core.testing / TestTransactionDSLInterpreter / attachment
    -
    -

    attachment

    - -fun attachment(attachmentId: SecureHash): Unit
    -Overrides TransactionDSLInterpreter.attachment
    -

    Adds an Attachment reference to the transaction.

    -

    Parameters

    - -attachmentId - The hash of the attachment, possibly returned by LedgerDSLInterpreter.attachment.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/index.html b/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/index.html deleted file mode 100644 index 570e2f0c47..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/index.html +++ /dev/null @@ -1,124 +0,0 @@ - - -TestTransactionDSLInterpreter - - - - -com.r3corda.core.testing / TestTransactionDSLInterpreter
    -
    -

    TestTransactionDSLInterpreter

    -data class TestTransactionDSLInterpreter : TransactionDSLInterpreter, OutputStateLookup
    -

    This interpreter builds a transaction, and TransactionDSL.verifies that the resolved transaction is correct. Note -that transactions corresponding to input states are not verified. Use LedgerDSL.verifies for that.

    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -TestTransactionDSLInterpreter(ledgerInterpreter: TestLedgerDSLInterpreter, transactionBuilder: TransactionBuilder)
    -

    Properties

    - - - - - - - - - - - - - - - -
    -ledgerInterpreter -val ledgerInterpreter: TestLedgerDSLInterpreter

    A reference to the enclosing ledger{..}s interpreter.

    -
    -services -val services: ServiceHub
    -transactionBuilder -val transactionBuilder: TransactionBuilder
    -

    Functions

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -_command -fun _command(signers: List<PublicKey>, commandData: CommandData): Unit

    Adds a command to the transaction.

    -
    -_output -fun _output(label: String?, notary: Party, contractState: ContractState): Unit

    Adds an output to the transaction.

    -
    -attachment -fun attachment(attachmentId: SecureHash): Unit

    Adds an Attachment reference to the transaction.

    -
    -input -fun input(stateRef: StateRef): Unit

    Adds an input reference to the transaction. Note that verifies will resolve this reference.

    -
    -timestamp -fun timestamp(data: Timestamp): Unit

    Adds a timestamp to the transaction.

    -
    -tweak -fun tweak(dsl: TransactionDSL<TransactionDSLInterpreter>.() -> EnforceVerifyOrFail): EnforceVerifyOrFail

    Creates a local scoped copy of the transaction.

    -
    -verifies -fun verifies(): EnforceVerifyOrFail

    Verifies the ledger/transaction, throws if the verification fails.

    -
    -

    Extension Functions

    - - - - - - - - - - - -
    -ledger -fun TransactionDSLInterpreter.ledger(dsl: LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.() -> Unit): Unit

    Here follows implementations of the LedgerDSLInterpreter and TransactionDSLInterpreter interfaces to be used in -tests. Top level primitives ledger and transaction that bind the interpreter types are also defined here.

    -
    -transaction -fun TransactionDSLInterpreter.transaction(dsl: TransactionDSL<TransactionDSLInterpreter>.() -> EnforceVerifyOrFail): Unit
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/input.html b/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/input.html deleted file mode 100644 index 29381045b8..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/input.html +++ /dev/null @@ -1,20 +0,0 @@ - - -TestTransactionDSLInterpreter.input - - - - -com.r3corda.core.testing / TestTransactionDSLInterpreter / input
    -
    -

    input

    - -fun input(stateRef: StateRef): Unit
    -Overrides TransactionDSLInterpreter.input
    -

    Adds an input reference to the transaction. Note that verifies will resolve this reference.

    -

    Parameters

    - -stateRef - The input StateRef.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/ledger-interpreter.html b/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/ledger-interpreter.html deleted file mode 100644 index cc9355afa3..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/ledger-interpreter.html +++ /dev/null @@ -1,17 +0,0 @@ - - -TestTransactionDSLInterpreter.ledgerInterpreter - - - - -com.r3corda.core.testing / TestTransactionDSLInterpreter / ledgerInterpreter
    -
    -

    ledgerInterpreter

    - -val ledgerInterpreter: TestLedgerDSLInterpreter
    -Overrides TransactionDSLInterpreter.ledgerInterpreter
    -

    A reference to the enclosing ledger{..}s interpreter.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/services.html b/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/services.html deleted file mode 100644 index badeef5ad2..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/services.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TestTransactionDSLInterpreter.services - - - - -com.r3corda.core.testing / TestTransactionDSLInterpreter / services
    -
    -

    services

    - -val services: ServiceHub
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/timestamp.html b/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/timestamp.html deleted file mode 100644 index 9698a29cc5..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/timestamp.html +++ /dev/null @@ -1,20 +0,0 @@ - - -TestTransactionDSLInterpreter.timestamp - - - - -com.r3corda.core.testing / TestTransactionDSLInterpreter / timestamp
    -
    -

    timestamp

    - -fun timestamp(data: Timestamp): Unit
    -Overrides TransactionDSLInterpreter.timestamp
    -

    Adds a timestamp to the transaction.

    -

    Parameters

    - -data - The TimestampCommand.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/transaction-builder.html b/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/transaction-builder.html deleted file mode 100644 index 7e3060d1e7..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/transaction-builder.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TestTransactionDSLInterpreter.transactionBuilder - - - - -com.r3corda.core.testing / TestTransactionDSLInterpreter / transactionBuilder
    -
    -

    transactionBuilder

    - -val transactionBuilder: TransactionBuilder
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/tweak.html b/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/tweak.html deleted file mode 100644 index 642361d216..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/tweak.html +++ /dev/null @@ -1,20 +0,0 @@ - - -TestTransactionDSLInterpreter.tweak - - - - -com.r3corda.core.testing / TestTransactionDSLInterpreter / tweak
    -
    -

    tweak

    - -fun tweak(dsl: TransactionDSL<TransactionDSLInterpreter>.() -> EnforceVerifyOrFail): EnforceVerifyOrFail
    -Overrides TransactionDSLInterpreter.tweak
    -

    Creates a local scoped copy of the transaction.

    -

    Parameters

    - -dsl - The transaction DSL to be interpreted using the copy.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/verifies.html b/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/verifies.html deleted file mode 100644 index 992df0a22f..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-test-transaction-d-s-l-interpreter/verifies.html +++ /dev/null @@ -1,17 +0,0 @@ - - -TestTransactionDSLInterpreter.verifies - - - - -com.r3corda.core.testing / TestTransactionDSLInterpreter / verifies
    -
    -

    verifies

    - -fun verifies(): EnforceVerifyOrFail
    -Overrides Verifies.verifies
    -

    Verifies the ledger/transaction, throws if the verification fails.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-timestamp-generator/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-timestamp-generator/-init-.html new file mode 100644 index 0000000000..ae584e0686 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-timestamp-generator/-init-.html @@ -0,0 +1,14 @@ + + +TimestampGenerator.<init> - + + + +com.r3corda.core.testing / TimestampGenerator / <init>
    +
    +

    <init>

    +TimestampGenerator()
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-timestamp-generator/generate.html b/docs/build/html/api/com.r3corda.core.testing/-timestamp-generator/generate.html new file mode 100644 index 0000000000..cc7169b6e6 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-timestamp-generator/generate.html @@ -0,0 +1,15 @@ + + +TimestampGenerator.generate - + + + +com.r3corda.core.testing / TimestampGenerator / generate
    +
    +

    generate

    + +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Timestamp
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-timestamp-generator/index.html b/docs/build/html/api/com.r3corda.core.testing/-timestamp-generator/index.html new file mode 100644 index 0000000000..4c81317137 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-timestamp-generator/index.html @@ -0,0 +1,36 @@ + + +TimestampGenerator - + + + +com.r3corda.core.testing / TimestampGenerator
    +
    +

    TimestampGenerator

    +class TimestampGenerator
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +TimestampGenerator()
    +

    Functions

    + + + + + + + +
    +generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): Timestamp
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/_command.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/_command.html deleted file mode 100644 index 52f4e559bc..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/_command.html +++ /dev/null @@ -1,22 +0,0 @@ - - -TransactionDSLInterpreter._command - - - - -com.r3corda.core.testing / TransactionDSLInterpreter / _command
    -
    -

    _command

    - -abstract fun _command(signers: List<PublicKey>, commandData: CommandData): Unit
    -

    Adds a command to the transaction.

    -

    Parameters

    - -signers - The signer public keys.
    -
    - -commandData - The contents of the command.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/_output.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/_output.html deleted file mode 100644 index 17baccea65..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/_output.html +++ /dev/null @@ -1,25 +0,0 @@ - - -TransactionDSLInterpreter._output - - - - -com.r3corda.core.testing / TransactionDSLInterpreter / _output
    -
    -

    _output

    - -abstract fun _output(label: String?, notary: Party, contractState: ContractState): Unit
    -

    Adds an output to the transaction.

    -

    Parameters

    - -label - An optional label that may be later used to retrieve the output probably in other transactions.
    -
    - -notary - The associated notary.
    -
    - -contractState - The state itself.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/attachment.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/attachment.html deleted file mode 100644 index a7fe0d6af2..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/attachment.html +++ /dev/null @@ -1,19 +0,0 @@ - - -TransactionDSLInterpreter.attachment - - - - -com.r3corda.core.testing / TransactionDSLInterpreter / attachment
    -
    -

    attachment

    - -abstract fun attachment(attachmentId: SecureHash): Unit
    -

    Adds an Attachment reference to the transaction.

    -

    Parameters

    - -attachmentId - The hash of the attachment, possibly returned by LedgerDSLInterpreter.attachment.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/index.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/index.html deleted file mode 100644 index 33ce17f4f0..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/index.html +++ /dev/null @@ -1,154 +0,0 @@ - - -TransactionDSLInterpreter - - - - -com.r3corda.core.testing / TransactionDSLInterpreter
    -
    -

    TransactionDSLInterpreter

    -interface TransactionDSLInterpreter : Verifies, OutputStateLookup
    -

    This interface defines the bare bone functionality that a Transaction DSL interpreter should implement.

    -

    Parameters
    - -

    -
    -
    -

    Properties

    - - - - - - - -
    -ledgerInterpreter -abstract val ledgerInterpreter: LedgerDSLInterpreter<TransactionDSLInterpreter>

    A reference to the enclosing ledger{..}s interpreter.

    -
    -

    Functions

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -_command -abstract fun _command(signers: List<PublicKey>, commandData: CommandData): Unit

    Adds a command to the transaction.

    -
    -_output -abstract fun _output(label: String?, notary: Party, contractState: ContractState): Unit

    Adds an output to the transaction.

    -
    -attachment -abstract fun attachment(attachmentId: SecureHash): Unit

    Adds an Attachment reference to the transaction.

    -
    -input -abstract fun input(stateRef: StateRef): Unit

    Adds an input reference to the transaction. Note that verifies will resolve this reference.

    -
    -timestamp -abstract fun timestamp(data: Timestamp): Unit

    Adds a timestamp to the transaction.

    -
    -tweak -abstract fun tweak(dsl: TransactionDSL<TransactionDSLInterpreter>.() -> EnforceVerifyOrFail): EnforceVerifyOrFail

    Creates a local scoped copy of the transaction.

    -
    -

    Inherited Functions

    - - - - - - - - - - - - - - - - - - - - - - - -
    -fails -open fun fails(): EnforceVerifyOrFail

    Asserts that verifies throws, with no condition on the exception message.

    -
    -fails with -open infix fun fails with(msg: String): EnforceVerifyOrFail
    -failsWith -open fun failsWith(expectedMessage: String?): EnforceVerifyOrFail

    Asserts that verifies() throws.

    -
    -retrieveOutputStateAndRef -abstract fun <S : ContractState> retrieveOutputStateAndRef(clazz: Class<S>, label: String): StateAndRef<S>

    Retrieves an output previously defined by TransactionDSLInterpreter._output with a label passed in.

    -
    -verifies -abstract fun verifies(): EnforceVerifyOrFail

    Verifies the ledger/transaction, throws if the verification fails.

    -
    -

    Extension Functions

    - - - - - - - - - - - -
    -ledger -fun TransactionDSLInterpreter.ledger(dsl: LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.() -> Unit): Unit

    Here follows implementations of the LedgerDSLInterpreter and TransactionDSLInterpreter interfaces to be used in -tests. Top level primitives ledger and transaction that bind the interpreter types are also defined here.

    -
    -transaction -fun TransactionDSLInterpreter.transaction(dsl: TransactionDSL<TransactionDSLInterpreter>.() -> EnforceVerifyOrFail): Unit
    -

    Inheritors

    - - - - - - - - - - - -
    -TestTransactionDSLInterpreter -data class TestTransactionDSLInterpreter : TransactionDSLInterpreter, OutputStateLookup

    This interpreter builds a transaction, and TransactionDSL.verifies that the resolved transaction is correct. Note -that transactions corresponding to input states are not verified. Use LedgerDSL.verifies for that.

    -
    -TransactionDSL -class TransactionDSL<out T : TransactionDSLInterpreter> : TransactionDSLInterpreter
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/input.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/input.html deleted file mode 100644 index 21b535d454..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/input.html +++ /dev/null @@ -1,19 +0,0 @@ - - -TransactionDSLInterpreter.input - - - - -com.r3corda.core.testing / TransactionDSLInterpreter / input
    -
    -

    input

    - -abstract fun input(stateRef: StateRef): Unit
    -

    Adds an input reference to the transaction. Note that verifies will resolve this reference.

    -

    Parameters

    - -stateRef - The input StateRef.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/ledger-interpreter.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/ledger-interpreter.html deleted file mode 100644 index 3d2dd9ac3b..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/ledger-interpreter.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TransactionDSLInterpreter.ledgerInterpreter - - - - -com.r3corda.core.testing / TransactionDSLInterpreter / ledgerInterpreter
    -
    -

    ledgerInterpreter

    - -abstract val ledgerInterpreter: LedgerDSLInterpreter<TransactionDSLInterpreter>
    -

    A reference to the enclosing ledger{..}s interpreter.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/timestamp.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/timestamp.html deleted file mode 100644 index 363f0c07ce..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/timestamp.html +++ /dev/null @@ -1,19 +0,0 @@ - - -TransactionDSLInterpreter.timestamp - - - - -com.r3corda.core.testing / TransactionDSLInterpreter / timestamp
    -
    -

    timestamp

    - -abstract fun timestamp(data: Timestamp): Unit
    -

    Adds a timestamp to the transaction.

    -

    Parameters

    - -data - The TimestampCommand.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/tweak.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/tweak.html deleted file mode 100644 index 477e4ee76b..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l-interpreter/tweak.html +++ /dev/null @@ -1,19 +0,0 @@ - - -TransactionDSLInterpreter.tweak - - - - -com.r3corda.core.testing / TransactionDSLInterpreter / tweak
    -
    -

    tweak

    - -abstract fun tweak(dsl: TransactionDSL<TransactionDSLInterpreter>.() -> EnforceVerifyOrFail): EnforceVerifyOrFail
    -

    Creates a local scoped copy of the transaction.

    -

    Parameters

    - -dsl - The transaction DSL to be interpreted using the copy.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/-init-.html deleted file mode 100644 index 9e4445ffef..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -TransactionDSL.<init> - - - - -com.r3corda.core.testing / TransactionDSL / <init>
    -
    -

    <init>

    -TransactionDSL(interpreter: T)
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/command.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/command.html deleted file mode 100644 index 8cd4a6489a..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/command.html +++ /dev/null @@ -1,20 +0,0 @@ - - -TransactionDSL.command - - - - -com.r3corda.core.testing / TransactionDSL / command
    -
    -

    command

    - -fun command(vararg signers: PublicKey, commandDataClosure: () -> CommandData): Unit
    - -fun command(signer: PublicKey, commandData: CommandData): Unit
    -

    See Also
    -

    TransactionDSLInterpreter._command

    -

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/index.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/index.html deleted file mode 100644 index a11a52e772..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/index.html +++ /dev/null @@ -1,91 +0,0 @@ - - -TransactionDSL - - - - -com.r3corda.core.testing / TransactionDSL
    -
    -

    TransactionDSL

    -class TransactionDSL<out T : TransactionDSLInterpreter> : TransactionDSLInterpreter
    -
    -
    -

    Constructors

    - - - - - - - -
    -<init> -TransactionDSL(interpreter: T)
    -

    Properties

    - - - - - - - -
    -interpreter -val interpreter: T
    -

    Functions

    - - - - - - - - - - - - - - - - - - - -
    -command -fun command(vararg signers: PublicKey, commandDataClosure: () -> CommandData): Unit
    -fun command(signer: PublicKey, commandData: CommandData): Unit
    -input -fun input(stateLabel: String): <ERROR CLASS>

    Looks up the output label and adds the found state as an input.

    -fun input(state: ContractState): Unit

    Creates an LedgerDSLInterpreter._unverifiedTransaction with a single output state and adds its reference as an -input to the current transaction.

    -fun input(stateClosure: () -> ContractState): Unit
    -output -fun output(label: String? = null, notary: Party = DUMMY_NOTARY, contractStateClosure: () -> ContractState): Unit
    -fun output(label: String, contractState: ContractState): Unit
    -fun output(contractState: ContractState): Unit
    -timestamp -fun timestamp(time: Instant, tolerance: Duration = 30.seconds): Unit

    Adds a timestamp command to the transaction.

    -
    -

    Extension Functions

    - - - - - - - - - - - -
    -ledger -fun TransactionDSLInterpreter.ledger(dsl: LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.() -> Unit): Unit

    Here follows implementations of the LedgerDSLInterpreter and TransactionDSLInterpreter interfaces to be used in -tests. Top level primitives ledger and transaction that bind the interpreter types are also defined here.

    -
    -transaction -fun TransactionDSLInterpreter.transaction(dsl: TransactionDSL<TransactionDSLInterpreter>.() -> EnforceVerifyOrFail): Unit
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/input.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/input.html deleted file mode 100644 index 328cd458c5..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/input.html +++ /dev/null @@ -1,32 +0,0 @@ - - -TransactionDSL.input - - - - -com.r3corda.core.testing / TransactionDSL / input
    -
    -

    input

    - -fun input(stateLabel: String): <ERROR CLASS>
    -

    Looks up the output label and adds the found state as an input.

    -

    Parameters

    - -stateLabel - The label of the output state specified when calling TransactionDSLInterpreter._output and friends.
    -
    -
    - -fun input(state: ContractState): Unit
    -

    Creates an LedgerDSLInterpreter._unverifiedTransaction with a single output state and adds its reference as an -input to the current transaction.

    -

    Parameters

    - -state - The state to be added.
    -
    -
    - -fun input(stateClosure: () -> ContractState): Unit
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/interpreter.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/interpreter.html deleted file mode 100644 index a0a878a65d..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/interpreter.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionDSL.interpreter - - - - -com.r3corda.core.testing / TransactionDSL / interpreter
    -
    -

    interpreter

    - -val interpreter: T
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/output.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/output.html deleted file mode 100644 index e3388f0bca..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/output.html +++ /dev/null @@ -1,24 +0,0 @@ - - -TransactionDSL.output - - - - -com.r3corda.core.testing / TransactionDSL / output
    -
    -

    output

    - -fun output(label: String? = null, notary: Party = DUMMY_NOTARY, contractStateClosure: () -> ContractState): Unit
    - -fun output(label: String, contractState: ContractState): Unit
    -

    See Also
    -

    TransactionDSLInterpreter._output

    -

    -
    -
    - -fun output(contractState: ContractState): Unit
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/timestamp.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/timestamp.html deleted file mode 100644 index 066d0b3501..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-transaction-d-s-l/timestamp.html +++ /dev/null @@ -1,22 +0,0 @@ - - -TransactionDSL.timestamp - - - - -com.r3corda.core.testing / TransactionDSL / timestamp
    -
    -

    timestamp

    - -fun timestamp(time: Instant, tolerance: Duration = 30.seconds): Unit
    -

    Adds a timestamp command to the transaction.

    -

    Parameters

    - -time - The Instant of the TimestampCommand.
    -
    - -tolerance - The tolerance of the TimestampCommand.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-state-generator/-init-.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-state-generator/-init-.html new file mode 100644 index 0000000000..ed14b12ff5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-transaction-state-generator/-init-.html @@ -0,0 +1,14 @@ + + +TransactionStateGenerator.<init> - + + + +com.r3corda.core.testing / TransactionStateGenerator / <init>
    +
    +

    <init>

    +TransactionStateGenerator(stateGenerator: <ERROR CLASS><T>)
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-state-generator/generate.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-state-generator/generate.html new file mode 100644 index 0000000000..8bfe3348f7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-transaction-state-generator/generate.html @@ -0,0 +1,15 @@ + + +TransactionStateGenerator.generate - + + + +com.r3corda.core.testing / TransactionStateGenerator / generate
    +
    +

    generate

    + +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): TransactionState<T>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-state-generator/index.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-state-generator/index.html new file mode 100644 index 0000000000..9eb74ef250 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-transaction-state-generator/index.html @@ -0,0 +1,47 @@ + + +TransactionStateGenerator - + + + +com.r3corda.core.testing / TransactionStateGenerator
    +
    +

    TransactionStateGenerator

    +class TransactionStateGenerator<T : ContractState>
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +TransactionStateGenerator(stateGenerator: <ERROR CLASS><T>)
    +

    Properties

    + + + + + + + +
    +stateGenerator +val stateGenerator: <ERROR CLASS><T>
    +

    Functions

    + + + + + + + +
    +generate +fun generate(random: <ERROR CLASS>, status: <ERROR CLASS>): TransactionState<T>
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-transaction-state-generator/state-generator.html b/docs/build/html/api/com.r3corda.core.testing/-transaction-state-generator/state-generator.html new file mode 100644 index 0000000000..ce0d97b2d3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/-transaction-state-generator/state-generator.html @@ -0,0 +1,15 @@ + + +TransactionStateGenerator.stateGenerator - + + + +com.r3corda.core.testing / TransactionStateGenerator / stateGenerator
    +
    +

    stateGenerator

    + +val stateGenerator: <ERROR CLASS><T>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/-verifies/fails with.html b/docs/build/html/api/com.r3corda.core.testing/-verifies/fails with.html deleted file mode 100644 index 60f8b23dc0..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-verifies/fails with.html +++ /dev/null @@ -1,18 +0,0 @@ - - -Verifies.fails with - - - - -com.r3corda.core.testing / Verifies / fails with
    -
    -

    fails with

    - -open infix fun fails with(msg: String): EnforceVerifyOrFail
    -

    See Also
    -

    failsWith

    -

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-verifies/fails-with.html b/docs/build/html/api/com.r3corda.core.testing/-verifies/fails-with.html deleted file mode 100644 index 55bda154d2..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-verifies/fails-with.html +++ /dev/null @@ -1,19 +0,0 @@ - - -Verifies.failsWith - - - - -com.r3corda.core.testing / Verifies / failsWith
    -
    -

    failsWith

    - -open fun failsWith(expectedMessage: String?): EnforceVerifyOrFail
    -

    Asserts that verifies() throws.

    -

    Parameters

    - -expectedMessage - An optional string to be searched for in the raised exception.
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-verifies/fails.html b/docs/build/html/api/com.r3corda.core.testing/-verifies/fails.html deleted file mode 100644 index d01b0233c7..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-verifies/fails.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Verifies.fails - - - - -com.r3corda.core.testing / Verifies / fails
    -
    -

    fails

    - -open fun fails(): EnforceVerifyOrFail
    -

    Asserts that verifies throws, with no condition on the exception message.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-verifies/index.html b/docs/build/html/api/com.r3corda.core.testing/-verifies/index.html deleted file mode 100644 index d487506e3c..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-verifies/index.html +++ /dev/null @@ -1,66 +0,0 @@ - - -Verifies - - - - -com.r3corda.core.testing / Verifies
    -
    -

    Verifies

    -interface Verifies
    -

    This interface asserts that the DSL at hand is capable of verifying its underlying construct(ledger/transaction).

    -
    -
    -

    Functions

    - - - - - - - - - - - - - - - - - - - -
    -fails -open fun fails(): EnforceVerifyOrFail

    Asserts that verifies throws, with no condition on the exception message.

    -
    -fails with -open infix fun fails with(msg: String): EnforceVerifyOrFail
    -failsWith -open fun failsWith(expectedMessage: String?): EnforceVerifyOrFail

    Asserts that verifies() throws.

    -
    -verifies -abstract fun verifies(): EnforceVerifyOrFail

    Verifies the ledger/transaction, throws if the verification fails.

    -
    -

    Inheritors

    - - - - - - - - - - - -
    -LedgerDSLInterpreter -interface LedgerDSLInterpreter<out T : TransactionDSLInterpreter> : Verifies, OutputStateLookup

    This interface defines the bare bone functionality that a Ledger DSL interpreter should implement.

    -
    -TransactionDSLInterpreter -interface TransactionDSLInterpreter : Verifies, OutputStateLookup

    This interface defines the bare bone functionality that a Transaction DSL interpreter should implement.

    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-verifies/verifies.html b/docs/build/html/api/com.r3corda.core.testing/-verifies/verifies.html deleted file mode 100644 index 0ab91d75f7..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/-verifies/verifies.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Verifies.verifies - - - - -com.r3corda.core.testing / Verifies / verifies
    -
    -

    verifies

    - -abstract fun verifies(): EnforceVerifyOrFail
    -

    Verifies the ledger/transaction, throws if the verification fails.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/free-local-host-and-port.html b/docs/build/html/api/com.r3corda.core.testing/free-local-host-and-port.html deleted file mode 100644 index faa2ef0521..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/free-local-host-and-port.html +++ /dev/null @@ -1,15 +0,0 @@ - - -freeLocalHostAndPort - - - - -com.r3corda.core.testing / freeLocalHostAndPort
    -
    -

    freeLocalHostAndPort

    - -fun freeLocalHostAndPort(): <ERROR CLASS>
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/generate-list.html b/docs/build/html/api/com.r3corda.core.testing/generate-list.html new file mode 100644 index 0000000000..f80f1c8c52 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.testing/generate-list.html @@ -0,0 +1,19 @@ + + +generateList - + + + +com.r3corda.core.testing / generateList
    +
    +

    generateList

    + +fun <A> <ERROR CLASS><A>.generateList(random: <ERROR CLASS>, status: <ERROR CLASS>): List<A>
    +

    Generators for quickcheck

    +

    TODO Split this into several files

    +
    +
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.testing/generate-state-ref.html b/docs/build/html/api/com.r3corda.core.testing/generate-state-ref.html deleted file mode 100644 index 84053e3a71..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/generate-state-ref.html +++ /dev/null @@ -1,15 +0,0 @@ - - -generateStateRef - - - - -com.r3corda.core.testing / generateStateRef
    -
    -

    generateStateRef

    - -fun generateStateRef(): StateRef
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/index.html b/docs/build/html/api/com.r3corda.core.testing/index.html index f09b8999f0..21a9acb1cd 100644 --- a/docs/build/html/api/com.r3corda.core.testing/index.html +++ b/docs/build/html/api/com.r3corda.core.testing/index.html @@ -12,271 +12,90 @@ -AlwaysSucceedContract +AmountGenerator -class AlwaysSucceedContract : Contract +class AmountGenerator<T> -DummyLinearContract +CurrencyGenerator -class DummyLinearContract : Contract +class CurrencyGenerator -EnforceVerifyOrFail +DurationGenerator -sealed class EnforceVerifyOrFail

    If you jumped here from a compiler error make sure the last line of your test tests for a transaction verify or fail. -This is a dummy type that can only be instantiated by functions in this module. This way we can ensure that all tests -will have as the last line either an accept or a failure test. The name is deliberately long to help make sense of -the triggered diagnostic.

    +class DurationGenerator + + + +InMemoryVaultService + +open class InMemoryVaultService : SingletonSerializeAsToken, VaultService

    This class implements a simple, in memory vault that tracks states that are owned by us, and also has a convenience +method to auto-generate some self-issued cash states that can be used for test trading. A real vault would persist +states relevant to us into a database and once such a vault is implemented, this scaffolding can be removed.

    -InMemoryWalletService +InstantGenerator -open class InMemoryWalletService : SingletonSerializeAsToken, WalletService

    This class implements a simple, in memory wallet that tracks states that are owned by us, and also has a convenience -method to auto-generate some self-issued cash states that can be used for test trading. A real wallet would persist -states relevant to us into a database and once such a wallet is implemented, this scaffolding can be removed.

    - +class InstantGenerator -LedgerDSL +IssuedGenerator -class LedgerDSL<out T : TransactionDSLInterpreter, out L : LedgerDSLInterpreter<T>> : LedgerDSLInterpreter<TransactionDSLInterpreter>

    This is the class that defines the syntactic sugar of the ledger Test DSL and delegates to the contained interpreter, -and what is actually used in ledger{(...)}. Add convenience functions here, or if you want to extend the DSL -functionality then first add your primitive to LedgerDSLInterpreter and then add the convenience defaults/extension -methods here.

    - +class IssuedGenerator<T> -LedgerDSLInterpreter +PartyAndReferenceGenerator -interface LedgerDSLInterpreter<out T : TransactionDSLInterpreter> : Verifies, OutputStateLookup

    This interface defines the bare bone functionality that a Ledger DSL interpreter should implement.

    - +class PartyAndReferenceGenerator -OutputStateLookup +PartyGenerator -interface OutputStateLookup

    This interface defines output state lookup by label. It is split from the interpreter interfaces so that outputs may -be looked up both in ledger{..} and transaction{..} blocks.

    - +class PartyGenerator -TestLedgerDSLInterpreter +PrivateKeyGenerator -data class TestLedgerDSLInterpreter : LedgerDSLInterpreter<TestTransactionDSLInterpreter> +class PrivateKeyGenerator -TestTransactionDSLInterpreter +PublicKeyGenerator -data class TestTransactionDSLInterpreter : TransactionDSLInterpreter, OutputStateLookup

    This interpreter builds a transaction, and TransactionDSL.verifies that the resolved transaction is correct. Note -that transactions corresponding to input states are not verified. Use LedgerDSL.verifies for that.

    - +class PublicKeyGenerator -TransactionDSL +SecureHashGenerator -class TransactionDSL<out T : TransactionDSLInterpreter> : TransactionDSLInterpreter +class SecureHashGenerator -TransactionDSLInterpreter +StateRefGenerator -interface TransactionDSLInterpreter : Verifies, OutputStateLookup

    This interface defines the bare bone functionality that a Transaction DSL interpreter should implement.

    - +class StateRefGenerator -Verifies +TimestampGenerator -interface Verifies

    This interface asserts that the DSL at hand is capable of verifying its underlying construct(ledger/transaction).

    - - - - -

    Exceptions

    - - - - - +class TimestampGenerator +TransactionStateGenerator - - -
    -AttachmentResolutionException -class AttachmentResolutionException : Exception
    -DuplicateOutputLabel -class DuplicateOutputLabel : Exception
    -

    Properties

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +class TransactionStateGenerator<T : ContractState>
    -ALICE -val ALICE: Party
    -ALICE_KEY -val ALICE_KEY: KeyPair
    -ALICE_PUBKEY -val ALICE_PUBKEY: PublicKey
    -ALL_TEST_KEYS -val ALL_TEST_KEYS: List<KeyPair>
    -BOB -val BOB: Party
    -BOB_KEY -val BOB_KEY: KeyPair
    -BOB_PUBKEY -val BOB_PUBKEY: PublicKey
    -CHARLIE -val CHARLIE: Party
    -CHARLIE_KEY -val CHARLIE_KEY: KeyPair
    -CHARLIE_PUBKEY -val CHARLIE_PUBKEY: PublicKey
    -DUMMY_KEY_1 -val DUMMY_KEY_1: KeyPair
    -DUMMY_KEY_2 -val DUMMY_KEY_2: KeyPair
    -DUMMY_NOTARY -val DUMMY_NOTARY: Party
    -DUMMY_NOTARY_KEY -val DUMMY_NOTARY_KEY: KeyPair
    -DUMMY_PUBKEY_1 -val DUMMY_PUBKEY_1: PublicKey
    -DUMMY_PUBKEY_2 -val DUMMY_PUBKEY_2: PublicKey
    -MEGA_CORP -val MEGA_CORP: Party
    -MEGA_CORP_KEY -val MEGA_CORP_KEY: KeyPair
    -MEGA_CORP_PUBKEY -val MEGA_CORP_PUBKEY: PublicKey
    -MINI_CORP -val MINI_CORP: Party
    -MINI_CORP_KEY -val MINI_CORP_KEY: KeyPair
    -MINI_CORP_PUBKEY -val MINI_CORP_PUBKEY: PublicKey
    -MOCK_IDENTITY_SERVICE -val MOCK_IDENTITY_SERVICE: MockIdentityService
    -ORACLE_KEY -val ORACLE_KEY: KeyPair
    -ORACLE_PUBKEY -val ORACLE_PUBKEY: PublicKey
    -TEST_TX_TIME -val TEST_TX_TIME: InstantJAVA INTEROP
    @@ -285,48 +104,11 @@ that transactions corresponding to input states are not verified. Use freeLocalHostAndPort +generateList -fun freeLocalHostAndPort(): <ERROR CLASS> - - - -generateStateRef - -fun generateStateRef(): StateRef - - - -ledger - -fun ledger(services: ServiceHub = MockServices(), dsl: LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.() -> Unit): LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>

    Creates and tests a ledger built by the passed in dsl. The provided services can be customised, otherwise a default -of a freshly built MockServices is used.

    -fun TransactionDSLInterpreter.ledger(dsl: LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.() -> Unit): Unit

    Here follows implementations of the LedgerDSLInterpreter and TransactionDSLInterpreter interfaces to be used in -tests. Top level primitives ledger and transaction that bind the interpreter types are also defined here.

    -fun LedgerDSLInterpreter<TransactionDSLInterpreter>.ledger(dsl: LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.() -> Unit): Unit - - - -rootCauseExceptions - -fun <R> rootCauseExceptions(body: () -> R): R

    If an exception is thrown by the body, rethrows the root cause exception.

    +fun <A> <ERROR CLASS><A>.generateList(random: <ERROR CLASS>, status: <ERROR CLASS>): List<A>

    Generators for quickcheck

    - - -signAll - -fun signAll(transactionsToSign: List<WireTransaction>, extraKeys: List<KeyPair>): <ERROR CLASS>

    Signs all transactions passed in.

    -fun LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.signAll(vararg extraKeys: KeyPair): <ERROR CLASS>

    Signs all transactions in the ledger.

    - - - - -transaction - -fun transaction(transactionLabel: String? = null, transactionBuilder: TransactionBuilder = TransactionBuilder(notary = DUMMY_NOTARY), dsl: TransactionDSL<TransactionDSLInterpreter>.() -> EnforceVerifyOrFail): LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>

    Creates a ledger with a single transaction, built by the passed in dsl.

    -fun TransactionDSLInterpreter.transaction(dsl: TransactionDSL<TransactionDSLInterpreter>.() -> EnforceVerifyOrFail): Unit - diff --git a/docs/build/html/api/com.r3corda.core.testing/ledger.html b/docs/build/html/api/com.r3corda.core.testing/ledger.html deleted file mode 100644 index 219eb550cc..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/ledger.html +++ /dev/null @@ -1,31 +0,0 @@ - - -ledger - - - - -com.r3corda.core.testing / ledger
    -
    -

    ledger

    - -fun ledger(services: ServiceHub = MockServices(), dsl: LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.() -> Unit): LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>
    -

    Creates and tests a ledger built by the passed in dsl. The provided services can be customised, otherwise a default -of a freshly built MockServices is used.

    -
    -
    - -fun TransactionDSLInterpreter.ledger(dsl: LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.() -> Unit): Unit
    -Deprecated: ledger doesn't nest, use tweak
    -
    -

    Here follows implementations of the LedgerDSLInterpreter and TransactionDSLInterpreter interfaces to be used in -tests. Top level primitives ledger and transaction that bind the interpreter types are also defined here.

    -
    -
    - -fun LedgerDSLInterpreter<TransactionDSLInterpreter>.ledger(dsl: LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.() -> Unit): Unit
    -Deprecated: ledger doesn't nest, use tweak
    -
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/root-cause-exceptions.html b/docs/build/html/api/com.r3corda.core.testing/root-cause-exceptions.html deleted file mode 100644 index 4aaf43fbf0..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/root-cause-exceptions.html +++ /dev/null @@ -1,16 +0,0 @@ - - -rootCauseExceptions - - - - -com.r3corda.core.testing / rootCauseExceptions
    -
    -

    rootCauseExceptions

    - -inline fun <R> rootCauseExceptions(body: () -> R): R
    -

    If an exception is thrown by the body, rethrows the root cause exception.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/sign-all.html b/docs/build/html/api/com.r3corda.core.testing/sign-all.html deleted file mode 100644 index 431018692f..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/sign-all.html +++ /dev/null @@ -1,34 +0,0 @@ - - -signAll - - - - -com.r3corda.core.testing / signAll
    -
    -

    signAll

    - -fun signAll(transactionsToSign: List<WireTransaction>, extraKeys: List<KeyPair>): <ERROR CLASS>
    -

    Signs all transactions passed in.

    -

    Parameters

    - -transactionsToSign - Transactions to be signed.
    -
    - -extraKeys - extra keys to sign transactions with.
    -

    Return
    -List of SignedTransactions.

    -
    -
    - -fun LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.signAll(vararg extraKeys: KeyPair): <ERROR CLASS>
    -

    Signs all transactions in the ledger.

    -

    Parameters

    - -extraKeys - extra keys to sign transactions with.
    -

    Return
    -List of SignedTransactions.

    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.testing/transaction.html b/docs/build/html/api/com.r3corda.core.testing/transaction.html deleted file mode 100644 index 0cfb56cc90..0000000000 --- a/docs/build/html/api/com.r3corda.core.testing/transaction.html +++ /dev/null @@ -1,25 +0,0 @@ - - -transaction - - - - -com.r3corda.core.testing / transaction
    -
    -

    transaction

    - -fun transaction(transactionLabel: String? = null, transactionBuilder: TransactionBuilder = TransactionBuilder(notary = DUMMY_NOTARY), dsl: TransactionDSL<TransactionDSLInterpreter>.() -> EnforceVerifyOrFail): LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>
    -

    Creates a ledger with a single transaction, built by the passed in dsl.

    -

    See Also
    -

    LedgerDSLInterpreter._transaction

    -

    -
    -
    - -fun TransactionDSLInterpreter.transaction(dsl: TransactionDSL<TransactionDSLInterpreter>.() -> EnforceVerifyOrFail): Unit
    -Deprecated: transaction doesn't nest, use tweak
    -
    -
    -
    - - diff --git a/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/-init-.html b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/-init-.html new file mode 100644 index 0000000000..2d7e5f6f10 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/-init-.html @@ -0,0 +1,15 @@ + + +BaseTransaction.<init> - + + + +com.r3corda.core.transactions / BaseTransaction / <init>
    +
    +

    <init>

    +BaseTransaction(inputs: List<*>, outputs: List<TransactionState<ContractState>>, notary: Party?, mustSign: List<PublicKey>, type: TransactionType, timestamp: Timestamp?)
    +

    An abstract class defining fields shared by all transaction types in the system.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/check-invariants.html b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/check-invariants.html new file mode 100644 index 0000000000..23f8e744f1 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/check-invariants.html @@ -0,0 +1,15 @@ + + +BaseTransaction.checkInvariants - + + + +com.r3corda.core.transactions / BaseTransaction / checkInvariants
    +
    +

    checkInvariants

    + +protected fun checkInvariants(): Unit
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/equals.html b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/equals.html new file mode 100644 index 0000000000..1cafa49582 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/equals.html @@ -0,0 +1,15 @@ + + +BaseTransaction.equals - + + + +com.r3corda.core.transactions / BaseTransaction / equals
    +
    +

    equals

    + +open fun equals(other: Any?): Boolean
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/hash-code.html b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/hash-code.html similarity index 57% rename from docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/hash-code.html rename to docs/build/html/api/com.r3corda.core.transactions/-base-transaction/hash-code.html index 2e781f4749..c77b72ee7a 100644 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/hash-code.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/hash-code.html @@ -1,13 +1,13 @@ -FiberRequest.hashCode - +BaseTransaction.hashCode - -com.r3corda.node.services.statemachine / FiberRequest / hashCode
    +com.r3corda.core.transactions / BaseTransaction / hashCode

    hashCode

    - + open fun hashCode(): Int


    diff --git a/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/index.html b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/index.html new file mode 100644 index 0000000000..275719b9fd --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/index.html @@ -0,0 +1,136 @@ + + +BaseTransaction - + + + +com.r3corda.core.transactions / BaseTransaction
    +
    +

    BaseTransaction

    +abstract class BaseTransaction : NamedByHash
    +

    An abstract class defining fields shared by all transaction types in the system.

    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +BaseTransaction(inputs: List<*>, outputs: List<TransactionState<ContractState>>, notary: Party?, mustSign: List<PublicKey>, type: TransactionType, timestamp: Timestamp?)

    An abstract class defining fields shared by all transaction types in the system.

    +
    +

    Properties

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +inputs +open val inputs: List<*>

    The inputs of this transaction. Note that in BaseTransaction subclasses the type of this list may change

    +
    +mustSign +val mustSign: List<PublicKey>

    Keys that are required to have signed the wrapping SignedTransaction, ordered to match the list of +signatures. There is nothing that forces the list to be the correct list of signers for this +transaction until the transaction is verified by using LedgerTransaction.verify. It includes the +notary key, if the notary field is set.

    +
    +notary +val notary: Party?

    If present, the notary for this transaction. If absent then the transaction is not notarised at all. +This is intended for issuance/genesis transactions that dont consume any other states and thus cant +double spend anything.

    +
    +outputs +val outputs: List<TransactionState<ContractState>>

    Ordered list of states defined by this transaction, along with the associated notaries.

    +
    +timestamp +val timestamp: Timestamp?

    If specified, a time window in which this transaction may have been notarised. Contracts can check this +time window to find out when a transaction is deemed to have occurred, from the ledgers perspective.

    +
    +type +val type: TransactionType

    Pointer to a class that defines the behaviour of this transaction: either normal, or "notary changing".

    +
    +

    Inherited Properties

    + + + + + + + +
    +id +abstract val id: SecureHash
    +

    Functions

    + + + + + + + + + + + + + + + +
    +checkInvariants +fun checkInvariants(): Unit
    +equals +open fun equals(other: Any?): Boolean
    +hashCode +open fun hashCode(): Int
    +

    Inheritors

    + + + + + + + + + + + +
    +LedgerTransaction +class LedgerTransaction : BaseTransaction

    A LedgerTransaction is derived from a WireTransaction. It is the result of doing the following operations:

    +
    +WireTransaction +class WireTransaction : BaseTransaction

    A transaction ready for serialisation, without any signatures attached. A WireTransaction is usually wrapped +by a SignedTransaction that carries the signatures over this payload. The hash of the wire transaction is +the identity of the transaction, that is, its possible for two SignedTransactions with different sets of +signatures to have the same identity hash.

    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/inputs.html b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/inputs.html new file mode 100644 index 0000000000..02fe78e67a --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/inputs.html @@ -0,0 +1,16 @@ + + +BaseTransaction.inputs - + + + +com.r3corda.core.transactions / BaseTransaction / inputs
    +
    +

    inputs

    + +open val inputs: List<*>
    +

    The inputs of this transaction. Note that in BaseTransaction subclasses the type of this list may change

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/must-sign.html b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/must-sign.html new file mode 100644 index 0000000000..9c2953d02a --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/must-sign.html @@ -0,0 +1,19 @@ + + +BaseTransaction.mustSign - + + + +com.r3corda.core.transactions / BaseTransaction / mustSign
    +
    +

    mustSign

    + +val mustSign: List<PublicKey>
    +

    Keys that are required to have signed the wrapping SignedTransaction, ordered to match the list of +signatures. There is nothing that forces the list to be the correct list of signers for this +transaction until the transaction is verified by using LedgerTransaction.verify. It includes the +notary key, if the notary field is set.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/notary.html b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/notary.html new file mode 100644 index 0000000000..c8cb0d1a5d --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/notary.html @@ -0,0 +1,18 @@ + + +BaseTransaction.notary - + + + +com.r3corda.core.transactions / BaseTransaction / notary
    +
    +

    notary

    + +val notary: Party?
    +

    If present, the notary for this transaction. If absent then the transaction is not notarised at all. +This is intended for issuance/genesis transactions that dont consume any other states and thus cant +double spend anything.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/outputs.html b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/outputs.html new file mode 100644 index 0000000000..767828d42f --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/outputs.html @@ -0,0 +1,16 @@ + + +BaseTransaction.outputs - + + + +com.r3corda.core.transactions / BaseTransaction / outputs
    +
    +

    outputs

    + +val outputs: List<TransactionState<ContractState>>
    +

    Ordered list of states defined by this transaction, along with the associated notaries.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/timestamp.html b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/timestamp.html new file mode 100644 index 0000000000..6fbedaeeed --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/timestamp.html @@ -0,0 +1,17 @@ + + +BaseTransaction.timestamp - + + + +com.r3corda.core.transactions / BaseTransaction / timestamp
    +
    +

    timestamp

    + +val timestamp: Timestamp?
    +

    If specified, a time window in which this transaction may have been notarised. Contracts can check this +time window to find out when a transaction is deemed to have occurred, from the ledgers perspective.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/type.html b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/type.html new file mode 100644 index 0000000000..349a826eb8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-base-transaction/type.html @@ -0,0 +1,16 @@ + + +BaseTransaction.type - + + + +com.r3corda.core.transactions / BaseTransaction / type
    +
    +

    type

    + +val type: TransactionType
    +

    Pointer to a class that defines the behaviour of this transaction: either normal, or "notary changing".

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/-init-.html b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/-init-.html new file mode 100644 index 0000000000..f5c2b74d0d --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/-init-.html @@ -0,0 +1,23 @@ + + +LedgerTransaction.<init> - + + + +com.r3corda.core.transactions / LedgerTransaction / <init>
    +
    +

    <init>

    +LedgerTransaction(inputs: List<StateAndRef<*>>, outputs: List<TransactionState<ContractState>>, commands: List<AuthenticatedObject<CommandData>>, attachments: List<Attachment>, id: SecureHash, notary: Party?, signers: List<PublicKey>, timestamp: Timestamp?, type: TransactionType)
    +

    A LedgerTransaction is derived from a WireTransaction. It is the result of doing the following operations:

    +
    • Downloading and locally storing all the dependencies of the transaction.

      +
    • Resolving the input states and loading them into memory.

      +
    • Doing some basic key lookups on the Commands to see if any keys are from a recognised party, thus converting the +Command objects into AuthenticatedObject.

      +
    • Deserialising the output states.

      +

    All the above refer to inputs using a (txhash, output index) pair.

    +
    +
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/attachments.html b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/attachments.html new file mode 100644 index 0000000000..5a1dea1433 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/attachments.html @@ -0,0 +1,16 @@ + + +LedgerTransaction.attachments - + + + +com.r3corda.core.transactions / LedgerTransaction / attachments
    +
    +

    attachments

    + +val attachments: List<Attachment>
    +

    A list of Attachment objects identified by the transaction that are needed for this transaction to verify.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/commands.html b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/commands.html new file mode 100644 index 0000000000..0aa8edc433 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/commands.html @@ -0,0 +1,16 @@ + + +LedgerTransaction.commands - + + + +com.r3corda.core.transactions / LedgerTransaction / commands
    +
    +

    commands

    + +val commands: List<AuthenticatedObject<CommandData>>
    +

    Arbitrary data passed to the program of each input state.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/equals.html b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/equals.html new file mode 100644 index 0000000000..987a4ac0a4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/equals.html @@ -0,0 +1,16 @@ + + +LedgerTransaction.equals - + + + +com.r3corda.core.transactions / LedgerTransaction / equals
    +
    +

    equals

    + +fun equals(other: Any?): Boolean
    +Overrides BaseTransaction.equals
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/hash-code.html b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/hash-code.html new file mode 100644 index 0000000000..2a1a8cc497 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/hash-code.html @@ -0,0 +1,16 @@ + + +LedgerTransaction.hashCode - + + + +com.r3corda.core.transactions / LedgerTransaction / hashCode
    +
    +

    hashCode

    + +fun hashCode(): Int
    +Overrides BaseTransaction.hashCode
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/id.html b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/id.html similarity index 58% rename from docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/id.html rename to docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/id.html index 152c3e7ca8..bac8fb660e 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/id.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/id.html @@ -4,12 +4,12 @@ -com.r3corda.core.contracts / LedgerTransaction / id
    +com.r3corda.core.transactions / LedgerTransaction / id

    id

    - + val id: SecureHash
    -Overrides NamedByHash.id
    +Overrides NamedByHash.id

    The hash of the original serialised WireTransaction.



    diff --git a/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/index.html b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/index.html new file mode 100644 index 0000000000..704290fd62 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/index.html @@ -0,0 +1,162 @@ + + +LedgerTransaction - + + + +com.r3corda.core.transactions / LedgerTransaction
    +
    +

    LedgerTransaction

    +class LedgerTransaction : BaseTransaction
    +

    A LedgerTransaction is derived from a WireTransaction. It is the result of doing the following operations:

    +
    • Downloading and locally storing all the dependencies of the transaction.

      +
    • Resolving the input states and loading them into memory.

      +
    • Doing some basic key lookups on the Commands to see if any keys are from a recognised party, thus converting the +Command objects into AuthenticatedObject.

      +
    • Deserialising the output states.

      +

    All the above refer to inputs using a (txhash, output index) pair.

    +
    +
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +LedgerTransaction(inputs: List<StateAndRef<*>>, outputs: List<TransactionState<ContractState>>, commands: List<AuthenticatedObject<CommandData>>, attachments: List<Attachment>, id: SecureHash, notary: Party?, signers: List<PublicKey>, timestamp: Timestamp?, type: TransactionType)

    A LedgerTransaction is derived from a WireTransaction. It is the result of doing the following operations:

    +
    +

    Properties

    + + + + + + + + + + + + + + + + + + + +
    +attachments +val attachments: List<Attachment>

    A list of Attachment objects identified by the transaction that are needed for this transaction to verify.

    +
    +commands +val commands: List<AuthenticatedObject<CommandData>>

    Arbitrary data passed to the program of each input state.

    +
    +id +val id: SecureHash

    The hash of the original serialised WireTransaction.

    +
    +inputs +val inputs: List<StateAndRef<*>>

    The resolved input states which will be consumed/invalidated by the execution of this transaction.

    +
    +

    Inherited Properties

    + + + + + + + + + + + + + + + + + + + + + + + +
    +mustSign +val mustSign: List<PublicKey>

    Keys that are required to have signed the wrapping SignedTransaction, ordered to match the list of +signatures. There is nothing that forces the list to be the correct list of signers for this +transaction until the transaction is verified by using LedgerTransaction.verify. It includes the +notary key, if the notary field is set.

    +
    +notary +val notary: Party?

    If present, the notary for this transaction. If absent then the transaction is not notarised at all. +This is intended for issuance/genesis transactions that dont consume any other states and thus cant +double spend anything.

    +
    +outputs +val outputs: List<TransactionState<ContractState>>

    Ordered list of states defined by this transaction, along with the associated notaries.

    +
    +timestamp +val timestamp: Timestamp?

    If specified, a time window in which this transaction may have been notarised. Contracts can check this +time window to find out when a transaction is deemed to have occurred, from the ledgers perspective.

    +
    +type +val type: TransactionType

    Pointer to a class that defines the behaviour of this transaction: either normal, or "notary changing".

    +
    +

    Functions

    + + + + + + + + + + + + + + + + + + + + + + + +
    +equals +fun equals(other: Any?): Boolean
    +hashCode +fun hashCode(): Int
    +outRef +fun <T : ContractState> outRef(index: Int): StateAndRef<T>
    +toTransactionForContract +fun toTransactionForContract(): TransactionForContract

    Strips the transaction down to a form that is usable by the contract verify functions

    +
    +verify +fun verify(): Unit

    Verifies this transaction and throws an exception if not valid, depending on the type. For general transactions:

    +
    +

    Inherited Functions

    + + + + + + + +
    +checkInvariants +fun checkInvariants(): Unit
    + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/inputs.html b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/inputs.html new file mode 100644 index 0000000000..b08fff061c --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/inputs.html @@ -0,0 +1,17 @@ + + +LedgerTransaction.inputs - + + + +com.r3corda.core.transactions / LedgerTransaction / inputs
    +
    +

    inputs

    + +val inputs: List<StateAndRef<*>>
    +Overrides BaseTransaction.inputs
    +

    The resolved input states which will be consumed/invalidated by the execution of this transaction.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/out-ref.html b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/out-ref.html new file mode 100644 index 0000000000..d1bc110571 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/out-ref.html @@ -0,0 +1,15 @@ + + +LedgerTransaction.outRef - + + + +com.r3corda.core.transactions / LedgerTransaction / outRef
    +
    +

    outRef

    + +fun <T : ContractState> outRef(index: Int): StateAndRef<T>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/to-transaction-for-contract.html b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/to-transaction-for-contract.html similarity index 54% rename from docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/to-transaction-for-contract.html rename to docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/to-transaction-for-contract.html index 48ff8cd295..20409b5d50 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/to-transaction-for-contract.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/to-transaction-for-contract.html @@ -4,11 +4,11 @@ -com.r3corda.core.contracts / LedgerTransaction / toTransactionForContract
    +com.r3corda.core.transactions / LedgerTransaction / toTransactionForContract

    toTransactionForContract

    - -fun toTransactionForContract(): TransactionForContract
    + +fun toTransactionForContract(): TransactionForContract

    Strips the transaction down to a form that is usable by the contract verify functions



    diff --git a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/verify.html b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/verify.html similarity index 78% rename from docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/verify.html rename to docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/verify.html index 53f0c603c7..8cfaf431b7 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-ledger-transaction/verify.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-ledger-transaction/verify.html @@ -4,10 +4,10 @@ -com.r3corda.core.contracts / LedgerTransaction / verify
    +com.r3corda.core.transactions / LedgerTransaction / verify

    verify

    - + fun verify(): Unit

    Verifies this transaction and throws an exception if not valid, depending on the type. For general transactions:

    • The contracts are run with the transaction as the input.

      diff --git a/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-init-.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-init-.html new file mode 100644 index 0000000000..e796a37fb4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-init-.html @@ -0,0 +1,20 @@ + + +SignedTransaction.<init> - + + + +com.r3corda.core.transactions / SignedTransaction / <init>
      +
      +

      <init>

      +SignedTransaction(txBits: SerializedBytes<WireTransaction>, sigs: List<WithKey>)
      +

      SignedTransaction wraps a serialized WireTransaction. It contains one or more signatures, each one for +a public key that is mentioned inside a transaction command. SignedTransaction is the top level transaction type +and the type most frequently passed around the network and stored. The identity of a transaction is the hash +of a WireTransaction, therefore if you are storing data keyed by WT hash be aware that multiple different STs may +map to the same key (and they could be different in important ways, like validity). The signatures on a +SignedTransaction might be invalid or missing: the type does not imply validity.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/-init-.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/-init-.html new file mode 100644 index 0000000000..e4aacd8db0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/-init-.html @@ -0,0 +1,14 @@ + + +SignedTransaction.SignaturesMissingException.<init> - + + + +com.r3corda.core.transactions / SignedTransaction / SignaturesMissingException / <init>
      +
      +

      <init>

      +SignaturesMissingException(missing: Set<PublicKey>, descriptions: List<String>, id: SecureHash)
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/descriptions.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/descriptions.html new file mode 100644 index 0000000000..46990bdfed --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/descriptions.html @@ -0,0 +1,15 @@ + + +SignedTransaction.SignaturesMissingException.descriptions - + + + +com.r3corda.core.transactions / SignedTransaction / SignaturesMissingException / descriptions
      +
      +

      descriptions

      + +val descriptions: List<String>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/id.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/id.html new file mode 100644 index 0000000000..4f1b122be4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/id.html @@ -0,0 +1,16 @@ + + +SignedTransaction.SignaturesMissingException.id - + + + +com.r3corda.core.transactions / SignedTransaction / SignaturesMissingException / id
      +
      +

      id

      + +val id: SecureHash
      +Overrides NamedByHash.id
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/index.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/index.html new file mode 100644 index 0000000000..7af83e871f --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/index.html @@ -0,0 +1,59 @@ + + +SignedTransaction.SignaturesMissingException - + + + +com.r3corda.core.transactions / SignedTransaction / SignaturesMissingException
      +
      +

      SignaturesMissingException

      +class SignaturesMissingException : NamedByHash, SignatureException
      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +SignaturesMissingException(missing: Set<PublicKey>, descriptions: List<String>, id: SecureHash)
      +

      Properties

      + + + + + + + + + + + + + + + +
      +descriptions +val descriptions: List<String>
      +id +val id: SecureHash
      +missing +val missing: Set<PublicKey>
      +

      Functions

      + + + + + + + +
      +toString +fun toString(): String
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/missing.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/missing.html new file mode 100644 index 0000000000..ba76148456 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/missing.html @@ -0,0 +1,15 @@ + + +SignedTransaction.SignaturesMissingException.missing - + + + +com.r3corda.core.transactions / SignedTransaction / SignaturesMissingException / missing
      +
      +

      missing

      + +val missing: Set<PublicKey>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/to-string.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/to-string.html similarity index 51% rename from docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/to-string.html rename to docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/to-string.html index ebeb9d862c..92285fb801 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/to-string.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/-signatures-missing-exception/to-string.html @@ -1,13 +1,13 @@ -InMemoryMessagingNetwork.MessageTransfer.toString - +SignedTransaction.SignaturesMissingException.toString - -com.r3corda.node.services.network / InMemoryMessagingNetwork / MessageTransfer / toString
      +com.r3corda.core.transactions / SignedTransaction / SignaturesMissingException / toString

      toString

      - + fun toString(): String


      diff --git a/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/check-signatures-are-valid.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/check-signatures-are-valid.html new file mode 100644 index 0000000000..ca3fc050ab --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/check-signatures-are-valid.html @@ -0,0 +1,22 @@ + + +SignedTransaction.checkSignaturesAreValid - + + + +com.r3corda.core.transactions / SignedTransaction / checkSignaturesAreValid
      +
      +

      checkSignaturesAreValid

      + +fun checkSignaturesAreValid(): Unit
      +

      Mathematically validates the signatures that are present on this transaction. This does not imply that +the signatures are by the right keys, or that there are sufficient signatures, just that they arent +corrupt. If you use this function directly youll need to do the other checks yourself. Probably you +want verifySignatures instead.

      +

      Exceptions

      + +SignatureException - if a signature fails to verify.
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/id.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/id.html similarity index 63% rename from docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/id.html rename to docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/id.html index d473decc9e..e75174eff9 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/id.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/id.html @@ -4,12 +4,12 @@ -com.r3corda.core.contracts / SignedTransaction / id
      +com.r3corda.core.transactions / SignedTransaction / id

      id

      - + val id: SecureHash
      -Overrides NamedByHash.id
      +Overrides NamedByHash.id

      A transaction ID is the hash of the WireTransaction. Thus adding or removing a signature does not change it.



      diff --git a/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/index.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/index.html new file mode 100644 index 0000000000..8894439e83 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/index.html @@ -0,0 +1,134 @@ + + +SignedTransaction - + + + +com.r3corda.core.transactions / SignedTransaction
      +
      +

      SignedTransaction

      +data class SignedTransaction : NamedByHash
      +

      SignedTransaction wraps a serialized WireTransaction. It contains one or more signatures, each one for +a public key that is mentioned inside a transaction command. SignedTransaction is the top level transaction type +and the type most frequently passed around the network and stored. The identity of a transaction is the hash +of a WireTransaction, therefore if you are storing data keyed by WT hash be aware that multiple different STs may +map to the same key (and they could be different in important ways, like validity). The signatures on a +SignedTransaction might be invalid or missing: the type does not imply validity.

      +
      +
      +

      Exceptions

      + + + + + + + +
      +SignaturesMissingException +class SignaturesMissingException : NamedByHash, SignatureException
      +

      Constructors

      + + + + + + + +
      +<init> +SignedTransaction(txBits: SerializedBytes<WireTransaction>, sigs: List<WithKey>)

      SignedTransaction wraps a serialized WireTransaction. It contains one or more signatures, each one for +a public key that is mentioned inside a transaction command. SignedTransaction is the top level transaction type +and the type most frequently passed around the network and stored. The identity of a transaction is the hash +of a WireTransaction, therefore if you are storing data keyed by WT hash be aware that multiple different STs may +map to the same key (and they could be different in important ways, like validity). The signatures on a +SignedTransaction might be invalid or missing: the type does not imply validity.

      +
      +

      Properties

      + + + + + + + + + + + + + + + + + + + +
      +id +val id: SecureHash

      A transaction ID is the hash of the WireTransaction. Thus adding or removing a signature does not change it.

      +
      +sigs +val sigs: List<WithKey>
      +tx +val tx: WireTransaction

      Lazily calculated access to the deserialised/hashed transaction data.

      +
      +txBits +val txBits: SerializedBytes<WireTransaction>
      +

      Functions

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +checkSignaturesAreValid +fun checkSignaturesAreValid(): Unit

      Mathematically validates the signatures that are present on this transaction. This does not imply that +the signatures are by the right keys, or that there are sufficient signatures, just that they arent +corrupt. If you use this function directly youll need to do the other checks yourself. Probably you +want verifySignatures instead.

      +
      +plus +operator fun plus(sig: WithKey): SignedTransaction

      Alias for withAdditionalSignature to let you use Kotlin operator overloading.

      +operator fun plus(sigList: Collection<WithKey>): SignedTransaction

      Alias for withAdditionalSignatures to let you use Kotlin operator overloading.

      +
      +toLedgerTransaction +fun toLedgerTransaction(services: ServiceHub): LedgerTransaction

      Calls verifySignatures to check all required signatures are present, and then calls +WireTransaction.toLedgerTransaction with the passed in ServiceHub to resolve the dependencies, +returning an unverified LedgerTransaction.

      +
      +verifySignatures +fun verifySignatures(vararg allowedToBeMissing: PublicKey): WireTransaction

      Verifies the signatures on this transaction and throws if any are missing which arent passed as parameters. +In this context, "verifying" means checking they are valid signatures and that their public keys are in +the contained transactions BaseTransaction.mustSign property.

      +
      +withAdditionalSignature +fun withAdditionalSignature(sig: WithKey): SignedTransaction

      Returns the same transaction but with an additional (unchecked) signature.

      +
      +withAdditionalSignatures +fun withAdditionalSignatures(sigList: Iterable<WithKey>): SignedTransaction

      Returns the same transaction but with an additional (unchecked) signatures.

      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/plus.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/plus.html new file mode 100644 index 0000000000..b9e1263520 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/plus.html @@ -0,0 +1,21 @@ + + +SignedTransaction.plus - + + + +com.r3corda.core.transactions / SignedTransaction / plus
      +
      +

      plus

      + +operator fun plus(sig: WithKey): SignedTransaction
      +

      Alias for withAdditionalSignature to let you use Kotlin operator overloading.

      +
      +
      + +operator fun plus(sigList: Collection<WithKey>): SignedTransaction
      +

      Alias for withAdditionalSignatures to let you use Kotlin operator overloading.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/sigs.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/sigs.html similarity index 69% rename from docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/sigs.html rename to docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/sigs.html index 1c3974fbdf..8b2debbd57 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/sigs.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/sigs.html @@ -4,10 +4,10 @@ -com.r3corda.core.contracts / SignedTransaction / sigs
      +com.r3corda.core.transactions / SignedTransaction / sigs

      sigs

      - + val sigs: List<WithKey>


      diff --git a/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/to-ledger-transaction.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/to-ledger-transaction.html new file mode 100644 index 0000000000..ff0321ae6a --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/to-ledger-transaction.html @@ -0,0 +1,30 @@ + + +SignedTransaction.toLedgerTransaction - + + + +com.r3corda.core.transactions / SignedTransaction / toLedgerTransaction
      +
      +

      toLedgerTransaction

      + +fun toLedgerTransaction(services: ServiceHub): LedgerTransaction
      +

      Calls verifySignatures to check all required signatures are present, and then calls +WireTransaction.toLedgerTransaction with the passed in ServiceHub to resolve the dependencies, +returning an unverified LedgerTransaction.

      +

      Exceptions

      + +FileNotFoundException - if a required attachment was not found in storage.
      +
      + +TransactionResolutionException - if an input points to a transaction not found in storage.
      +
      + +SignatureException - if any signatures were invalid or unrecognised
      +
      + +SignaturesMissingException - if any signatures that should have been present are missing.
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/tx-bits.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/tx-bits.html similarity index 71% rename from docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/tx-bits.html rename to docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/tx-bits.html index 2126a699f1..84f91d497a 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/tx-bits.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/tx-bits.html @@ -4,10 +4,10 @@ -com.r3corda.core.contracts / SignedTransaction / txBits
      +com.r3corda.core.transactions / SignedTransaction / txBits

      txBits

      - + val txBits: SerializedBytes<WireTransaction>


      diff --git a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/tx.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/tx.html similarity index 72% rename from docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/tx.html rename to docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/tx.html index b2e2811d52..bd6a99dcfb 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-signed-transaction/tx.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/tx.html @@ -4,10 +4,10 @@ -com.r3corda.core.contracts / SignedTransaction / tx
      +com.r3corda.core.transactions / SignedTransaction / tx

      tx

      - + val tx: WireTransaction

      Lazily calculated access to the deserialised/hashed transaction data.

      Getter
      diff --git a/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/verify-signatures.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/verify-signatures.html new file mode 100644 index 0000000000..5cf525f9b8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/verify-signatures.html @@ -0,0 +1,29 @@ + + +SignedTransaction.verifySignatures - + + + +com.r3corda.core.transactions / SignedTransaction / verifySignatures
      +
      +

      verifySignatures

      + +fun verifySignatures(vararg allowedToBeMissing: PublicKey): WireTransaction
      +

      Verifies the signatures on this transaction and throws if any are missing which arent passed as parameters. +In this context, "verifying" means checking they are valid signatures and that their public keys are in +the contained transactions BaseTransaction.mustSign property.

      +

      Normally you would not provide any keys to this function, but if youre in the process of building a partial +transaction and you want to access the contents before youve signed it, you can specify your own keys here +to bypass that check.

      +
      +
      +

      Exceptions

      + +SignatureException - if any signatures are invalid or unrecognised.
      +
      + +SignaturesMissingException - if any signatures should have been present but were not.
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/with-additional-signature.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/with-additional-signature.html new file mode 100644 index 0000000000..08228a2d82 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/with-additional-signature.html @@ -0,0 +1,16 @@ + + +SignedTransaction.withAdditionalSignature - + + + +com.r3corda.core.transactions / SignedTransaction / withAdditionalSignature
      +
      +

      withAdditionalSignature

      + +fun withAdditionalSignature(sig: WithKey): SignedTransaction
      +

      Returns the same transaction but with an additional (unchecked) signature.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/with-additional-signatures.html b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/with-additional-signatures.html new file mode 100644 index 0000000000..249624137c --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-signed-transaction/with-additional-signatures.html @@ -0,0 +1,16 @@ + + +SignedTransaction.withAdditionalSignatures - + + + +com.r3corda.core.transactions / SignedTransaction / withAdditionalSignatures
      +
      +

      withAdditionalSignatures

      + +fun withAdditionalSignatures(sigList: Iterable<WithKey>): SignedTransaction
      +

      Returns the same transaction but with an additional (unchecked) signatures.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/-init-.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/-init-.html new file mode 100644 index 0000000000..8646d83004 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/-init-.html @@ -0,0 +1,31 @@ + + +TransactionBuilder.<init> - + + + +com.r3corda.core.transactions / TransactionBuilder / <init>
      +
      +

      <init>

      +TransactionBuilder(type: TransactionType = TransactionType.General(), notary: Party? = null, inputs: MutableList<StateRef> = arrayListOf(), attachments: MutableList<SecureHash> = arrayListOf(), outputs: MutableList<TransactionState<ContractState>> = arrayListOf(), commands: MutableList<Command> = arrayListOf(), signers: MutableSet<PublicKey> = mutableSetOf(), timestamp: Timestamp? = null)
      +

      A TransactionBuilder is a transaction class thats mutable (unlike the others which are all immutable). It is +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.

      +

      The builder can be customised for specific transaction types, e.g. where additional processing is needed +before adding a state/command.

      +
      +
      +

      Parameters

      + +notary - Notary used for the transaction. If null, this indicates the transaction DOES NOT have a notary. +When this is set to a non-null value, an output state can be added by just passing in a ContractState – a +TransactionState with this notary specified will be generated automatically.
      +
      + +signers - The set of public keys the transaction needs signatures for. The logic for building the signers set +can be customised for every TransactionType. E.g. in the general case it contains the command and notary public keys, +but for the TransactionType.NotaryChange transactions it is the set of all input ContractState.participants.
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-attachment.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-attachment.html new file mode 100644 index 0000000000..0966bebbea --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-attachment.html @@ -0,0 +1,15 @@ + + +TransactionBuilder.addAttachment - + + + +com.r3corda.core.transactions / TransactionBuilder / addAttachment
      +
      +

      addAttachment

      + +fun addAttachment(attachmentId: SecureHash): Unit
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-command.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-command.html new file mode 100644 index 0000000000..fa16568259 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-command.html @@ -0,0 +1,19 @@ + + +TransactionBuilder.addCommand - + + + +com.r3corda.core.transactions / TransactionBuilder / addCommand
      +
      +

      addCommand

      + +fun addCommand(arg: Command): Unit
      + +fun addCommand(data: CommandData, vararg keys: PublicKey): <ERROR CLASS>
      + +fun addCommand(data: CommandData, keys: List<PublicKey>): Unit
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-input-state.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-input-state.html new file mode 100644 index 0000000000..3500c5ab71 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-input-state.html @@ -0,0 +1,15 @@ + + +TransactionBuilder.addInputState - + + + +com.r3corda.core.transactions / TransactionBuilder / addInputState
      +
      +

      addInputState

      + +open fun addInputState(stateAndRef: StateAndRef<*>): Unit
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-output-state.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-output-state.html new file mode 100644 index 0000000000..bc36251aae --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-output-state.html @@ -0,0 +1,22 @@ + + +TransactionBuilder.addOutputState - + + + +com.r3corda.core.transactions / TransactionBuilder / addOutputState
      +
      +

      addOutputState

      + +fun addOutputState(state: TransactionState<*>): Int
      + +fun addOutputState(state: ContractState, notary: Party): Int
      +
      +
      + +fun addOutputState(state: ContractState): Int
      +

      A default notary must be specified during builder construction to use this method

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-signature-unchecked.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-signature-unchecked.html new file mode 100644 index 0000000000..a1bfb67a6a --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/add-signature-unchecked.html @@ -0,0 +1,16 @@ + + +TransactionBuilder.addSignatureUnchecked - + + + +com.r3corda.core.transactions / TransactionBuilder / addSignatureUnchecked
      +
      +

      addSignatureUnchecked

      + +fun addSignatureUnchecked(sig: WithKey): TransactionBuilder
      +

      Adds the signature directly to the transaction, without checking it for validity.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/attachments.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/attachments.html similarity index 75% rename from docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/attachments.html rename to docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/attachments.html index 4e83284f6e..9ce23c7c26 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/attachments.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/attachments.html @@ -4,12 +4,12 @@ -com.r3corda.core.contracts / TransactionBuilder / attachments
      +com.r3corda.core.transactions / TransactionBuilder / attachments

      attachments

      - + fun attachments(): List<SecureHash>
      - + protected val attachments: MutableList<SecureHash>


      diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/check-and-add-signature.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/check-and-add-signature.html similarity index 50% rename from docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/check-and-add-signature.html rename to docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/check-and-add-signature.html index a3436f61f1..420e058829 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/check-and-add-signature.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/check-and-add-signature.html @@ -4,11 +4,11 @@ -com.r3corda.core.contracts / TransactionBuilder / checkAndAddSignature
      +com.r3corda.core.transactions / TransactionBuilder / checkAndAddSignature

      checkAndAddSignature

      - -fun checkAndAddSignature(sig: WithKey): Unit
      + +fun checkAndAddSignature(sig: WithKey): Unit

      Checks that the given signature matches one of the commands and that it is a correct signature over the tx, then adds it.

      Exceptions

      diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/check-signature.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/check-signature.html similarity index 50% rename from docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/check-signature.html rename to docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/check-signature.html index 2bbe6228be..6c524234c9 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/check-signature.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/check-signature.html @@ -4,11 +4,11 @@ -com.r3corda.core.contracts / TransactionBuilder / checkSignature
      +com.r3corda.core.transactions / TransactionBuilder / checkSignature

      checkSignature

      - -fun checkSignature(sig: WithKey): Unit
      + +fun checkSignature(sig: WithKey): Unit

      Checks that the given signature matches one of the commands and that it is a correct signature over the tx.

      Exceptions

      diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/commands.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/commands.html new file mode 100644 index 0000000000..5bc022c9b5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/commands.html @@ -0,0 +1,17 @@ + + +TransactionBuilder.commands - + + + +com.r3corda.core.transactions / TransactionBuilder / commands
      +
      +

      commands

      + +fun commands(): List<Command>
      + +protected val commands: MutableList<Command>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/copy.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/copy.html similarity index 67% rename from docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/copy.html rename to docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/copy.html index fe90ddb2d5..a3d435130f 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/copy.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/copy.html @@ -4,10 +4,10 @@ -com.r3corda.core.contracts / TransactionBuilder / copy
      +com.r3corda.core.transactions / TransactionBuilder / copy

      copy

      - + fun copy(): TransactionBuilder

      Creates a copy of the builder.


      diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/current-sigs.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/current-sigs.html similarity index 66% rename from docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/current-sigs.html rename to docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/current-sigs.html index fe2ffdc034..74190bd2ae 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/current-sigs.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/current-sigs.html @@ -4,10 +4,10 @@ -com.r3corda.core.contracts / TransactionBuilder / currentSigs
      +com.r3corda.core.transactions / TransactionBuilder / currentSigs

      currentSigs

      - + protected val currentSigs: <ERROR CLASS>

      The signatures that have been collected so far - might be incomplete


      diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/index.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/index.html new file mode 100644 index 0000000000..46a5381998 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/index.html @@ -0,0 +1,251 @@ + + +TransactionBuilder - + + + +com.r3corda.core.transactions / TransactionBuilder
      +
      +

      TransactionBuilder

      +open class TransactionBuilder
      +

      A TransactionBuilder is a transaction class thats mutable (unlike the others which are all immutable). It is +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.

      +

      The builder can be customised for specific transaction types, e.g. where additional processing is needed +before adding a state/command.

      +
      +
      +

      Parameters

      + +notary - Notary used for the transaction. If null, this indicates the transaction DOES NOT have a notary. +When this is set to a non-null value, an output state can be added by just passing in a ContractState – a +TransactionState with this notary specified will be generated automatically.
      +
      + +signers - The set of public keys the transaction needs signatures for. The logic for building the signers set +can be customised for every TransactionType. E.g. in the general case it contains the command and notary public keys, +but for the TransactionType.NotaryChange transactions it is the set of all input ContractState.participants.
      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +TransactionBuilder(type: TransactionType = TransactionType.General(), notary: Party? = null, inputs: MutableList<StateRef> = arrayListOf(), attachments: MutableList<SecureHash> = arrayListOf(), outputs: MutableList<TransactionState<ContractState>> = arrayListOf(), commands: MutableList<Command> = arrayListOf(), signers: MutableSet<PublicKey> = mutableSetOf(), timestamp: Timestamp? = null)

      A TransactionBuilder is a transaction class thats mutable (unlike the others which are all immutable). It is +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.

      +
      +

      Properties

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +attachments +val attachments: MutableList<SecureHash>
      +commands +val commands: MutableList<Command>
      +currentSigs +val currentSigs: <ERROR CLASS>

      The signatures that have been collected so far - might be incomplete

      +
      +inputs +val inputs: MutableList<StateRef>
      +notary +var notary: Party?
      +outputs +val outputs: MutableList<TransactionState<ContractState>>
      +signers +val signers: MutableSet<PublicKey>
      +time +val time: Timestamp?
      +timestamp +var timestamp: Timestamp?
      +type +val type: TransactionType
      +

      Functions

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +addAttachment +fun addAttachment(attachmentId: SecureHash): Unit
      +addCommand +fun addCommand(arg: Command): Unit
      +fun addCommand(data: CommandData, vararg keys: PublicKey): <ERROR CLASS>
      +fun addCommand(data: CommandData, keys: List<PublicKey>): Unit
      +addInputState +open fun addInputState(stateAndRef: StateAndRef<*>): Unit
      +addOutputState +fun addOutputState(state: TransactionState<*>): Int
      +fun addOutputState(state: ContractState, notary: Party): Intfun addOutputState(state: ContractState): Int

      A default notary must be specified during builder construction to use this method

      +
      +addSignatureUnchecked +fun addSignatureUnchecked(sig: WithKey): TransactionBuilder

      Adds the signature directly to the transaction, without checking it for validity.

      +
      +attachments +fun attachments(): List<SecureHash>
      +checkAndAddSignature +fun checkAndAddSignature(sig: WithKey): Unit

      Checks that the given signature matches one of the commands and that it is a correct signature over the tx, then +adds it.

      +
      +checkSignature +fun checkSignature(sig: WithKey): Unit

      Checks that the given signature matches one of the commands and that it is a correct signature over the tx.

      +
      +commands +fun commands(): List<Command>
      +copy +fun copy(): TransactionBuilder

      Creates a copy of the builder.

      +
      +inputStates +fun inputStates(): List<StateRef>
      +outputStates +fun outputStates(): List<TransactionState<*>>
      +setTime +fun setTime(time: Instant, timeTolerance: Duration): Unit

      Places a TimestampCommand in this transaction, removing any existing command if there is one. +The command requires a signature from the Notary service, which acts as a Timestamp Authority. +The signature can be obtained using NotaryProtocol.

      +fun setTime(newTimestamp: Timestamp): Unit
      +signWith +fun signWith(key: KeyPair): TransactionBuilder
      +toSignedTransaction +fun toSignedTransaction(checkSufficientSignatures: Boolean = true): SignedTransaction
      +toWireTransaction +fun toWireTransaction(): WireTransaction
      +withItems +fun withItems(vararg items: Any): TransactionBuilder

      A more convenient way to add items to this transaction that calls the add* methods for you based on type

      +
      +

      Inheritors

      + + + + + + + + + + + +
      +Builder +class Builder : TransactionBuilder

      Just uses the default TransactionBuilder with no special logic

      +
      +Builder +class Builder : TransactionBuilder

      A transaction builder that automatically sets the transaction type to NotaryChange +and adds the list of participants to the signers set for every input state.

      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/input-states.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/input-states.html new file mode 100644 index 0000000000..cab46ebffd --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/input-states.html @@ -0,0 +1,15 @@ + + +TransactionBuilder.inputStates - + + + +com.r3corda.core.transactions / TransactionBuilder / inputStates
      +
      +

      inputStates

      + +fun inputStates(): List<StateRef>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/inputs.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/inputs.html new file mode 100644 index 0000000000..99622cc149 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/inputs.html @@ -0,0 +1,15 @@ + + +TransactionBuilder.inputs - + + + +com.r3corda.core.transactions / TransactionBuilder / inputs
      +
      +

      inputs

      + +protected val inputs: MutableList<StateRef>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/notary.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/notary.html similarity index 65% rename from docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/notary.html rename to docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/notary.html index a0cff76588..5d8a083ab6 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/notary.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/notary.html @@ -4,10 +4,10 @@ -com.r3corda.core.contracts / TransactionBuilder / notary
      +com.r3corda.core.transactions / TransactionBuilder / notary

      notary

      - + var notary: Party?


      diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/output-states.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/output-states.html new file mode 100644 index 0000000000..fe3b1e32dc --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/output-states.html @@ -0,0 +1,15 @@ + + +TransactionBuilder.outputStates - + + + +com.r3corda.core.transactions / TransactionBuilder / outputStates
      +
      +

      outputStates

      + +fun outputStates(): List<TransactionState<*>>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/outputs.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/outputs.html new file mode 100644 index 0000000000..93eca9e4f2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/outputs.html @@ -0,0 +1,15 @@ + + +TransactionBuilder.outputs - + + + +com.r3corda.core.transactions / TransactionBuilder / outputs
      +
      +

      outputs

      + +protected val outputs: MutableList<TransactionState<ContractState>>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/set-time.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/set-time.html new file mode 100644 index 0000000000..94bf52094f --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/set-time.html @@ -0,0 +1,30 @@ + + +TransactionBuilder.setTime - + + + +com.r3corda.core.transactions / TransactionBuilder / setTime
      +
      +

      setTime

      + +fun setTime(time: Instant, timeTolerance: Duration): Unit
      +

      Places a TimestampCommand in this transaction, removing any existing command if there is one. +The command requires a signature from the Notary service, which acts as a Timestamp Authority. +The signature can be obtained using NotaryProtocol.

      +

      The window of time in which the final timestamp may lie is defined as time +/- timeTolerance. +If you want a non-symmetrical time window you must add the command via addCommand yourself. The tolerance +should be chosen such that your code can finish building the transaction and sending it to the TSA within that +window of time, taking into account factors such as network latency. Transactions being built by a group of +collaborating parties may therefore require a higher time tolerance than a transaction being built by a single +node.

      +
      +
      +
      +
      + +fun setTime(newTimestamp: Timestamp): Unit
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/sign-with.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/sign-with.html new file mode 100644 index 0000000000..4bf8627e30 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/sign-with.html @@ -0,0 +1,15 @@ + + +TransactionBuilder.signWith - + + + +com.r3corda.core.transactions / TransactionBuilder / signWith
      +
      +

      signWith

      + +fun signWith(key: KeyPair): TransactionBuilder
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/signers.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/signers.html similarity index 71% rename from docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/signers.html rename to docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/signers.html index 0829ae968c..4766008260 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/signers.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/signers.html @@ -4,10 +4,10 @@ -com.r3corda.core.contracts / TransactionBuilder / signers
      +com.r3corda.core.transactions / TransactionBuilder / signers

      signers

      - + protected val signers: MutableSet<PublicKey>


      diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/time.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/time.html new file mode 100644 index 0000000000..d64e08325b --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/time.html @@ -0,0 +1,15 @@ + + +TransactionBuilder.time - + + + +com.r3corda.core.transactions / TransactionBuilder / time
      +
      +

      time

      + +val time: Timestamp?
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/timestamp.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/timestamp.html new file mode 100644 index 0000000000..36620822c5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/timestamp.html @@ -0,0 +1,15 @@ + + +TransactionBuilder.timestamp - + + + +com.r3corda.core.transactions / TransactionBuilder / timestamp
      +
      +

      timestamp

      + +protected var timestamp: Timestamp?
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/to-signed-transaction.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/to-signed-transaction.html new file mode 100644 index 0000000000..7f73b90dbc --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/to-signed-transaction.html @@ -0,0 +1,15 @@ + + +TransactionBuilder.toSignedTransaction - + + + +com.r3corda.core.transactions / TransactionBuilder / toSignedTransaction
      +
      +

      toSignedTransaction

      + +fun toSignedTransaction(checkSufficientSignatures: Boolean = true): SignedTransaction
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/to-wire-transaction.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/to-wire-transaction.html similarity index 65% rename from docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/to-wire-transaction.html rename to docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/to-wire-transaction.html index 8280338b04..449acfe4d8 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-transaction-builder/to-wire-transaction.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/to-wire-transaction.html @@ -4,10 +4,10 @@ -com.r3corda.core.contracts / TransactionBuilder / toWireTransaction
      +com.r3corda.core.transactions / TransactionBuilder / toWireTransaction

      toWireTransaction

      - + fun toWireTransaction(): WireTransaction


      diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/type.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/type.html new file mode 100644 index 0000000000..b74e8f43dd --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/type.html @@ -0,0 +1,15 @@ + + +TransactionBuilder.type - + + + +com.r3corda.core.transactions / TransactionBuilder / type
      +
      +

      type

      + +protected val type: TransactionType
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/with-items.html b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/with-items.html new file mode 100644 index 0000000000..f0eb407ac5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-transaction-builder/with-items.html @@ -0,0 +1,16 @@ + + +TransactionBuilder.withItems - + + + +com.r3corda.core.transactions / TransactionBuilder / withItems
      +
      +

      withItems

      + +fun withItems(vararg items: Any): TransactionBuilder
      +

      A more convenient way to add items to this transaction that calls the add* methods for you based on type

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/-init-.html b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/-init-.html new file mode 100644 index 0000000000..85e092b53b --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/-init-.html @@ -0,0 +1,18 @@ + + +WireTransaction.<init> - + + + +com.r3corda.core.transactions / WireTransaction / <init>
      +
      +

      <init>

      +WireTransaction(inputs: List<StateRef>, attachments: List<SecureHash>, outputs: List<TransactionState<ContractState>>, commands: List<Command>, notary: Party?, signers: List<PublicKey>, type: TransactionType, timestamp: Timestamp?)
      +

      A transaction ready for serialisation, without any signatures attached. A WireTransaction is usually wrapped +by a SignedTransaction that carries the signatures over this payload. The hash of the wire transaction is +the identity of the transaction, that is, its possible for two SignedTransactions with different sets of +signatures to have the same identity hash.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/attachments.html b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/attachments.html similarity index 60% rename from docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/attachments.html rename to docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/attachments.html index 1679435432..1c67f236e9 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/attachments.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/attachments.html @@ -4,11 +4,12 @@ -com.r3corda.core.contracts / WireTransaction / attachments
      +com.r3corda.core.transactions / WireTransaction / attachments

      attachments

      - + val attachments: List<SecureHash>
      +

      Hashes of the ZIP/JAR files that are needed to interpret the contents of this wire transaction.



      diff --git a/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/commands.html b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/commands.html new file mode 100644 index 0000000000..f3dab08188 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/commands.html @@ -0,0 +1,16 @@ + + +WireTransaction.commands - + + + +com.r3corda.core.transactions / WireTransaction / commands
      +
      +

      commands

      + +val commands: List<Command>
      +

      Ordered list of (CommandData, PublicKey) pairs that instruct the contracts what to do.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/deserialize.html b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/deserialize.html new file mode 100644 index 0000000000..e644fb0369 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/deserialize.html @@ -0,0 +1,15 @@ + + +WireTransaction.deserialize - + + + +com.r3corda.core.transactions / WireTransaction / deserialize
      +
      +

      deserialize

      + +fun deserialize(bits: SerializedBytes<WireTransaction>, kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): WireTransaction
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/equals.html b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/equals.html new file mode 100644 index 0000000000..4f64f76561 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/equals.html @@ -0,0 +1,16 @@ + + +WireTransaction.equals - + + + +com.r3corda.core.transactions / WireTransaction / equals
      +
      +

      equals

      + +fun equals(other: Any?): Boolean
      +Overrides BaseTransaction.equals
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/hash-code.html b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/hash-code.html new file mode 100644 index 0000000000..c76da5cda6 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/hash-code.html @@ -0,0 +1,16 @@ + + +WireTransaction.hashCode - + + + +com.r3corda.core.transactions / WireTransaction / hashCode
      +
      +

      hashCode

      + +fun hashCode(): Int
      +Overrides BaseTransaction.hashCode
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/id.html b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/id.html similarity index 55% rename from docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/id.html rename to docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/id.html index 4d3e332078..1ebf38787d 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/id.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/id.html @@ -4,12 +4,12 @@ -com.r3corda.core.contracts / WireTransaction / id
      +com.r3corda.core.transactions / WireTransaction / id

      id

      - + val id: SecureHash
      -Overrides NamedByHash.id
      +Overrides NamedByHash.id


      diff --git a/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/index.html b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/index.html new file mode 100644 index 0000000000..fbe846dbb3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/index.html @@ -0,0 +1,178 @@ + + +WireTransaction - + + + +com.r3corda.core.transactions / WireTransaction
      +
      +

      WireTransaction

      +class WireTransaction : BaseTransaction
      +

      A transaction ready for serialisation, without any signatures attached. A WireTransaction is usually wrapped +by a SignedTransaction that carries the signatures over this payload. The hash of the wire transaction is +the identity of the transaction, that is, its possible for two SignedTransactions with different sets of +signatures to have the same identity hash.

      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +WireTransaction(inputs: List<StateRef>, attachments: List<SecureHash>, outputs: List<TransactionState<ContractState>>, commands: List<Command>, notary: Party?, signers: List<PublicKey>, type: TransactionType, timestamp: Timestamp?)

      A transaction ready for serialisation, without any signatures attached. A WireTransaction is usually wrapped +by a SignedTransaction that carries the signatures over this payload. The hash of the wire transaction is +the identity of the transaction, that is, its possible for two SignedTransactions with different sets of +signatures to have the same identity hash.

      +
      +

      Properties

      + + + + + + + + + + + + + + + + + + + + + + + +
      +attachments +val attachments: List<SecureHash>

      Hashes of the ZIP/JAR files that are needed to interpret the contents of this wire transaction.

      +
      +commands +val commands: List<Command>

      Ordered list of (CommandData, PublicKey) pairs that instruct the contracts what to do.

      +
      +id +val id: SecureHash
      +inputs +val inputs: List<StateRef>

      Pointers to the input states on the ledger, identified by (tx identity hash, output index).

      +
      +serialized +val serialized: SerializedBytes<WireTransaction>
      +

      Inherited Properties

      + + + + + + + + + + + + + + + + + + + + + + + +
      +mustSign +val mustSign: List<PublicKey>

      Keys that are required to have signed the wrapping SignedTransaction, ordered to match the list of +signatures. There is nothing that forces the list to be the correct list of signers for this +transaction until the transaction is verified by using LedgerTransaction.verify. It includes the +notary key, if the notary field is set.

      +
      +notary +val notary: Party?

      If present, the notary for this transaction. If absent then the transaction is not notarised at all. +This is intended for issuance/genesis transactions that dont consume any other states and thus cant +double spend anything.

      +
      +outputs +val outputs: List<TransactionState<ContractState>>

      Ordered list of states defined by this transaction, along with the associated notaries.

      +
      +timestamp +val timestamp: Timestamp?

      If specified, a time window in which this transaction may have been notarised. Contracts can check this +time window to find out when a transaction is deemed to have occurred, from the ledgers perspective.

      +
      +type +val type: TransactionType

      Pointer to a class that defines the behaviour of this transaction: either normal, or "notary changing".

      +
      +

      Functions

      + + + + + + + + + + + + + + + + + + + + + + + +
      +equals +fun equals(other: Any?): Boolean
      +hashCode +fun hashCode(): Int
      +outRef +fun <T : ContractState> outRef(index: Int): StateAndRef<T>

      Returns a StateAndRef for the given output index.

      +fun <T : ContractState> outRef(state: ContractState): StateAndRef<T>

      Returns a StateAndRef for the requested output state, or throws IllegalArgumentException if not found.

      +
      +toLedgerTransaction +fun toLedgerTransaction(services: ServiceHub): LedgerTransaction

      Looks up identities and attachments from storage to generate a LedgerTransaction. A transaction is expected to +have been fully resolved using the resolution protocol by this point.

      +
      +toString +fun toString(): String
      +

      Inherited Functions

      + + + + + + + +
      +checkInvariants +fun checkInvariants(): Unit
      +

      Companion Object Functions

      + + + + + + + +
      +deserialize +fun deserialize(bits: SerializedBytes<WireTransaction>, kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): WireTransaction
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/inputs.html b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/inputs.html new file mode 100644 index 0000000000..432c09a804 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/inputs.html @@ -0,0 +1,17 @@ + + +WireTransaction.inputs - + + + +com.r3corda.core.transactions / WireTransaction / inputs
      +
      +

      inputs

      + +val inputs: List<StateRef>
      +Overrides BaseTransaction.inputs
      +

      Pointers to the input states on the ledger, identified by (tx identity hash, output index).

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/out-ref.html b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/out-ref.html new file mode 100644 index 0000000000..aec385cc31 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/out-ref.html @@ -0,0 +1,21 @@ + + +WireTransaction.outRef - + + + +com.r3corda.core.transactions / WireTransaction / outRef
      +
      +

      outRef

      + +fun <T : ContractState> outRef(index: Int): StateAndRef<T>
      +

      Returns a StateAndRef for the given output index.

      +
      +
      + +fun <T : ContractState> outRef(state: ContractState): StateAndRef<T>
      +

      Returns a StateAndRef for the requested output state, or throws IllegalArgumentException if not found.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/serialized.html b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/serialized.html similarity index 71% rename from docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/serialized.html rename to docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/serialized.html index d446cbfe4d..52a41c5f7f 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/serialized.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/serialized.html @@ -4,10 +4,10 @@ -com.r3corda.core.contracts / WireTransaction / serialized
      +com.r3corda.core.transactions / WireTransaction / serialized

      serialized

      - + val serialized: SerializedBytes<WireTransaction>


      diff --git a/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/to-ledger-transaction.html b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/to-ledger-transaction.html new file mode 100644 index 0000000000..8f828d2c44 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/to-ledger-transaction.html @@ -0,0 +1,23 @@ + + +WireTransaction.toLedgerTransaction - + + + +com.r3corda.core.transactions / WireTransaction / toLedgerTransaction
      +
      +

      toLedgerTransaction

      + +fun toLedgerTransaction(services: ServiceHub): LedgerTransaction
      +

      Looks up identities and attachments from storage to generate a LedgerTransaction. A transaction is expected to +have been fully resolved using the resolution protocol by this point.

      +

      Exceptions

      + +FileNotFoundException - if a required attachment was not found in storage.
      +
      + +TransactionResolutionException - if an input points to a transaction not found in storage.
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/to-string.html b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/to-string.html similarity index 63% rename from docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/to-string.html rename to docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/to-string.html index 6fa6aae1a0..0c328bc1e9 100644 --- a/docs/build/html/api/com.r3corda.core.contracts/-wire-transaction/to-string.html +++ b/docs/build/html/api/com.r3corda.core.transactions/-wire-transaction/to-string.html @@ -4,10 +4,10 @@ -com.r3corda.core.contracts / WireTransaction / toString
      +com.r3corda.core.transactions / WireTransaction / toString

      toString

      - + fun toString(): String


      diff --git a/docs/build/html/api/com.r3corda.core.transactions/index.html b/docs/build/html/api/com.r3corda.core.transactions/index.html new file mode 100644 index 0000000000..aad79c6b71 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.transactions/index.html @@ -0,0 +1,61 @@ + + +com.r3corda.core.transactions - + + + +com.r3corda.core.transactions
      +
      +

      Package com.r3corda.core.transactions

      +

      Types

      + + + + + + + + + + + + + + + + + + + + + + + +
      +BaseTransaction +abstract class BaseTransaction : NamedByHash

      An abstract class defining fields shared by all transaction types in the system.

      +
      +LedgerTransaction +class LedgerTransaction : BaseTransaction

      A LedgerTransaction is derived from a WireTransaction. It is the result of doing the following operations:

      +
      +SignedTransaction +data class SignedTransaction : NamedByHash

      SignedTransaction wraps a serialized WireTransaction. It contains one or more signatures, each one for +a public key that is mentioned inside a transaction command. SignedTransaction is the top level transaction type +and the type most frequently passed around the network and stored. The identity of a transaction is the hash +of a WireTransaction, therefore if you are storing data keyed by WT hash be aware that multiple different STs may +map to the same key (and they could be different in important ways, like validity). The signatures on a +SignedTransaction might be invalid or missing: the type does not imply validity.

      +
      +TransactionBuilder +open class TransactionBuilder

      A TransactionBuilder is a transaction class thats mutable (unlike the others which are all immutable). It is +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.

      +
      +WireTransaction +class WireTransaction : BaseTransaction

      A transaction ready for serialisation, without any signatures attached. A WireTransaction is usually wrapped +by a SignedTransaction that carries the signatures over this payload. The hash of the wire transaction is +the identity of the transaction, that is, its possible for two SignedTransactions with different sets of +signatures to have the same identity hash.

      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/-init-.html b/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/-init-.html deleted file mode 100644 index e4d70353e5..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - -BriefLogFormatter.<init> - - - - -com.r3corda.core.utilities / BriefLogFormatter / <init>
      -
      -

      <init>

      -BriefLogFormatter()
      -

      A Java logging formatter that writes more compact output than the default.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/format.html b/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/format.html deleted file mode 100644 index 523acf7ab7..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/format.html +++ /dev/null @@ -1,15 +0,0 @@ - - -BriefLogFormatter.format - - - - -com.r3corda.core.utilities / BriefLogFormatter / format
      -
      -

      format

      - -fun format(logRecord: LogRecord): String
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/index.html b/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/index.html deleted file mode 100644 index 9d053c2b64..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/index.html +++ /dev/null @@ -1,73 +0,0 @@ - - -BriefLogFormatter - - - - -com.r3corda.core.utilities / BriefLogFormatter
      -
      -

      BriefLogFormatter

      -class BriefLogFormatter : Formatter
      -

      A Java logging formatter that writes more compact output than the default.

      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -BriefLogFormatter()

      A Java logging formatter that writes more compact output than the default.

      -
      -

      Functions

      - - - - - - - -
      -format -fun format(logRecord: LogRecord): String
      -

      Companion Object Functions

      - - - - - - - - - - - - - - - - - - - -
      -init -fun init(): Unit

      Configures JDK logging to use this class for everything.

      -
      -initVerbose -fun initVerbose(vararg loggerNames: String): Unit

      Takes a set of strings identifying logger names for which the logging level should be configured. -If the logger name starts with a + or an ordinary character, the level is set to Level.ALL. If it starts -with a - then logging is switched off.

      -
      -loggingOff -fun loggingOff(vararg names: String): Unit
      -fun loggingOff(vararg classes: KClass<*>): Unit
      -loggingOn -fun loggingOn(vararg names: String): Unit
      -fun loggingOn(vararg classes: KClass<*>): Unit
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/init-verbose.html b/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/init-verbose.html deleted file mode 100644 index 04c33ebbb0..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/init-verbose.html +++ /dev/null @@ -1,18 +0,0 @@ - - -BriefLogFormatter.initVerbose - - - - -com.r3corda.core.utilities / BriefLogFormatter / initVerbose
      -
      -

      initVerbose

      - -fun initVerbose(vararg loggerNames: String): Unit
      -

      Takes a set of strings identifying logger names for which the logging level should be configured. -If the logger name starts with a + or an ordinary character, the level is set to Level.ALL. If it starts -with a - then logging is switched off.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/init.html b/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/init.html deleted file mode 100644 index 6ce33ef6dc..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/init.html +++ /dev/null @@ -1,16 +0,0 @@ - - -BriefLogFormatter.init - - - - -com.r3corda.core.utilities / BriefLogFormatter / init
      -
      -

      init

      - -fun init(): Unit
      -

      Configures JDK logging to use this class for everything.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/logging-off.html b/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/logging-off.html deleted file mode 100644 index 5dda320abe..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/logging-off.html +++ /dev/null @@ -1,17 +0,0 @@ - - -BriefLogFormatter.loggingOff - - - - -com.r3corda.core.utilities / BriefLogFormatter / loggingOff
      -
      -

      loggingOff

      - -fun loggingOff(vararg names: String): Unit
      - -fun loggingOff(vararg classes: KClass<*>): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/logging-on.html b/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/logging-on.html deleted file mode 100644 index 139165ef72..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-brief-log-formatter/logging-on.html +++ /dev/null @@ -1,17 +0,0 @@ - - -BriefLogFormatter.loggingOn - - - - -com.r3corda.core.utilities / BriefLogFormatter / loggingOn
      -
      -

      loggingOn

      - -fun loggingOn(vararg names: String): Unit
      - -fun loggingOn(vararg classes: KClass<*>): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-k-e-y_1.html b/docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-k-e-y_1.html similarity index 72% rename from docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-k-e-y_1.html rename to docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-k-e-y_1.html index 02ad856c8b..1c2f9a06c0 100644 --- a/docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-k-e-y_1.html +++ b/docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-k-e-y_1.html @@ -4,10 +4,10 @@ -com.r3corda.core.testing / DUMMY_KEY_1
      +com.r3corda.core.utilities / DUMMY_KEY_1

      DUMMY_KEY_1

      - + val DUMMY_KEY_1: KeyPair


      diff --git a/docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-k-e-y_2.html b/docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-k-e-y_2.html similarity index 72% rename from docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-k-e-y_2.html rename to docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-k-e-y_2.html index 51e42dbc50..c04cebf4fc 100644 --- a/docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-k-e-y_2.html +++ b/docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-k-e-y_2.html @@ -4,10 +4,10 @@ -com.r3corda.core.testing / DUMMY_KEY_2
      +com.r3corda.core.utilities / DUMMY_KEY_2

      DUMMY_KEY_2

      - + val DUMMY_KEY_2: KeyPair


      diff --git a/docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-n-o-t-a-r-y.html b/docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-n-o-t-a-r-y.html similarity index 71% rename from docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-n-o-t-a-r-y.html rename to docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-n-o-t-a-r-y.html index ee2899be3f..c169352f6a 100644 --- a/docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-n-o-t-a-r-y.html +++ b/docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-n-o-t-a-r-y.html @@ -4,10 +4,10 @@ -com.r3corda.core.testing / DUMMY_NOTARY
      +com.r3corda.core.utilities / DUMMY_NOTARY

      DUMMY_NOTARY

      - + val DUMMY_NOTARY: Party


      diff --git a/docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-n-o-t-a-r-y_-k-e-y.html b/docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-n-o-t-a-r-y_-k-e-y.html similarity index 72% rename from docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-n-o-t-a-r-y_-k-e-y.html rename to docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-n-o-t-a-r-y_-k-e-y.html index 085a0d90ef..81a2087842 100644 --- a/docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-n-o-t-a-r-y_-k-e-y.html +++ b/docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-n-o-t-a-r-y_-k-e-y.html @@ -4,10 +4,10 @@ -com.r3corda.core.testing / DUMMY_NOTARY_KEY
      +com.r3corda.core.utilities / DUMMY_NOTARY_KEY

      DUMMY_NOTARY_KEY

      - + val DUMMY_NOTARY_KEY: KeyPair


      diff --git a/docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-p-u-b-k-e-y_1.html b/docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-p-u-b-k-e-y_1.html similarity index 72% rename from docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-p-u-b-k-e-y_1.html rename to docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-p-u-b-k-e-y_1.html index 0344fdfb15..622c82cbe0 100644 --- a/docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-p-u-b-k-e-y_1.html +++ b/docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-p-u-b-k-e-y_1.html @@ -4,10 +4,10 @@ -com.r3corda.core.testing / DUMMY_PUBKEY_1
      +com.r3corda.core.utilities / DUMMY_PUBKEY_1

      DUMMY_PUBKEY_1

      - + val DUMMY_PUBKEY_1: PublicKey


      diff --git a/docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-p-u-b-k-e-y_2.html b/docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-p-u-b-k-e-y_2.html similarity index 72% rename from docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-p-u-b-k-e-y_2.html rename to docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-p-u-b-k-e-y_2.html index 2f72d9c0c1..f48fb6d363 100644 --- a/docs/build/html/api/com.r3corda.core.testing/-d-u-m-m-y_-p-u-b-k-e-y_2.html +++ b/docs/build/html/api/com.r3corda.core.utilities/-d-u-m-m-y_-p-u-b-k-e-y_2.html @@ -4,10 +4,10 @@ -com.r3corda.core.testing / DUMMY_PUBKEY_2
      +com.r3corda.core.utilities / DUMMY_PUBKEY_2

      DUMMY_PUBKEY_2

      - + val DUMMY_PUBKEY_2: PublicKey


      diff --git a/docs/build/html/api/com.r3corda.core.utilities/-progress-tracker/-step/index.html b/docs/build/html/api/com.r3corda.core.utilities/-progress-tracker/-step/index.html index fa8e404ff4..39216ce5d7 100644 --- a/docs/build/html/api/com.r3corda.core.utilities/-progress-tracker/-step/index.html +++ b/docs/build/html/api/com.r3corda.core.utilities/-progress-tracker/-step/index.html @@ -152,12 +152,6 @@ -RECEIVED - -object RECEIVED : Step - - - RECEIVED object RECEIVED : Step diff --git a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-get/-init-.html b/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-get/-init-.html deleted file mode 100644 index 1935c00f9c..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-get/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -RecordingMap.Get.<init> - - - - -com.r3corda.core.utilities / RecordingMap / Get / <init>
      -
      -

      <init>

      -Get(key: K)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-get/index.html b/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-get/index.html deleted file mode 100644 index 7d3c7f7882..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-get/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - -RecordingMap.Get - - - - -com.r3corda.core.utilities / RecordingMap / Get
      -
      -

      Get

      -data class Get<out K> : Record
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -Get(key: K)
      -

      Properties

      - - - - - - - -
      -key -val key: K
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-get/key.html b/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-get/key.html deleted file mode 100644 index f1668de8e1..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-get/key.html +++ /dev/null @@ -1,15 +0,0 @@ - - -RecordingMap.Get.key - - - - -com.r3corda.core.utilities / RecordingMap / Get / key
      -
      -

      key

      - -val key: K
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-init-.html b/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-init-.html deleted file mode 100644 index 020febc3b7..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-init-.html +++ /dev/null @@ -1,19 +0,0 @@ - - -RecordingMap.<init> - - - - -com.r3corda.core.utilities / RecordingMap / <init>
      -
      -

      <init>

      -RecordingMap(wrappedMap: MutableMap<K, V>, logger: <ERROR CLASS> = loggerFor<RecordingMap<K, V>>())
      -

      A RecordingMap wraps a regular Map<K, V> and records the sequence of gets and puts to it. This is useful in -white box unit tests to ensure that code is accessing a data store as much as you expect.

      -

      Note: although this class itself thread safe, if the underlying map is not, then this class loses its thread safety.

      -
      -
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-put/-init-.html b/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-put/-init-.html deleted file mode 100644 index ff8bedeffb..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-put/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -RecordingMap.Put.<init> - - - - -com.r3corda.core.utilities / RecordingMap / Put / <init>
      -
      -

      <init>

      -Put(key: K, value: V)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-put/index.html b/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-put/index.html deleted file mode 100644 index 67fc70aaf7..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-put/index.html +++ /dev/null @@ -1,42 +0,0 @@ - - -RecordingMap.Put - - - - -com.r3corda.core.utilities / RecordingMap / Put
      -
      -

      Put

      -data class Put<out K, out V> : Record
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -Put(key: K, value: V)
      -

      Properties

      - - - - - - - - - - - -
      -key -val key: K
      -value -val value: V
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-put/key.html b/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-put/key.html deleted file mode 100644 index 91898ec631..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-put/key.html +++ /dev/null @@ -1,15 +0,0 @@ - - -RecordingMap.Put.key - - - - -com.r3corda.core.utilities / RecordingMap / Put / key
      -
      -

      key

      - -val key: K
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-put/value.html b/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-put/value.html deleted file mode 100644 index 0aa2899080..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-put/value.html +++ /dev/null @@ -1,15 +0,0 @@ - - -RecordingMap.Put.value - - - - -com.r3corda.core.utilities / RecordingMap / Put / value
      -
      -

      value

      - -val value: V
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-record.html b/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-record.html deleted file mode 100644 index 94b2ba38ed..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/-record.html +++ /dev/null @@ -1,31 +0,0 @@ - - -RecordingMap.Record - - - - -com.r3corda.core.utilities / RecordingMap / Record
      -
      -

      Record

      -interface Record
      -
      -
      -

      Inheritors

      - - - - - - - - - - - -
      -Get -data class Get<out K> : Record
      -Put -data class Put<out K, out V> : Record
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/clear-records.html b/docs/build/html/api/com.r3corda.core.utilities/-recording-map/clear-records.html deleted file mode 100644 index e5f9f6a45e..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/clear-records.html +++ /dev/null @@ -1,15 +0,0 @@ - - -RecordingMap.clearRecords - - - - -com.r3corda.core.utilities / RecordingMap / clearRecords
      -
      -

      clearRecords

      - -fun clearRecords(): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/get.html b/docs/build/html/api/com.r3corda.core.utilities/-recording-map/get.html deleted file mode 100644 index 01eefeca8f..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/get.html +++ /dev/null @@ -1,15 +0,0 @@ - - -RecordingMap.get - - - - -com.r3corda.core.utilities / RecordingMap / get
      -
      -

      get

      - -fun get(key: K): V?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/index.html b/docs/build/html/api/com.r3corda.core.utilities/-recording-map/index.html deleted file mode 100644 index 12ce459837..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/index.html +++ /dev/null @@ -1,102 +0,0 @@ - - -RecordingMap - - - - -com.r3corda.core.utilities / RecordingMap
      -
      -

      RecordingMap

      -class RecordingMap<K, V> : MutableMap<K, V>
      -

      A RecordingMap wraps a regular Map<K, V> and records the sequence of gets and puts to it. This is useful in -white box unit tests to ensure that code is accessing a data store as much as you expect.

      -

      Note: although this class itself thread safe, if the underlying map is not, then this class loses its thread safety.

      -
      -
      -
      -
      -

      Types

      - - - - - - - - - - - - - - - -
      -Get -data class Get<out K> : Record
      -Put -data class Put<out K, out V> : Record
      -Record -interface Record
      -

      Constructors

      - - - - - - - -
      -<init> -RecordingMap(wrappedMap: MutableMap<K, V>, logger: <ERROR CLASS> = loggerFor<RecordingMap<K, V>>())

      A RecordingMap wraps a regular Map<K, V> and records the sequence of gets and puts to it. This is useful in -white box unit tests to ensure that code is accessing a data store as much as you expect.

      -
      -

      Properties

      - - - - - - - -
      -records -val records: List<Record>

      Returns a snapshot of the set of records

      -
      -

      Functions

      - - - - - - - - - - - - - - - - - - - - - - - -
      -clearRecords -fun clearRecords(): Unit
      -get -fun get(key: K): V?
      -put -fun put(key: K, value: V): V?
      -putAll -fun putAll(from: Map<out K, V>): Unit
      -putAllUnrecorded -fun putAllUnrecorded(from: Map<out K, V>): Unit
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/put-all-unrecorded.html b/docs/build/html/api/com.r3corda.core.utilities/-recording-map/put-all-unrecorded.html deleted file mode 100644 index e25194a357..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/put-all-unrecorded.html +++ /dev/null @@ -1,15 +0,0 @@ - - -RecordingMap.putAllUnrecorded - - - - -com.r3corda.core.utilities / RecordingMap / putAllUnrecorded
      -
      -

      putAllUnrecorded

      - -fun putAllUnrecorded(from: Map<out K, V>): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/put-all.html b/docs/build/html/api/com.r3corda.core.utilities/-recording-map/put-all.html deleted file mode 100644 index 61f52c723e..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/put-all.html +++ /dev/null @@ -1,15 +0,0 @@ - - -RecordingMap.putAll - - - - -com.r3corda.core.utilities / RecordingMap / putAll
      -
      -

      putAll

      - -fun putAll(from: Map<out K, V>): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/put.html b/docs/build/html/api/com.r3corda.core.utilities/-recording-map/put.html deleted file mode 100644 index e0f3564b99..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/put.html +++ /dev/null @@ -1,15 +0,0 @@ - - -RecordingMap.put - - - - -com.r3corda.core.utilities / RecordingMap / put
      -
      -

      put

      - -fun put(key: K, value: V): V?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/records.html b/docs/build/html/api/com.r3corda.core.utilities/-recording-map/records.html deleted file mode 100644 index 0ecb340981..0000000000 --- a/docs/build/html/api/com.r3corda.core.utilities/-recording-map/records.html +++ /dev/null @@ -1,16 +0,0 @@ - - -RecordingMap.records - - - - -com.r3corda.core.utilities / RecordingMap / records
      -
      -

      records

      - -val records: List<Record>
      -

      Returns a snapshot of the set of records

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.core.utilities/-t-e-s-t_-t-x_-t-i-m-e.html b/docs/build/html/api/com.r3corda.core.utilities/-t-e-s-t_-t-x_-t-i-m-e.html new file mode 100644 index 0000000000..43b832a190 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.utilities/-t-e-s-t_-t-x_-t-i-m-e.html @@ -0,0 +1,15 @@ + + +TEST_TX_TIME - + + + +com.r3corda.core.utilities / TEST_TX_TIME
      +
      +

      TEST_TX_TIME

      + +val TEST_TX_TIME: Instant
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.utilities/-untrustworthy-data/index.html b/docs/build/html/api/com.r3corda.core.utilities/-untrustworthy-data/index.html index c58ea81310..8e83633425 100644 --- a/docs/build/html/api/com.r3corda.core.utilities/-untrustworthy-data/index.html +++ b/docs/build/html/api/com.r3corda.core.utilities/-untrustworthy-data/index.html @@ -50,9 +50,15 @@ first. The wrapper helps you to avoid forgetting this vital step. Things you mig +unwrap + +fun <R> unwrap(validator: (T) -> R): R + + + validate -fun <R> validate(validator: (T) -> R): R +fun <R> validate(validator: (T) -> R): R diff --git a/docs/build/html/api/com.r3corda.core.utilities/-untrustworthy-data/unwrap.html b/docs/build/html/api/com.r3corda.core.utilities/-untrustworthy-data/unwrap.html new file mode 100644 index 0000000000..017d2a7d9f --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.utilities/-untrustworthy-data/unwrap.html @@ -0,0 +1,15 @@ + + +UntrustworthyData.unwrap - + + + +com.r3corda.core.utilities / UntrustworthyData / unwrap
      +
      +

      unwrap

      + +inline fun <R> unwrap(validator: (T) -> R): R
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.utilities/-untrustworthy-data/validate.html b/docs/build/html/api/com.r3corda.core.utilities/-untrustworthy-data/validate.html index 1b7117507c..200b15c68b 100644 --- a/docs/build/html/api/com.r3corda.core.utilities/-untrustworthy-data/validate.html +++ b/docs/build/html/api/com.r3corda.core.utilities/-untrustworthy-data/validate.html @@ -8,7 +8,9 @@

      validate

      -inline fun <R> validate(validator: (T) -> R): R
      +inline fun <R> validate(validator: (T) -> R): R
      +Deprecated: This old name was confusing, use unwrap instead
      +


      diff --git a/docs/build/html/api/com.r3corda.core.utilities/debug.html b/docs/build/html/api/com.r3corda.core.utilities/debug.html new file mode 100644 index 0000000000..18a9e4030e --- /dev/null +++ b/docs/build/html/api/com.r3corda.core.utilities/debug.html @@ -0,0 +1,15 @@ + + +debug - + + + +com.r3corda.core.utilities / debug
      +
      +

      debug

      + +inline fun <ERROR CLASS>.debug(msg: () -> String): Unit
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.utilities/index.html b/docs/build/html/api/com.r3corda.core.utilities/index.html index 415759cd5e..4d951c41cf 100644 --- a/docs/build/html/api/com.r3corda.core.utilities/index.html +++ b/docs/build/html/api/com.r3corda.core.utilities/index.html @@ -68,11 +68,64 @@ first. The wrapper helps you to avoid forgetting this vital step. Things you mig +

      Properties

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +DUMMY_KEY_1 +val DUMMY_KEY_1: KeyPair
      +DUMMY_KEY_2 +val DUMMY_KEY_2: KeyPair
      +DUMMY_NOTARY +val DUMMY_NOTARY: Party
      +DUMMY_NOTARY_KEY +val DUMMY_NOTARY_KEY: KeyPair
      +DUMMY_PUBKEY_1 +val DUMMY_PUBKEY_1: PublicKey
      +DUMMY_PUBKEY_2 +val DUMMY_PUBKEY_2: PublicKey
      +TEST_TX_TIME +val TEST_TX_TIME: Instant

      Functions

      + + + + diff --git a/docs/build/html/api/com.r3corda.core/-error-or/-init-.html b/docs/build/html/api/com.r3corda.core/-error-or/-init-.html new file mode 100644 index 0000000000..f71e592852 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core/-error-or/-init-.html @@ -0,0 +1,14 @@ + + +ErrorOr.<init> - + + + +com.r3corda.core / ErrorOr / <init>
      +
      +

      <init>

      +ErrorOr(value: A)
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core/-error-or/bind.html b/docs/build/html/api/com.r3corda.core/-error-or/bind.html new file mode 100644 index 0000000000..3c6a5c9b04 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core/-error-or/bind.html @@ -0,0 +1,15 @@ + + +ErrorOr.bind - + + + +com.r3corda.core / ErrorOr / bind
      +
      +

      bind

      + +fun <B> bind(function: (A) -> ErrorOr<B>): ErrorOr<Nothing>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core/-error-or/catch.html b/docs/build/html/api/com.r3corda.core/-error-or/catch.html new file mode 100644 index 0000000000..9db92b005c --- /dev/null +++ b/docs/build/html/api/com.r3corda.core/-error-or/catch.html @@ -0,0 +1,16 @@ + + +ErrorOr.catch - + + + +com.r3corda.core / ErrorOr / catch
      +
      +

      catch

      + +inline fun <T> catch(body: () -> T): ErrorOr<T>
      +

      Runs the given lambda and wraps the result.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core/-error-or/combine.html b/docs/build/html/api/com.r3corda.core/-error-or/combine.html new file mode 100644 index 0000000000..4692b232e5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core/-error-or/combine.html @@ -0,0 +1,15 @@ + + +ErrorOr.combine - + + + +com.r3corda.core / ErrorOr / combine
      +
      +

      combine

      + +fun <B, C> combine(other: ErrorOr<B>, function: (A, B) -> C): ErrorOr<C>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core/-error-or/error.html b/docs/build/html/api/com.r3corda.core/-error-or/error.html new file mode 100644 index 0000000000..5bb4f13dec --- /dev/null +++ b/docs/build/html/api/com.r3corda.core/-error-or/error.html @@ -0,0 +1,15 @@ + + +ErrorOr.error - + + + +com.r3corda.core / ErrorOr / error
      +
      +

      error

      + +val error: Throwable?
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core/-error-or/get-or-throw.html b/docs/build/html/api/com.r3corda.core/-error-or/get-or-throw.html new file mode 100644 index 0000000000..65185a6fe9 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core/-error-or/get-or-throw.html @@ -0,0 +1,15 @@ + + +ErrorOr.getOrThrow - + + + +com.r3corda.core / ErrorOr / getOrThrow
      +
      +

      getOrThrow

      + +fun getOrThrow(): A
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core/-error-or/index.html b/docs/build/html/api/com.r3corda.core/-error-or/index.html new file mode 100644 index 0000000000..79f9a97025 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core/-error-or/index.html @@ -0,0 +1,96 @@ + + +ErrorOr - + + + +com.r3corda.core / ErrorOr
      +
      +

      ErrorOr

      +data class ErrorOr<out A>
      +

      Representation of an operation that may have thrown an error.

      +
      +
      +

      Constructors

      +
      +debug +fun <ERROR CLASS>.debug(msg: () -> String): Unit
      loggerFor fun <T : Any> loggerFor(): <ERROR CLASS>
      + + + + + + +
      +<init> +ErrorOr(value: A)
      +

      Properties

      + + + + + + + + + + + +
      +error +val error: Throwable?
      +value +val value: A?
      +

      Functions

      + + + + + + + + + + + + + + + + + + + + + + + +
      +bind +fun <B> bind(function: (A) -> ErrorOr<B>): ErrorOr<Nothing>
      +combine +fun <B, C> combine(other: ErrorOr<B>, function: (A, B) -> C): ErrorOr<C>
      +getOrThrow +fun getOrThrow(): A
      +map +fun <B> map(function: (A) -> B): <ERROR CLASS>
      +match +fun <T> match(onValue: (A) -> T, onError: (Throwable) -> T): T
      +

      Companion Object Functions

      + + + + + + + + + + + +
      +catch +fun <T> catch(body: () -> T): ErrorOr<T>

      Runs the given lambda and wraps the result.

      +
      +of +fun of(t: Throwable): ErrorOr<Nothing>
      + + diff --git a/docs/build/html/api/com.r3corda.core/-error-or/map.html b/docs/build/html/api/com.r3corda.core/-error-or/map.html new file mode 100644 index 0000000000..d202deb04f --- /dev/null +++ b/docs/build/html/api/com.r3corda.core/-error-or/map.html @@ -0,0 +1,15 @@ + + +ErrorOr.map - + + + +com.r3corda.core / ErrorOr / map
      +
      +

      map

      + +fun <B> map(function: (A) -> B): <ERROR CLASS>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core/-error-or/match.html b/docs/build/html/api/com.r3corda.core/-error-or/match.html new file mode 100644 index 0000000000..05789a771d --- /dev/null +++ b/docs/build/html/api/com.r3corda.core/-error-or/match.html @@ -0,0 +1,15 @@ + + +ErrorOr.match - + + + +com.r3corda.core / ErrorOr / match
      +
      +

      match

      + +fun <T> match(onValue: (A) -> T, onError: (Throwable) -> T): T
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core/-error-or/of.html b/docs/build/html/api/com.r3corda.core/-error-or/of.html new file mode 100644 index 0000000000..9daac8f312 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core/-error-or/of.html @@ -0,0 +1,15 @@ + + +ErrorOr.of - + + + +com.r3corda.core / ErrorOr / of
      +
      +

      of

      + +fun of(t: Throwable): ErrorOr<Nothing>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core/-error-or/value.html b/docs/build/html/api/com.r3corda.core/-error-or/value.html new file mode 100644 index 0000000000..a60c521c96 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core/-error-or/value.html @@ -0,0 +1,15 @@ + + +ErrorOr.value - + + + +com.r3corda.core / ErrorOr / value
      +
      +

      value

      + +val value: A?
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core/-retryable-exception/index.html b/docs/build/html/api/com.r3corda.core/-retryable-exception/index.html index cceb116cf9..00dccc168a 100644 --- a/docs/build/html/api/com.r3corda.core/-retryable-exception/index.html +++ b/docs/build/html/api/com.r3corda.core/-retryable-exception/index.html @@ -44,7 +44,7 @@ again.

      -UnknownFix +UnknownFix class UnknownFix : RetryableException diff --git a/docs/build/html/api/com.r3corda.core/buffer-until-subscribed.html b/docs/build/html/api/com.r3corda.core/buffer-until-subscribed.html new file mode 100644 index 0000000000..2c6f7da823 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core/buffer-until-subscribed.html @@ -0,0 +1,19 @@ + + +bufferUntilSubscribed - + + + +com.r3corda.core / bufferUntilSubscribed
      +
      +

      bufferUntilSubscribed

      + +fun <T> <ERROR CLASS><T>.bufferUntilSubscribed(): <ERROR CLASS><T>
      +

      Returns an observable that buffers events until subscribed.

      +

      See Also
      +

      UnicastSubject

      +

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core/index.html b/docs/build/html/api/com.r3corda.core/index.html index b8453248d0..222163b058 100644 --- a/docs/build/html/api/com.r3corda.core/index.html +++ b/docs/build/html/api/com.r3corda.core/index.html @@ -12,6 +12,13 @@ +ErrorOr + +data class ErrorOr<out A>

      Representation of an operation that may have thrown an error.

      + + + + ThreadBox class ThreadBox<out T>

      A threadbox is a simple utility that makes it harder to forget to take a lock before accessing some shared state. @@ -61,6 +68,12 @@ again.

      +java.util.concurrent.Future + + + + + kotlin.Double @@ -119,6 +132,13 @@ again.

      +bufferUntilSubscribed + +fun <T> <ERROR CLASS><T>.bufferUntilSubscribed(): <ERROR CLASS><T>

      Returns an observable that buffers events until subscribed.

      + + + + extractZipFile fun extractZipFile(zipPath: Path, toPath: Path): Unit

      Given a path to a zip file, extracts it to the given directory.

      diff --git a/docs/build/html/api/com.r3corda.core/java.nio.file.-path/div.html b/docs/build/html/api/com.r3corda.core/java.nio.file.-path/div.html new file mode 100644 index 0000000000..9c9680249d --- /dev/null +++ b/docs/build/html/api/com.r3corda.core/java.nio.file.-path/div.html @@ -0,0 +1,16 @@ + + +div - + + + +com.r3corda.core / java.nio.file.Path / div
      +
      +

      div

      + +operator fun Path.div(other: String): Path
      +

      Allows you to write code like: Paths.get("someDir") / "subdir" / "filename" but using the Paths API to avoid platform separator problems.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core/java.nio.file.-path/index.html b/docs/build/html/api/com.r3corda.core/java.nio.file.-path/index.html index 8a05eaea59..5e3311c1e1 100644 --- a/docs/build/html/api/com.r3corda.core/java.nio.file.-path/index.html +++ b/docs/build/html/api/com.r3corda.core/java.nio.file.-path/index.html @@ -11,6 +11,13 @@ +div + +operator fun Path.div(other: String): Path

      Allows you to write code like: Paths.get("someDir") / "subdir" / "filename" but using the Paths API to avoid platform separator problems.

      + + + + use fun <R> Path.use(block: (InputStream) -> R): R diff --git a/docs/build/html/api/com.r3corda.core/java.util.concurrent.-future/index.html b/docs/build/html/api/com.r3corda.core/java.util.concurrent.-future/index.html new file mode 100644 index 0000000000..4e9dea5304 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core/java.util.concurrent.-future/index.html @@ -0,0 +1,21 @@ + + +com.r3corda.core.java.util.concurrent.Future - + + + +com.r3corda.core / java.util.concurrent.Future
      +
      +

      Extensions for java.util.concurrent.Future

      + + + + + + + +
      +map +infix fun <F, T> Future<F>.map(mapper: (F) -> T): Future<T>
      + + diff --git a/docs/build/html/api/com.r3corda.core/java.util.concurrent.-future/map.html b/docs/build/html/api/com.r3corda.core/java.util.concurrent.-future/map.html new file mode 100644 index 0000000000..5c3ec8a4e3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.core/java.util.concurrent.-future/map.html @@ -0,0 +1,15 @@ + + +map - + + + +com.r3corda.core / java.util.concurrent.Future / map
      +
      +

      map

      + +infix fun <F, T> Future<F>.map(mapper: (F) -> T): Future<T>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/-init-.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/-init-.html new file mode 100644 index 0000000000..eb568371f4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/-init-.html @@ -0,0 +1,15 @@ + + +NodeInterestRates.FixContainer.<init> - + + + +com.r3corda.demos.api / NodeInterestRates / FixContainer / <init>
      +
      +

      <init>

      +FixContainer(fixes: List<Fix>, factory: InterpolatorFactory = CubicSplineInterpolator)
      +

      Fix container, for every fix name & date pair stores a tenor to interest rate map - InterpolatingRateMap

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/factory.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/factory.html similarity index 58% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/factory.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/factory.html index 47e601c9fa..b734ee7e42 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/factory.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/factory.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / FixContainer / factory
      +com.r3corda.demos.api / NodeInterestRates / FixContainer / factory

      factory

      - + val factory: InterpolatorFactory


      diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/get.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/get.html new file mode 100644 index 0000000000..b4ca060eb5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/get.html @@ -0,0 +1,15 @@ + + +NodeInterestRates.FixContainer.get - + + + +com.r3corda.demos.api / NodeInterestRates / FixContainer / get
      +
      +

      get

      + +operator fun get(fixOf: FixOf): Fix?
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/index.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/index.html new file mode 100644 index 0000000000..2ace2db3f5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/index.html @@ -0,0 +1,55 @@ + + +NodeInterestRates.FixContainer - + + + +com.r3corda.demos.api / NodeInterestRates / FixContainer
      +
      +

      FixContainer

      +class FixContainer
      +

      Fix container, for every fix name & date pair stores a tenor to interest rate map - InterpolatingRateMap

      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +FixContainer(fixes: List<Fix>, factory: InterpolatorFactory = CubicSplineInterpolator)

      Fix container, for every fix name & date pair stores a tenor to interest rate map - InterpolatingRateMap

      +
      +

      Properties

      + + + + + + + + + + + +
      +factory +val factory: InterpolatorFactory
      +size +val size: Int
      +

      Functions

      + + + + + + + +
      +get +operator fun get(fixOf: FixOf): Fix?
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/size.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/size.html similarity index 52% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/size.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/size.html index c6b541062b..b97cf49c45 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/size.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-fix-container/size.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / FixContainer / size
      +com.r3corda.demos.api / NodeInterestRates / FixContainer / size

      size

      - + val size: Int


      diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/-init-.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/-init-.html new file mode 100644 index 0000000000..0c3da71156 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/-init-.html @@ -0,0 +1,16 @@ + + +NodeInterestRates.InterpolatingRateMap.<init> - + + + +com.r3corda.demos.api / NodeInterestRates / InterpolatingRateMap / <init>
      +
      +

      <init>

      +InterpolatingRateMap(date: LocalDate, inputRates: Map<Tenor, BigDecimal>, calendar: BusinessCalendar, factory: InterpolatorFactory)
      +

      Stores a mapping between tenors and interest rates. +Interpolates missing values using the provided interpolation mechanism.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/calendar.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/calendar.html similarity index 57% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/calendar.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/calendar.html index 1f0bbeed4d..7e3391f7b8 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/calendar.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/calendar.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / InterpolatingRateMap / calendar
      +com.r3corda.demos.api / NodeInterestRates / InterpolatingRateMap / calendar

      calendar

      - + val calendar: BusinessCalendar


      diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/date.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/date.html similarity index 57% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/date.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/date.html index 824934d2aa..1159ef050a 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/date.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/date.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / InterpolatingRateMap / date
      +com.r3corda.demos.api / NodeInterestRates / InterpolatingRateMap / date

      date

      - + val date: LocalDate


      diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/factory.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/factory.html similarity index 58% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/factory.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/factory.html index ace783b90e..ff14c7a176 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/factory.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/factory.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / InterpolatingRateMap / factory
      +com.r3corda.demos.api / NodeInterestRates / InterpolatingRateMap / factory

      factory

      - + val factory: InterpolatorFactory


      diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/get-rate.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/get-rate.html new file mode 100644 index 0000000000..49145094a3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/get-rate.html @@ -0,0 +1,17 @@ + + +NodeInterestRates.InterpolatingRateMap.getRate - + + + +com.r3corda.demos.api / NodeInterestRates / InterpolatingRateMap / getRate
      +
      +

      getRate

      + +fun getRate(tenor: Tenor): BigDecimal?
      +

      Returns the interest rate for a given Tenor, +or null if the rate is not found and cannot be interpolated.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/index.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/index.html new file mode 100644 index 0000000000..845f23029f --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/index.html @@ -0,0 +1,72 @@ + + +NodeInterestRates.InterpolatingRateMap - + + + +com.r3corda.demos.api / NodeInterestRates / InterpolatingRateMap
      +
      +

      InterpolatingRateMap

      +class InterpolatingRateMap
      +

      Stores a mapping between tenors and interest rates. +Interpolates missing values using the provided interpolation mechanism.

      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +InterpolatingRateMap(date: LocalDate, inputRates: Map<Tenor, BigDecimal>, calendar: BusinessCalendar, factory: InterpolatorFactory)

      Stores a mapping between tenors and interest rates. +Interpolates missing values using the provided interpolation mechanism.

      +
      +

      Properties

      + + + + + + + + + + + + + + + + + + + +
      +calendar +val calendar: BusinessCalendar
      +date +val date: LocalDate
      +factory +val factory: InterpolatorFactory
      +size +val size: Int

      Number of rates excluding the interpolated ones

      +
      +

      Functions

      + + + + + + + +
      +getRate +fun getRate(tenor: Tenor): BigDecimal?

      Returns the interest rate for a given Tenor, +or null if the rate is not found and cannot be interpolated.

      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/size.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/size.html similarity index 55% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/size.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/size.html index 3df0e65ac8..84abeb581a 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/size.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-interpolating-rate-map/size.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / InterpolatingRateMap / size
      +com.r3corda.demos.api / NodeInterestRates / InterpolatingRateMap / size

      size

      - + val size: Int

      Number of rates excluding the interpolated ones


      diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/-init-.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/-init-.html new file mode 100644 index 0000000000..654c0b7447 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/-init-.html @@ -0,0 +1,18 @@ + + +NodeInterestRates.Oracle.<init> - + + + +com.r3corda.demos.api / NodeInterestRates / Oracle / <init>
      +
      +

      <init>

      +Oracle(identity: Party, signingKey: KeyPair, clock: Clock)
      +

      An implementation of an interest rate fix oracle which is given data in a simple string format.

      +

      The oracle will try to interpolate the missing value of a tenor for the given fix name and date.

      +
      +
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/clock.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/clock.html similarity index 58% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/clock.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/clock.html index aebde2d534..13b85763d9 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/clock.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/clock.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / Oracle / clock
      +com.r3corda.demos.api / NodeInterestRates / Oracle / clock

      clock

      - + val clock: Clock


      diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/identity.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/identity.html similarity index 57% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/identity.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/identity.html index 22b19d088d..bda98d5840 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/identity.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/identity.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / Oracle / identity
      +com.r3corda.demos.api / NodeInterestRates / Oracle / identity

      identity

      - + val identity: Party


      diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/index.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/index.html new file mode 100644 index 0000000000..170cc994a4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/index.html @@ -0,0 +1,73 @@ + + +NodeInterestRates.Oracle - + + + +com.r3corda.demos.api / NodeInterestRates / Oracle
      +
      +

      Oracle

      +class Oracle
      +

      An implementation of an interest rate fix oracle which is given data in a simple string format.

      +

      The oracle will try to interpolate the missing value of a tenor for the given fix name and date.

      +
      +
      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +Oracle(identity: Party, signingKey: KeyPair, clock: Clock)

      An implementation of an interest rate fix oracle which is given data in a simple string format.

      +
      +

      Properties

      + + + + + + + + + + + + + + + +
      +clock +val clock: Clock
      +identity +val identity: Party
      +knownFixes +var knownFixes: FixContainer
      +

      Functions

      + + + + + + + + + + + +
      +query +fun query(queries: List<FixOf>, deadline: Instant): List<Fix>

      This method will now wait until the given deadline if the fix for the given FixOf is not immediately +available. To implement this, readWithDeadline will loop if the deadline is not reached and we throw +UnknownFix as it implements RetryableException which has special meaning to this function.

      +
      +sign +fun sign(wtx: WireTransaction): LegallyIdentifiable
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/known-fixes.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/known-fixes.html similarity index 57% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/known-fixes.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/known-fixes.html index e332aa718a..4e98b26137 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/known-fixes.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/known-fixes.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / Oracle / knownFixes
      +com.r3corda.demos.api / NodeInterestRates / Oracle / knownFixes

      knownFixes

      - + var knownFixes: FixContainer


      diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/query.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/query.html new file mode 100644 index 0000000000..76884fdb34 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/query.html @@ -0,0 +1,18 @@ + + +NodeInterestRates.Oracle.query - + + + +com.r3corda.demos.api / NodeInterestRates / Oracle / query
      +
      +

      query

      + +fun query(queries: List<FixOf>, deadline: Instant): List<Fix>
      +

      This method will now wait until the given deadline if the fix for the given FixOf is not immediately +available. To implement this, readWithDeadline will loop if the deadline is not reached and we throw +UnknownFix as it implements RetryableException which has special meaning to this function.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/sign.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/sign.html new file mode 100644 index 0000000000..24baef41e8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-oracle/sign.html @@ -0,0 +1,15 @@ + + +NodeInterestRates.Oracle.sign - + + + +com.r3corda.demos.api / NodeInterestRates / Oracle / sign
      +
      +

      sign

      + +fun sign(wtx: WireTransaction): LegallyIdentifiable
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-plugin/-init-.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-plugin/-init-.html similarity index 63% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-plugin/-init-.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-plugin/-init-.html index 5c63a6c385..d883d859cd 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-plugin/-init-.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-plugin/-init-.html @@ -4,7 +4,7 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / Plugin / <init>
      +com.r3corda.demos.api / NodeInterestRates / Plugin / <init>

      <init>

      Plugin()
      diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-plugin/index.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-plugin/index.html similarity index 96% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-plugin/index.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-plugin/index.html index b14b25b30a..e1990e99bc 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-plugin/index.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-plugin/index.html @@ -4,7 +4,7 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / Plugin
      +com.r3corda.demos.api / NodeInterestRates / Plugin

      Plugin

      class Plugin : CordaPluginRegistry
      diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-plugin/required-protocols.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-plugin/required-protocols.html similarity index 79% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-plugin/required-protocols.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-plugin/required-protocols.html index f0ce43bf63..87e664ed46 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-plugin/required-protocols.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-plugin/required-protocols.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / Plugin / requiredProtocols
      +com.r3corda.demos.api / NodeInterestRates / Plugin / requiredProtocols

      requiredProtocols

      - + val requiredProtocols: Map<String, Set<String>>
      Overrides CordaPluginRegistry.requiredProtocols

      A Map with an entry for each consumed protocol used by the webAPIs. diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-plugin/service-plugins.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-plugin/service-plugins.html similarity index 78% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-plugin/service-plugins.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-plugin/service-plugins.html index 8a3160374e..e25cdde1c2 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-plugin/service-plugins.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-plugin/service-plugins.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / Plugin / servicePlugins
      +com.r3corda.demos.api / NodeInterestRates / Plugin / servicePlugins

      servicePlugins

      - + val servicePlugins: List<Class<*>>
      Overrides CordaPluginRegistry.servicePlugins

      List of additional long lived services to be hosted within the node. diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/-init-.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/-init-.html new file mode 100644 index 0000000000..10b4ca17b6 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/-init-.html @@ -0,0 +1,15 @@ + + +NodeInterestRates.Service.<init> - + + + +com.r3corda.demos.api / NodeInterestRates / Service / <init>
      +
      +

      <init>

      +Service(services: ServiceHubInternal)
      +

      The Service that wraps Oracle and handles messages/network interaction/request scrubbing.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/acceptable-file-extensions.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/acceptable-file-extensions.html similarity index 66% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/acceptable-file-extensions.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/acceptable-file-extensions.html index 34ae9ea7df..60c9cde85e 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/acceptable-file-extensions.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/acceptable-file-extensions.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / Service / acceptableFileExtensions
      +com.r3corda.demos.api / NodeInterestRates / Service / acceptableFileExtensions

      acceptableFileExtensions

      - + val acceptableFileExtensions: <ERROR CLASS>
      Overrides AcceptsFileUpload.acceptableFileExtensions

      What file extensions are acceptable for the file to be handed to upload()

      diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/data-type-prefix.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/data-type-prefix.html similarity index 66% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/data-type-prefix.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/data-type-prefix.html index af839b9eb3..03149e973b 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/data-type-prefix.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/data-type-prefix.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / Service / dataTypePrefix
      +com.r3corda.demos.api / NodeInterestRates / Service / dataTypePrefix

      dataTypePrefix

      - + val dataTypePrefix: String
      Overrides AcceptsFileUpload.dataTypePrefix

      A string that prefixes the URLs, e.g. "attachments" or "interest-rates". Should be OK for URLs.

      diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/index.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/index.html new file mode 100644 index 0000000000..0dc1b973d8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/index.html @@ -0,0 +1,113 @@ + + +NodeInterestRates.Service - + + + +com.r3corda.demos.api / NodeInterestRates / Service
      +
      +

      Service

      +class Service : AcceptsFileUpload, AbstractNodeService
      +

      The Service that wraps Oracle and handles messages/network interaction/request scrubbing.

      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +Service(services: ServiceHubInternal)

      The Service that wraps Oracle and handles messages/network interaction/request scrubbing.

      +
      +

      Properties

      + + + + + + + + + + + + + + + + + + + +
      +acceptableFileExtensions +val acceptableFileExtensions: <ERROR CLASS>

      What file extensions are acceptable for the file to be handed to upload()

      +
      +dataTypePrefix +val dataTypePrefix: String

      A string that prefixes the URLs, e.g. "attachments" or "interest-rates". Should be OK for URLs.

      +
      +oracle +val oracle: Oracle
      +ss +val ss: StorageService
      +

      Inherited Properties

      + + + + + + + + + + + +
      +net +val net: MessagingServiceInternal
      +services +val services: ServiceHubInternal
      +

      Functions

      + + + + + + + +
      +upload +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.

      +
      +

      Inherited Functions

      + + + + + + + + + + + +
      +addMessageHandler +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): MessageHandlerRegistration

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +common boilerplate code. Exceptions are caught and passed to the provided consumer. If you just want a simple +acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): MessageHandlerRegistration

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +common boilerplate code. Exceptions are propagated to the messaging layer. If you just want a simple +acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      +
      +addProtocolHandler +fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>, onResultFuture: (<ERROR CLASS><R>, H) -> Unit): Unit

      Register a handler to kick-off a protocol when a HandshakeMessage is received by the node. This performs the +necessary steps to enable communication between the two protocols, including calling ProtocolLogic.registerSession.

      +fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>): Unit
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/oracle.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/oracle.html similarity index 55% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/oracle.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/oracle.html index 32a211401a..ddef043a64 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/oracle.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/oracle.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / Service / oracle
      +com.r3corda.demos.api / NodeInterestRates / Service / oracle

      oracle

      - + val oracle: Oracle


      diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/ss.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/ss.html similarity index 59% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/ss.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/ss.html index ab516b5762..7ca5aea130 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/ss.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/ss.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / Service / ss
      +com.r3corda.demos.api / NodeInterestRates / Service / ss

      ss

      - + val ss: StorageService


      diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/upload.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/upload.html new file mode 100644 index 0000000000..b458828921 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-service/upload.html @@ -0,0 +1,18 @@ + + +NodeInterestRates.Service.upload - + + + +com.r3corda.demos.api / NodeInterestRates / Service / upload
      +
      +

      upload

      + +fun upload(data: InputStream): String
      +Overrides AcceptsFileUpload.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/com.r3corda.node.services.clientapi/-node-interest-rates/-type.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-type.html similarity index 94% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-type.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-type.html index b1f4358758..2294415cb1 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-type.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-type.html @@ -4,7 +4,7 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / Type
      +com.r3corda.demos.api / NodeInterestRates / Type

      Type

      object Type : ServiceType
      diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-unknown-fix/-init-.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-unknown-fix/-init-.html new file mode 100644 index 0000000000..7e03b3b4eb --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-unknown-fix/-init-.html @@ -0,0 +1,14 @@ + + +NodeInterestRates.UnknownFix.<init> - + + + +com.r3corda.demos.api / NodeInterestRates / UnknownFix / <init>
      +
      +

      <init>

      +UnknownFix(fix: FixOf)
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-unknown-fix/fix.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-unknown-fix/fix.html similarity index 57% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-unknown-fix/fix.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-unknown-fix/fix.html index de0d758737..32a9f3e6cc 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-unknown-fix/fix.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-unknown-fix/fix.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / UnknownFix / fix
      +com.r3corda.demos.api / NodeInterestRates / UnknownFix / fix

      fix

      - + val fix: FixOf


      diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-unknown-fix/index.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-unknown-fix/index.html similarity index 64% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-unknown-fix/index.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-unknown-fix/index.html index dd0b21c140..a7a63db9e5 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-unknown-fix/index.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/-unknown-fix/index.html @@ -4,7 +4,7 @@ -com.r3corda.node.services.clientapi / NodeInterestRates / UnknownFix
      +com.r3corda.demos.api / NodeInterestRates / UnknownFix

      UnknownFix

      class UnknownFix : RetryableException
      @@ -17,7 +17,7 @@ <init> -UnknownFix(fix: FixOf) +UnknownFix(fix: FixOf) diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/index.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/index.html similarity index 74% rename from docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/index.html rename to docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/index.html index 8ea120fe3d..5724a767a5 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/index.html +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/index.html @@ -4,7 +4,7 @@ -com.r3corda.node.services.clientapi / NodeInterestRates
      +com.r3corda.demos.api / NodeInterestRates

      NodeInterestRates

      object NodeInterestRates
      @@ -83,21 +83,21 @@ Interpolates missing values using the provided interpolation mechanism.

      parseFile -fun parseFile(s: String): FixContainer

      Parses lines containing fixes

      +fun parseFile(s: String): FixContainer

      Parses lines containing fixes

      parseFix -fun parseFix(s: String): Fix

      Parses a string of the form "LIBOR 16-March-2016 1M = 0.678" into a Fix

      +fun parseFix(s: String): Fix

      Parses a string of the form "LIBOR 16-March-2016 1M = 0.678" into a Fix

      parseFixOf -fun parseFixOf(key: String): FixOf

      Parses a string of the form "LIBOR 16-March-2016 1M" into a FixOf

      +fun parseFixOf(key: String): FixOf

      Parses a string of the form "LIBOR 16-March-2016 1M" into a FixOf

      diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/parse-file.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/parse-file.html new file mode 100644 index 0000000000..8e948c07e1 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/parse-file.html @@ -0,0 +1,16 @@ + + +NodeInterestRates.parseFile - + + + +com.r3corda.demos.api / NodeInterestRates / parseFile
      +
      +

      parseFile

      + +fun parseFile(s: String): FixContainer
      +

      Parses lines containing fixes

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/parse-fix-of.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/parse-fix-of.html new file mode 100644 index 0000000000..b611277c20 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/parse-fix-of.html @@ -0,0 +1,16 @@ + + +NodeInterestRates.parseFixOf - + + + +com.r3corda.demos.api / NodeInterestRates / parseFixOf
      +
      +

      parseFixOf

      + +fun parseFixOf(key: String): FixOf
      +

      Parses a string of the form "LIBOR 16-March-2016 1M" into a FixOf

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/parse-fix.html b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/parse-fix.html new file mode 100644 index 0000000000..46b5f5ca91 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.api/-node-interest-rates/parse-fix.html @@ -0,0 +1,16 @@ + + +NodeInterestRates.parseFix - + + + +com.r3corda.demos.api / NodeInterestRates / parseFix
      +
      +

      parseFix

      + +fun parseFix(s: String): Fix
      +

      Parses a string of the form "LIBOR 16-March-2016 1M = 0.678" into a Fix

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.demos.api/index.html b/docs/build/html/api/com.r3corda.demos.api/index.html index 0175b5a684..876ee5b551 100644 --- a/docs/build/html/api/com.r3corda.demos.api/index.html +++ b/docs/build/html/api/com.r3corda.demos.api/index.html @@ -17,6 +17,14 @@ class InterestRateSwapAPI

      This provides a simplified API, currently for demonstration use only.

      + + +NodeInterestRates + +object NodeInterestRates

      An interest rates service is an oracle that signs transactions which contain embedded assertions about an interest +rate fix (e.g. LIBOR, EURIBOR ...).

      + + diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/-init-.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/-init-.html index bc918c5633..6bc82cae8d 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/-init-.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/-init-.html @@ -7,7 +7,7 @@ com.r3corda.demos.protocols / AutoOfferProtocol / AutoOfferMessage / <init>

      <init>

      -AutoOfferMessage(otherSide: Party, notary: Party, otherSessionID: Long, dealBeingOffered: DealState)
      +AutoOfferMessage(notary: Party, dealBeingOffered: DealState, replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue())


      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/index.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/index.html index 155b64f0b8..63d1d5b015 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/index.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/index.html @@ -7,7 +7,7 @@ com.r3corda.demos.protocols / AutoOfferProtocol / AutoOfferMessage

      AutoOfferMessage

      -data class AutoOfferMessage
      +data class AutoOfferMessage : HandshakeMessage


      Constructors

      @@ -17,7 +17,7 @@ <init> -AutoOfferMessage(otherSide: Party, notary: Party, otherSessionID: Long, dealBeingOffered: DealState) +AutoOfferMessage(notary: Party, dealBeingOffered: DealState, replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue()) @@ -38,15 +38,32 @@ -otherSessionID +receiveSessionID -val otherSessionID: Long +val receiveSessionID: Long -otherSide +replyToParty -val otherSide: Party +val replyToParty: Party + + + +sendSessionID + +val sendSessionID: Long + + + +

      Inherited Properties

      + + + + +
      +sessionID +open val sessionID: Long
      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/other-side.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/receive-session-i-d.html similarity index 52% rename from docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/other-side.html rename to docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/receive-session-i-d.html index 558b9a3b0a..1791bf8d05 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/other-side.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/receive-session-i-d.html @@ -1,14 +1,15 @@ -AutoOfferProtocol.AutoOfferMessage.otherSide - +AutoOfferProtocol.AutoOfferMessage.receiveSessionID - -com.r3corda.demos.protocols / AutoOfferProtocol / AutoOfferMessage / otherSide
      +com.r3corda.demos.protocols / AutoOfferProtocol / AutoOfferMessage / receiveSessionID

      -

      otherSide

      - -val otherSide: Party
      +

      receiveSessionID

      + +val receiveSessionID: Long
      +Overrides HandshakeMessage.receiveSessionID


      diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/reply-to-party.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/reply-to-party.html similarity index 54% rename from docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/reply-to-party.html rename to docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/reply-to-party.html index dc714b3362..16529194d5 100644 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/reply-to-party.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/reply-to-party.html @@ -1,13 +1,13 @@ -DataVendingService.NotifyTxRequestMessage.replyToParty - +AutoOfferProtocol.AutoOfferMessage.replyToParty - -com.r3corda.node.services.persistence / DataVendingService / NotifyTxRequestMessage / replyToParty
      +com.r3corda.demos.protocols / AutoOfferProtocol / AutoOfferMessage / replyToParty

      replyToParty

      - + val replyToParty: Party
      Overrides PartyRequestMessage.replyToParty

      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/other-session-i-d.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/send-session-i-d.html similarity index 53% rename from docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/other-session-i-d.html rename to docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/send-session-i-d.html index c98f34b29e..0c41226d69 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/other-session-i-d.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-auto-offer-message/send-session-i-d.html @@ -1,14 +1,15 @@ -AutoOfferProtocol.AutoOfferMessage.otherSessionID - +AutoOfferProtocol.AutoOfferMessage.sendSessionID - -com.r3corda.demos.protocols / AutoOfferProtocol / AutoOfferMessage / otherSessionID
      +com.r3corda.demos.protocols / AutoOfferProtocol / AutoOfferMessage / sendSessionID

      -

      otherSessionID

      - -val otherSessionID: Long
      +

      sendSessionID

      + +val sendSessionID: Long
      +Overrides HandshakeMessage.sendSessionID


      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/-init-.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/-init-.html deleted file mode 100644 index e24578fb31..0000000000 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -AutoOfferProtocol.Handler.Callback.<init> - - - - -com.r3corda.demos.protocols / AutoOfferProtocol / Handler / Callback / <init>
      -
      -

      <init>

      -Callback(success: (SignedTransaction) -> Unit)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/index.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/index.html deleted file mode 100644 index bf70a428a7..0000000000 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - -AutoOfferProtocol.Handler.Callback - - - - -com.r3corda.demos.protocols / AutoOfferProtocol / Handler / Callback
      -
      -

      Callback

      -class Callback
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -Callback(success: (SignedTransaction) -> Unit)
      -

      Properties

      - - - - - - - -
      -success -val success: (SignedTransaction) -> Unit
      -

      Functions

      - - - - - - - - - - - -
      -onFailure -fun onFailure(t: Throwable?): Unit
      -onSuccess -fun onSuccess(st: SignedTransaction?): Unit
      - - diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/on-failure.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/on-failure.html deleted file mode 100644 index 0ebfa73d70..0000000000 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/on-failure.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AutoOfferProtocol.Handler.Callback.onFailure - - - - -com.r3corda.demos.protocols / AutoOfferProtocol / Handler / Callback / onFailure
      -
      -

      onFailure

      - -fun onFailure(t: Throwable?): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/on-success.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/on-success.html deleted file mode 100644 index 8c739c6d8e..0000000000 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/on-success.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AutoOfferProtocol.Handler.Callback.onSuccess - - - - -com.r3corda.demos.protocols / AutoOfferProtocol / Handler / Callback / onSuccess
      -
      -

      onSuccess

      - -fun onSuccess(st: SignedTransaction?): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/success.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/success.html deleted file mode 100644 index 3baef2b1d2..0000000000 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-callback/success.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AutoOfferProtocol.Handler.Callback.success - - - - -com.r3corda.demos.protocols / AutoOfferProtocol / Handler / Callback / success
      -
      -

      success

      - -val success: (SignedTransaction) -> Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-d-e-a-l-i-n-g/child-progress-tracker.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-d-e-a-l-i-n-g/child-progress-tracker.html deleted file mode 100644 index a9e66fab4e..0000000000 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-d-e-a-l-i-n-g/child-progress-tracker.html +++ /dev/null @@ -1,16 +0,0 @@ - - -AutoOfferProtocol.Handler.DEALING.childProgressTracker - - - - -com.r3corda.demos.protocols / AutoOfferProtocol / Handler / DEALING / childProgressTracker
      -
      -

      childProgressTracker

      - -fun childProgressTracker(): ProgressTracker
      -Overrides Step.childProgressTracker
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-d-e-a-l-i-n-g/index.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-d-e-a-l-i-n-g/index.html deleted file mode 100644 index dfff43c7d3..0000000000 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-d-e-a-l-i-n-g/index.html +++ /dev/null @@ -1,42 +0,0 @@ - - -AutoOfferProtocol.Handler.DEALING - - - - -com.r3corda.demos.protocols / AutoOfferProtocol / Handler / DEALING
      -
      -

      DEALING

      -object DEALING : Step
      -
      -
      -

      Inherited Properties

      - - - - - - - - - - - -
      -changes -open val changes: <ERROR CLASS><Change>
      -label -open val label: String
      -

      Functions

      - - - - - - - -
      -childProgressTracker -fun childProgressTracker(): ProgressTracker
      - - diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-r-e-c-e-i-v-e-d.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-r-e-c-e-i-v-e-d.html deleted file mode 100644 index 44c2be0810..0000000000 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/-r-e-c-e-i-v-e-d.html +++ /dev/null @@ -1,42 +0,0 @@ - - -AutoOfferProtocol.Handler.RECEIVED - - - - -com.r3corda.demos.protocols / AutoOfferProtocol / Handler / RECEIVED
      -
      -

      RECEIVED

      -object RECEIVED : Step
      -
      -
      -

      Inherited Properties

      - - - - - - - - - - - -
      -changes -open val changes: <ERROR CLASS><Change>
      -label -open val label: String
      -

      Inherited Functions

      - - - - - - - -
      -childProgressTracker -open fun childProgressTracker(): ProgressTracker?
      - - diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/index.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/index.html deleted file mode 100644 index 62585a1b81..0000000000 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/index.html +++ /dev/null @@ -1,54 +0,0 @@ - - -AutoOfferProtocol.Handler - - - - -com.r3corda.demos.protocols / AutoOfferProtocol / Handler
      -
      -

      Handler

      -object Handler
      -
      -
      -

      Types

      - - - - - - - - - - - - - - - -
      -Callback -class Callback
      -DEALING -object DEALING : Step
      -RECEIVED -object RECEIVED : Step
      -

      Functions

      - - - - - - - - - - - -
      -register -fun register(node: Node): Unit
      -tracker -fun tracker(): ProgressTracker
      - - diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/register.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/register.html deleted file mode 100644 index cc3d5013eb..0000000000 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/register.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AutoOfferProtocol.Handler.register - - - - -com.r3corda.demos.protocols / AutoOfferProtocol / Handler / register
      -
      -

      register

      - -fun register(node: Node): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/tracker.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/tracker.html deleted file mode 100644 index a11f85b5f9..0000000000 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-handler/tracker.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AutoOfferProtocol.Handler.tracker - - - - -com.r3corda.demos.protocols / AutoOfferProtocol / Handler / tracker
      -
      -

      tracker

      - -fun tracker(): ProgressTracker
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-requester/call.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-requester/call.html index 8aed43def9..35eb6baac7 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-requester/call.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-requester/call.html @@ -8,7 +8,7 @@

      call

      -fun call(): SignedTransaction
      +fun call(): SignedTransaction
      Overrides ProtocolLogic.call

      This is where you fill out your business logic.


      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-requester/index.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-requester/index.html index 9060b40041..4192f163fe 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-requester/index.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-requester/index.html @@ -7,7 +7,7 @@ com.r3corda.demos.protocols / AutoOfferProtocol / Requester

      Requester

      -class Requester : ProtocolLogic<SignedTransaction>
      +class Requester : ProtocolLogic<SignedTransaction>


      Types

      @@ -108,7 +108,7 @@ access this lazily or from inside call -fun call(): SignedTransaction

      This is where you fill out your business logic.

      +fun call(): SignedTransaction

      This is where you fill out your business logic.

      @@ -120,26 +120,36 @@ access this lazily or from inside receive -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
      -fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T>
      +fun <T : Any> receive(otherParty: Party): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

      If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

      + send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
      +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

      Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

      Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-callback/-init-.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-callback/-init-.html index 3b9e02b4ea..06ba739b6c 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-callback/-init-.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-callback/-init-.html @@ -7,7 +7,7 @@ com.r3corda.demos.protocols / AutoOfferProtocol / Service / Callback / <init>

      <init>

      -Callback(success: (SignedTransaction) -> Unit)
      +Callback(success: (SignedTransaction) -> Unit)


      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-callback/index.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-callback/index.html index 2bfd3e7bb1..2b7ce559d2 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-callback/index.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-callback/index.html @@ -17,7 +17,7 @@ <init> -Callback(success: (SignedTransaction) -> Unit) +Callback(success: (SignedTransaction) -> Unit) @@ -28,7 +28,7 @@ success -val success: (SignedTransaction) -> Unit +val success: (SignedTransaction) -> Unit @@ -45,7 +45,7 @@ onSuccess -fun onSuccess(st: SignedTransaction?): Unit +fun onSuccess(st: SignedTransaction?): Unit diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-callback/on-success.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-callback/on-success.html index 032586ebf4..ed134fa619 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-callback/on-success.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-callback/on-success.html @@ -7,8 +7,8 @@ com.r3corda.demos.protocols / AutoOfferProtocol / Service / Callback / onSuccess

      onSuccess

      - -fun onSuccess(st: SignedTransaction?): Unit
      + +fun onSuccess(st: SignedTransaction?): Unit


      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-callback/success.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-callback/success.html index 522dbad34d..206adfcd98 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-callback/success.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-callback/success.html @@ -8,7 +8,7 @@

      success

      -val success: (SignedTransaction) -> Unit
      +val success: (SignedTransaction) -> Unit


      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-r-e-c-e-i-v-e-d.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-r-e-c-e-i-v-e-d.html deleted file mode 100644 index 0a4b865b79..0000000000 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/-r-e-c-e-i-v-e-d.html +++ /dev/null @@ -1,42 +0,0 @@ - - -AutoOfferProtocol.Service.RECEIVED - - - - -com.r3corda.demos.protocols / AutoOfferProtocol / Service / RECEIVED
      -
      -

      RECEIVED

      -object RECEIVED : Step
      -
      -
      -

      Inherited Properties

      - - - - - - - - - - - -
      -changes -open val changes: <ERROR CLASS><Change>
      -label -open val label: String
      -

      Inherited Functions

      - - - - - - - -
      -childProgressTracker -open fun childProgressTracker(): ProgressTracker?
      - - diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/index.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/index.html index 2581491c79..93895d459c 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/index.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/-service/index.html @@ -7,7 +7,7 @@ com.r3corda.demos.protocols / AutoOfferProtocol / Service

      Service

      -class Service
      +class Service : AbstractNodeService


      Types

      @@ -25,12 +25,6 @@ object DEALING : Step - - -RECEIVED - -object RECEIVED : Step -

      Constructors

      @@ -44,6 +38,23 @@ +

      Inherited Properties

      + + + + + + + + + + + +
      +net +val net: MessagingServiceInternal
      +services +val services: ServiceHubInternal

      Functions

      @@ -55,5 +66,30 @@
      +

      Inherited Functions

      + + + + + + + + + + + +
      +addMessageHandler +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): MessageHandlerRegistration

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +common boilerplate code. Exceptions are caught and passed to the provided consumer. If you just want a simple +acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): MessageHandlerRegistration

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +common boilerplate code. Exceptions are propagated to the messaging layer. If you just want a simple +acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      +
      +addProtocolHandler +fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>, onResultFuture: (<ERROR CLASS><R>, H) -> Unit): Unit

      Register a handler to kick-off a protocol when a HandshakeMessage is received by the node. This performs the +necessary steps to enable communication between the two protocols, including calling ProtocolLogic.registerSession.

      +fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>): Unit
      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/index.html b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/index.html index 46fc0ac9bf..8da7ea2057 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/index.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-auto-offer-protocol/index.html @@ -23,7 +23,7 @@ or the protocol would have to reach out to external systems (or users) to verify AutoOfferMessage -data class AutoOfferMessage +data class AutoOfferMessage : HandshakeMessage @@ -35,13 +35,13 @@ or the protocol would have to reach out to external systems (or users) to verify Requester -class Requester : ProtocolLogic<SignedTransaction> +class Requester : ProtocolLogic<SignedTransaction> Service -class Service +class Service : AbstractNodeService diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-broadcast/index.html b/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-broadcast/index.html index 2c38c30326..1d186f7057 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-broadcast/index.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-broadcast/index.html @@ -101,26 +101,36 @@ access this lazily or from inside receive -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
      -fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party): UntrustworthyData<T>
      +fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

      If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

      + send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T>
      +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

      Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

      Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/-init-.html b/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/-init-.html index 614450eadb..a4d6cbbb41 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/-init-.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/-init-.html @@ -7,7 +7,7 @@ com.r3corda.demos.protocols / ExitServerProtocol / ExitMessage / <init>

      <init>

      -ExitMessage(exitCode: Int)
      +ExitMessage(exitCode: Int, replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue())


      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/index.html b/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/index.html index 0e68332f30..6bdd6ea4e1 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/index.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/index.html @@ -7,7 +7,7 @@ com.r3corda.demos.protocols / ExitServerProtocol / ExitMessage

      ExitMessage

      -data class ExitMessage
      +data class ExitMessage : HandshakeMessage


      Constructors

      @@ -17,7 +17,7 @@ <init> -ExitMessage(exitCode: Int) +ExitMessage(exitCode: Int, replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue()) @@ -30,6 +30,35 @@ val exitCode: Int + + +receiveSessionID + +val receiveSessionID: Long + + + +replyToParty + +val replyToParty: Party + + + +sendSessionID + +val sendSessionID: Long + + + +

      Inherited Properties

      + + + + + +
      +sessionID +open val sessionID: Long
      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/receive-session-i-d.html b/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/receive-session-i-d.html new file mode 100644 index 0000000000..e6745ca61e --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/receive-session-i-d.html @@ -0,0 +1,16 @@ + + +ExitServerProtocol.ExitMessage.receiveSessionID - + + + +com.r3corda.demos.protocols / ExitServerProtocol / ExitMessage / receiveSessionID
      +
      +

      receiveSessionID

      + +val receiveSessionID: Long
      +Overrides HandshakeMessage.receiveSessionID
      +
      +
      + + diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/reply-to-party.html b/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/reply-to-party.html similarity index 57% rename from docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/reply-to-party.html rename to docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/reply-to-party.html index b2d4cc41b2..6041fda2c2 100644 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/reply-to-party.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/reply-to-party.html @@ -1,13 +1,13 @@ -AbstractStateReplacementProtocol.Handshake.replyToParty - +ExitServerProtocol.ExitMessage.replyToParty - -protocols / AbstractStateReplacementProtocol / Handshake / replyToParty
      +com.r3corda.demos.protocols / ExitServerProtocol / ExitMessage / replyToParty

      replyToParty

      - + val replyToParty: Party
      Overrides PartyRequestMessage.replyToParty

      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/send-session-i-d.html b/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/send-session-i-d.html new file mode 100644 index 0000000000..66467ccf15 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-exit-message/send-session-i-d.html @@ -0,0 +1,16 @@ + + +ExitServerProtocol.ExitMessage.sendSessionID - + + + +com.r3corda.demos.protocols / ExitServerProtocol / ExitMessage / sendSessionID
      +
      +

      sendSessionID

      + +val sendSessionID: Long
      +Overrides HandshakeMessage.sendSessionID
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-handler/index.html b/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-handler/index.html deleted file mode 100644 index ee0d04c0cd..0000000000 --- a/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-handler/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - -ExitServerProtocol.Handler - - - - -com.r3corda.demos.protocols / ExitServerProtocol / Handler
      -
      -

      Handler

      -object Handler
      -
      -
      -

      Functions

      - - - - - - - -
      -register -fun register(node: Node): Unit
      - - diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-handler/register.html b/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-handler/register.html deleted file mode 100644 index 376bee21c3..0000000000 --- a/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/-handler/register.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ExitServerProtocol.Handler.register - - - - -com.r3corda.demos.protocols / ExitServerProtocol / Handler / register
      -
      -

      register

      - -fun register(node: Node): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/index.html b/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/index.html index d0b2d97793..3169ca58ad 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/index.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-exit-server-protocol/index.html @@ -25,7 +25,7 @@ we do not support coercing numeric types in the reflective search for matching c ExitMessage -data class ExitMessage +data class ExitMessage : HandshakeMessage diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-broadcast/index.html b/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-broadcast/index.html index bb56294f98..ba459d84f9 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-broadcast/index.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-broadcast/index.html @@ -108,26 +108,36 @@ access this lazily or from inside receive -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
      -fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party): UntrustworthyData<T>
      +fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

      If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

      + send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
      +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

      Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

      Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-handler/index.html b/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-handler/index.html deleted file mode 100644 index 0e02883208..0000000000 --- a/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-handler/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - -UpdateBusinessDayProtocol.Handler - - - - -com.r3corda.demos.protocols / UpdateBusinessDayProtocol / Handler
      -
      -

      Handler

      -object Handler
      -
      -
      -

      Functions

      - - - - - - - -
      -register -fun register(node: Node): Unit
      - - diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-handler/register.html b/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-handler/register.html deleted file mode 100644 index 2da62677e2..0000000000 --- a/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-handler/register.html +++ /dev/null @@ -1,15 +0,0 @@ - - -UpdateBusinessDayProtocol.Handler.register - - - - -com.r3corda.demos.protocols / UpdateBusinessDayProtocol / Handler / register
      -
      -

      register

      - -fun register(node: Node): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/-init-.html b/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/-init-.html index 98068af277..dc510e5d87 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/-init-.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/-init-.html @@ -7,7 +7,7 @@ com.r3corda.demos.protocols / UpdateBusinessDayProtocol / UpdateBusinessDayMessage / <init>

      <init>

      -UpdateBusinessDayMessage(date: LocalDate)
      +UpdateBusinessDayMessage(date: LocalDate, replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue())


      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/index.html b/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/index.html index f02aafc24d..3dc0d52c4e 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/index.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/index.html @@ -7,7 +7,7 @@ com.r3corda.demos.protocols / UpdateBusinessDayProtocol / UpdateBusinessDayMessage

      UpdateBusinessDayMessage

      -data class UpdateBusinessDayMessage
      +data class UpdateBusinessDayMessage : HandshakeMessage


      Constructors

      @@ -17,7 +17,7 @@ <init> -UpdateBusinessDayMessage(date: LocalDate) +UpdateBusinessDayMessage(date: LocalDate, replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue()) @@ -30,6 +30,35 @@ val date: LocalDate + + +receiveSessionID + +val receiveSessionID: Long + + + +replyToParty + +val replyToParty: Party + + + +sendSessionID + +val sendSessionID: Long + + + +

      Inherited Properties

      + + + + + +
      +sessionID +open val sessionID: Long
      diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/receive-session-i-d.html b/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/receive-session-i-d.html new file mode 100644 index 0000000000..b5c1d37c18 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/receive-session-i-d.html @@ -0,0 +1,16 @@ + + +UpdateBusinessDayProtocol.UpdateBusinessDayMessage.receiveSessionID - + + + +com.r3corda.demos.protocols / UpdateBusinessDayProtocol / UpdateBusinessDayMessage / receiveSessionID
      +
      +

      receiveSessionID

      + +val receiveSessionID: Long
      +Overrides HandshakeMessage.receiveSessionID
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/reply-to-party.html b/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/reply-to-party.html new file mode 100644 index 0000000000..ea10853187 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/reply-to-party.html @@ -0,0 +1,16 @@ + + +UpdateBusinessDayProtocol.UpdateBusinessDayMessage.replyToParty - + + + +com.r3corda.demos.protocols / UpdateBusinessDayProtocol / UpdateBusinessDayMessage / replyToParty
      +
      +

      replyToParty

      + +val replyToParty: Party
      +Overrides PartyRequestMessage.replyToParty
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/send-session-i-d.html b/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/send-session-i-d.html new file mode 100644 index 0000000000..ccdda6dc24 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/-update-business-day-message/send-session-i-d.html @@ -0,0 +1,16 @@ + + +UpdateBusinessDayProtocol.UpdateBusinessDayMessage.sendSessionID - + + + +com.r3corda.demos.protocols / UpdateBusinessDayProtocol / UpdateBusinessDayMessage / sendSessionID
      +
      +

      sendSessionID

      + +val sendSessionID: Long
      +Overrides HandshakeMessage.sendSessionID
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/index.html b/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/index.html index bc1f14c358..937d264684 100644 --- a/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/index.html +++ b/docs/build/html/api/com.r3corda.demos.protocols/-update-business-day-protocol/index.html @@ -36,7 +36,7 @@ UpdateBusinessDayMessage -data class UpdateBusinessDayMessage +data class UpdateBusinessDayMessage : HandshakeMessage diff --git a/docs/build/html/api/com.r3corda.demos/-cli-params-spec/index.html b/docs/build/html/api/com.r3corda.demos/-cli-params-spec/index.html index d0f39195d5..31924450c6 100644 --- a/docs/build/html/api/com.r3corda.demos/-cli-params-spec/index.html +++ b/docs/build/html/api/com.r3corda.demos/-cli-params-spec/index.html @@ -45,12 +45,6 @@ -networkMapIdentityFile - -val networkMapIdentityFile: <ERROR CLASS> - - - networkMapNetAddr val networkMapNetAddr: <ERROR CLASS> diff --git a/docs/build/html/api/com.r3corda.demos/-cli-params-spec/network-map-identity-file.html b/docs/build/html/api/com.r3corda.demos/-cli-params-spec/network-map-identity-file.html deleted file mode 100644 index 1d0b30e893..0000000000 --- a/docs/build/html/api/com.r3corda.demos/-cli-params-spec/network-map-identity-file.html +++ /dev/null @@ -1,15 +0,0 @@ - - -CliParamsSpec.networkMapIdentityFile - - - - -com.r3corda.demos / CliParamsSpec / networkMapIdentityFile
      -
      -

      networkMapIdentityFile

      - -val networkMapIdentityFile: <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.demos/-cli-params/-run-node/-init-.html b/docs/build/html/api/com.r3corda.demos/-cli-params/-run-node/-init-.html index e1c646d9bc..9542ea7360 100644 --- a/docs/build/html/api/com.r3corda.demos/-cli-params/-run-node/-init-.html +++ b/docs/build/html/api/com.r3corda.demos/-cli-params/-run-node/-init-.html @@ -7,7 +7,7 @@ com.r3corda.demos / CliParams / RunNode / <init>

      <init>

      -RunNode(node: IRSDemoNode, dir: Path, networkAddress: <ERROR CLASS>, apiAddress: <ERROR CLASS>, mapAddress: String, identityFile: Path, tradeWithIdentities: List<Path>, uploadRates: Boolean, defaultLegalName: String, autoSetup: Boolean)
      +RunNode(node: IRSDemoNode, dir: Path, networkAddress: <ERROR CLASS>, apiAddress: <ERROR CLASS>, mapAddress: String, tradeWithIdentities: List<Path>, uploadRates: Boolean, defaultLegalName: String, autoSetup: Boolean)

      Corresponds to roles NodeA and NodeB.



      diff --git a/docs/build/html/api/com.r3corda.demos/-cli-params/-run-node/identity-file.html b/docs/build/html/api/com.r3corda.demos/-cli-params/-run-node/identity-file.html deleted file mode 100644 index 68a403a966..0000000000 --- a/docs/build/html/api/com.r3corda.demos/-cli-params/-run-node/identity-file.html +++ /dev/null @@ -1,15 +0,0 @@ - - -CliParams.RunNode.identityFile - - - - -com.r3corda.demos / CliParams / RunNode / identityFile
      -
      -

      identityFile

      - -val identityFile: Path
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.demos/-cli-params/-run-node/index.html b/docs/build/html/api/com.r3corda.demos/-cli-params/-run-node/index.html index 118b79689c..86c6f4d992 100644 --- a/docs/build/html/api/com.r3corda.demos/-cli-params/-run-node/index.html +++ b/docs/build/html/api/com.r3corda.demos/-cli-params/-run-node/index.html @@ -18,7 +18,7 @@ <init> -RunNode(node: IRSDemoNode, dir: Path, networkAddress: <ERROR CLASS>, apiAddress: <ERROR CLASS>, mapAddress: String, identityFile: Path, tradeWithIdentities: List<Path>, uploadRates: Boolean, defaultLegalName: String, autoSetup: Boolean)

      Corresponds to roles NodeA and NodeB.

      +RunNode(node: IRSDemoNode, dir: Path, networkAddress: <ERROR CLASS>, apiAddress: <ERROR CLASS>, mapAddress: String, tradeWithIdentities: List<Path>, uploadRates: Boolean, defaultLegalName: String, autoSetup: Boolean)

      Corresponds to roles NodeA and NodeB.

      @@ -52,12 +52,6 @@ -identityFile - -val identityFile: Path - - - mapAddress val mapAddress: String diff --git a/docs/build/html/api/com.r3corda.demos/-cli-params/-upload-rates/-init-.html b/docs/build/html/api/com.r3corda.demos/-cli-params/-upload-rates/-init-.html new file mode 100644 index 0000000000..46c407e81a --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos/-cli-params/-upload-rates/-init-.html @@ -0,0 +1,15 @@ + + +CliParams.UploadRates.<init> - + + + +com.r3corda.demos / CliParams / UploadRates / <init>
      +
      +

      <init>

      +UploadRates(apiAddress: <ERROR CLASS>)
      +

      Corresponds to role Rates.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.demos/-cli-params/-upload-rates/api-address.html b/docs/build/html/api/com.r3corda.demos/-cli-params/-upload-rates/api-address.html new file mode 100644 index 0000000000..75f336b513 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos/-cli-params/-upload-rates/api-address.html @@ -0,0 +1,15 @@ + + +CliParams.UploadRates.apiAddress - + + + +com.r3corda.demos / CliParams / UploadRates / apiAddress
      +
      +

      apiAddress

      + +val apiAddress: <ERROR CLASS>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.demos/-cli-params/-upload-rates/index.html b/docs/build/html/api/com.r3corda.demos/-cli-params/-upload-rates/index.html new file mode 100644 index 0000000000..07086726ae --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos/-cli-params/-upload-rates/index.html @@ -0,0 +1,38 @@ + + +CliParams.UploadRates - + + + +com.r3corda.demos / CliParams / UploadRates
      +
      +

      UploadRates

      +class UploadRates : CliParams
      +

      Corresponds to role Rates.

      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +UploadRates(apiAddress: <ERROR CLASS>)

      Corresponds to role Rates.

      +
      +

      Properties

      + + + + + + + +
      +apiAddress +val apiAddress: <ERROR CLASS>
      + + diff --git a/docs/build/html/api/com.r3corda.demos/-cli-params/index.html b/docs/build/html/api/com.r3corda.demos/-cli-params/index.html index dc74b170a6..c3410d888b 100644 --- a/docs/build/html/api/com.r3corda.demos/-cli-params/index.html +++ b/docs/build/html/api/com.r3corda.demos/-cli-params/index.html @@ -49,6 +49,13 @@ class Trade : CliParams

      Corresponds to role Trade.

      + + +UploadRates + +class UploadRates : CliParams

      Corresponds to role Rates.

      + +

      Companion Object Properties

      @@ -117,6 +124,13 @@ class Trade : CliParams

      Corresponds to role Trade.

      + + +UploadRates + +class UploadRates : CliParams

      Corresponds to role Rates.

      + + diff --git a/docs/build/html/api/com.r3corda.demos/-d-e-m-o_-t-o-p-i-c.html b/docs/build/html/api/com.r3corda.demos/-d-e-m-o_-t-o-p-i-c.html deleted file mode 100644 index 8687008b79..0000000000 --- a/docs/build/html/api/com.r3corda.demos/-d-e-m-o_-t-o-p-i-c.html +++ /dev/null @@ -1,15 +0,0 @@ - - -DEMO_TOPIC - - - - -com.r3corda.demos / DEMO_TOPIC
      -
      -

      DEMO_TOPIC

      - -val DEMO_TOPIC: String
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.demos/-demo-clock/index.html b/docs/build/html/api/com.r3corda.demos/-demo-clock/index.html index 77141604ad..60b2ebac34 100644 --- a/docs/build/html/api/com.r3corda.demos/-demo-clock/index.html +++ b/docs/build/html/api/com.r3corda.demos/-demo-clock/index.html @@ -30,7 +30,7 @@ mutationCount -val mutationCount: Long

      This tracks how many direct mutations of "now" have occured for this Clock, but not the passage of time.

      +val mutationCount: Long

      This tracks how many direct mutations of "now" have occurred for this Clock, but not the passage of time.

      @@ -96,8 +96,8 @@ awaitWithDeadline -fun Clock.awaitWithDeadline(deadline: Instant, future: Future<*> = SettableFuture<Any>()): Boolean

      Wait until the given Future is complete or the deadline is reached, with support for MutableClock implementations -used in demos or testing. This will also substitute a Fiber compatible Future if required.

      +fun Clock.awaitWithDeadline(deadline: Instant, future: Future<*> = GuavaSettableFuture.create<Any>()): Boolean

      Wait until the given Future is complete or the deadline is reached, with support for MutableClock implementations +used in demos or testing. This will substitute a Fiber compatible Future so the current Strand is not blocked.

      diff --git a/docs/build/html/api/com.r3corda.demos/-i-r-s-demo-role/-rates.html b/docs/build/html/api/com.r3corda.demos/-i-r-s-demo-role/-rates.html new file mode 100644 index 0000000000..82e5629230 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos/-i-r-s-demo-role/-rates.html @@ -0,0 +1,14 @@ + + +IRSDemoRole.Rates - + + + +com.r3corda.demos / IRSDemoRole / Rates
      +
      +

      Rates

      +Rates
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.demos/-i-r-s-demo-role/index.html b/docs/build/html/api/com.r3corda.demos/-i-r-s-demo-role/index.html index ae2ec21cf5..1970a918e1 100644 --- a/docs/build/html/api/com.r3corda.demos/-i-r-s-demo-role/index.html +++ b/docs/build/html/api/com.r3corda.demos/-i-r-s-demo-role/index.html @@ -56,6 +56,12 @@ + + +Rates + + + diff --git a/docs/build/html/api/com.r3corda.demos/index.html b/docs/build/html/api/com.r3corda.demos/index.html index c334ff8475..5ba6027830 100644 --- a/docs/build/html/api/com.r3corda.demos/index.html +++ b/docs/build/html/api/com.r3corda.demos/index.html @@ -86,6 +86,12 @@ service.

      fun runIRSDemo(args: Array<String>): Int + + +runUploadRates + +fun runUploadRates(cliParams: UploadRates): <ERROR CLASS> + diff --git a/docs/build/html/api/com.r3corda.demos/run-trader-demo.html b/docs/build/html/api/com.r3corda.demos/run-trader-demo.html deleted file mode 100644 index 25c694b6e5..0000000000 --- a/docs/build/html/api/com.r3corda.demos/run-trader-demo.html +++ /dev/null @@ -1,15 +0,0 @@ - - -runTraderDemo - - - - -com.r3corda.demos / runTraderDemo
      -
      -

      runTraderDemo

      - -fun runTraderDemo(args: Array<String>): Int
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.demos/run-upload-rates.html b/docs/build/html/api/com.r3corda.demos/run-upload-rates.html new file mode 100644 index 0000000000..b45200a237 --- /dev/null +++ b/docs/build/html/api/com.r3corda.demos/run-upload-rates.html @@ -0,0 +1,15 @@ + + +runUploadRates - + + + +com.r3corda.demos / runUploadRates
      +
      +

      runUploadRates

      + +fun runUploadRates(cliParams: UploadRates): <ERROR CLASS>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/build-transaction.html b/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/build-transaction.html index 11eb6892e5..1485fb0ef3 100644 --- a/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/build-transaction.html +++ b/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/build-transaction.html @@ -8,7 +8,7 @@

      buildTransaction

      -abstract fun buildTransaction(type: ContractDefRef, steps: List<TransactionBuildStep>): SerializedBytes<WireTransaction>
      +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 (wed need that to be a criteria/pattern of the generateXXX methods).

      diff --git a/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/commit-transaction.html b/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/commit-transaction.html index d0621a692d..a111c94e8b 100644 --- a/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/commit-transaction.html +++ b/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/commit-transaction.html @@ -7,8 +7,8 @@ com.r3corda.node.api / APIServer / commitTransaction

      commitTransaction

      - -abstract fun commitTransaction(tx: SerializedBytes<WireTransaction>, signatures: List<WithKey>): SecureHash
      + +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/com.r3corda.node.api/-a-p-i-server/fetch-transactions.html b/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/fetch-transactions.html index f4b7999730..294666c0f9 100644 --- a/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/fetch-transactions.html +++ b/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/fetch-transactions.html @@ -8,7 +8,7 @@

      fetchTransactions

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

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

      Parameters

      diff --git a/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/generate-transaction-signature.html b/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/generate-transaction-signature.html index 0b31868991..6397a36c1a 100644 --- a/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/generate-transaction-signature.html +++ b/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/generate-transaction-signature.html @@ -7,8 +7,8 @@ com.r3corda.node.api / APIServer / generateTransactionSignature

      generateTransactionSignature

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

      Generate a signature for this transaction signed by us.



      diff --git a/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/index.html b/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/index.html index f74e500cca..b0395a0afd 100644 --- a/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/index.html +++ b/docs/build/html/api/com.r3corda.node.api/-a-p-i-server/index.html @@ -22,7 +22,7 @@ where a null indicates "missing" and the elements returned will be in the order 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 +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 (wed need that to be a criteria/pattern of the generateXXX methods).

      @@ -31,7 +31,7 @@ which would automatically be passed as the first argument (wed need that to be a 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 +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.

      @@ -52,14 +52,14 @@ successful, otherwise exception is thrown.

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

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

      +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.

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

      Generate a signature for this transaction signed by us.

      diff --git a/docs/build/html/api/com.r3corda.node.api/-states-query/select-all-deals.html b/docs/build/html/api/com.r3corda.node.api/-states-query/select-all-deals.html deleted file mode 100644 index c4a6d96936..0000000000 --- a/docs/build/html/api/com.r3corda.node.api/-states-query/select-all-deals.html +++ /dev/null @@ -1,15 +0,0 @@ - - -StatesQuery.selectAllDeals - - - - -com.r3corda.node.api / StatesQuery / selectAllDeals
      -
      -

      selectAllDeals

      - -fun selectAllDeals(): Selection
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.api/-states-query/select-deal.html b/docs/build/html/api/com.r3corda.node.api/-states-query/select-deal.html deleted file mode 100644 index 933b11ce0f..0000000000 --- a/docs/build/html/api/com.r3corda.node.api/-states-query/select-deal.html +++ /dev/null @@ -1,15 +0,0 @@ - - -StatesQuery.selectDeal - - - - -com.r3corda.node.api / StatesQuery / selectDeal
      -
      -

      selectDeal

      - -fun selectDeal(ref: String): Selection
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l-exposed-interface/index.html b/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l-exposed-interface/index.html index 4bac2c777c..a0a705a58a 100644 --- a/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l-exposed-interface/index.html +++ b/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l-exposed-interface/index.html @@ -29,7 +29,7 @@ startClient -abstract fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<ArtemisMessagingClient>

      Starts an ArtemisMessagingClient.

      +abstract fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<NodeMessagingClient>

      Starts an NodeMessagingClient.

      @@ -61,8 +61,8 @@ startClient -fun DriverDSLExposedInterface.startClient(localServer: ArtemisMessagingServer): Future<ArtemisMessagingClient>
      -fun DriverDSLExposedInterface.startClient(remoteNodeInfo: NodeInfo, providedName: String? = null): Future<ArtemisMessagingClient> +fun DriverDSLExposedInterface.startClient(localServer: ArtemisMessagingServer): Future<NodeMessagingClient>
      +fun DriverDSLExposedInterface.startClient(remoteNodeInfo: NodeInfo, providedName: String? = null): Future<NodeMessagingClient> diff --git a/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l-exposed-interface/start-client.html b/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l-exposed-interface/start-client.html index 3af2e650af..a1b9167778 100644 --- a/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l-exposed-interface/start-client.html +++ b/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l-exposed-interface/start-client.html @@ -8,8 +8,8 @@

      startClient

      -abstract fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<ArtemisMessagingClient>
      -

      Starts an ArtemisMessagingClient.

      +abstract fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<NodeMessagingClient>
      +

      Starts an NodeMessagingClient.

      Parameters

      providedName - name of the client, which will be used for creating its directory.
      diff --git a/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l-internal-interface/index.html b/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l-internal-interface/index.html index af76d448c6..374f56c76e 100644 --- a/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l-internal-interface/index.html +++ b/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l-internal-interface/index.html @@ -45,7 +45,7 @@ startClient -abstract fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<ArtemisMessagingClient>

      Starts an ArtemisMessagingClient.

      +abstract fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<NodeMessagingClient>

      Starts an NodeMessagingClient.

      @@ -77,8 +77,8 @@ startClient -fun DriverDSLExposedInterface.startClient(localServer: ArtemisMessagingServer): Future<ArtemisMessagingClient>
      -fun DriverDSLExposedInterface.startClient(remoteNodeInfo: NodeInfo, providedName: String? = null): Future<ArtemisMessagingClient> +fun DriverDSLExposedInterface.startClient(localServer: ArtemisMessagingServer): Future<NodeMessagingClient>
      +fun DriverDSLExposedInterface.startClient(remoteNodeInfo: NodeInfo, providedName: String? = null): Future<NodeMessagingClient> diff --git a/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l/-state/clients.html b/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l/-state/clients.html index c74412480b..3b7fd52bea 100644 --- a/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l/-state/clients.html +++ b/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l/-state/clients.html @@ -8,7 +8,7 @@

      clients

      -val clients: LinkedList<ArtemisMessagingClient>
      +val clients: LinkedList<NodeMessagingClient>


      diff --git a/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l/-state/index.html b/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l/-state/index.html index 2a199e6ef4..1d7dda987b 100644 --- a/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l/-state/index.html +++ b/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l/-state/index.html @@ -28,7 +28,7 @@ clients -val clients: LinkedList<ArtemisMessagingClient> +val clients: LinkedList<NodeMessagingClient> diff --git a/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l/index.html b/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l/index.html index 7118eaee5e..3add46ce20 100644 --- a/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l/index.html +++ b/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l/index.html @@ -92,7 +92,7 @@ startClient -fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<ArtemisMessagingClient>

      Starts an ArtemisMessagingClient.

      +fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<NodeMessagingClient>

      Starts an NodeMessagingClient.

      @@ -146,8 +146,8 @@ startClient -fun DriverDSLExposedInterface.startClient(localServer: ArtemisMessagingServer): Future<ArtemisMessagingClient>
      -fun DriverDSLExposedInterface.startClient(remoteNodeInfo: NodeInfo, providedName: String? = null): Future<ArtemisMessagingClient> +fun DriverDSLExposedInterface.startClient(localServer: ArtemisMessagingServer): Future<NodeMessagingClient>
      +fun DriverDSLExposedInterface.startClient(remoteNodeInfo: NodeInfo, providedName: String? = null): Future<NodeMessagingClient> diff --git a/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l/start-client.html b/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l/start-client.html index 363b58bbad..787f03a458 100644 --- a/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l/start-client.html +++ b/docs/build/html/api/com.r3corda.node.driver/-driver-d-s-l/start-client.html @@ -8,9 +8,9 @@

      startClient

      -fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<ArtemisMessagingClient>
      +fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<NodeMessagingClient>
      Overrides DriverDSLExposedInterface.startClient
      -

      Starts an ArtemisMessagingClient.

      +

      Starts an NodeMessagingClient.

      Parameters

      providedName - name of the client, which will be used for creating its directory.
      diff --git a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/-init-.html b/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/-init-.html deleted file mode 100644 index 1ee872fe26..0000000000 --- a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -NodeRunner.CliParams.<init> - - - - -com.r3corda.node.driver / NodeRunner / CliParams / <init>
      -
      -

      <init>

      -CliParams(services: Set<ServiceType>, networkMapName: String?, networkMapPublicKey: PublicKey?, networkMapAddress: <ERROR CLASS>?, messagingAddress: <ERROR CLASS>, apiAddress: <ERROR CLASS>, baseDirectory: String)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/api-address.html b/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/api-address.html deleted file mode 100644 index fd19203f29..0000000000 --- a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/api-address.html +++ /dev/null @@ -1,17 +0,0 @@ - - -NodeRunner.CliParams.apiAddress - - - - -com.r3corda.node.driver / NodeRunner / CliParams / apiAddress
      -
      -

      apiAddress

      - -val apiAddress: <ERROR CLASS>
      - -val apiAddress: <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/base-directory.html b/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/base-directory.html deleted file mode 100644 index 3d3addd5d7..0000000000 --- a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/base-directory.html +++ /dev/null @@ -1,17 +0,0 @@ - - -NodeRunner.CliParams.baseDirectory - - - - -com.r3corda.node.driver / NodeRunner / CliParams / baseDirectory
      -
      -

      baseDirectory

      - -val baseDirectory: String
      - -val baseDirectory: <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/index.html b/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/index.html deleted file mode 100644 index faacb96610..0000000000 --- a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/index.html +++ /dev/null @@ -1,147 +0,0 @@ - - -NodeRunner.CliParams - - - - -com.r3corda.node.driver / NodeRunner / CliParams
      -
      -

      CliParams

      -class CliParams
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -CliParams(services: Set<ServiceType>, networkMapName: String?, networkMapPublicKey: PublicKey?, networkMapAddress: <ERROR CLASS>?, messagingAddress: <ERROR CLASS>, apiAddress: <ERROR CLASS>, baseDirectory: String)
      -

      Properties

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -apiAddress -val apiAddress: <ERROR CLASS>
      -baseDirectory -val baseDirectory: String
      -messagingAddress -val messagingAddress: <ERROR CLASS>
      -networkMapAddress -val networkMapAddress: <ERROR CLASS>?
      -networkMapName -val networkMapName: String?
      -networkMapPublicKey -val networkMapPublicKey: PublicKey?
      -services -val services: Set<ServiceType>
      -

      Functions

      - - - - - - - -
      -toCliArguments -fun toCliArguments(): List<String>
      -

      Companion Object Properties

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -apiAddress -val apiAddress: <ERROR CLASS>
      -baseDirectory -val baseDirectory: <ERROR CLASS>
      -messagingAddress -val messagingAddress: <ERROR CLASS>
      -networkMapAddress -val networkMapAddress: <ERROR CLASS>
      -networkMapName -val networkMapName: <ERROR CLASS>
      -networkMapPublicKey -val networkMapPublicKey: <ERROR CLASS>
      -parser -val parser: <ERROR CLASS>
      -services -val services: <ERROR CLASS>
      -

      Companion Object Functions

      - - - - - - - -
      -parse -fun parse(optionSet: <ERROR CLASS>): CliParams
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/messaging-address.html b/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/messaging-address.html deleted file mode 100644 index 7586f4985e..0000000000 --- a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/messaging-address.html +++ /dev/null @@ -1,17 +0,0 @@ - - -NodeRunner.CliParams.messagingAddress - - - - -com.r3corda.node.driver / NodeRunner / CliParams / messagingAddress
      -
      -

      messagingAddress

      - -val messagingAddress: <ERROR CLASS>
      - -val messagingAddress: <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/network-map-address.html b/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/network-map-address.html deleted file mode 100644 index f80b61acf1..0000000000 --- a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/network-map-address.html +++ /dev/null @@ -1,17 +0,0 @@ - - -NodeRunner.CliParams.networkMapAddress - - - - -com.r3corda.node.driver / NodeRunner / CliParams / networkMapAddress
      -
      -

      networkMapAddress

      - -val networkMapAddress: <ERROR CLASS>?
      - -val networkMapAddress: <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/network-map-name.html b/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/network-map-name.html deleted file mode 100644 index b5c3d87efd..0000000000 --- a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/network-map-name.html +++ /dev/null @@ -1,17 +0,0 @@ - - -NodeRunner.CliParams.networkMapName - - - - -com.r3corda.node.driver / NodeRunner / CliParams / networkMapName
      -
      -

      networkMapName

      - -val networkMapName: String?
      - -val networkMapName: <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/network-map-public-key.html b/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/network-map-public-key.html deleted file mode 100644 index d3b04b22c8..0000000000 --- a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/network-map-public-key.html +++ /dev/null @@ -1,17 +0,0 @@ - - -NodeRunner.CliParams.networkMapPublicKey - - - - -com.r3corda.node.driver / NodeRunner / CliParams / networkMapPublicKey
      -
      -

      networkMapPublicKey

      - -val networkMapPublicKey: PublicKey?
      - -val networkMapPublicKey: <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/parse.html b/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/parse.html deleted file mode 100644 index f941a034c7..0000000000 --- a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/parse.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NodeRunner.CliParams.parse - - - - -com.r3corda.node.driver / NodeRunner / CliParams / parse
      -
      -

      parse

      - -fun parse(optionSet: <ERROR CLASS>): CliParams
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/parser.html b/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/parser.html deleted file mode 100644 index 2031cd355b..0000000000 --- a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/parser.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NodeRunner.CliParams.parser - - - - -com.r3corda.node.driver / NodeRunner / CliParams / parser
      -
      -

      parser

      - -val parser: <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/services.html b/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/services.html deleted file mode 100644 index e2c781beee..0000000000 --- a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/services.html +++ /dev/null @@ -1,17 +0,0 @@ - - -NodeRunner.CliParams.services - - - - -com.r3corda.node.driver / NodeRunner / CliParams / services
      -
      -

      services

      - -val services: Set<ServiceType>
      - -val services: <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/to-cli-arguments.html b/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/to-cli-arguments.html deleted file mode 100644 index 404dc6d107..0000000000 --- a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-cli-params/to-cli-arguments.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NodeRunner.CliParams.toCliArguments - - - - -com.r3corda.node.driver / NodeRunner / CliParams / toCliArguments
      -
      -

      toCliArguments

      - -fun toCliArguments(): List<String>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-init-.html b/docs/build/html/api/com.r3corda.node.driver/-node-runner/-init-.html deleted file mode 100644 index a3c6cc4d62..0000000000 --- a/docs/build/html/api/com.r3corda.node.driver/-node-runner/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -NodeRunner.<init> - - - - -com.r3corda.node.driver / NodeRunner / <init>
      -
      -

      <init>

      -NodeRunner()
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/-node-runner/index.html b/docs/build/html/api/com.r3corda.node.driver/-node-runner/index.html deleted file mode 100644 index 35bfb51112..0000000000 --- a/docs/build/html/api/com.r3corda.node.driver/-node-runner/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - -NodeRunner - - - - -com.r3corda.node.driver / NodeRunner
      -
      -

      NodeRunner

      -class NodeRunner
      -
      -
      -

      Types

      - - - - - - - -
      -CliParams -class CliParams
      -

      Constructors

      - - - - - - - -
      -<init> -NodeRunner()
      -

      Companion Object Functions

      - - - - - - - -
      -main -fun main(arguments: Array<String>): Unit
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/-node-runner/main.html b/docs/build/html/api/com.r3corda.node.driver/-node-runner/main.html deleted file mode 100644 index 97849efcd3..0000000000 --- a/docs/build/html/api/com.r3corda.node.driver/-node-runner/main.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NodeRunner.main - - - - -com.r3corda.node.driver / NodeRunner / main
      -
      -

      main

      - -fun main(arguments: Array<String>): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/-port-allocation/-random-free/index.html b/docs/build/html/api/com.r3corda.node.driver/-port-allocation/-random-free/index.html index 5cbe2811ce..6ad2aa7bb0 100644 --- a/docs/build/html/api/com.r3corda.node.driver/-port-allocation/-random-free/index.html +++ b/docs/build/html/api/com.r3corda.node.driver/-port-allocation/-random-free/index.html @@ -28,7 +28,7 @@ nextPort -fun nextPort(): <ERROR CLASS> +fun nextPort(): Int diff --git a/docs/build/html/api/com.r3corda.node.driver/-port-allocation/-random-free/next-port.html b/docs/build/html/api/com.r3corda.node.driver/-port-allocation/-random-free/next-port.html index 3fc4318a3a..d7b5a8baad 100644 --- a/docs/build/html/api/com.r3corda.node.driver/-port-allocation/-random-free/next-port.html +++ b/docs/build/html/api/com.r3corda.node.driver/-port-allocation/-random-free/next-port.html @@ -8,7 +8,7 @@

      nextPort

      -fun nextPort(): <ERROR CLASS>
      +fun nextPort(): Int
      Overrides PortAllocation.nextPort


      diff --git a/docs/build/html/api/com.r3corda.node.driver/create-node-run-directory.html b/docs/build/html/api/com.r3corda.node.driver/create-node-run-directory.html deleted file mode 100644 index ef69f4185b..0000000000 --- a/docs/build/html/api/com.r3corda.node.driver/create-node-run-directory.html +++ /dev/null @@ -1,15 +0,0 @@ - - -createNodeRunDirectory - - - - -com.r3corda.node.driver / createNodeRunDirectory
      -
      -

      createNodeRunDirectory

      - -fun createNodeRunDirectory(directory: Path): Boolean
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.driver/index.html b/docs/build/html/api/com.r3corda.node.driver/index.html index fda703baba..3668b7b871 100644 --- a/docs/build/html/api/com.r3corda.node.driver/index.html +++ b/docs/build/html/api/com.r3corda.node.driver/index.html @@ -31,12 +31,6 @@ -NodeRunner - -class NodeRunner - - - PortAllocation sealed class PortAllocation @@ -60,12 +54,6 @@ -createNodeRunDirectory - -fun createNodeRunDirectory(directory: Path): Boolean - - - driver fun <A> driver(baseDirectory: String = "build/${getTimestampAsDirectoryName()}", portAllocation: PortAllocation = PortAllocation.Incremental(10000), debugPortAllocation: PortAllocation = PortAllocation.Incremental(5005), isDebug: Boolean = false, dsl: DriverDSLExposedInterface.() -> A): A

      driver allows one to start up nodes like this: @@ -94,14 +82,14 @@ class SomeOtherDSL(val driverDSL : DriverDSL) : DriverDSLInternalInterface by dr startClient -fun DriverDSLExposedInterface.startClient(localServer: ArtemisMessagingServer): Future<ArtemisMessagingClient>
      -fun DriverDSLExposedInterface.startClient(remoteNodeInfo: NodeInfo, providedName: String? = null): Future<ArtemisMessagingClient> +fun DriverDSLExposedInterface.startClient(localServer: ArtemisMessagingServer): Future<NodeMessagingClient>
      +fun DriverDSLExposedInterface.startClient(remoteNodeInfo: NodeInfo, providedName: String? = null): Future<NodeMessagingClient> writeConfig -fun writeConfig(path: String, filename: String, config: <ERROR CLASS>): Unit +fun writeConfig(path: Path, filename: String, config: <ERROR CLASS>): Unit diff --git a/docs/build/html/api/com.r3corda.node.driver/start-client.html b/docs/build/html/api/com.r3corda.node.driver/start-client.html index b3fbe3c3d0..ec179e26b4 100644 --- a/docs/build/html/api/com.r3corda.node.driver/start-client.html +++ b/docs/build/html/api/com.r3corda.node.driver/start-client.html @@ -8,9 +8,9 @@

      startClient

      -fun DriverDSLExposedInterface.startClient(localServer: ArtemisMessagingServer): Future<ArtemisMessagingClient>
      +fun DriverDSLExposedInterface.startClient(localServer: ArtemisMessagingServer): Future<NodeMessagingClient>
      -fun DriverDSLExposedInterface.startClient(remoteNodeInfo: NodeInfo, providedName: String? = null): Future<ArtemisMessagingClient>
      +fun DriverDSLExposedInterface.startClient(remoteNodeInfo: NodeInfo, providedName: String? = null): Future<NodeMessagingClient>


      diff --git a/docs/build/html/api/com.r3corda.node.driver/write-config.html b/docs/build/html/api/com.r3corda.node.driver/write-config.html index 10b239c668..1fea1a8de6 100644 --- a/docs/build/html/api/com.r3corda.node.driver/write-config.html +++ b/docs/build/html/api/com.r3corda.node.driver/write-config.html @@ -7,8 +7,8 @@ com.r3corda.node.driver / writeConfig

      writeConfig

      - -fun writeConfig(path: String, filename: String, config: <ERROR CLASS>): Unit
      + +fun writeConfig(path: Path, filename: String, config: <ERROR CLASS>): Unit


      diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-i-r-s-simulation/-init-.html b/docs/build/html/api/com.r3corda.node.internal.testing/-i-r-s-simulation/-init-.html deleted file mode 100644 index f7b77c79d6..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-i-r-s-simulation/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - -IRSSimulation.<init> - - - - -com.r3corda.node.internal.testing / IRSSimulation / <init>
      -
      -

      <init>

      -IRSSimulation(networkSendManuallyPumped: Boolean, runAsync: Boolean, latencyInjector: LatencyCalculator?)
      -

      A simulation in which banks execute interest rate swaps with each other, including the fixing events.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/-init-.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/-init-.html deleted file mode 100644 index c6025c4287..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/-init-.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockNetwork.BasketOfNodes.<init> - - - - -com.r3corda.node.internal.testing / MockNetwork / BasketOfNodes / <init>
      -
      -

      <init>

      -BasketOfNodes(partyNodes: List<MockNode>, notaryNode: MockNode, mapNode: MockNode)
      -

      A bundle that separates the generic user nodes and service-providing nodes. A real network might not be so -clearly separated, but this is convenient for testing.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/index.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/index.html deleted file mode 100644 index c9004257c1..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/index.html +++ /dev/null @@ -1,52 +0,0 @@ - - -MockNetwork.BasketOfNodes - - - - -com.r3corda.node.internal.testing / MockNetwork / BasketOfNodes
      -
      -

      BasketOfNodes

      -data class BasketOfNodes
      -

      A bundle that separates the generic user nodes and service-providing nodes. A real network might not be so -clearly separated, but this is convenient for testing.

      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -BasketOfNodes(partyNodes: List<MockNode>, notaryNode: MockNode, mapNode: MockNode)

      A bundle that separates the generic user nodes and service-providing nodes. A real network might not be so -clearly separated, but this is convenient for testing.

      -
      -

      Properties

      - - - - - - - - - - - - - - - -
      -mapNode -val mapNode: MockNode
      -notaryNode -val notaryNode: MockNode
      -partyNodes -val partyNodes: List<MockNode>
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/map-node.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/map-node.html deleted file mode 100644 index 2355b7407e..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/map-node.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetwork.BasketOfNodes.mapNode - - - - -com.r3corda.node.internal.testing / MockNetwork / BasketOfNodes / mapNode
      -
      -

      mapNode

      - -val mapNode: MockNode
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/notary-node.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/notary-node.html deleted file mode 100644 index 2684ab1c2a..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/notary-node.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetwork.BasketOfNodes.notaryNode - - - - -com.r3corda.node.internal.testing / MockNetwork / BasketOfNodes / notaryNode
      -
      -

      notaryNode

      - -val notaryNode: MockNode
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/party-nodes.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/party-nodes.html deleted file mode 100644 index 624af02ecc..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-basket-of-nodes/party-nodes.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetwork.BasketOfNodes.partyNodes - - - - -com.r3corda.node.internal.testing / MockNetwork / BasketOfNodes / partyNodes
      -
      -

      partyNodes

      - -val partyNodes: List<MockNode>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-default-factory/create.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-default-factory/create.html deleted file mode 100644 index 64939d27ca..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-default-factory/create.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockNetwork.DefaultFactory.create - - - - -com.r3corda.node.internal.testing / MockNetwork / DefaultFactory / create
      -
      -

      create

      - -fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode
      -Overrides Factory.create
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-default-factory/index.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-default-factory/index.html deleted file mode 100644 index a0c556b16d..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-default-factory/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - -MockNetwork.DefaultFactory - - - - -com.r3corda.node.internal.testing / MockNetwork / DefaultFactory
      -
      -

      DefaultFactory

      -object DefaultFactory : Factory
      -
      -
      -

      Functions

      - - - - - - - -
      -create -fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-factory/create.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-factory/create.html deleted file mode 100644 index b5d3dd426a..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-factory/create.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetwork.Factory.create - - - - -com.r3corda.node.internal.testing / MockNetwork / Factory / create
      -
      -

      create

      - -abstract fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-factory/index.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-factory/index.html deleted file mode 100644 index 396cc7fe60..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-factory/index.html +++ /dev/null @@ -1,67 +0,0 @@ - - -MockNetwork.Factory - - - - -com.r3corda.node.internal.testing / MockNetwork / Factory
      -
      -

      Factory

      -interface Factory
      -

      Allows customisation of how nodes are created.

      -
      -
      -

      Functions

      - - - - - - - -
      -create -abstract fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode
      -

      Inheritors

      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -BankFactory -inner class BankFactory : Factory
      -DefaultFactory -object DefaultFactory : Factory
      -NetworkMapNodeFactory -object NetworkMapNodeFactory : Factory
      -NotaryNodeFactory -object NotaryNodeFactory : Factory
      -RatesOracleFactory -object RatesOracleFactory : Factory
      -RegulatorFactory -object RegulatorFactory : Factory
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-init-.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-init-.html deleted file mode 100644 index abd4cc85f9..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-init-.html +++ /dev/null @@ -1,23 +0,0 @@ - - -MockNetwork.<init> - - - - -com.r3corda.node.internal.testing / MockNetwork / <init>
      -
      -

      <init>

      -MockNetwork(networkSendManuallyPumped: Boolean = false, threadPerNode: Boolean = false, defaultFactory: Factory = MockNetwork.DefaultFactory)
      -

      A mock node brings up a suite of in-memory services in a fast manner suitable for unit testing. -Components that do IO are either swapped out for mocks, or pointed to a Jimfs in memory filesystem.

      -

      Mock network nodes require manual pumping by default: they will not run asynchronous. This means that -for message exchanges to take place (and associated handlers to run), you must call the runNetwork -method.

      -

      You can get a printout of every message sent by using code like:

      -

      LogHelper.setLevel("+messages")

      -
      -
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/-init-.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/-init-.html deleted file mode 100644 index 6f908f4f2a..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -MockNetwork.MockNode.<init> - - - - -com.r3corda.node.internal.testing / MockNetwork / MockNode / <init>
      -
      -

      <init>

      -MockNode(dir: Path, config: NodeConfiguration, mockNet: MockNetwork, networkMapAddr: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/find-my-location.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/find-my-location.html deleted file mode 100644 index ff5c65adb0..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/find-my-location.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockNetwork.MockNode.findMyLocation - - - - -com.r3corda.node.internal.testing / MockNetwork / MockNode / findMyLocation
      -
      -

      findMyLocation

      - -open fun findMyLocation(): PhysicalLocation?
      -Overrides AbstractNode.findMyLocation
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/generate-key-pair.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/generate-key-pair.html deleted file mode 100644 index e777dce79a..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/generate-key-pair.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockNetwork.MockNode.generateKeyPair - - - - -com.r3corda.node.internal.testing / MockNetwork / MockNode / generateKeyPair
      -
      -

      generateKeyPair

      - -protected open fun generateKeyPair(): KeyPair
      -Overrides AbstractNode.generateKeyPair
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/id.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/id.html deleted file mode 100644 index d801849a0f..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/id.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetwork.MockNode.id - - - - -com.r3corda.node.internal.testing / MockNetwork / MockNode / id
      -
      -

      id

      - -val id: Int
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/index.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/index.html deleted file mode 100644 index 5b81f0de4c..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/index.html +++ /dev/null @@ -1,386 +0,0 @@ - - -MockNetwork.MockNode - - - - -com.r3corda.node.internal.testing / MockNetwork / MockNode
      -
      -

      MockNode

      -class MockNode : AbstractNode
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -MockNode(dir: Path, config: NodeConfiguration, mockNet: MockNetwork, networkMapAddr: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?)
      -

      Properties

      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -id -val id: Int
      -keyPair -val keyPair: KeyPair?
      -log -open val log: <ERROR CLASS>
      -mockNet -val mockNet: MockNetwork
      -place -val place: PhysicalLocation
      -serverThread -open val serverThread: AffinityExecutor
      -

      Inherited Properties

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -_servicesThatAcceptUploads -val _servicesThatAcceptUploads: ArrayList<AcceptsFileUpload>
      -advertisedServices -val advertisedServices: Set<ServiceType>
      -api -lateinit var api: APIServer
      -checkpointStorage -lateinit var checkpointStorage: CheckpointStorage
      -closeOnStop -val closeOnStop: ArrayList<Closeable>
      -configuration -val configuration: NodeConfiguration
      -customServices -val customServices: ArrayList<Any>
      -dir -val dir: Path
      -identity -lateinit var identity: IdentityService
      -inNodeNetworkMapService -var inNodeNetworkMapService: NetworkMapService?
      -inNodeNotaryService -var inNodeNotaryService: NotaryService?
      -inNodeWalletMonitorService -var inNodeWalletMonitorService: WalletMonitorService?
      -info -val info: NodeInfo
      -isPreviousCheckpointsPresent -var isPreviousCheckpointsPresent: Boolean
      -keyManagement -lateinit var keyManagement: E2ETestKeyManagementService
      -net -lateinit var net: MessagingServiceInternal
      -netMapCache -lateinit var netMapCache: NetworkMapCache
      -networkMapRegistrationFuture -val networkMapRegistrationFuture: <ERROR CLASS><Unit>
      -networkMapSeq -var networkMapSeq: Long

      Sequence number of changes sent to the network map service, when registering/de-registering this node.

      -
      -networkMapService -val networkMapService: NodeInfo?
      -platformClock -val platformClock: Clock
      -pluginRegistries -val pluginRegistries: List<CordaPluginRegistry>

      Fetch CordaPluginRegistry classes registered in META-INF/services/com.r3corda.core.node.CordaPluginRegistry files that exist in the classpath

      -
      -protocolLogicFactory -lateinit var protocolLogicFactory: ProtocolLogicRefFactory
      -scheduler -lateinit var scheduler: SchedulerService
      -services -val services: ServiceHubInternal
      -servicesThatAcceptUploads -val servicesThatAcceptUploads: List<AcceptsFileUpload>
      -smm -lateinit var smm: StateMachineManager
      -started -var started: Boolean

      Set to true once start has been successfully called.

      -
      -storage -lateinit var storage: TxWritableStorageService
      -wallet -lateinit var wallet: WalletService
      -

      Functions

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -findMyLocation -open fun findMyLocation(): PhysicalLocation?
      -generateKeyPair -open fun generateKeyPair(): KeyPair
      -makeIdentityService -open fun makeIdentityService(): MockIdentityService
      -makeMessagingService -open fun makeMessagingService(): MessagingServiceInternal
      -makeWalletService -open fun makeWalletService(): WalletService
      -noNetworkMapConfigured -open fun noNetworkMapConfigured(): <ERROR CLASS>

      This is overriden by the mock node implementation to enable operation without any network map service

      -
      -start -open fun start(): MockNode
      -startMessagingService -open fun startMessagingService(): Unit
      -

      Inherited Functions

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -constructStorageService -open fun constructStorageService(attachments: NodeAttachmentService, transactionStorage: TransactionStorage, keypair: KeyPair, identity: Party): StorageServiceImpl
      -createNodeDir -fun createNodeDir(): Unit
      -findService -fun <T : Any> findService(): <ERROR CLASS>

      Locates and returns a service of the given type if loaded, or throws an exception if not found.

      -
      -initialiseStorageService -open fun initialiseStorageService(dir: Path): <ERROR CLASS><TxWritableStorageService, CheckpointStorage>
      -makeAttachmentStorage -fun makeAttachmentStorage(dir: Path): NodeAttachmentService
      -makeNetworkMapService -open fun makeNetworkMapService(): Unit
      -makeNotaryService -open fun makeNotaryService(type: ServiceType): NotaryService
      -makeWalletMonitorService -open fun makeWalletMonitorService(): WalletMonitorService
      -setup -open fun setup(): AbstractNode

      Run any tasks that are needed to ensure the node is in a correct state before running start().

      -
      -stop -open fun stop(): Unit
      -

      Inheritors

      - - - - - - - -
      -SimulatedNode -open class SimulatedNode : MockNode
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/key-pair.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/key-pair.html deleted file mode 100644 index e6dddae8fa..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/key-pair.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetwork.MockNode.keyPair - - - - -com.r3corda.node.internal.testing / MockNetwork / MockNode / keyPair
      -
      -

      keyPair

      - -val keyPair: KeyPair?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/log.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/log.html deleted file mode 100644 index 2f595db629..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/log.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockNetwork.MockNode.log - - - - -com.r3corda.node.internal.testing / MockNetwork / MockNode / log
      -
      -

      log

      - -protected open val log: <ERROR CLASS>
      -Overrides AbstractNode.log
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/make-identity-service.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/make-identity-service.html deleted file mode 100644 index 3c903496e0..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/make-identity-service.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockNetwork.MockNode.makeIdentityService - - - - -com.r3corda.node.internal.testing / MockNetwork / MockNode / makeIdentityService
      -
      -

      makeIdentityService

      - -protected open fun makeIdentityService(): MockIdentityService
      -Overrides AbstractNode.makeIdentityService
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/make-messaging-service.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/make-messaging-service.html deleted file mode 100644 index 48e9376f07..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/make-messaging-service.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockNetwork.MockNode.makeMessagingService - - - - -com.r3corda.node.internal.testing / MockNetwork / MockNode / makeMessagingService
      -
      -

      makeMessagingService

      - -protected open fun makeMessagingService(): MessagingServiceInternal
      -Overrides AbstractNode.makeMessagingService
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/make-wallet-service.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/make-wallet-service.html deleted file mode 100644 index 9e88d96470..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/make-wallet-service.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockNetwork.MockNode.makeWalletService - - - - -com.r3corda.node.internal.testing / MockNetwork / MockNode / makeWalletService
      -
      -

      makeWalletService

      - -protected open fun makeWalletService(): WalletService
      -Overrides AbstractNode.makeWalletService
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/mock-net.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/mock-net.html deleted file mode 100644 index 1b88b199c3..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/mock-net.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetwork.MockNode.mockNet - - - - -com.r3corda.node.internal.testing / MockNetwork / MockNode / mockNet
      -
      -

      mockNet

      - -val mockNet: MockNetwork
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/no-network-map-configured.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/no-network-map-configured.html deleted file mode 100644 index e7effc0ab0..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/no-network-map-configured.html +++ /dev/null @@ -1,17 +0,0 @@ - - -MockNetwork.MockNode.noNetworkMapConfigured - - - - -com.r3corda.node.internal.testing / MockNetwork / MockNode / noNetworkMapConfigured
      -
      -

      noNetworkMapConfigured

      - -protected open fun noNetworkMapConfigured(): <ERROR CLASS>
      -Overrides AbstractNode.noNetworkMapConfigured
      -

      This is overriden by the mock node implementation to enable operation without any network map service

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/place.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/place.html deleted file mode 100644 index 81437b27a2..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/place.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetwork.MockNode.place - - - - -com.r3corda.node.internal.testing / MockNetwork / MockNode / place
      -
      -

      place

      - -val place: PhysicalLocation
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/server-thread.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/server-thread.html deleted file mode 100644 index 8a621d0359..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/server-thread.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockNetwork.MockNode.serverThread - - - - -com.r3corda.node.internal.testing / MockNetwork / MockNode / serverThread
      -
      -

      serverThread

      - -protected open val serverThread: AffinityExecutor
      -Overrides AbstractNode.serverThread
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/start-messaging-service.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/start-messaging-service.html deleted file mode 100644 index a90b0f7754..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/start-messaging-service.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockNetwork.MockNode.startMessagingService - - - - -com.r3corda.node.internal.testing / MockNetwork / MockNode / startMessagingService
      -
      -

      startMessagingService

      - -protected open fun startMessagingService(): Unit
      -Overrides AbstractNode.startMessagingService
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/start.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/start.html deleted file mode 100644 index 5331242d1b..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/-mock-node/start.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockNetwork.MockNode.start - - - - -com.r3corda.node.internal.testing / MockNetwork / MockNode / start
      -
      -

      start

      - -open fun start(): MockNode
      -Overrides AbstractNode.start
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/address-to-node.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/address-to-node.html deleted file mode 100644 index 0ada88d352..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/address-to-node.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetwork.addressToNode - - - - -com.r3corda.node.internal.testing / MockNetwork / addressToNode
      -
      -

      addressToNode

      - -fun addressToNode(address: SingleMessageRecipient): MockNode
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-node.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-node.html deleted file mode 100644 index eaa56a5ebc..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-node.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockNetwork.createNode - - - - -com.r3corda.node.internal.testing / MockNetwork / createNode
      -
      -

      createNode

      - -fun createNode(networkMapAddress: NodeInfo? = null, forcedID: Int = -1, nodeFactory: Factory = defaultFactory, start: Boolean = true, legalName: String? = null, keyPair: KeyPair? = null, databasePersistence: Boolean = false, vararg advertisedServices: ServiceType): MockNode
      -

      Returns a node, optionally created by the passed factory method.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-notary-node.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-notary-node.html deleted file mode 100644 index e2fba58a56..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-notary-node.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetwork.createNotaryNode - - - - -com.r3corda.node.internal.testing / MockNetwork / createNotaryNode
      -
      -

      createNotaryNode

      - -fun createNotaryNode(legalName: String? = null, keyPair: KeyPair? = null): MockNode
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-party-node.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-party-node.html deleted file mode 100644 index 8ad61591ad..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-party-node.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetwork.createPartyNode - - - - -com.r3corda.node.internal.testing / MockNetwork / createPartyNode
      -
      -

      createPartyNode

      - -fun createPartyNode(networkMapAddr: NodeInfo, legalName: String? = null, keyPair: KeyPair? = null): MockNode
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-some-nodes.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-some-nodes.html deleted file mode 100644 index 28e152aad5..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-some-nodes.html +++ /dev/null @@ -1,17 +0,0 @@ - - -MockNetwork.createSomeNodes - - - - -com.r3corda.node.internal.testing / MockNetwork / createSomeNodes
      -
      -

      createSomeNodes

      - -fun createSomeNodes(numPartyNodes: Int = 2, nodeFactory: Factory = defaultFactory, notaryKeyPair: KeyPair? = DUMMY_NOTARY_KEY): BasketOfNodes
      -

      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. Cant be combined with createTwoNodes.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-two-nodes.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-two-nodes.html deleted file mode 100644 index 716bf30200..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/create-two-nodes.html +++ /dev/null @@ -1,17 +0,0 @@ - - -MockNetwork.createTwoNodes - - - - -com.r3corda.node.internal.testing / MockNetwork / createTwoNodes
      -
      -

      createTwoNodes

      - -fun createTwoNodes(nodeFactory: Factory = defaultFactory, notaryKeyPair: KeyPair? = null): <ERROR CLASS><MockNode, MockNode>
      -

      Sets up a two node network, in which the first node runs network map and notary services and the other -doesnt.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/filesystem.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/filesystem.html deleted file mode 100644 index 713c719960..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/filesystem.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetwork.filesystem - - - - -com.r3corda.node.internal.testing / MockNetwork / filesystem
      -
      -

      filesystem

      - -val filesystem: <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/identities.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/identities.html deleted file mode 100644 index d83c5e54fe..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/identities.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetwork.identities - - - - -com.r3corda.node.internal.testing / MockNetwork / identities
      -
      -

      identities

      - -val identities: ArrayList<Party>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/index.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/index.html deleted file mode 100644 index dc28816fef..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/index.html +++ /dev/null @@ -1,166 +0,0 @@ - - -MockNetwork - - - - -com.r3corda.node.internal.testing / MockNetwork
      -
      -

      MockNetwork

      -class MockNetwork
      -

      A mock node brings up a suite of in-memory services in a fast manner suitable for unit testing. -Components that do IO are either swapped out for mocks, or pointed to a Jimfs in memory filesystem.

      -

      Mock network nodes require manual pumping by default: they will not run asynchronous. This means that -for message exchanges to take place (and associated handlers to run), you must call the runNetwork -method.

      -

      You can get a printout of every message sent by using code like:

      -

      LogHelper.setLevel("+messages")

      -
      -
      -
      -
      -

      Types

      - - - - - - - - - - - - - - - - - - - -
      -BasketOfNodes -data class BasketOfNodes

      A bundle that separates the generic user nodes and service-providing nodes. A real network might not be so -clearly separated, but this is convenient for testing.

      -
      -DefaultFactory -object DefaultFactory : Factory
      -Factory -interface Factory

      Allows customisation of how nodes are created.

      -
      -MockNode -class MockNode : AbstractNode
      -

      Constructors

      - - - - - - - -
      -<init> -MockNetwork(networkSendManuallyPumped: Boolean = false, threadPerNode: Boolean = false, defaultFactory: Factory = MockNetwork.DefaultFactory)

      A mock node brings up a suite of in-memory services in a fast manner suitable for unit testing. -Components that do IO are either swapped out for mocks, or pointed to a Jimfs in memory filesystem.

      -
      -

      Properties

      - - - - - - - - - - - - - - - - - - - -
      -filesystem -val filesystem: <ERROR CLASS>
      -identities -val identities: ArrayList<Party>
      -messagingNetwork -val messagingNetwork: InMemoryMessagingNetwork
      -nodes -val nodes: List<MockNode>

      A read only view of the current set of executing nodes.

      -
      -

      Functions

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -addressToNode -fun addressToNode(address: SingleMessageRecipient): MockNode
      -createNode -fun createNode(networkMapAddress: NodeInfo? = null, forcedID: Int = -1, nodeFactory: Factory = defaultFactory, start: Boolean = true, legalName: String? = null, keyPair: KeyPair? = null, databasePersistence: Boolean = false, vararg advertisedServices: ServiceType): MockNode

      Returns a node, optionally created by the passed factory method.

      -
      -createNotaryNode -fun createNotaryNode(legalName: String? = null, keyPair: KeyPair? = null): MockNode
      -createPartyNode -fun createPartyNode(networkMapAddr: NodeInfo, legalName: String? = null, keyPair: KeyPair? = null): MockNode
      -createSomeNodes -fun createSomeNodes(numPartyNodes: Int = 2, nodeFactory: Factory = defaultFactory, notaryKeyPair: KeyPair? = DUMMY_NOTARY_KEY): BasketOfNodes

      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. Cant be combined with createTwoNodes.

      -
      -createTwoNodes -fun createTwoNodes(nodeFactory: Factory = defaultFactory, notaryKeyPair: KeyPair? = null): <ERROR CLASS><MockNode, MockNode>

      Sets up a two node network, in which the first node runs network map and notary services and the other -doesnt.

      -
      -runNetwork -fun runNetwork(rounds: Int = -1): Unit

      Asks every node in order to process any queued up inbound messages. This may in turn result in nodes -sending more messages to each other, thus, a typical usage is to call runNetwork with the rounds -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).

      -
      -startNodes -fun startNodes(): Unit
      -stopNodes -fun stopNodes(): Unit
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/messaging-network.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/messaging-network.html deleted file mode 100644 index c3c31e75d3..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/messaging-network.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetwork.messagingNetwork - - - - -com.r3corda.node.internal.testing / MockNetwork / messagingNetwork
      -
      -

      messagingNetwork

      - -val messagingNetwork: InMemoryMessagingNetwork
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/nodes.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/nodes.html deleted file mode 100644 index d1352aeac5..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/nodes.html +++ /dev/null @@ -1,16 +0,0 @@ - - -MockNetwork.nodes - - - - -com.r3corda.node.internal.testing / MockNetwork / nodes
      -
      -

      nodes

      - -val nodes: List<MockNode>
      -

      A read only view of the current set of executing nodes.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/run-network.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/run-network.html deleted file mode 100644 index ba2851a3a0..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/run-network.html +++ /dev/null @@ -1,19 +0,0 @@ - - -MockNetwork.runNetwork - - - - -com.r3corda.node.internal.testing / MockNetwork / runNetwork
      -
      -

      runNetwork

      - -fun runNetwork(rounds: Int = -1): Unit
      -

      Asks every node in order to process any queued up inbound messages. This may in turn result in nodes -sending more messages to each other, thus, a typical usage is to call runNetwork with the rounds -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).

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/start-nodes.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/start-nodes.html deleted file mode 100644 index ea86b59b23..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/start-nodes.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetwork.startNodes - - - - -com.r3corda.node.internal.testing / MockNetwork / startNodes
      -
      -

      startNodes

      - -fun startNodes(): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/stop-nodes.html b/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/stop-nodes.html deleted file mode 100644 index 90d02c5a90..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-mock-network/stop-nodes.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetwork.stopNodes - - - - -com.r3corda.node.internal.testing / MockNetwork / stopNodes
      -
      -

      stopNodes

      - -fun stopNodes(): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/create.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/create.html deleted file mode 100644 index 74986daccf..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/create.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Simulation.BankFactory.create - - - - -com.r3corda.node.internal.testing / Simulation / BankFactory / create
      -
      -

      create

      - -fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode
      -Overrides Factory.create
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/index.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/index.html deleted file mode 100644 index efafc8f7ae..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - -Simulation.BankFactory - - - - -com.r3corda.node.internal.testing / Simulation / BankFactory
      -
      -

      BankFactory

      -inner class BankFactory : Factory
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -BankFactory()
      -

      Properties

      - - - - - - - -
      -counter -var counter: Int
      -

      Functions

      - - - - - - - - - - - -
      -create -fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode
      -createAll -fun createAll(): List<SimulatedNode>
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-init-.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-init-.html deleted file mode 100644 index e450f6b867..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-init-.html +++ /dev/null @@ -1,19 +0,0 @@ - - -Simulation.<init> - - - - -com.r3corda.node.internal.testing / Simulation / <init>
      -
      -

      <init>

      -Simulation(networkSendManuallyPumped: Boolean, runAsync: Boolean, latencyInjector: LatencyCalculator?)
      -

      Base class for network simulations that are based on the unit test / mock environment.

      -

      Sets up some nodes that can run protocols between each other, and exposes their progress trackers. Provides banks -in a few cities around the world.

      -
      -
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-network-map-node-factory/create.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-network-map-node-factory/create.html deleted file mode 100644 index 779106782a..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-network-map-node-factory/create.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Simulation.NetworkMapNodeFactory.create - - - - -com.r3corda.node.internal.testing / Simulation / NetworkMapNodeFactory / create
      -
      -

      create

      - -fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode
      -Overrides Factory.create
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-network-map-node-factory/index.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-network-map-node-factory/index.html deleted file mode 100644 index 6dfeaaa3c4..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-network-map-node-factory/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - -Simulation.NetworkMapNodeFactory - - - - -com.r3corda.node.internal.testing / Simulation / NetworkMapNodeFactory
      -
      -

      NetworkMapNodeFactory

      -object NetworkMapNodeFactory : Factory
      -
      -
      -

      Functions

      - - - - - - - -
      -create -fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-notary-node-factory/create.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-notary-node-factory/create.html deleted file mode 100644 index b59e7115d5..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-notary-node-factory/create.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Simulation.NotaryNodeFactory.create - - - - -com.r3corda.node.internal.testing / Simulation / NotaryNodeFactory / create
      -
      -

      create

      - -fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode
      -Overrides Factory.create
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-notary-node-factory/index.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-notary-node-factory/index.html deleted file mode 100644 index a3a40c9e22..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-notary-node-factory/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - -Simulation.NotaryNodeFactory - - - - -com.r3corda.node.internal.testing / Simulation / NotaryNodeFactory
      -
      -

      NotaryNodeFactory

      -object NotaryNodeFactory : Factory
      -
      -
      -

      Functions

      - - - - - - - -
      -create -fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-rates-oracle-factory/create.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-rates-oracle-factory/create.html deleted file mode 100644 index ee4fd09295..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-rates-oracle-factory/create.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Simulation.RatesOracleFactory.create - - - - -com.r3corda.node.internal.testing / Simulation / RatesOracleFactory / create
      -
      -

      create

      - -fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode
      -Overrides Factory.create
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-rates-oracle-factory/index.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-rates-oracle-factory/index.html deleted file mode 100644 index 10fa02168e..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-rates-oracle-factory/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - -Simulation.RatesOracleFactory - - - - -com.r3corda.node.internal.testing / Simulation / RatesOracleFactory
      -
      -

      RatesOracleFactory

      -object RatesOracleFactory : Factory
      -
      -
      -

      Functions

      - - - - - - - -
      -create -fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-regulator-factory/create.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-regulator-factory/create.html deleted file mode 100644 index e3c9f4d1dc..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-regulator-factory/create.html +++ /dev/null @@ -1,16 +0,0 @@ - - -Simulation.RegulatorFactory.create - - - - -com.r3corda.node.internal.testing / Simulation / RegulatorFactory / create
      -
      -

      create

      - -fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode
      -Overrides Factory.create
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-regulator-factory/index.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-regulator-factory/index.html deleted file mode 100644 index 27b0a8ccbd..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-regulator-factory/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - -Simulation.RegulatorFactory - - - - -com.r3corda.node.internal.testing / Simulation / RegulatorFactory
      -
      -

      RegulatorFactory

      -object RegulatorFactory : Factory
      -
      -
      -

      Functions

      - - - - - - - -
      -create -fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-simulated-node/-init-.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-simulated-node/-init-.html deleted file mode 100644 index 52f308fdd7..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-simulated-node/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -Simulation.SimulatedNode.<init> - - - - -com.r3corda.node.internal.testing / Simulation / SimulatedNode / <init>
      -
      -

      <init>

      -SimulatedNode(dir: Path, config: NodeConfiguration, mockNet: MockNetwork, networkMapAddress: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-simulated-node/index.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-simulated-node/index.html deleted file mode 100644 index 9324d2c202..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-simulated-node/index.html +++ /dev/null @@ -1,125 +0,0 @@ - - -Simulation.SimulatedNode - - - - -com.r3corda.node.internal.testing / Simulation / SimulatedNode
      -
      -

      SimulatedNode

      -open class SimulatedNode : MockNode
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -SimulatedNode(dir: Path, config: NodeConfiguration, mockNet: MockNetwork, networkMapAddress: NodeInfo?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?)
      -

      Inherited Properties

      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -id -val id: Int
      -keyPair -val keyPair: KeyPair?
      -log -open val log: <ERROR CLASS>
      -mockNet -val mockNet: MockNetwork
      -place -val place: PhysicalLocation
      -serverThread -open val serverThread: AffinityExecutor
      -

      Functions

      - - - - - - - -
      -findMyLocation -open fun findMyLocation(): PhysicalLocation?
      -

      Inherited Functions

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -generateKeyPair -open fun generateKeyPair(): KeyPair
      -makeIdentityService -open fun makeIdentityService(): MockIdentityService
      -makeMessagingService -open fun makeMessagingService(): MessagingServiceInternal
      -makeWalletService -open fun makeWalletService(): WalletService
      -noNetworkMapConfigured -open fun noNetworkMapConfigured(): <ERROR CLASS>

      This is overriden by the mock node implementation to enable operation without any network map service

      -
      -start -open fun start(): MockNode
      -startMessagingService -open fun startMessagingService(): Unit
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/latency-injector.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/latency-injector.html deleted file mode 100644 index 254f37f899..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/latency-injector.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Simulation.latencyInjector - - - - -com.r3corda.node.internal.testing / Simulation / latencyInjector
      -
      -

      latencyInjector

      - -val latencyInjector: LatencyCalculator?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/network.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/network.html deleted file mode 100644 index 8e2630ae60..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/network.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Simulation.network - - - - -com.r3corda.node.internal.testing / Simulation / network
      -
      -

      network

      - -val network: MockNetwork
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/run-async.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/run-async.html deleted file mode 100644 index 0a5bf51b00..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/run-async.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Simulation.runAsync - - - - -com.r3corda.node.internal.testing / Simulation / runAsync
      -
      -

      runAsync

      - -val runAsync: Boolean
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/show-consensus-for.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/show-consensus-for.html deleted file mode 100644 index eb090e7bf1..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/show-consensus-for.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Simulation.showConsensusFor - - - - -com.r3corda.node.internal.testing / Simulation / showConsensusFor
      -
      -

      showConsensusFor

      - -protected fun showConsensusFor(nodes: List<SimulatedNode>): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/show-progress-for.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/show-progress-for.html deleted file mode 100644 index 6c8ab4506a..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/show-progress-for.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Simulation.showProgressFor - - - - -com.r3corda.node.internal.testing / Simulation / showProgressFor
      -
      -

      showProgressFor

      - -protected fun showProgressFor(nodes: List<SimulatedNode>): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/start-trading-circle.html b/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/start-trading-circle.html deleted file mode 100644 index 223b6e5e3f..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/start-trading-circle.html +++ /dev/null @@ -1,17 +0,0 @@ - - -Simulation.startTradingCircle - - - - -com.r3corda.node.internal.testing / Simulation / startTradingCircle
      -
      -

      startTradingCircle

      - -fun startTradingCircle(tradeBetween: (Int, Int) -> <ERROR CLASS><out <ERROR CLASS>>): Unit
      -

      Given a function that returns a future, iterates that function with arguments like (0, 1), (1, 2), (2, 3) etc -each time the returned future completes.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/-init-.html b/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/-init-.html deleted file mode 100644 index 3ac8967e5e..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TestClock.<init> - - - - -com.r3corda.node.internal.testing / TestClock / <init>
      -
      -

      <init>

      -TestClock(delegateClock: Clock = Clock.systemUTC())
      -

      A Clock that can have the time advanced for use in testing.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/advance-by.html b/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/advance-by.html deleted file mode 100644 index 194076736f..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/advance-by.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TestClock.advanceBy - - - - -com.r3corda.node.internal.testing / TestClock / advanceBy
      -
      -

      advanceBy

      - -fun advanceBy(duration: Duration): Unit
      -

      Advance this Clock by the specified Duration for testing purposes.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/get-zone.html b/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/get-zone.html deleted file mode 100644 index 2c6d2d156a..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/get-zone.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TestClock.getZone - - - - -com.r3corda.node.internal.testing / TestClock / getZone
      -
      -

      getZone

      - -fun getZone(): ZoneId
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/index.html b/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/index.html deleted file mode 100644 index 9f24fb22c9..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/index.html +++ /dev/null @@ -1,114 +0,0 @@ - - -TestClock - - - - -com.r3corda.node.internal.testing / TestClock
      -
      -

      TestClock

      -class TestClock : MutableClock, SerializeAsToken
      -

      A Clock that can have the time advanced for use in testing.

      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -TestClock(delegateClock: Clock = Clock.systemUTC())

      A Clock that can have the time advanced for use in testing.

      -
      -

      Inherited Properties

      - - - - - - - - - - - -
      -mutationCount -val mutationCount: Long

      This tracks how many direct mutations of "now" have occured for this Clock, but not the passage of time.

      -
      -mutations -val mutations: <ERROR CLASS><Long>

      This is an observer on the mutation count of this Clock, which reflects the occurence of mutations.

      -
      -

      Functions

      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -advanceBy -fun advanceBy(duration: Duration): Unit

      Advance this Clock by the specified Duration for testing purposes.

      -
      -getZone -fun getZone(): ZoneId
      -instant -fun instant(): Instant
      -setTo -fun setTo(newInstant: Instant): Unit

      Move this Clock to the specified Instant for testing purposes.

      -
      -toToken -fun toToken(context: SerializeAsTokenContext): SerializationToken
      -withZone -fun withZone(zone: ZoneId): Clock
      -

      Inherited Functions

      - - - - - - - -
      -notifyMutationObservers -fun notifyMutationObservers(): Unit

      Must be called by subclasses when they mutate (but not just with the passage of time as per the "wall clock").

      -
      -

      Extension Functions

      - - - - - - - -
      -awaitWithDeadline -fun Clock.awaitWithDeadline(deadline: Instant, future: Future<*> = SettableFuture<Any>()): Boolean

      Wait until the given Future is complete or the deadline is reached, with support for MutableClock implementations -used in demos or testing. This will also substitute a Fiber compatible Future if required.

      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/instant.html b/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/instant.html deleted file mode 100644 index 6c5b35d5b1..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/instant.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TestClock.instant - - - - -com.r3corda.node.internal.testing / TestClock / instant
      -
      -

      instant

      - -fun instant(): Instant
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/set-to.html b/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/set-to.html deleted file mode 100644 index a32ac32d5e..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/set-to.html +++ /dev/null @@ -1,19 +0,0 @@ - - -TestClock.setTo - - - - -com.r3corda.node.internal.testing / TestClock / setTo
      -
      -

      setTo

      - -fun setTo(newInstant: Instant): Unit
      -

      Move this Clock to the specified Instant for testing purposes.

      -

      This will only be approximate due to the time ticking away, but will be some time shortly after the requested Instant.

      -
      -
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/to-token.html b/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/to-token.html deleted file mode 100644 index a77b6817cd..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/to-token.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TestClock.toToken - - - - -com.r3corda.node.internal.testing / TestClock / toToken
      -
      -

      toToken

      - -fun toToken(context: SerializeAsTokenContext): SerializationToken
      -Overrides SerializeAsToken.toToken
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/with-zone.html b/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/with-zone.html deleted file mode 100644 index 17eb640a5c..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-test-clock/with-zone.html +++ /dev/null @@ -1,17 +0,0 @@ - - -TestClock.withZone - - - - -com.r3corda.node.internal.testing / TestClock / withZone
      -
      -

      withZone

      - -fun withZone(zone: ZoneId): Clock
      -Deprecated: Do not use this. Instead seek to use ZonedDateTime methods.
      -
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-trade-simulation/-init-.html b/docs/build/html/api/com.r3corda.node.internal.testing/-trade-simulation/-init-.html deleted file mode 100644 index f885d75e32..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-trade-simulation/-init-.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TradeSimulation.<init> - - - - -com.r3corda.node.internal.testing / TradeSimulation / <init>
      -
      -

      <init>

      -TradeSimulation(runAsync: Boolean, latencyInjector: LatencyCalculator?)
      -

      Simulates a never ending series of trades that go pair-wise through the banks (e.g. A and B trade with each other, -then B and C trade with each other, then C and A etc).

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/index.html b/docs/build/html/api/com.r3corda.node.internal.testing/index.html deleted file mode 100644 index cd799b6a74..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/index.html +++ /dev/null @@ -1,64 +0,0 @@ - - -com.r3corda.node.internal.testing - - - - -com.r3corda.node.internal.testing
      -
      -

      Package com.r3corda.node.internal.testing

      -

      Types

      - - - - - - - - - - - - - - - - - - - - - - - -
      -IRSSimulation -class IRSSimulation : Simulation

      A simulation in which banks execute interest rate swaps with each other, including the fixing events.

      -
      -MockNetwork -class MockNetwork

      A mock node brings up a suite of in-memory services in a fast manner suitable for unit testing. -Components that do IO are either swapped out for mocks, or pointed to a Jimfs in memory filesystem.

      -
      -Simulation -abstract class Simulation

      Base class for network simulations that are based on the unit test / mock environment.

      -
      -TestClock -class TestClock : MutableClock, SerializeAsToken

      A Clock that can have the time advanced for use in testing.

      -
      -TradeSimulation -class TradeSimulation : Simulation

      Simulates a never ending series of trades that go pair-wise through the banks (e.g. A and B trade with each other, -then B and C trade with each other, then C and A etc).

      -
      -

      Extensions for External Classes

      - - - - - - - -
      -kotlin.collections.Iterable -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/kotlin.collections.-iterable/index.html b/docs/build/html/api/com.r3corda.node.internal.testing/kotlin.collections.-iterable/index.html deleted file mode 100644 index db9b7c5779..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/kotlin.collections.-iterable/index.html +++ /dev/null @@ -1,23 +0,0 @@ - - -com.r3corda.node.internal.testing.kotlin.collections.Iterable - - - - -com.r3corda.node.internal.testing / kotlin.collections.Iterable
      -
      -

      Extensions for kotlin.collections.Iterable

      - - - - - - - -
      -setTo -fun Iterable<TestClock>.setTo(instant: Instant): <ERROR CLASS>

      A helper method to set several TestClocks to approximately the same time. The clocks may drift by the time it -takes for each TestClock to have its time set and any observers to execute.

      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/kotlin.collections.-iterable/set-to.html b/docs/build/html/api/com.r3corda.node.internal.testing/kotlin.collections.-iterable/set-to.html deleted file mode 100644 index 6a29e63fe4..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal.testing/kotlin.collections.-iterable/set-to.html +++ /dev/null @@ -1,17 +0,0 @@ - - -setTo - - - - -com.r3corda.node.internal.testing / kotlin.collections.Iterable / setTo
      -
      -

      setTo

      - -fun Iterable<TestClock>.setTo(instant: Instant): <ERROR CLASS>
      -

      A helper method to set several TestClocks to approximately the same time. The clocks may drift by the time it -takes for each TestClock to have its time set and any observers to execute.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/build-transaction.html b/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/build-transaction.html index c2fe93516f..023473b544 100644 --- a/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/build-transaction.html +++ b/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/build-transaction.html @@ -8,7 +8,7 @@

      buildTransaction

      -fun buildTransaction(type: ContractDefRef, steps: List<TransactionBuildStep>): SerializedBytes<WireTransaction>
      +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) diff --git a/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/commit-transaction.html b/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/commit-transaction.html index fdbbec913c..415670c8c8 100644 --- a/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/commit-transaction.html +++ b/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/commit-transaction.html @@ -7,8 +7,8 @@ com.r3corda.node.internal / APIServerImpl / commitTransaction

      commitTransaction

      - -fun commitTransaction(tx: SerializedBytes<WireTransaction>, signatures: List<WithKey>): SecureHash
      + +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/com.r3corda.node.internal/-a-p-i-server-impl/fetch-transactions.html b/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/fetch-transactions.html index aacea823fa..e6fabf8f42 100644 --- a/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/fetch-transactions.html +++ b/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/fetch-transactions.html @@ -8,7 +8,7 @@

      fetchTransactions

      -fun fetchTransactions(txs: List<SecureHash>): Map<SecureHash, SignedTransaction?>
      +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

      diff --git a/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/generate-transaction-signature.html b/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/generate-transaction-signature.html index 7d895e92e3..f1ca6d16c8 100644 --- a/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/generate-transaction-signature.html +++ b/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/generate-transaction-signature.html @@ -7,8 +7,8 @@ com.r3corda.node.internal / APIServerImpl / generateTransactionSignature

      generateTransactionSignature

      - -fun generateTransactionSignature(tx: SerializedBytes<WireTransaction>): WithKey
      + +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/com.r3corda.node.internal/-a-p-i-server-impl/index.html b/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/index.html index c010fb6f40..ffa654adf9 100644 --- a/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/index.html +++ b/docs/build/html/api/com.r3corda.node.internal/-a-p-i-server-impl/index.html @@ -39,7 +39,7 @@ buildTransaction -fun buildTransaction(type: ContractDefRef, steps: List<TransactionBuildStep>): SerializedBytes<WireTransaction>

      TransactionBuildSteps would be invocations of contract.generateXXX() methods that all share a common TransactionBuilder +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 (wed need that to be a criteria/pattern of the generateXXX methods).

      @@ -48,7 +48,7 @@ which would automatically be passed as the first argument (wed need that to be a 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 +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.

      @@ -69,14 +69,14 @@ successful, otherwise exception is thrown.

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

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

      +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.

      +fun generateTransactionSignature(tx: SerializedBytes<WireTransaction>): WithKey

      Generate a signature for this transaction signed by us.

      diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/-database-configuration-exception/-init-.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/-database-configuration-exception/-init-.html new file mode 100644 index 0000000000..673e78b911 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/-database-configuration-exception/-init-.html @@ -0,0 +1,14 @@ + + +AbstractNode.DatabaseConfigurationException.<init> - + + + +com.r3corda.node.internal / AbstractNode / DatabaseConfigurationException / <init>
      +
      +

      <init>

      +DatabaseConfigurationException(msg: String)
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/-database-configuration-exception/index.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/-database-configuration-exception/index.html new file mode 100644 index 0000000000..c0f88b885f --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/-database-configuration-exception/index.html @@ -0,0 +1,25 @@ + + +AbstractNode.DatabaseConfigurationException - + + + +com.r3corda.node.internal / AbstractNode / DatabaseConfigurationException
      +
      +

      DatabaseConfigurationException

      +class DatabaseConfigurationException : Exception
      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +DatabaseConfigurationException(msg: String)
      + + diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/-init-.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/-init-.html index 9e517d7de8..49018c31ee 100644 --- a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/-init-.html +++ b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/-init-.html @@ -7,7 +7,7 @@ com.r3corda.node.internal / AbstractNode / <init>

      <init>

      -AbstractNode(dir: Path, configuration: NodeConfiguration, networkMapService: NodeInfo?, advertisedServices: Set<ServiceType>, platformClock: Clock)
      +AbstractNode(configuration: NodeConfiguration, networkMapService: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, platformClock: Clock)

      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.

      Marked as SingletonSerializeAsToken to prevent the invisible reference to AbstractNode in the ServiceHub accidentally diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/close-on-stop.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/close-on-stop.html deleted file mode 100644 index 6e60ca21a5..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/close-on-stop.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractNode.closeOnStop - - - - -com.r3corda.node.internal / AbstractNode / closeOnStop
      -
      -

      closeOnStop

      - -protected val closeOnStop: ArrayList<Closeable>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/construct-storage-service.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/construct-storage-service.html index 84d5a540b5..1785eff762 100644 --- a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/construct-storage-service.html +++ b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/construct-storage-service.html @@ -8,7 +8,7 @@

      constructStorageService

      -protected open fun constructStorageService(attachments: NodeAttachmentService, transactionStorage: TransactionStorage, keypair: KeyPair, identity: Party): StorageServiceImpl
      +protected open fun constructStorageService(attachments: NodeAttachmentService, transactionStorage: TransactionStorage, keyPair: KeyPair, identity: Party): StorageServiceImpl


      diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/dir.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/dir.html deleted file mode 100644 index fee8d3f028..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/dir.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractNode.dir - - - - -com.r3corda.node.internal / AbstractNode / dir
      -
      -

      dir

      - -val dir: Path
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/in-node-monitor-service.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/in-node-monitor-service.html new file mode 100644 index 0000000000..25d3d5e89f --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/in-node-monitor-service.html @@ -0,0 +1,15 @@ + + +AbstractNode.inNodeMonitorService - + + + +com.r3corda.node.internal / AbstractNode / inNodeMonitorService
      +
      +

      inNodeMonitorService

      + +var inNodeMonitorService: NodeMonitorService?
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/in-node-wallet-monitor-service.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/in-node-wallet-monitor-service.html deleted file mode 100644 index e797fbd1a0..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/in-node-wallet-monitor-service.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractNode.inNodeWalletMonitorService - - - - -com.r3corda.node.internal / AbstractNode / inNodeWalletMonitorService
      -
      -

      inNodeWalletMonitorService

      - -var inNodeWalletMonitorService: WalletMonitorService?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/index.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/index.html index 69d07acaed..2e9d790f51 100644 --- a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/index.html +++ b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/index.html @@ -16,6 +16,17 @@ sweeping up the Node into the Kryo checkpoint serialization via any protocols ho


      +

      Exceptions

      + + + + + + + +
      +DatabaseConfigurationException +class DatabaseConfigurationException : Exception

      Constructors

      @@ -23,7 +34,7 @@ sweeping up the Node into the Kryo checkpoint serialization via any protocols ho @@ -58,12 +69,6 @@ I/O), or a mock implementation suitable for unit test environments.

      - - - - @@ -76,18 +81,18 @@ I/O), or a mock implementation suitable for unit test environments.

      - - - - + + + + @@ -100,12 +105,6 @@ I/O), or a mock implementation suitable for unit test environments.

      - - - - @@ -120,7 +119,7 @@ I/O), or a mock implementation suitable for unit test environments.

      +lateinit var keyManagement: KeyManagementService +val networkMapService: SingleMessageRecipient? + + + + @@ -223,9 +228,15 @@ I/O), or a mock implementation suitable for unit test environments.

      +uniquenessProvider +var uniquenessProvider: UniquenessProvider? + + + +
      <init> -AbstractNode(dir: Path, configuration: NodeConfiguration, networkMapService: NodeInfo?, advertisedServices: Set<ServiceType>, platformClock: Clock)

      A base node implementation that can be customised either for production (with real implementations that do real +AbstractNode(configuration: NodeConfiguration, networkMapService: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, platformClock: Clock)

      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.

      -closeOnStop -val closeOnStop: ArrayList<Closeable>
      configuration val configuration: NodeConfiguration
      -dir -val dir: Path
      identity lateinit var identity: IdentityService
      +inNodeMonitorService +var inNodeMonitorService: NodeMonitorService?
      inNodeNetworkMapService var inNodeNetworkMapService: NetworkMapService?
      -inNodeWalletMonitorService -var inNodeWalletMonitorService: WalletMonitorService?
      info val info: NodeInfo keyManagement -lateinit var keyManagement: E2ETestKeyManagementService
      @@ -157,7 +156,7 @@ I/O), or a mock implementation suitable for unit test environments.

      networkMapService -val networkMapService: NodeInfo?
      @@ -180,6 +179,12 @@ I/O), or a mock implementation suitable for unit test environments.

      +runOnStop +val runOnStop: ArrayList<Runnable>
      scheduler lateinit var scheduler: SchedulerService
      -wallet -lateinit var wallet: WalletService
      +vault +lateinit var vault: VaultService
      @@ -236,7 +247,7 @@ I/O), or a mock implementation suitable for unit test environments.

      constructStorageService -open fun constructStorageService(attachments: NodeAttachmentService, transactionStorage: TransactionStorage, keypair: KeyPair, identity: Party): StorageServiceImpl +open fun constructStorageService(attachments: NodeAttachmentService, transactionStorage: TransactionStorage, keyPair: KeyPair, identity: Party): StorageServiceImpl @@ -265,6 +276,12 @@ I/O), or a mock implementation suitable for unit test environments.

      +initialiseDatabasePersistence + +open fun initialiseDatabasePersistence(insideTransaction: () -> Unit): Unit + + + initialiseStorageService open fun initialiseStorageService(dir: Path): <ERROR CLASS><TxWritableStorageService, CheckpointStorage> @@ -283,12 +300,24 @@ I/O), or a mock implementation suitable for unit test environments.

      +makeKeyManagementService + +open fun makeKeyManagementService(): KeyManagementService + + + makeMessagingService abstract fun makeMessagingService(): MessagingServiceInternal +makeMonitorService + +open fun makeMonitorService(): NodeMonitorService + + + makeNetworkMapService open fun makeNetworkMapService(): Unit @@ -301,15 +330,15 @@ I/O), or a mock implementation suitable for unit test environments.

      -makeWalletMonitorService +makeUniquenessProvider -open fun makeWalletMonitorService(): WalletMonitorService +abstract fun makeUniquenessProvider(): UniquenessProvider -makeWalletService +makeVaultService -open fun makeWalletService(): WalletService +open fun makeVaultService(): VaultService @@ -378,12 +407,6 @@ I/O), or a mock implementation suitable for unit test environments.

      -MockNode - -class MockNode : AbstractNode - - - Node class Node : AbstractNode

      A Node manages a standalone server that takes part in the P2P network. It creates the services found in ServiceHub, diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/initialise-database-persistence.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/initialise-database-persistence.html new file mode 100644 index 0000000000..32a2c76a12 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/initialise-database-persistence.html @@ -0,0 +1,15 @@ + + +AbstractNode.initialiseDatabasePersistence - + + + +com.r3corda.node.internal / AbstractNode / initialiseDatabasePersistence
      +
      +

      initialiseDatabasePersistence

      + +protected open fun initialiseDatabasePersistence(insideTransaction: () -> Unit): Unit
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/interest-rates-service.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/interest-rates-service.html deleted file mode 100644 index 19ca592d80..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/interest-rates-service.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractNode.interestRatesService - - - - -com.r3corda.node.internal / AbstractNode / interestRatesService
      -
      -

      interestRatesService

      - -lateinit var interestRatesService: Service
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/key-management.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/key-management.html index 9d82192c02..21b21e645a 100644 --- a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/key-management.html +++ b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/key-management.html @@ -8,7 +8,7 @@

      keyManagement

      -lateinit var keyManagement: E2ETestKeyManagementService
      +lateinit var keyManagement: KeyManagementService


      diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-interest-rates-oracle-service.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-interest-rates-oracle-service.html deleted file mode 100644 index 531df1e125..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-interest-rates-oracle-service.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractNode.makeInterestRatesOracleService - - - - -com.r3corda.node.internal / AbstractNode / makeInterestRatesOracleService
      -
      -

      makeInterestRatesOracleService

      - -protected open fun makeInterestRatesOracleService(): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-wallet-monitor-service.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-key-management-service.html similarity index 50% rename from docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-wallet-monitor-service.html rename to docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-key-management-service.html index b2553e3e39..1d57a2733f 100644 --- a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-wallet-monitor-service.html +++ b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-key-management-service.html @@ -1,14 +1,14 @@ -AbstractNode.makeWalletMonitorService - +AbstractNode.makeKeyManagementService - -com.r3corda.node.internal / AbstractNode / makeWalletMonitorService
      +com.r3corda.node.internal / AbstractNode / makeKeyManagementService

      -

      makeWalletMonitorService

      - -protected open fun makeWalletMonitorService(): WalletMonitorService
      +

      makeKeyManagementService

      + +protected open fun makeKeyManagementService(): KeyManagementService


      diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-monitor-service.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-monitor-service.html new file mode 100644 index 0000000000..a7f424256a --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-monitor-service.html @@ -0,0 +1,15 @@ + + +AbstractNode.makeMonitorService - + + + +com.r3corda.node.internal / AbstractNode / makeMonitorService
      +
      +

      makeMonitorService

      + +protected open fun makeMonitorService(): NodeMonitorService
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-uniqueness-provider.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-uniqueness-provider.html new file mode 100644 index 0000000000..ec4bb1f739 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-uniqueness-provider.html @@ -0,0 +1,15 @@ + + +AbstractNode.makeUniquenessProvider - + + + +com.r3corda.node.internal / AbstractNode / makeUniquenessProvider
      +
      +

      makeUniquenessProvider

      + +protected abstract fun makeUniquenessProvider(): UniquenessProvider
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-vault-service.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-vault-service.html new file mode 100644 index 0000000000..01343b4792 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-vault-service.html @@ -0,0 +1,15 @@ + + +AbstractNode.makeVaultService - + + + +com.r3corda.node.internal / AbstractNode / makeVaultService
      +
      +

      makeVaultService

      + +protected open fun makeVaultService(): VaultService
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-wallet-service.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-wallet-service.html deleted file mode 100644 index 58f58f3b67..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/make-wallet-service.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractNode.makeWalletService - - - - -com.r3corda.node.internal / AbstractNode / makeWalletService
      -
      -

      makeWalletService

      - -protected open fun makeWalletService(): WalletService
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/network-map-service.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/network-map-service.html index 0c22a94488..8e60df57ab 100644 --- a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/network-map-service.html +++ b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/network-map-service.html @@ -8,7 +8,7 @@

      networkMapService

      -val networkMapService: NodeInfo?
      +val networkMapService: SingleMessageRecipient?


      diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/run-on-stop.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/run-on-stop.html new file mode 100644 index 0000000000..42d0d26f5a --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/run-on-stop.html @@ -0,0 +1,15 @@ + + +AbstractNode.runOnStop - + + + +com.r3corda.node.internal / AbstractNode / runOnStop
      +
      +

      runOnStop

      + +protected val runOnStop: ArrayList<Runnable>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/uniqueness-provider.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/uniqueness-provider.html new file mode 100644 index 0000000000..4445bd632c --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/uniqueness-provider.html @@ -0,0 +1,15 @@ + + +AbstractNode.uniquenessProvider - + + + +com.r3corda.node.internal / AbstractNode / uniquenessProvider
      +
      +

      uniquenessProvider

      + +var uniquenessProvider: UniquenessProvider?
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/vault.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/vault.html new file mode 100644 index 0000000000..67a8cf6f0f --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/vault.html @@ -0,0 +1,15 @@ + + +AbstractNode.vault - + + + +com.r3corda.node.internal / AbstractNode / vault
      +
      +

      vault

      + +lateinit var vault: VaultService
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/wallet.html b/docs/build/html/api/com.r3corda.node.internal/-abstract-node/wallet.html deleted file mode 100644 index 2d9fd50772..0000000000 --- a/docs/build/html/api/com.r3corda.node.internal/-abstract-node/wallet.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractNode.wallet - - - - -com.r3corda.node.internal / AbstractNode / wallet
      -
      -

      wallet

      - -lateinit var wallet: WalletService
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.internal/-node/-init-.html b/docs/build/html/api/com.r3corda.node.internal/-node/-init-.html index 0c38ab03cb..0481bd223a 100644 --- a/docs/build/html/api/com.r3corda.node.internal/-node/-init-.html +++ b/docs/build/html/api/com.r3corda.node.internal/-node/-init-.html @@ -7,7 +7,7 @@ com.r3corda.node.internal / Node / <init>

      <init>

      -Node(dir: Path, p2pAddr: <ERROR CLASS>, webServerAddr: <ERROR CLASS>, configuration: NodeConfiguration, networkMapAddress: NodeInfo?, advertisedServices: Set<ServiceType>, clock: Clock = NodeClock(), messagingServerAddr: <ERROR CLASS>? = null)
      +Node(p2pAddr: <ERROR CLASS>, webServerAddr: <ERROR CLASS>, configuration: NodeConfiguration, networkMapAddress: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, clock: Clock = NodeClock(), messagingServerAddr: <ERROR CLASS>? = null)

      A Node manages a standalone server that takes part in the P2P network. It creates the services found in ServiceHub, loads important data off disk and starts listening for connections.

      Parameters

      diff --git a/docs/build/html/api/com.r3corda.node.internal/-node/index.html b/docs/build/html/api/com.r3corda.node.internal/-node/index.html index e78678d4c3..2bbc8f87fc 100644 --- a/docs/build/html/api/com.r3corda.node.internal/-node/index.html +++ b/docs/build/html/api/com.r3corda.node.internal/-node/index.html @@ -43,7 +43,7 @@ but nodes are not required to advertise services they run (hence subset).
      <init> -Node(dir: Path, p2pAddr: <ERROR CLASS>, webServerAddr: <ERROR CLASS>, configuration: NodeConfiguration, networkMapAddress: NodeInfo?, advertisedServices: Set<ServiceType>, clock: Clock = NodeClock(), messagingServerAddr: <ERROR CLASS>? = null)

      A Node manages a standalone server that takes part in the P2P network. It creates the services found in ServiceHub, +Node(p2pAddr: <ERROR CLASS>, webServerAddr: <ERROR CLASS>, configuration: NodeConfiguration, networkMapAddress: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, clock: Clock = NodeClock(), messagingServerAddr: <ERROR CLASS>? = null)

      A Node manages a standalone server that takes part in the P2P network. It creates the services found in ServiceHub, loads important data off disk and starts listening for connections.

      @@ -125,12 +125,6 @@ loads important data off disk and starts listening for connections.

      -closeOnStop - -val closeOnStop: ArrayList<Closeable> - - - configuration val configuration: NodeConfiguration @@ -143,18 +137,18 @@ loads important data off disk and starts listening for connections.

      -dir - -val dir: Path - - - identity lateinit var identity: IdentityService +inNodeMonitorService + +var inNodeMonitorService: NodeMonitorService? + + + inNodeNetworkMapService var inNodeNetworkMapService: NetworkMapService? @@ -167,12 +161,6 @@ loads important data off disk and starts listening for connections.

      -inNodeWalletMonitorService - -var inNodeWalletMonitorService: WalletMonitorService? - - - info val info: NodeInfo @@ -187,7 +175,7 @@ loads important data off disk and starts listening for connections.

      keyManagement -lateinit var keyManagement: E2ETestKeyManagementService +lateinit var keyManagement: KeyManagementService @@ -218,7 +206,7 @@ loads important data off disk and starts listening for connections.

      networkMapService -val networkMapService: NodeInfo? +val networkMapService: SingleMessageRecipient? @@ -241,6 +229,12 @@ loads important data off disk and starts listening for connections.

      +runOnStop + +val runOnStop: ArrayList<Runnable> + + + scheduler lateinit var scheduler: SchedulerService @@ -278,9 +272,15 @@ loads important data off disk and starts listening for connections.

      -wallet +uniquenessProvider -lateinit var wallet: WalletService +var uniquenessProvider: UniquenessProvider? + + + +vault + +lateinit var vault: VaultService @@ -295,6 +295,12 @@ loads important data off disk and starts listening for connections.

      +makeUniquenessProvider + +fun makeUniquenessProvider(): PersistentUniquenessProvider + + + run fun run(): Unit

      Starts a blocking event loop for message dispatch.

      @@ -334,7 +340,7 @@ loads important data off disk and starts listening for connections.

      constructStorageService -open fun constructStorageService(attachments: NodeAttachmentService, transactionStorage: TransactionStorage, keypair: KeyPair, identity: Party): StorageServiceImpl +open fun constructStorageService(attachments: NodeAttachmentService, transactionStorage: TransactionStorage, keyPair: KeyPair, identity: Party): StorageServiceImpl @@ -363,6 +369,12 @@ loads important data off disk and starts listening for connections.

      +initialiseDatabasePersistence + +open fun initialiseDatabasePersistence(insideTransaction: () -> Unit): Unit + + + initialiseStorageService open fun initialiseStorageService(dir: Path): <ERROR CLASS><TxWritableStorageService, CheckpointStorage> @@ -381,6 +393,18 @@ loads important data off disk and starts listening for connections.

      +makeKeyManagementService + +open fun makeKeyManagementService(): KeyManagementService + + + +makeMonitorService + +open fun makeMonitorService(): NodeMonitorService + + + makeNetworkMapService open fun makeNetworkMapService(): Unit @@ -393,15 +417,9 @@ loads important data off disk and starts listening for connections.

      -makeWalletMonitorService +makeVaultService -open fun makeWalletMonitorService(): WalletMonitorService - - - -makeWalletService - -open fun makeWalletService(): WalletService +open fun makeVaultService(): VaultService diff --git a/docs/build/html/api/com.r3corda.node.internal/-node/make-uniqueness-provider.html b/docs/build/html/api/com.r3corda.node.internal/-node/make-uniqueness-provider.html new file mode 100644 index 0000000000..b79a1b83bc --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.internal/-node/make-uniqueness-provider.html @@ -0,0 +1,16 @@ + + +Node.makeUniquenessProvider - + + + +com.r3corda.node.internal / Node / makeUniquenessProvider
      +
      +

      makeUniquenessProvider

      + +protected fun makeUniquenessProvider(): PersistentUniquenessProvider
      +Overrides AbstractNode.makeUniquenessProvider
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.internal/-server-r-p-c-ops/-init-.html b/docs/build/html/api/com.r3corda.node.internal/-server-r-p-c-ops/-init-.html new file mode 100644 index 0000000000..833ec8169d --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.internal/-server-r-p-c-ops/-init-.html @@ -0,0 +1,16 @@ + + +ServerRPCOps.<init> - + + + +com.r3corda.node.internal / ServerRPCOps / <init>
      +
      +

      <init>

      +ServerRPCOps(services: ServiceHubInternal)
      +

      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.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.internal/-server-r-p-c-ops/index.html b/docs/build/html/api/com.r3corda.node.internal/-server-r-p-c-ops/index.html new file mode 100644 index 0000000000..b8247bfea4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.internal/-server-r-p-c-ops/index.html @@ -0,0 +1,41 @@ + + +ServerRPCOps - + + + +com.r3corda.node.internal / ServerRPCOps
      +
      +

      ServerRPCOps

      +class ServerRPCOps : CordaRPCOps
      +

      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.

      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +ServerRPCOps(services: ServiceHubInternal)

      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.

      +
      +

      Properties

      + + + + + + + +
      +protocolVersion +val protocolVersion: Int

      Returns the RPC protocol version. Exists since version 0 so guaranteed to be present.

      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.internal/-server-r-p-c-ops/protocol-version.html b/docs/build/html/api/com.r3corda.node.internal/-server-r-p-c-ops/protocol-version.html new file mode 100644 index 0000000000..0918224ddf --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.internal/-server-r-p-c-ops/protocol-version.html @@ -0,0 +1,17 @@ + + +ServerRPCOps.protocolVersion - + + + +com.r3corda.node.internal / ServerRPCOps / protocolVersion
      +
      +

      protocolVersion

      + +val protocolVersion: Int
      +Overrides RPCOps.protocolVersion
      +

      Returns the RPC protocol version. Exists since version 0 so guaranteed to be present.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.internal/index.html b/docs/build/html/api/com.r3corda.node.internal/index.html index 4f0ffcaf58..4423a1f414 100644 --- a/docs/build/html/api/com.r3corda.node.internal/index.html +++ b/docs/build/html/api/com.r3corda.node.internal/index.html @@ -32,6 +32,14 @@ I/O), or a mock implementation suitable for unit test environments.

      loads important data off disk and starts listening for connections.

      + + +ServerRPCOps + +class ServerRPCOps : CordaRPCOps

      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.

      + +

      Exceptions

      diff --git a/docs/build/html/api/com.r3corda.node.serialization/-node-clock/index.html b/docs/build/html/api/com.r3corda.node.serialization/-node-clock/index.html index 8efdcad195..b88c01b779 100644 --- a/docs/build/html/api/com.r3corda.node.serialization/-node-clock/index.html +++ b/docs/build/html/api/com.r3corda.node.serialization/-node-clock/index.html @@ -59,8 +59,8 @@ awaitWithDeadline -fun Clock.awaitWithDeadline(deadline: Instant, future: Future<*> = SettableFuture<Any>()): Boolean

      Wait until the given Future is complete or the deadline is reached, with support for MutableClock implementations -used in demos or testing. This will also substitute a Fiber compatible Future if required.

      +fun Clock.awaitWithDeadline(deadline: Instant, future: Future<*> = GuavaSettableFuture.create<Any>()): Boolean

      Wait until the given Future is complete or the deadline is reached, with support for MutableClock implementations +used in demos or testing. This will substitute a Fiber compatible Future so the current Strand is not blocked.

      diff --git a/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/-init-.html b/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/-init-.html index 3e66ba201a..1e388f527a 100644 --- a/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/-init-.html +++ b/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/-init-.html @@ -7,7 +7,7 @@ com.r3corda.node.services.api / AbstractNodeService / <init>

      <init>

      -AbstractNodeService(net: MessagingService, networkMapCache: NetworkMapCache)
      +AbstractNodeService(services: ServiceHubInternal)

      Abstract superclass for services that a node can host, which provides helper functions.



      diff --git a/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/add-message-handler.html b/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/add-message-handler.html index 8a05a294e6..20dc16e89e 100644 --- a/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/add-message-handler.html +++ b/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/add-message-handler.html @@ -8,7 +8,7 @@

      addMessageHandler

      -protected inline fun <reified Q : ServiceRequestMessage, reified R : Any> addMessageHandler(topic: String, crossinline handler: (Q) -> R, crossinline exceptionConsumer: (Message, Exception) -> Unit): Unit
      +protected inline fun <reified Q : ServiceRequestMessage, reified R : Any> addMessageHandler(topic: String, crossinline handler: (Q) -> R, crossinline exceptionConsumer: (Message, Exception) -> Unit): MessageHandlerRegistration

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of common boilerplate code. Exceptions are caught and passed to the provided consumer. If you just want a simple acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      @@ -24,7 +24,7 @@ acknowledgement response with no content, use com.r3corda.core.messa

      -protected inline fun <reified Q : ServiceRequestMessage, reified R : Any> addMessageHandler(topic: String, crossinline handler: (Q) -> R): Unit
      +protected inline fun <reified Q : ServiceRequestMessage, reified R : Any> addMessageHandler(topic: String, crossinline handler: (Q) -> R): MessageHandlerRegistration

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of common boilerplate code. Exceptions are propagated to the messaging layer. If you just want a simple acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      diff --git a/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/add-protocol-handler.html b/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/add-protocol-handler.html new file mode 100644 index 0000000000..10c3803b8c --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/add-protocol-handler.html @@ -0,0 +1,33 @@ + + +AbstractNodeService.addProtocolHandler - + + + +com.r3corda.node.services.api / AbstractNodeService / addProtocolHandler
      +
      +

      addProtocolHandler

      + +protected inline fun <reified H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, crossinline protocolFactory: (H) -> ProtocolLogic<R>, crossinline onResultFuture: (<ERROR CLASS><R>, H) -> Unit): Unit
      +

      Register a handler to kick-off a protocol when a HandshakeMessage is received by the node. This performs the +necessary steps to enable communication between the two protocols, including calling ProtocolLogic.registerSession.

      +

      Parameters

      + +topic - the topic on which the handshake is sent from the other party
      +
      + +loggerName - the logger name to use when starting the protocol
      +
      + +protocolFactory - a function to create the protocol with the given handshake message
      +
      + +onResultFuture - provides access to the ListenableFuture when the protocol starts
      +
      +
      + +protected inline fun <reified H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, crossinline protocolFactory: (H) -> ProtocolLogic<R>): Unit
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/index.html b/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/index.html index 08f52ce221..ad4acc4df9 100644 --- a/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/index.html +++ b/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/index.html @@ -18,7 +18,7 @@ <init> -AbstractNodeService(net: MessagingService, networkMapCache: NetworkMapCache)

      Abstract superclass for services that a node can host, which provides helper functions.

      +AbstractNodeService(services: ServiceHubInternal)

      Abstract superclass for services that a node can host, which provides helper functions.

      @@ -30,13 +30,13 @@ net -val net: MessagingService +val net: MessagingServiceInternal -networkMapCache +services -val networkMapCache: NetworkMapCache +val services: ServiceHubInternal @@ -47,14 +47,22 @@ addMessageHandler -fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): Unit

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): MessageHandlerRegistration

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of common boilerplate code. Exceptions are caught and passed to the provided consumer. If you just want a simple acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      -fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): Unit

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): MessageHandlerRegistration

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of common boilerplate code. Exceptions are propagated to the messaging layer. If you just want a simple acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      + + +addProtocolHandler + +fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>, onResultFuture: (<ERROR CLASS><R>, H) -> Unit): Unit

      Register a handler to kick-off a protocol when a HandshakeMessage is received by the node. This performs the +necessary steps to enable communication between the two protocols, including calling ProtocolLogic.registerSession.

      +fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>): Unit +

      Inherited Functions

      @@ -68,14 +76,35 @@ acknowledgement response with no content, use com.r3corda.core.messa +

      Companion Object Properties

      + + + + + + + +
      +logger +val logger: <ERROR CLASS>

      Inheritors

      +AbstractNetworkMapService +abstract class AbstractNetworkMapService : NetworkMapService, AbstractNodeService

      Abstracted out core functionality as the basis for a persistent implementation, as well as existing in-memory implementation.

      + + + + + +Service +class Service : AbstractNodeService +Service + + + +
      -InMemoryNetworkMapService -class InMemoryNetworkMapService : NetworkMapService, AbstractNodeService
      +NodeMonitorService +class NodeMonitorService : AbstractNodeService

      Service which allows external clients to monitor the nodes vault and state machine manager, as well as trigger +actions within the node. The service also sends requests for user input back to clients, for example to enter +additional information while a protocol runs, or confirm an action.

      +
      @@ -86,10 +115,9 @@ acknowledgement response with no content, use com.r3corda.core.messa
      -Service -class Service : AcceptsFileUpload, AbstractNodeService

      The Service that wraps Oracle and handles messages/network interaction/request scrubbing.

      -
      @@ -109,13 +137,17 @@ glue that sits between the network layer and the database layer.

      -WalletMonitorService -class WalletMonitorService : AbstractNodeService

      Service which allows external clients to monitor the wallet service and state machine manager, as well as trigger -actions within the node. The service also sends requests for user input back to clients, for example to enter -additional information while a protocol runs, or confirm an action.

      +class Service : AcceptsFileUpload, AbstractNodeService

      The Service that wraps Oracle and handles messages/network interaction/request scrubbing.

      +Service +class Service : AbstractNodeService
      diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/logger.html b/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/logger.html similarity index 50% rename from docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/logger.html rename to docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/logger.html index 12a0bd2806..cea3043aba 100644 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/logger.html +++ b/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/logger.html @@ -1,13 +1,13 @@ -DataVendingService.logger - +AbstractNodeService.logger - -com.r3corda.node.services.persistence / DataVendingService / logger
      +com.r3corda.node.services.api / AbstractNodeService / logger

      logger

      - + val logger: <ERROR CLASS>


      diff --git a/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/net.html b/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/net.html index e96d9ce353..0309dd3d7c 100644 --- a/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/net.html +++ b/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/net.html @@ -8,7 +8,7 @@

      net

      -val net: MessagingService
      +val net: MessagingServiceInternal


      diff --git a/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/network-map-cache.html b/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/network-map-cache.html deleted file mode 100644 index aa82cd1246..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/network-map-cache.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractNodeService.networkMapCache - - - - -com.r3corda.node.services.api / AbstractNodeService / networkMapCache
      -
      -

      networkMapCache

      - -val networkMapCache: NetworkMapCache
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/services.html b/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/services.html new file mode 100644 index 0000000000..21d9c4bd94 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.api/-abstract-node-service/services.html @@ -0,0 +1,15 @@ + + +AbstractNodeService.services - + + + +com.r3corda.node.services.api / AbstractNodeService / services
      +
      +

      services

      + +val services: ServiceHubInternal
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.api/-accepts-file-upload/index.html b/docs/build/html/api/com.r3corda.node.services.api/-accepts-file-upload/index.html index 28574e44fd..cecda59bbe 100644 --- a/docs/build/html/api/com.r3corda.node.services.api/-accepts-file-upload/index.html +++ b/docs/build/html/api/com.r3corda.node.services.api/-accepts-file-upload/index.html @@ -58,9 +58,9 @@ back to the user in the response.

      -Service +Service -class Service : AcceptsFileUpload, AbstractNodeService

      The Service that wraps Oracle and handles messages/network interaction/request scrubbing.

      +class Service : AcceptsFileUpload, AbstractNodeService

      The Service that wraps Oracle and handles messages/network interaction/request scrubbing.

      diff --git a/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/-init-.html b/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/-init-.html index eab90e23e2..aa3c438192 100644 --- a/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/-init-.html +++ b/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/-init-.html @@ -7,7 +7,7 @@ com.r3corda.node.services.api / Checkpoint / <init>

      <init>

      -Checkpoint(serialisedFiber: SerializedBytes<ProtocolStateMachineImpl<*>>, request: FiberRequest?)
      +Checkpoint(serialisedFiber: SerializedBytes<ProtocolStateMachineImpl<*>>, request: ProtocolIORequest?, receivedPayload: Any?)


      diff --git a/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/awaiting-payload-type.html b/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/awaiting-payload-type.html deleted file mode 100644 index aabefd9839..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/awaiting-payload-type.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Checkpoint.awaitingPayloadType - - - - -com.r3corda.node.services.api / Checkpoint / awaitingPayloadType
      -
      -

      awaitingPayloadType

      - -val awaitingPayloadType: String?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/awaiting-topic.html b/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/awaiting-topic.html deleted file mode 100644 index b72d6c5115..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/awaiting-topic.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Checkpoint.awaitingTopic - - - - -com.r3corda.node.services.api / Checkpoint / awaitingTopic
      -
      -

      awaitingTopic

      - -val awaitingTopic: String?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/fiber-created.html b/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/fiber-created.html new file mode 100644 index 0000000000..ae93cb052d --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/fiber-created.html @@ -0,0 +1,15 @@ + + +Checkpoint.fiberCreated - + + + +com.r3corda.node.services.api / Checkpoint / fiberCreated
      +
      +

      fiberCreated

      + +var fiberCreated: Boolean
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/index.html b/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/index.html index 67c2e27ba3..a2bf3807c5 100644 --- a/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/index.html +++ b/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/index.html @@ -17,7 +17,7 @@ <init> -Checkpoint(serialisedFiber: SerializedBytes<ProtocolStateMachineImpl<*>>, request: FiberRequest?) +Checkpoint(serialisedFiber: SerializedBytes<ProtocolStateMachineImpl<*>>, request: ProtocolIORequest?, receivedPayload: Any?) @@ -26,9 +26,21 @@ +fiberCreated + +var fiberCreated: Boolean + + + +receivedPayload + +val receivedPayload: Any? + + + request -val request: FiberRequest? +val request: ProtocolIORequest? diff --git a/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/request.html b/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/request.html index 0e70ba857c..ac2243806d 100644 --- a/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/request.html +++ b/docs/build/html/api/com.r3corda.node.services.api/-checkpoint/request.html @@ -8,7 +8,7 @@

      request

      -val request: FiberRequest?
      +val request: ProtocolIORequest?


      diff --git a/docs/build/html/api/com.r3corda.node.services.api/-messaging-service-builder/index.html b/docs/build/html/api/com.r3corda.node.services.api/-messaging-service-builder/index.html index 66d6ca6eb1..70d32614b9 100644 --- a/docs/build/html/api/com.r3corda.node.services.api/-messaging-service-builder/index.html +++ b/docs/build/html/api/com.r3corda.node.services.api/-messaging-service-builder/index.html @@ -29,16 +29,5 @@ it up.

      -

      Inheritors

      - - - - - - - -
      -Builder -inner class Builder : MessagingServiceBuilder<InMemoryMessaging>
      diff --git a/docs/build/html/api/com.r3corda.node.services.api/-messaging-service-internal/index.html b/docs/build/html/api/com.r3corda.node.services.api/-messaging-service-internal/index.html index 1d4dc3ab52..d622fedda9 100644 --- a/docs/build/html/api/com.r3corda.node.services.api/-messaging-service-internal/index.html +++ b/docs/build/html/api/com.r3corda.node.services.api/-messaging-service-internal/index.html @@ -108,20 +108,11 @@ doesnt take the registration object, unlike the callback to ArtemisMessagingClient +NodeMessagingClient -class ArtemisMessagingClient : ArtemisMessagingComponent, MessagingServiceInternal

      This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. +class NodeMessagingClient : ArtemisMessagingComponent, MessagingServiceInternal

      This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. Artemis is a message queue broker and here we run a client connecting to the specified broker instance -ArtemisMessagingServer.

      - - - - -InMemoryMessaging - -inner class InMemoryMessaging : SingletonSerializeAsToken, MessagingServiceInternal

      An InMemoryMessaging provides a MessagingService that isnt backed by any kind of network or disk storage -system, but just uses regular queues on the heap instead. It is intended for unit testing and developer convenience -when all entities on the network are being simulated in-process.

      +ArtemisMessagingServer. Its primarily concerned with peer-to-peer messaging.

      diff --git a/docs/build/html/api/com.r3corda.node.services.api/-messaging-service-internal/register-trusted-address.html b/docs/build/html/api/com.r3corda.node.services.api/-messaging-service-internal/register-trusted-address.html deleted file mode 100644 index 3b5671969f..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.api/-messaging-service-internal/register-trusted-address.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MessagingServiceInternal.registerTrustedAddress - - - - -com.r3corda.node.services.api / MessagingServiceInternal / registerTrustedAddress
      -
      -

      registerTrustedAddress

      - -abstract fun registerTrustedAddress(address: SingleMessageRecipient): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.api/-service-hub-internal/index.html b/docs/build/html/api/com.r3corda.node.services.api/-service-hub-internal/index.html index 5166ca14f5..f011960c24 100644 --- a/docs/build/html/api/com.r3corda.node.services.api/-service-hub-internal/index.html +++ b/docs/build/html/api/com.r3corda.node.services.api/-service-hub-internal/index.html @@ -85,9 +85,9 @@ -walletService +vaultService -abstract val walletService: WalletService +abstract val vaultService: VaultService @@ -126,10 +126,10 @@ itself, at which point this method would not be needed (by the scheduler).

      recordTransactions -abstract fun recordTransactions(txs: Iterable<SignedTransaction>): Unit

      Given a list of SignedTransactions, writes them to the local storage for validated transactions and then -sends them to the wallet for further processing.

      -open fun recordTransactions(vararg txs: SignedTransaction): <ERROR CLASS>

      Given some SignedTransactions, writes them to the local storage for validated transactions and then -sends them to the wallet for further processing.

      +abstract fun recordTransactions(txs: Iterable<SignedTransaction>): Unit

      Given a list of SignedTransactions, writes them to the local storage for validated transactions and then +sends them to the vault for further processing.

      +open fun recordTransactions(vararg txs: SignedTransaction): <ERROR CLASS>

      Given some SignedTransactions, writes them to the local storage for validated transactions and then +sends them to the vault for further processing.

      @@ -141,8 +141,8 @@ sends them to the wallet for further processing.

      fillWithSomeTestCash -fun ServiceHub.fillWithSomeTestCash(howMuch: Amount<Currency>, outputNotary: Party = DUMMY_NOTARY, atLeastThisManyStates: Int = 3, atMostThisManyStates: Int = 10, rng: Random = Random(), ref: OpaqueBytes = OpaqueBytes(ByteArray(1, { 1 })), ownedBy: PublicKey? = null): Wallet

      Creates a random set of between (by default) 3 and 10 cash states that add up to the given amount and adds them -to the wallet. This is intended for unit tests. The cash is issued by DUMMY_CASH_ISSUER and owned by the legal +fun ServiceHub.fillWithSomeTestCash(howMuch: Amount<Currency>, outputNotary: Party = DUMMY_NOTARY, atLeastThisManyStates: Int = 3, atMostThisManyStates: Int = 10, rng: Random = Random(), ref: OpaqueBytes = OpaqueBytes(ByteArray(1, { 1 })), ownedBy: PublicKey? = null): Vault

      Creates a random set of between (by default) 3 and 10 cash states that add up to the given amount and adds them +to the vault. This is intended for unit tests. The cash is issued by DUMMY_CASH_ISSUER and owned by the legal identity key from the storage service.

      diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-fixing-session-initiation/-service/index.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-fixing-session-initiation/-service/index.html index 5b93080ebe..8d7dfe111f 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-fixing-session-initiation/-service/index.html +++ b/docs/build/html/api/com.r3corda.node.services.clientapi/-fixing-session-initiation/-service/index.html @@ -7,7 +7,7 @@ com.r3corda.node.services.clientapi / FixingSessionInitiation / Service

      Service

      -class Service
      +class Service : AbstractNodeService


      Constructors

      @@ -21,5 +21,47 @@ +

      Inherited Properties

      + + + + + + + + + + + +
      +net +val net: MessagingServiceInternal
      +services +val services: ServiceHubInternal
      +

      Inherited Functions

      + + + + + + + + + + + +
      +addMessageHandler +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): MessageHandlerRegistration

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +common boilerplate code. Exceptions are caught and passed to the provided consumer. If you just want a simple +acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): MessageHandlerRegistration

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +common boilerplate code. Exceptions are propagated to the messaging layer. If you just want a simple +acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      +
      +addProtocolHandler +fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>, onResultFuture: (<ERROR CLASS><R>, H) -> Unit): Unit

      Register a handler to kick-off a protocol when a HandshakeMessage is received by the node. This performs the +necessary steps to enable communication between the two protocols, including calling ProtocolLogic.registerSession.

      +fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>): Unit
      diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-fixing-session-initiation/index.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-fixing-session-initiation/index.html index a2b3efd882..b070e64b64 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-fixing-session-initiation/index.html +++ b/docs/build/html/api/com.r3corda.node.services.clientapi/-fixing-session-initiation/index.html @@ -28,7 +28,7 @@ running scheduled fixings for the InterestRateSwap contract.

      Service -class Service +class Service : AbstractNodeService diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/-init-.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/-init-.html deleted file mode 100644 index 1df3af64d1..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NodeInterestRates.FixContainer.<init> - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / FixContainer / <init>
      -
      -

      <init>

      -FixContainer(fixes: List<Fix>, factory: InterpolatorFactory = CubicSplineInterpolator)
      -

      Fix container, for every fix name & date pair stores a tenor to interest rate map - InterpolatingRateMap

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/fixes.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/fixes.html deleted file mode 100644 index 8d36b1ed69..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/fixes.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NodeInterestRates.FixContainer.fixes - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / FixContainer / fixes
      -
      -

      fixes

      - -val fixes: List<Fix>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/get.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/get.html deleted file mode 100644 index 6f95dd328b..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/get.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NodeInterestRates.FixContainer.get - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / FixContainer / get
      -
      -

      get

      - -operator fun get(fixOf: FixOf): Fix?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/index.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/index.html deleted file mode 100644 index 2e84f0810e..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-fix-container/index.html +++ /dev/null @@ -1,55 +0,0 @@ - - -NodeInterestRates.FixContainer - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / FixContainer
      -
      -

      FixContainer

      -class FixContainer
      -

      Fix container, for every fix name & date pair stores a tenor to interest rate map - InterpolatingRateMap

      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -FixContainer(fixes: List<Fix>, factory: InterpolatorFactory = CubicSplineInterpolator)

      Fix container, for every fix name & date pair stores a tenor to interest rate map - InterpolatingRateMap

      -
      -

      Properties

      - - - - - - - - - - - -
      -factory -val factory: InterpolatorFactory
      -size -val size: Int
      -

      Functions

      - - - - - - - -
      -get -operator fun get(fixOf: FixOf): Fix?
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/-init-.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/-init-.html deleted file mode 100644 index ba12ea5d71..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/-init-.html +++ /dev/null @@ -1,16 +0,0 @@ - - -NodeInterestRates.InterpolatingRateMap.<init> - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / InterpolatingRateMap / <init>
      -
      -

      <init>

      -InterpolatingRateMap(date: LocalDate, inputRates: Map<Tenor, BigDecimal>, calendar: BusinessCalendar, factory: InterpolatorFactory)
      -

      Stores a mapping between tenors and interest rates. -Interpolates missing values using the provided interpolation mechanism.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/get-rate.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/get-rate.html deleted file mode 100644 index 8567fccd4e..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/get-rate.html +++ /dev/null @@ -1,17 +0,0 @@ - - -NodeInterestRates.InterpolatingRateMap.getRate - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / InterpolatingRateMap / getRate
      -
      -

      getRate

      - -fun getRate(tenor: Tenor): BigDecimal?
      -

      Returns the interest rate for a given Tenor, -or null if the rate is not found and cannot be interpolated.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/index.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/index.html deleted file mode 100644 index 81251a067e..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/index.html +++ /dev/null @@ -1,72 +0,0 @@ - - -NodeInterestRates.InterpolatingRateMap - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / InterpolatingRateMap
      -
      -

      InterpolatingRateMap

      -class InterpolatingRateMap
      -

      Stores a mapping between tenors and interest rates. -Interpolates missing values using the provided interpolation mechanism.

      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -InterpolatingRateMap(date: LocalDate, inputRates: Map<Tenor, BigDecimal>, calendar: BusinessCalendar, factory: InterpolatorFactory)

      Stores a mapping between tenors and interest rates. -Interpolates missing values using the provided interpolation mechanism.

      -
      -

      Properties

      - - - - - - - - - - - - - - - - - - - -
      -calendar -val calendar: BusinessCalendar
      -date -val date: LocalDate
      -factory -val factory: InterpolatorFactory
      -size -val size: Int

      Number of rates excluding the interpolated ones

      -
      -

      Functions

      - - - - - - - -
      -getRate -fun getRate(tenor: Tenor): BigDecimal?

      Returns the interest rate for a given Tenor, -or null if the rate is not found and cannot be interpolated.

      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/input-rates.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/input-rates.html deleted file mode 100644 index 26ad624d12..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-interpolating-rate-map/input-rates.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NodeInterestRates.InterpolatingRateMap.inputRates - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / InterpolatingRateMap / inputRates
      -
      -

      inputRates

      - -val inputRates: Map<Tenor, BigDecimal>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/-init-.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/-init-.html deleted file mode 100644 index b63c80734f..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/-init-.html +++ /dev/null @@ -1,18 +0,0 @@ - - -NodeInterestRates.Oracle.<init> - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / Oracle / <init>
      -
      -

      <init>

      -Oracle(identity: Party, signingKey: KeyPair, clock: Clock)
      -

      An implementation of an interest rate fix oracle which is given data in a simple string format.

      -

      The oracle will try to interpolate the missing value of a tenor for the given fix name and date.

      -
      -
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/index.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/index.html deleted file mode 100644 index 55f4f285e2..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/index.html +++ /dev/null @@ -1,73 +0,0 @@ - - -NodeInterestRates.Oracle - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / Oracle
      -
      -

      Oracle

      -class Oracle
      -

      An implementation of an interest rate fix oracle which is given data in a simple string format.

      -

      The oracle will try to interpolate the missing value of a tenor for the given fix name and date.

      -
      -
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -Oracle(identity: Party, signingKey: KeyPair, clock: Clock)

      An implementation of an interest rate fix oracle which is given data in a simple string format.

      -
      -

      Properties

      - - - - - - - - - - - - - - - -
      -clock -val clock: Clock
      -identity -val identity: Party
      -knownFixes -var knownFixes: FixContainer
      -

      Functions

      - - - - - - - - - - - -
      -query -fun query(queries: List<FixOf>, deadline: Instant): List<Fix>

      This method will now wait until the given deadline if the fix for the given FixOf is not immediately -available. To implement this, readWithDeadline will loop if the deadline is not reached and we throw -UnknownFix as it implements RetryableException which has special meaning to this function.

      -
      -sign -fun sign(wtx: WireTransaction): LegallyIdentifiable
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/query.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/query.html deleted file mode 100644 index 93164e93b0..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/query.html +++ /dev/null @@ -1,18 +0,0 @@ - - -NodeInterestRates.Oracle.query - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / Oracle / query
      -
      -

      query

      - -fun query(queries: List<FixOf>, deadline: Instant): List<Fix>
      -

      This method will now wait until the given deadline if the fix for the given FixOf is not immediately -available. To implement this, readWithDeadline will loop if the deadline is not reached and we throw -UnknownFix as it implements RetryableException which has special meaning to this function.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/sign.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/sign.html deleted file mode 100644 index 7efedb14d9..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-oracle/sign.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NodeInterestRates.Oracle.sign - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / Oracle / sign
      -
      -

      sign

      - -fun sign(wtx: WireTransaction): LegallyIdentifiable
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-fixing-service-plugin/-init-.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-fixing-service-plugin/-init-.html deleted file mode 100644 index 5faff965b6..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-fixing-service-plugin/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NodeInterestRates.Service.FixingServicePlugin.<init> - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / Service / FixingServicePlugin / <init>
      -
      -

      <init>

      -FixingServicePlugin()
      -

      Register the protocol that is used with the Fixing integration tests.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-fixing-service-plugin/index.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-fixing-service-plugin/index.html deleted file mode 100644 index 22ed59944e..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-fixing-service-plugin/index.html +++ /dev/null @@ -1,52 +0,0 @@ - - -NodeInterestRates.Service.FixingServicePlugin - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / Service / FixingServicePlugin
      -
      -

      FixingServicePlugin

      -class FixingServicePlugin : CordaPluginRegistry
      -

      Register the protocol that is used with the Fixing integration tests.

      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -FixingServicePlugin()

      Register the protocol that is used with the Fixing integration tests.

      -
      -

      Properties

      - - - - - - - - - - - -
      -requiredProtocols -val requiredProtocols: Map<String, Set<String>>

      A Map with an entry for each consumed protocol used by the webAPIs. -The key of each map entry should contain the ProtocolLogic class name. -The associated map values are the union of all concrete class names passed to the protocol constructor. -Standard java.lang.* and kotlin.* types do not need to be included explicitly. -This is used to extend the white listed protocols that can be initiated from the ServiceHub invokeProtocolAsync method.

      -
      -webApis -val webApis: List<Class<*>>

      List of JAX-RS classes inside the contract jar. They are expected to have a single parameter constructor that takes a ServiceHub as input. -These are listed as Class<*>, because they will be instantiated inside an AttachmentClassLoader so that subsequent protocols, contracts, etc -will be running in the appropriate isolated context.

      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-fixing-service-plugin/required-protocols.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-fixing-service-plugin/required-protocols.html deleted file mode 100644 index c85e1733d1..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-fixing-service-plugin/required-protocols.html +++ /dev/null @@ -1,21 +0,0 @@ - - -NodeInterestRates.Service.FixingServicePlugin.requiredProtocols - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / Service / FixingServicePlugin / requiredProtocols
      -
      -

      requiredProtocols

      - -val requiredProtocols: Map<String, Set<String>>
      -Overrides CordaPluginRegistry.requiredProtocols
      -

      A Map with an entry for each consumed protocol used by the webAPIs. -The key of each map entry should contain the ProtocolLogic class name. -The associated map values are the union of all concrete class names passed to the protocol constructor. -Standard java.lang.* and kotlin.* types do not need to be included explicitly. -This is used to extend the white listed protocols that can be initiated from the ServiceHub invokeProtocolAsync method.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-fixing-service-plugin/web-apis.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-fixing-service-plugin/web-apis.html deleted file mode 100644 index 553376f818..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-fixing-service-plugin/web-apis.html +++ /dev/null @@ -1,19 +0,0 @@ - - -NodeInterestRates.Service.FixingServicePlugin.webApis - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / Service / FixingServicePlugin / webApis
      -
      -

      webApis

      - -val webApis: List<Class<*>>
      -Overrides CordaPluginRegistry.webApis
      -

      List of JAX-RS classes inside the contract jar. They are expected to have a single parameter constructor that takes a ServiceHub as input. -These are listed as Class<*>, because they will be instantiated inside an AttachmentClassLoader so that subsequent protocols, contracts, etc -will be running in the appropriate isolated context.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-init-.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-init-.html deleted file mode 100644 index c7cd92fb7d..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NodeInterestRates.Service.<init> - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / Service / <init>
      -
      -

      <init>

      -Service(services: ServiceHubInternal)
      -

      The Service that wraps Oracle and handles messages/network interaction/request scrubbing.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/index.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/index.html deleted file mode 100644 index c2f332d9ec..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/index.html +++ /dev/null @@ -1,105 +0,0 @@ - - -NodeInterestRates.Service - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / Service
      -
      -

      Service

      -class Service : AcceptsFileUpload, AbstractNodeService
      -

      The Service that wraps Oracle and handles messages/network interaction/request scrubbing.

      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -Service(services: ServiceHubInternal)

      The Service that wraps Oracle and handles messages/network interaction/request scrubbing.

      -
      -

      Properties

      - - - - - - - - - - - - - - - - - - - -
      -acceptableFileExtensions -val acceptableFileExtensions: <ERROR CLASS>

      What file extensions are acceptable for the file to be handed to upload()

      -
      -dataTypePrefix -val dataTypePrefix: String

      A string that prefixes the URLs, e.g. "attachments" or "interest-rates". Should be OK for URLs.

      -
      -oracle -val oracle: Oracle
      -ss -val ss: StorageService
      -

      Inherited Properties

      - - - - - - - - - - - -
      -net -val net: MessagingService
      -networkMapCache -val networkMapCache: NetworkMapCache
      -

      Functions

      - - - - - - - -
      -upload -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.

      -
      -

      Inherited Functions

      - - - - - - - -
      -addMessageHandler -fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): Unit

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of -common boilerplate code. Exceptions are caught and passed to the provided consumer. If you just want a simple -acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      -fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): Unit

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of -common boilerplate code. Exceptions are propagated to the messaging layer. If you just want a simple -acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/upload.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/upload.html deleted file mode 100644 index 9540e2b634..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-service/upload.html +++ /dev/null @@ -1,18 +0,0 @@ - - -NodeInterestRates.Service.upload - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / Service / upload
      -
      -

      upload

      - -fun upload(data: InputStream): String
      -Overrides AcceptsFileUpload.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/com.r3corda.node.services.clientapi/-node-interest-rates/-unknown-fix/-init-.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-unknown-fix/-init-.html deleted file mode 100644 index fe89720415..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/-unknown-fix/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -NodeInterestRates.UnknownFix.<init> - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / UnknownFix / <init>
      -
      -

      <init>

      -UnknownFix(fix: FixOf)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/parse-file.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/parse-file.html deleted file mode 100644 index e846d810de..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/parse-file.html +++ /dev/null @@ -1,16 +0,0 @@ - - -NodeInterestRates.parseFile - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / parseFile
      -
      -

      parseFile

      - -fun parseFile(s: String): FixContainer
      -

      Parses lines containing fixes

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/parse-fix-of.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/parse-fix-of.html deleted file mode 100644 index a59d280331..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/parse-fix-of.html +++ /dev/null @@ -1,16 +0,0 @@ - - -NodeInterestRates.parseFixOf - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / parseFixOf
      -
      -

      parseFixOf

      - -fun parseFixOf(key: String): FixOf
      -

      Parses a string of the form "LIBOR 16-March-2016 1M" into a FixOf

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/parse-fix.html b/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/parse-fix.html deleted file mode 100644 index f3cd16dfef..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/-node-interest-rates/parse-fix.html +++ /dev/null @@ -1,16 +0,0 @@ - - -NodeInterestRates.parseFix - - - - -com.r3corda.node.services.clientapi / NodeInterestRates / parseFix
      -
      -

      parseFix

      - -fun parseFix(s: String): Fix
      -

      Parses a string of the form "LIBOR 16-March-2016 1M = 0.678" into a Fix

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.clientapi/index.html b/docs/build/html/api/com.r3corda.node.services.clientapi/index.html index f37479383f..d78f20ce3f 100644 --- a/docs/build/html/api/com.r3corda.node.services.clientapi/index.html +++ b/docs/build/html/api/com.r3corda.node.services.clientapi/index.html @@ -18,14 +18,6 @@ running scheduled fixings for the InterestRateSwap contract.

      - - -NodeInterestRates - -object NodeInterestRates

      An interest rates service is an oracle that signs transactions which contain embedded assertions about an interest -rate fix (e.g. LIBOR, EURIBOR ...).

      - - diff --git a/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/basedir.html b/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/basedir.html index 910183102c..4e146d82e6 100644 --- a/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/basedir.html +++ b/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/basedir.html @@ -9,6 +9,7 @@

      basedir

      val basedir: Path
      +Overrides NodeConfiguration.basedir


      diff --git a/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/certificate-signing-service.html b/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/certificate-signing-service.html new file mode 100644 index 0000000000..4d9cb1529d --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/certificate-signing-service.html @@ -0,0 +1,16 @@ + + +FullNodeConfiguration.certificateSigningService - + + + +com.r3corda.node.services.config / FullNodeConfiguration / certificateSigningService
      +
      +

      certificateSigningService

      + +val certificateSigningService: <ERROR CLASS>
      +Overrides NodeConfiguration.certificateSigningService
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/dev-mode.html b/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/dev-mode.html new file mode 100644 index 0000000000..63e0fa07a1 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/dev-mode.html @@ -0,0 +1,16 @@ + + +FullNodeConfiguration.devMode - + + + +com.r3corda.node.services.config / FullNodeConfiguration / devMode
      +
      +

      devMode

      + +val devMode: Boolean
      +Overrides NodeConfiguration.devMode
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/email-address.html b/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/email-address.html new file mode 100644 index 0000000000..ff2489bd5c --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/email-address.html @@ -0,0 +1,16 @@ + + +FullNodeConfiguration.emailAddress - + + + +com.r3corda.node.services.config / FullNodeConfiguration / emailAddress
      +
      +

      emailAddress

      + +val emailAddress: String
      +Overrides NodeConfiguration.emailAddress
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/index.html b/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/index.html index cfb289425b..d025989a48 100644 --- a/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/index.html +++ b/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/index.html @@ -38,6 +38,12 @@ +certificateSigningService + +val certificateSigningService: <ERROR CLASS> + + + clock val clock: Clock @@ -50,6 +56,18 @@ +devMode + +val devMode: Boolean + + + +emailAddress + +val emailAddress: String + + + exportJMXto val exportJMXto: String @@ -74,12 +92,6 @@ -mapService - -val mapService: NameServiceConfig - - - messagingServerAddress val messagingServerAddress: <ERROR CLASS>? @@ -98,6 +110,12 @@ +networkMapAddress + +val networkMapAddress: <ERROR CLASS>? + + + trustStorePassword val trustStorePassword: String @@ -116,6 +134,17 @@ +

      Inherited Properties

      + + + + + + + +
      +certificatesPath +open val certificatesPath: Path

      Functions

      diff --git a/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/key-store-password.html b/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/key-store-password.html index 8a2a9d746c..b3a2570867 100644 --- a/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/key-store-password.html +++ b/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/key-store-password.html @@ -9,7 +9,7 @@

      keyStorePassword

      val keyStorePassword: String
      -Overrides NodeConfiguration.keyStorePassword
      +Overrides NodeSSLConfiguration.keyStorePassword


      diff --git a/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/map-service.html b/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/network-map-address.html similarity index 55% rename from docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/map-service.html rename to docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/network-map-address.html index 120ce8d846..c69e0603e2 100644 --- a/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/map-service.html +++ b/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/network-map-address.html @@ -1,14 +1,14 @@ -FullNodeConfiguration.mapService - +FullNodeConfiguration.networkMapAddress - -com.r3corda.node.services.config / FullNodeConfiguration / mapService
      +com.r3corda.node.services.config / FullNodeConfiguration / networkMapAddress

      -

      mapService

      - -val mapService: NameServiceConfig
      +

      networkMapAddress

      + +val networkMapAddress: <ERROR CLASS>?


      diff --git a/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/trust-store-password.html b/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/trust-store-password.html index 08671a27c9..b12acb70a7 100644 --- a/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/trust-store-password.html +++ b/docs/build/html/api/com.r3corda.node.services.config/-full-node-configuration/trust-store-password.html @@ -9,7 +9,7 @@

      trustStorePassword

      val trustStorePassword: String
      -Overrides NodeConfiguration.trustStorePassword
      +Overrides NodeSSLConfiguration.trustStorePassword


      diff --git a/docs/build/html/api/com.r3corda.node.services.config/-name-service-config/-init-.html b/docs/build/html/api/com.r3corda.node.services.config/-name-service-config/-init-.html deleted file mode 100644 index a5c50cc366..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.config/-name-service-config/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -NameServiceConfig.<init> - - - - -com.r3corda.node.services.config / NameServiceConfig / <init>
      -
      -

      <init>

      -NameServiceConfig(conf: <ERROR CLASS>)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.config/-name-service-config/address.html b/docs/build/html/api/com.r3corda.node.services.config/-name-service-config/address.html deleted file mode 100644 index ec00345677..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.config/-name-service-config/address.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NameServiceConfig.address - - - - -com.r3corda.node.services.config / NameServiceConfig / address
      -
      -

      address

      - -val address: <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.config/-name-service-config/host-service-locally.html b/docs/build/html/api/com.r3corda.node.services.config/-name-service-config/host-service-locally.html deleted file mode 100644 index 72e983c02b..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.config/-name-service-config/host-service-locally.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NameServiceConfig.hostServiceLocally - - - - -com.r3corda.node.services.config / NameServiceConfig / hostServiceLocally
      -
      -

      hostServiceLocally

      - -val hostServiceLocally: Boolean
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.config/-name-service-config/identity.html b/docs/build/html/api/com.r3corda.node.services.config/-name-service-config/identity.html deleted file mode 100644 index 45114f17dc..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.config/-name-service-config/identity.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NameServiceConfig.identity - - - - -com.r3corda.node.services.config / NameServiceConfig / identity
      -
      -

      identity

      - -val identity: String
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.config/-name-service-config/index.html b/docs/build/html/api/com.r3corda.node.services.config/-name-service-config/index.html deleted file mode 100644 index a646154f04..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.config/-name-service-config/index.html +++ /dev/null @@ -1,48 +0,0 @@ - - -NameServiceConfig - - - - -com.r3corda.node.services.config / NameServiceConfig
      -
      -

      NameServiceConfig

      -class NameServiceConfig
      -
      -
      -

      Constructors

      -
      - - - - - - -
      -<init> -NameServiceConfig(conf: <ERROR CLASS>)
      -

      Properties

      - - - - - - - - - - - - - - - -
      -address -val address: <ERROR CLASS>
      -hostServiceLocally -val hostServiceLocally: Boolean
      -identity -val identity: String
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/basedir.html b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/basedir.html new file mode 100644 index 0000000000..4f3534401b --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/basedir.html @@ -0,0 +1,16 @@ + + +NodeConfigurationFromConfig.basedir - + + + +com.r3corda.node.services.config / NodeConfigurationFromConfig / basedir
      +
      +

      basedir

      + +val basedir: Path
      +Overrides NodeConfiguration.basedir
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/certificate-signing-service.html b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/certificate-signing-service.html new file mode 100644 index 0000000000..30b82d58d0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/certificate-signing-service.html @@ -0,0 +1,16 @@ + + +NodeConfigurationFromConfig.certificateSigningService - + + + +com.r3corda.node.services.config / NodeConfigurationFromConfig / certificateSigningService
      +
      +

      certificateSigningService

      + +val certificateSigningService: <ERROR CLASS>
      +Overrides NodeConfiguration.certificateSigningService
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/dev-mode.html b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/dev-mode.html new file mode 100644 index 0000000000..98ac807828 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/dev-mode.html @@ -0,0 +1,16 @@ + + +NodeConfigurationFromConfig.devMode - + + + +com.r3corda.node.services.config / NodeConfigurationFromConfig / devMode
      +
      +

      devMode

      + +val devMode: Boolean
      +Overrides NodeConfiguration.devMode
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/email-address.html b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/email-address.html new file mode 100644 index 0000000000..fa5c686631 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/email-address.html @@ -0,0 +1,16 @@ + + +NodeConfigurationFromConfig.emailAddress - + + + +com.r3corda.node.services.config / NodeConfigurationFromConfig / emailAddress
      +
      +

      emailAddress

      + +val emailAddress: String
      +Overrides NodeConfiguration.emailAddress
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/index.html b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/index.html index 5841851346..a568a9adb2 100644 --- a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/index.html +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/index.html @@ -26,6 +26,18 @@ +basedir + +val basedir: Path + + + +certificateSigningService + +val certificateSigningService: <ERROR CLASS> + + + config val config: <ERROR CLASS> @@ -38,6 +50,18 @@ +devMode + +val devMode: Boolean + + + +emailAddress + +val emailAddress: String + + + exportJMXto val exportJMXto: String @@ -68,5 +92,16 @@ +

      Inherited Properties

      + + + + + + + +
      +certificatesPath +open val certificatesPath: Path
      diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/key-store-password.html b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/key-store-password.html index 405d11e739..ee310c2f38 100644 --- a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/key-store-password.html +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/key-store-password.html @@ -9,7 +9,7 @@

      keyStorePassword

      val keyStorePassword: String
      -Overrides NodeConfiguration.keyStorePassword
      +Overrides NodeSSLConfiguration.keyStorePassword


      diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/trust-store-password.html b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/trust-store-password.html index f0fa98c3c1..922bc06b8b 100644 --- a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/trust-store-password.html +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration-from-config/trust-store-password.html @@ -9,7 +9,7 @@

      trustStorePassword

      val trustStorePassword: String
      -Overrides NodeConfiguration.trustStorePassword
      +Overrides NodeSSLConfiguration.trustStorePassword


      diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/basedir.html b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/basedir.html new file mode 100644 index 0000000000..bcf081e5c8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/basedir.html @@ -0,0 +1,15 @@ + + +NodeConfiguration.basedir - + + + +com.r3corda.node.services.config / NodeConfiguration / basedir
      +
      +

      basedir

      + +abstract val basedir: Path
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/certificate-signing-service.html b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/certificate-signing-service.html new file mode 100644 index 0000000000..ca97892f02 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/certificate-signing-service.html @@ -0,0 +1,15 @@ + + +NodeConfiguration.certificateSigningService - + + + +com.r3corda.node.services.config / NodeConfiguration / certificateSigningService
      +
      +

      certificateSigningService

      + +abstract val certificateSigningService: <ERROR CLASS>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/certificates-path.html b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/certificates-path.html new file mode 100644 index 0000000000..c0f615cc8b --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/certificates-path.html @@ -0,0 +1,16 @@ + + +NodeConfiguration.certificatesPath - + + + +com.r3corda.node.services.config / NodeConfiguration / certificatesPath
      +
      +

      certificatesPath

      + +open val certificatesPath: Path
      +Overrides NodeSSLConfiguration.certificatesPath
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/dev-mode.html b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/dev-mode.html new file mode 100644 index 0000000000..68cccfaf11 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/dev-mode.html @@ -0,0 +1,15 @@ + + +NodeConfiguration.devMode - + + + +com.r3corda.node.services.config / NodeConfiguration / devMode
      +
      +

      devMode

      + +abstract val devMode: Boolean
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/email-address.html b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/email-address.html new file mode 100644 index 0000000000..a92a91a46e --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/email-address.html @@ -0,0 +1,15 @@ + + +NodeConfiguration.emailAddress - + + + +com.r3corda.node.services.config / NodeConfiguration / emailAddress
      +
      +

      emailAddress

      + +abstract val emailAddress: String
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/index.html b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/index.html index c59790bd5b..e528474614 100644 --- a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/index.html +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/index.html @@ -7,7 +7,7 @@ com.r3corda.node.services.config / NodeConfiguration

      NodeConfiguration

      -interface NodeConfiguration
      +interface NodeConfiguration : NodeSSLConfiguration


      Properties

      @@ -15,21 +15,45 @@ +basedir + +abstract val basedir: Path + + + +certificateSigningService + +abstract val certificateSigningService: <ERROR CLASS> + + + +certificatesPath + +open val certificatesPath: Path + + + dataSourceProperties open val dataSourceProperties: Properties -exportJMXto +devMode -abstract val exportJMXto: String +abstract val devMode: Boolean -keyStorePassword +emailAddress -abstract val keyStorePassword: String +abstract val emailAddress: String + + + +exportJMXto + +abstract val exportJMXto: String @@ -43,12 +67,35 @@ abstract val nearestCity: String + + +

      Inherited Properties

      + + +keyStorePassword + + + + + + + + + + + +
      -trustStorePassword +abstract val keyStorePassword: String
      +keyStorePath +open val keyStorePath: Path
      +trustStorePassword abstract val trustStorePassword: String
      +trustStorePath +open val trustStorePath: Path

      Companion Object Properties

      diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/certificates-path.html b/docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/certificates-path.html new file mode 100644 index 0000000000..7e9b17c8ad --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/certificates-path.html @@ -0,0 +1,15 @@ + + +NodeSSLConfiguration.certificatesPath - + + + +com.r3corda.node.services.config / NodeSSLConfiguration / certificatesPath
      +
      +

      certificatesPath

      + +abstract val certificatesPath: Path
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/index.html b/docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/index.html new file mode 100644 index 0000000000..b91affb434 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/index.html @@ -0,0 +1,60 @@ + + +NodeSSLConfiguration - + + + +com.r3corda.node.services.config / NodeSSLConfiguration
      +
      +

      NodeSSLConfiguration

      +interface NodeSSLConfiguration
      +
      +
      +

      Properties

      + + + + + + + + + + + + + + + + + + + + + + + +
      +certificatesPath +abstract val certificatesPath: Path
      +keyStorePassword +abstract val keyStorePassword: String
      +keyStorePath +open val keyStorePath: Path
      +trustStorePassword +abstract val trustStorePassword: String
      +trustStorePath +open val trustStorePath: Path
      +

      Inheritors

      + + + + + + + +
      +NodeConfiguration +interface NodeConfiguration : NodeSSLConfiguration
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/key-store-password.html b/docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/key-store-password.html similarity index 62% rename from docs/build/html/api/com.r3corda.node.services.config/-node-configuration/key-store-password.html rename to docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/key-store-password.html index dd6bea3367..6416f14b46 100644 --- a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/key-store-password.html +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/key-store-password.html @@ -1,13 +1,13 @@ -NodeConfiguration.keyStorePassword - +NodeSSLConfiguration.keyStorePassword - -com.r3corda.node.services.config / NodeConfiguration / keyStorePassword
      +com.r3corda.node.services.config / NodeSSLConfiguration / keyStorePassword

      keyStorePassword

      - + abstract val keyStorePassword: String


      diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/key-store-path.html b/docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/key-store-path.html new file mode 100644 index 0000000000..8d867df7b0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/key-store-path.html @@ -0,0 +1,15 @@ + + +NodeSSLConfiguration.keyStorePath - + + + +com.r3corda.node.services.config / NodeSSLConfiguration / keyStorePath
      +
      +

      keyStorePath

      + +open val keyStorePath: Path
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/trust-store-password.html b/docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/trust-store-password.html similarity index 61% rename from docs/build/html/api/com.r3corda.node.services.config/-node-configuration/trust-store-password.html rename to docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/trust-store-password.html index 0d42a183f8..5813b5c80c 100644 --- a/docs/build/html/api/com.r3corda.node.services.config/-node-configuration/trust-store-password.html +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/trust-store-password.html @@ -1,13 +1,13 @@ -NodeConfiguration.trustStorePassword - +NodeSSLConfiguration.trustStorePassword - -com.r3corda.node.services.config / NodeConfiguration / trustStorePassword
      +com.r3corda.node.services.config / NodeSSLConfiguration / trustStorePassword

      trustStorePassword

      - + abstract val trustStorePassword: String


      diff --git a/docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/trust-store-path.html b/docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/trust-store-path.html new file mode 100644 index 0000000000..fc3c8f90fa --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-node-s-s-l-configuration/trust-store-path.html @@ -0,0 +1,15 @@ + + +NodeSSLConfiguration.trustStorePath - + + + +com.r3corda.node.services.config / NodeSSLConfiguration / trustStorePath
      +
      +

      trustStorePath

      + +open val trustStorePath: Path
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-optional-config/-init-.html b/docs/build/html/api/com.r3corda.node.services.config/-optional-config/-init-.html new file mode 100644 index 0000000000..945a37c62f --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-optional-config/-init-.html @@ -0,0 +1,15 @@ + + +OptionalConfig.<init> - + + + +com.r3corda.node.services.config / OptionalConfig / <init>
      +
      +

      <init>

      +OptionalConfig(conf: <ERROR CLASS>, lambda: () -> T)
      +

      Helper class for optional configurations

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-optional-config/conf.html b/docs/build/html/api/com.r3corda.node.services.config/-optional-config/conf.html new file mode 100644 index 0000000000..ffa22b4e07 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-optional-config/conf.html @@ -0,0 +1,15 @@ + + +OptionalConfig.conf - + + + +com.r3corda.node.services.config / OptionalConfig / conf
      +
      +

      conf

      + +val conf: <ERROR CLASS>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-optional-config/get-value.html b/docs/build/html/api/com.r3corda.node.services.config/-optional-config/get-value.html new file mode 100644 index 0000000000..c1bd0a3445 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-optional-config/get-value.html @@ -0,0 +1,15 @@ + + +OptionalConfig.getValue - + + + +com.r3corda.node.services.config / OptionalConfig / getValue
      +
      +

      getValue

      + +operator fun getValue(receiver: Any, metadata: KProperty<*>): T
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-optional-config/index.html b/docs/build/html/api/com.r3corda.node.services.config/-optional-config/index.html new file mode 100644 index 0000000000..0f2f71b45b --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-optional-config/index.html @@ -0,0 +1,55 @@ + + +OptionalConfig - + + + +com.r3corda.node.services.config / OptionalConfig
      +
      +

      OptionalConfig

      +class OptionalConfig<out T>
      +

      Helper class for optional configurations

      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +OptionalConfig(conf: <ERROR CLASS>, lambda: () -> T)

      Helper class for optional configurations

      +
      +

      Properties

      + + + + + + + + + + + +
      +conf +val conf: <ERROR CLASS>
      +lambda +val lambda: () -> T
      +

      Functions

      + + + + + + + +
      +getValue +operator fun getValue(receiver: Any, metadata: KProperty<*>): T
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/-optional-config/lambda.html b/docs/build/html/api/com.r3corda.node.services.config/-optional-config/lambda.html new file mode 100644 index 0000000000..6d1a3ea583 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/-optional-config/lambda.html @@ -0,0 +1,15 @@ + + +OptionalConfig.lambda - + + + +com.r3corda.node.services.config / OptionalConfig / lambda
      +
      +

      lambda

      + +val lambda: () -> T
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/get-or-else.html b/docs/build/html/api/com.r3corda.node.services.config/get-or-else.html new file mode 100644 index 0000000000..fb8b91f60d --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.config/get-or-else.html @@ -0,0 +1,15 @@ + + +getOrElse - + + + +com.r3corda.node.services.config / getOrElse
      +
      +

      getOrElse

      + +fun <T> <ERROR CLASS>.getOrElse(lambda: () -> T): OptionalConfig<T>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.config/index.html b/docs/build/html/api/com.r3corda.node.services.config/index.html index 408be38f99..0da98709b9 100644 --- a/docs/build/html/api/com.r3corda.node.services.config/index.html +++ b/docs/build/html/api/com.r3corda.node.services.config/index.html @@ -18,15 +18,9 @@ -NameServiceConfig - -class NameServiceConfig - - - NodeConfiguration -interface NodeConfiguration +interface NodeConfiguration : NodeSSLConfiguration @@ -34,6 +28,19 @@ class NodeConfigurationFromConfig : NodeConfiguration + + +NodeSSLConfiguration + +interface NodeSSLConfiguration + + + +OptionalConfig + +class OptionalConfig<out T>

      Helper class for optional configurations

      + +

      Functions

      @@ -41,6 +48,12 @@ +getOrElse + +fun <T> <ERROR CLASS>.getOrElse(lambda: () -> T): OptionalConfig<T> + + + getProperties fun <ERROR CLASS>.getProperties(path: String): Properties diff --git a/docs/build/html/api/com.r3corda.node.services.events/-node-scheduler-service/-init-.html b/docs/build/html/api/com.r3corda.node.services.events/-node-scheduler-service/-init-.html index fd2d6c6066..3cf57d6f43 100644 --- a/docs/build/html/api/com.r3corda.node.services.events/-node-scheduler-service/-init-.html +++ b/docs/build/html/api/com.r3corda.node.services.events/-node-scheduler-service/-init-.html @@ -9,7 +9,7 @@

      <init>

      NodeSchedulerService(services: ServiceHubInternal, protocolLogicRefFactory: ProtocolLogicRefFactory = ProtocolLogicRefFactory(), schedulerTimerExecutor: Executor = Executors.newSingleThreadExecutor())

      A first pass of a simple SchedulerService that works with MutableClocks for testing, demonstrations and simulations -that also encompasses the Wallet observer for processing transactions.

      +that also encompasses the Vault observer for processing transactions.

      This will observe transactions as they are stored and schedule and unschedule activities based on the States consumed or produced.

      TODO: Needs extensive support from persistence and protocol frameworks to be truly reliable and atomic.

      diff --git a/docs/build/html/api/com.r3corda.node.services.events/-node-scheduler-service/index.html b/docs/build/html/api/com.r3corda.node.services.events/-node-scheduler-service/index.html index bf47a14e04..273964a83e 100644 --- a/docs/build/html/api/com.r3corda.node.services.events/-node-scheduler-service/index.html +++ b/docs/build/html/api/com.r3corda.node.services.events/-node-scheduler-service/index.html @@ -9,7 +9,7 @@

      NodeSchedulerService

      class NodeSchedulerService : SchedulerService, SingletonSerializeAsToken

      A first pass of a simple SchedulerService that works with MutableClocks for testing, demonstrations and simulations -that also encompasses the Wallet observer for processing transactions.

      +that also encompasses the Vault observer for processing transactions.

      This will observe transactions as they are stored and schedule and unschedule activities based on the States consumed or produced.

      TODO: Needs extensive support from persistence and protocol frameworks to be truly reliable and atomic.

      @@ -39,7 +39,7 @@ activity. Only replace this for unit testing purposes. This is not the executo <init> NodeSchedulerService(services: ServiceHubInternal, protocolLogicRefFactory: ProtocolLogicRefFactory = ProtocolLogicRefFactory(), schedulerTimerExecutor: Executor = Executors.newSingleThreadExecutor())

      A first pass of a simple SchedulerService that works with MutableClocks for testing, demonstrations and simulations -that also encompasses the Wallet observer for processing transactions.

      +that also encompasses the Vault observer for processing transactions.

      diff --git a/docs/build/html/api/com.r3corda.node.services.events/-scheduled-activity-observer/-init-.html b/docs/build/html/api/com.r3corda.node.services.events/-scheduled-activity-observer/-init-.html index 9b35e03e46..12d1c5c728 100644 --- a/docs/build/html/api/com.r3corda.node.services.events/-scheduled-activity-observer/-init-.html +++ b/docs/build/html/api/com.r3corda.node.services.events/-scheduled-activity-observer/-init-.html @@ -8,7 +8,7 @@

      <init>

      ScheduledActivityObserver(services: ServiceHubInternal)
      -

      This observes the wallet and schedules and unschedules activities appropriately based on state production and +

      This observes the vault and schedules and unschedules activities appropriately based on state production and consumption.



      diff --git a/docs/build/html/api/com.r3corda.node.services.events/-scheduled-activity-observer/index.html b/docs/build/html/api/com.r3corda.node.services.events/-scheduled-activity-observer/index.html index 158ba7c287..58cb01f78a 100644 --- a/docs/build/html/api/com.r3corda.node.services.events/-scheduled-activity-observer/index.html +++ b/docs/build/html/api/com.r3corda.node.services.events/-scheduled-activity-observer/index.html @@ -8,7 +8,7 @@

      ScheduledActivityObserver

      class ScheduledActivityObserver
      -

      This observes the wallet and schedules and unschedules activities appropriately based on state production and +

      This observes the vault and schedules and unschedules activities appropriately based on state production and consumption.



      @@ -19,7 +19,7 @@ consumption.

      <init> -ScheduledActivityObserver(services: ServiceHubInternal)

      This observes the wallet and schedules and unschedules activities appropriately based on state production and +ScheduledActivityObserver(services: ServiceHubInternal)

      This observes the vault and schedules and unschedules activities appropriately based on state production and consumption.

      diff --git a/docs/build/html/api/com.r3corda.node.services.events/index.html b/docs/build/html/api/com.r3corda.node.services.events/index.html index fda2bfe737..a0c332c1e2 100644 --- a/docs/build/html/api/com.r3corda.node.services.events/index.html +++ b/docs/build/html/api/com.r3corda.node.services.events/index.html @@ -15,14 +15,14 @@ NodeSchedulerService class NodeSchedulerService : SchedulerService, SingletonSerializeAsToken

      A first pass of a simple SchedulerService that works with MutableClocks for testing, demonstrations and simulations -that also encompasses the Wallet observer for processing transactions.

      +that also encompasses the Vault observer for processing transactions.

      ScheduledActivityObserver -class ScheduledActivityObserver

      This observes the wallet and schedules and unschedules activities appropriately based on state production and +class ScheduledActivityObserver

      This observes the vault and schedules and unschedules activities appropriately based on state production and consumption.

      diff --git a/docs/build/html/api/com.r3corda.node.services.keys/-persistent-key-management-service/-init-.html b/docs/build/html/api/com.r3corda.node.services.keys/-persistent-key-management-service/-init-.html new file mode 100644 index 0000000000..18b3772457 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.keys/-persistent-key-management-service/-init-.html @@ -0,0 +1,19 @@ + + +PersistentKeyManagementService.<init> - + + + +com.r3corda.node.services.keys / PersistentKeyManagementService / <init>
      +
      +

      <init>

      +PersistentKeyManagementService(initialKeys: Set<KeyPair>)
      +

      A persistent re-implementation of E2ETestKeyManagementService to support node re-start.

      +

      This is not the long-term implementation. See the list of items in the above class.

      +

      This class needs database transactions to be in-flight during method calls and init.

      +
      +
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/fresh-key.html b/docs/build/html/api/com.r3corda.node.services.keys/-persistent-key-management-service/fresh-key.html similarity index 66% rename from docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/fresh-key.html rename to docs/build/html/api/com.r3corda.node.services.keys/-persistent-key-management-service/fresh-key.html index 7565e8b6e9..100ff44356 100644 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/fresh-key.html +++ b/docs/build/html/api/com.r3corda.node.services.keys/-persistent-key-management-service/fresh-key.html @@ -1,13 +1,13 @@ -MockKeyManagementService.freshKey - +PersistentKeyManagementService.freshKey - -com.r3corda.core.node.services.testing / MockKeyManagementService / freshKey
      +com.r3corda.node.services.keys / PersistentKeyManagementService / freshKey

      freshKey

      - + fun freshKey(): KeyPair
      Overrides KeyManagementService.freshKey

      Generates a new random key and adds it to the exposed map.

      diff --git a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/index.html b/docs/build/html/api/com.r3corda.node.services.keys/-persistent-key-management-service/index.html similarity index 62% rename from docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/index.html rename to docs/build/html/api/com.r3corda.node.services.keys/-persistent-key-management-service/index.html index 69b56461d7..6e9afe0be6 100644 --- a/docs/build/html/api/com.r3corda.core.node.services.testing/-mock-key-management-service/index.html +++ b/docs/build/html/api/com.r3corda.node.services.keys/-persistent-key-management-service/index.html @@ -1,13 +1,18 @@ -MockKeyManagementService - +PersistentKeyManagementService - -com.r3corda.core.node.services.testing / MockKeyManagementService
      +com.r3corda.node.services.keys / PersistentKeyManagementService
      +
      +

      PersistentKeyManagementService

      +class PersistentKeyManagementService : SingletonSerializeAsToken, KeyManagementService
      +

      A persistent re-implementation of E2ETestKeyManagementService to support node re-start.

      +

      This is not the long-term implementation. See the list of items in the above class.

      +

      This class needs database transactions to be in-flight during method calls and init.

      +

      -

      MockKeyManagementService

      -class MockKeyManagementService : SingletonSerializeAsToken, KeyManagementService


      Constructors

      @@ -17,7 +22,8 @@ <init> -MockKeyManagementService(vararg initialKeys: KeyPair) +PersistentKeyManagementService(initialKeys: Set<KeyPair>)

      A persistent re-implementation of E2ETestKeyManagementService to support node re-start.

      + @@ -28,15 +34,9 @@ keys -val keys: MutableMap<PublicKey, PrivateKey>

      Returns a snapshot of the current pubkey->privkey mapping.

      +val keys: Map<PublicKey, PrivateKey>

      Returns a snapshot of the current pubkey->privkey mapping.

      - - -nextKeys - -val nextKeys: LinkedList<KeyPair> -

      Functions

      diff --git a/docs/build/html/api/com.r3corda.node.services.keys/-persistent-key-management-service/keys.html b/docs/build/html/api/com.r3corda.node.services.keys/-persistent-key-management-service/keys.html new file mode 100644 index 0000000000..89d9c14594 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.keys/-persistent-key-management-service/keys.html @@ -0,0 +1,20 @@ + + +PersistentKeyManagementService.keys - + + + +com.r3corda.node.services.keys / PersistentKeyManagementService / keys
      +
      +

      keys

      + +val keys: Map<PublicKey, PrivateKey>
      +Overrides KeyManagementService.keys
      +

      Returns a snapshot of the current pubkey->privkey mapping.

      +

      Getter
      +

      Returns a snapshot of the current pubkey->privkey mapping.

      +

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.keys/index.html b/docs/build/html/api/com.r3corda.node.services.keys/index.html index 901fc7f9e9..773661a076 100644 --- a/docs/build/html/api/com.r3corda.node.services.keys/index.html +++ b/docs/build/html/api/com.r3corda.node.services.keys/index.html @@ -17,6 +17,13 @@ class E2ETestKeyManagementService : SingletonSerializeAsToken, KeyManagementService

      A simple in-memory KMS that doesnt bother saving keys to disk. A real implementation would:

      + + +PersistentKeyManagementService + +class PersistentKeyManagementService : SingletonSerializeAsToken, KeyManagementService

      A persistent re-implementation of E2ETestKeyManagementService to support node re-start.

      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-handler/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-handler/-init-.html deleted file mode 100644 index 4f466c7bca..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-handler/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingClient.Handler.<init> - - - - -com.r3corda.node.services.messaging / ArtemisMessagingClient / Handler / <init>
      -
      -

      <init>

      -Handler(executor: Executor?, topicSession: TopicSession, callback: (Message, MessageHandlerRegistration) -> Unit)
      -

      A registration to handle messages of different types

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-init-.html deleted file mode 100644 index 0c7a44c4ae..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-init-.html +++ /dev/null @@ -1,36 +0,0 @@ - - -ArtemisMessagingClient.<init> - - - - -com.r3corda.node.services.messaging / ArtemisMessagingClient / <init>
      -
      -

      <init>

      -ArtemisMessagingClient(directory: Path, config: NodeConfiguration, serverHostPort: <ERROR CLASS>, myIdentity: PublicKey?, executor: AffinityExecutor, persistentInbox: Boolean = true)
      -

      This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. -Artemis is a message queue broker and here we run a client connecting to the specified broker instance -ArtemisMessagingServer.

      -

      Message handlers are run on the provided AffinityExecutor synchronously, that is, the Artemis callback threads -are blocked until the handler is scheduled and completed. This allows backpressure to propagate from the given executor -through into Artemis and from there, back through to senders.

      -
      -
      -

      Parameters

      - -serverHostPort - The address of the broker instance to connect to (might be running in the same process)
      -
      - -myIdentity - Either the public key to be used as the ArtemisMQ address and queue name for the node globally, or null to indicate -that this is a NetworkMapService node which will be bound globally to the name "networkmap"
      -
      - -executor - An executor to run received message tasks upon.
      -
      - -persistentInbox - If true the inbox will be created persistent if not already created. -If false the inbox queue will be transient, which is appropriate for UI clients for example.
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/add-message-handler.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/add-message-handler.html deleted file mode 100644 index fb3fd88b92..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/add-message-handler.html +++ /dev/null @@ -1,50 +0,0 @@ - - -ArtemisMessagingClient.addMessageHandler - - - - -com.r3corda.node.services.messaging / ArtemisMessagingClient / addMessageHandler
      -
      -

      addMessageHandler

      - -fun addMessageHandler(topic: String, sessionID: Long, executor: Executor?, callback: (Message, MessageHandlerRegistration) -> Unit): MessageHandlerRegistration
      -Overrides MessagingService.addMessageHandler
      -

      The provided function will be invoked for each received message whose topic matches the given string, on the given -executor.

      -

      If no executor is received then the callback will run on threads provided by the messaging service, and the -callback is expected to be thread safe as a result.

      -

      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 -itself and yet addMessageHandler hasnt returned the handle yet.

      -
      -
      -

      Parameters

      - -topic - identifier for the general subject of the message, for example "platform.network_map.fetch". -The topic can be the empty string to match all messages (session ID must be DEFAULT_SESSION_ID).
      -
      - -sessionID - identifier for the session the message is part of. For services listening before -a session is established, use DEFAULT_SESSION_ID.
      -
      -
      - -fun addMessageHandler(topicSession: TopicSession, executor: Executor?, callback: (Message, MessageHandlerRegistration) -> Unit): MessageHandlerRegistration
      -Overrides MessagingService.addMessageHandler
      -

      The provided function will be invoked for each received message whose topic and session matches, on the -given executor.

      -

      If no executor is received then the callback will run on threads provided by the messaging service, and the -callback is expected to be thread safe as a result.

      -

      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 -itself and yet addMessageHandler hasnt returned the handle yet.

      -
      -
      -

      Parameters

      - -topicSession - identifier for the topic and session to listen for messages arriving on.
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/create-message.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/create-message.html deleted file mode 100644 index 566f400af4..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/create-message.html +++ /dev/null @@ -1,34 +0,0 @@ - - -ArtemisMessagingClient.createMessage - - - - -com.r3corda.node.services.messaging / ArtemisMessagingClient / createMessage
      -
      -

      createMessage

      - -fun createMessage(topicSession: TopicSession, data: ByteArray): Message
      -Overrides MessagingService.createMessage
      -

      Returns an initialised Message with the current time, etc, already filled in.

      -

      Parameters

      - -topicSession - identifier for the topic and session the message is sent to.
      -
      -
      - -fun createMessage(topic: String, sessionID: Long, data: ByteArray): Message
      -Overrides MessagingService.createMessage
      -

      Returns an initialised Message with the current time, etc, already filled in.

      -

      Parameters

      - -topic - identifier for the general subject of the message, for example "platform.network_map.fetch". -Must not be blank.
      -
      - -sessionID - identifier for the session the message is part of. For messages sent to services before the -construction of a session, use DEFAULT_SESSION_ID.
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/default-executor.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/default-executor.html deleted file mode 100644 index ec5e614a62..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/default-executor.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingClient.defaultExecutor - - - - -com.r3corda.node.services.messaging / ArtemisMessagingClient / defaultExecutor
      -
      -

      defaultExecutor

      - -val defaultExecutor: Executor
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/make-network-map-address.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/make-network-map-address.html deleted file mode 100644 index b7dce37557..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/make-network-map-address.html +++ /dev/null @@ -1,18 +0,0 @@ - - -ArtemisMessagingClient.makeNetworkMapAddress - - - - -com.r3corda.node.services.messaging / ArtemisMessagingClient / makeNetworkMapAddress
      -
      -

      makeNetworkMapAddress

      - -fun makeNetworkMapAddress(hostAndPort: <ERROR CLASS>): SingleMessageRecipient
      -

      This should be the only way to generate an ArtemisAddress and that only of the remote NetworkMapService node. -All other addresses come from the NetworkMapCache, or myAddress below. -The node will populate with their own identity based address when they register with the NetworkMapService.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/make-recipient.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/make-recipient.html deleted file mode 100644 index 0c1b4916c0..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/make-recipient.html +++ /dev/null @@ -1,20 +0,0 @@ - - -ArtemisMessagingClient.makeRecipient - - - - -com.r3corda.node.services.messaging / ArtemisMessagingClient / makeRecipient
      -
      -

      makeRecipient

      - -fun makeRecipient(hostAndPort: <ERROR CLASS>): SingleMessageRecipient
      -

      Temp helper until network map is established.

      -
      -
      - -fun makeRecipient(hostname: String): <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/my-host-port.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/my-host-port.html deleted file mode 100644 index e486e00761..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/my-host-port.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingClient.myHostPort - - - - -com.r3corda.node.services.messaging / ArtemisMessagingClient / myHostPort
      -
      -

      myHostPort

      - -val myHostPort: <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/send.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/send.html deleted file mode 100644 index ec93a20c48..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/send.html +++ /dev/null @@ -1,24 +0,0 @@ - - -ArtemisMessagingClient.send - - - - -com.r3corda.node.services.messaging / ArtemisMessagingClient / send
      -
      -

      send

      - -fun send(message: Message, target: MessageRecipients): Unit
      -Overrides MessagingService.send
      -

      Sends a message to the given receiver. The details of how receivers are identified is up to the messaging -implementation: the type system provides an opaque high level view, with more fine grained control being -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.

      -

      There is no way to know if a message has been received. If your protocol requires this, you need the recipient -to send an ACK message back.

      -
      -
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/to-host-and-port.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/to-host-and-port.html deleted file mode 100644 index 08c1e3ffe5..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/to-host-and-port.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingClient.toHostAndPort - - - - -com.r3corda.node.services.messaging / ArtemisMessagingClient / toHostAndPort
      -
      -

      toHostAndPort

      - -fun toHostAndPort(hostname: String): <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-address/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-address/-init-.html deleted file mode 100644 index 896c2e0023..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-address/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -ArtemisMessagingComponent.Address.<init> - - - - -com.r3corda.node.services.messaging / ArtemisMessagingComponent / Address / <init>
      -
      -

      <init>

      -Address(hostAndPort: <ERROR CLASS>)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-address/host-and-port.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-address/host-and-port.html deleted file mode 100644 index 3cdce89a63..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-address/host-and-port.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingComponent.Address.hostAndPort - - - - -com.r3corda.node.services.messaging / ArtemisMessagingComponent / Address / hostAndPort
      -
      -

      hostAndPort

      - -val hostAndPort: <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-address/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-address/index.html deleted file mode 100644 index bbd26687a1..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-address/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - -ArtemisMessagingComponent.Address - - - - -com.r3corda.node.services.messaging / ArtemisMessagingComponent / Address
      -
      -

      Address

      -data class Address : SingleMessageRecipient
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -Address(hostAndPort: <ERROR CLASS>)
      -

      Properties

      - - - - - - - -
      -hostAndPort -val hostAndPort: <ERROR CLASS>
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-artemis-address/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-artemis-address/index.html index 65c76e5625..3b5895b7a1 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-artemis-address/index.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-artemis-address/index.html @@ -40,7 +40,10 @@ NodeAddress -data class NodeAddress : SingleMessageRecipient, ArtemisAddress +data class NodeAddress : SingleMessageRecipient, ArtemisAddress

      This is the class used to implement SingleMessageRecipient, for now. Note that in future this class +may change or evolve and code that relies upon it being a simple host/port may not function correctly. +For instance it may contain onion routing data.

      + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-c-l-i-e-n-t-s_-p-r-e-f-i-x.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-c-l-i-e-n-t-s_-p-r-e-f-i-x.html new file mode 100644 index 0000000000..d15a2e4d79 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-c-l-i-e-n-t-s_-p-r-e-f-i-x.html @@ -0,0 +1,15 @@ + + +ArtemisMessagingComponent.CLIENTS_PREFIX - + + + +com.r3corda.node.services.messaging / ArtemisMessagingComponent / CLIENTS_PREFIX
      +
      +

      CLIENTS_PREFIX

      + +const val CLIENTS_PREFIX: String
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-init-.html index 7ccb2aaa26..740607aa09 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-init-.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-init-.html @@ -7,11 +7,11 @@ com.r3corda.node.services.messaging / ArtemisMessagingComponent / <init>

      <init>

      -ArtemisMessagingComponent(directory: Path, config: NodeConfiguration)
      +ArtemisMessagingComponent(config: NodeSSLConfiguration)

      The base class for Artemis services that defines shared data structures and transport configuration

      Parameters

      - -directory - A place where Artemis can stash its message journal and other files.
      + +certificatePath - A place where Artemis can stash its message journal and other files.

      config - The config object is used to pass in the passwords for the certificate KeyStore and TrustStore
      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-node-address/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-node-address/-init-.html index e61e84b28d..defde86286 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-node-address/-init-.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-node-address/-init-.html @@ -8,6 +8,9 @@

      <init>

      NodeAddress(identity: PublicKey, hostAndPort: <ERROR CLASS>)
      +

      This is the class used to implement SingleMessageRecipient, for now. Note that in future this class +may change or evolve and code that relies upon it being a simple host/port may not function correctly. +For instance it may contain onion routing data.



      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-node-address/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-node-address/index.html index 82f9cea91b..fcb9d427f3 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-node-address/index.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-node-address/index.html @@ -7,7 +7,10 @@ com.r3corda.node.services.messaging / ArtemisMessagingComponent / NodeAddress

      NodeAddress

      -protected data class NodeAddress : SingleMessageRecipient, ArtemisAddress
      +data class NodeAddress : SingleMessageRecipient, ArtemisAddress
      +

      This is the class used to implement SingleMessageRecipient, for now. Note that in future this class +may change or evolve and code that relies upon it being a simple host/port may not function correctly. +For instance it may contain onion routing data.



      Constructors

      @@ -17,7 +20,10 @@ <init> -NodeAddress(identity: PublicKey, hostAndPort: <ERROR CLASS>) +NodeAddress(identity: PublicKey, hostAndPort: <ERROR CLASS>)

      This is the class used to implement SingleMessageRecipient, for now. Note that in future this class +may change or evolve and code that relies upon it being a simple host/port may not function correctly. +For instance it may contain onion routing data.

      + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-r-p-c_-r-e-q-u-e-s-t-s_-q-u-e-u-e.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-r-p-c_-r-e-q-u-e-s-t-s_-q-u-e-u-e.html new file mode 100644 index 0000000000..dfd49ed91c --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/-r-p-c_-r-e-q-u-e-s-t-s_-q-u-e-u-e.html @@ -0,0 +1,15 @@ + + +ArtemisMessagingComponent.RPC_REQUESTS_QUEUE - + + + +com.r3corda.node.services.messaging / ArtemisMessagingComponent / RPC_REQUESTS_QUEUE
      +
      +

      RPC_REQUESTS_QUEUE

      + +const val RPC_REQUESTS_QUEUE: String
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/check-store-passwords.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/check-store-passwords.html new file mode 100644 index 0000000000..6a7a2e34e7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/check-store-passwords.html @@ -0,0 +1,17 @@ + + +ArtemisMessagingComponent.checkStorePasswords - + + + +com.r3corda.node.services.messaging / ArtemisMessagingComponent / checkStorePasswords
      +
      +

      checkStorePasswords

      + +fun checkStorePasswords(): Unit
      +

      Returns nothing if the keystore was opened OK or throws if not. Useful to check the password, as +unfortunately Artemis tends to bury the exception when the password is wrong.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/config.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/config.html index 0137be5070..f68019bf9a 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/config.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/config.html @@ -8,7 +8,7 @@

      config

      -val config: NodeConfiguration
      +val config: NodeSSLConfiguration


      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/directory.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/directory.html deleted file mode 100644 index 290d12190d..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/directory.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingComponent.directory - - - - -com.r3corda.node.services.messaging / ArtemisMessagingComponent / directory
      -
      -

      directory

      - -val directory: Path
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/index.html index 083bd6b9f0..4e84575d62 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/index.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/index.html @@ -10,8 +10,8 @@ abstract class ArtemisMessagingComponent : SingletonSerializeAsToken

      The base class for Artemis services that defines shared data structures and transport configuration

      Parameters

      - -directory - A place where Artemis can stash its message journal and other files.
      + +certificatePath - A place where Artemis can stash its message journal and other files.

      config - The config object is used to pass in the passwords for the certificate KeyStore and TrustStore
      @@ -42,7 +42,10 @@ NodeAddress -data class NodeAddress : SingleMessageRecipient, ArtemisAddress +data class NodeAddress : SingleMessageRecipient, ArtemisAddress

      This is the class used to implement SingleMessageRecipient, for now. Note that in future this class +may change or evolve and code that relies upon it being a simple host/port may not function correctly. +For instance it may contain onion routing data.

      + @@ -53,7 +56,7 @@ <init> -ArtemisMessagingComponent(directory: Path, config: NodeConfiguration)

      The base class for Artemis services that defines shared data structures and transport configuration

      +ArtemisMessagingComponent(config: NodeSSLConfiguration)

      The base class for Artemis services that defines shared data structures and transport configuration

      @@ -65,13 +68,7 @@ config -val config: NodeConfiguration - - - -directory - -val directory: Path +val config: NodeSSLConfiguration @@ -80,6 +77,14 @@ +checkStorePasswords + +fun checkStorePasswords(): Unit

      Returns nothing if the keystore was opened OK or throws if not. Useful to check the password, as +unfortunately Artemis tends to bury the exception when the password is wrong.

      + + + + configureWithDevSSLCertificate fun configureWithDevSSLCertificate(): Unit

      Strictly for dev only automatically construct a server certificate/private key signed from @@ -88,15 +93,15 @@ the CA certs in Node resources. Then provision KeyStores into certificates folde -tcpTransport +parseKeyFromQueueName -fun tcpTransport(direction: ConnectionDirection, host: String, port: Int): <ERROR CLASS> +fun parseKeyFromQueueName(name: String): PublicKey -tryParseKeyFromQueueName +tcpTransport -fun tryParseKeyFromQueueName(queueName: <ERROR CLASS>): PublicKey? +fun tcpTransport(direction: ConnectionDirection, host: String, port: Int): <ERROR CLASS> @@ -116,6 +121,12 @@ the CA certs in Node resources. Then provision KeyStores into certificates folde +CLIENTS_PREFIX + +const val CLIENTS_PREFIX: String + + + NETWORK_MAP_ADDRESS val NETWORK_MAP_ADDRESS: <ERROR CLASS> @@ -126,6 +137,12 @@ the CA certs in Node resources. Then provision KeyStores into certificates folde const val PEERS_PREFIX: String + + +RPC_REQUESTS_QUEUE + +const val RPC_REQUESTS_QUEUE: String +

      Companion Object Functions

      @@ -133,6 +150,15 @@ the CA certs in Node resources. Then provision KeyStores into certificates folde +toHostAndPort + +fun toHostAndPort(target: MessageRecipients): <ERROR CLASS>

      Assuming the passed in target address is actually an ArtemisAddress will extract the host and port of the node. This should +only be used in unit tests and the internals of the messaging services to keep addressing opaque for the future. +N.B. Marked as JvmStatic to allow use in the inherited classes.

      + + + + toQueueName fun toQueueName(target: MessageRecipients): <ERROR CLASS>

      Assuming the passed in target address is actually an ArtemisAddress will extract the queue name used. @@ -148,18 +174,26 @@ N.B. Marked as JvmStatic to allow use in the inherited classes.

      -ArtemisMessagingClient +ArtemisMessagingServer -class ArtemisMessagingClient : ArtemisMessagingComponent, MessagingServiceInternal

      This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. -Artemis is a message queue broker and here we run a client connecting to the specified broker instance -ArtemisMessagingServer.

      +class ArtemisMessagingServer : ArtemisMessagingComponent

      This class configures and manages an Apache Artemis message queue broker.

      -ArtemisMessagingServer +CordaRPCClient -class ArtemisMessagingServer : ArtemisMessagingComponent

      This class configures and manages an Apache Artemis message queue broker.

      +class CordaRPCClient : Closeable, ArtemisMessagingComponent

      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.

      + + + + +NodeMessagingClient + +class NodeMessagingClient : ArtemisMessagingComponent, MessagingServiceInternal

      This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. +Artemis is a message queue broker and here we run a client connecting to the specified broker instance +ArtemisMessagingServer. Its primarily concerned with peer-to-peer messaging.

      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/parse-key-from-queue-name.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/parse-key-from-queue-name.html new file mode 100644 index 0000000000..1b7917f1ef --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/parse-key-from-queue-name.html @@ -0,0 +1,15 @@ + + +ArtemisMessagingComponent.parseKeyFromQueueName - + + + +com.r3corda.node.services.messaging / ArtemisMessagingComponent / parseKeyFromQueueName
      +
      +

      parseKeyFromQueueName

      + +protected fun parseKeyFromQueueName(name: String): PublicKey
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/to-host-and-port.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/to-host-and-port.html new file mode 100644 index 0000000000..42a496fa15 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/to-host-and-port.html @@ -0,0 +1,18 @@ + + +ArtemisMessagingComponent.toHostAndPort - + + + +com.r3corda.node.services.messaging / ArtemisMessagingComponent / toHostAndPort
      +
      +

      toHostAndPort

      + +fun toHostAndPort(target: MessageRecipients): <ERROR CLASS>
      +

      Assuming the passed in target address is actually an ArtemisAddress will extract the host and port of the node. This should +only be used in unit tests and the internals of the messaging services to keep addressing opaque for the future. +N.B. Marked as JvmStatic to allow use in the inherited classes.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/try-parse-key-from-queue-name.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/try-parse-key-from-queue-name.html deleted file mode 100644 index b7830ae433..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-component/try-parse-key-from-queue-name.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingComponent.tryParseKeyFromQueueName - - - - -com.r3corda.node.services.messaging / ArtemisMessagingComponent / tryParseKeyFromQueueName
      -
      -

      tryParseKeyFromQueueName

      - -protected fun tryParseKeyFromQueueName(queueName: <ERROR CLASS>): PublicKey?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/-init-.html index f74011d8a9..de5a64746b 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/-init-.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/-init-.html @@ -7,7 +7,7 @@ com.r3corda.node.services.messaging / ArtemisMessagingServer / <init>

      <init>

      -ArtemisMessagingServer(directory: Path, config: NodeConfiguration, myHostPort: <ERROR CLASS>, networkMapCache: NetworkMapCache)
      +ArtemisMessagingServer(config: NodeConfiguration, myHostPort: <ERROR CLASS>, networkMapCache: NetworkMapCache)

      This class configures and manages an Apache Artemis message queue broker.

      Nodes communication is managed using an Artemis specific protocol, but it supports other protocols like AMQP/1.0 as well for interop.

      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/add-connector.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/add-connector.html deleted file mode 100644 index ecdcee3d01..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/add-connector.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingServer.addConnector - - - - -com.r3corda.node.services.messaging / ArtemisMessagingServer / addConnector
      -
      -

      addConnector

      - -fun addConnector(hostAndPort: <ERROR CLASS>): <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/bridge-exists.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/bridge-exists.html deleted file mode 100644 index 76b367d81c..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/bridge-exists.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingServer.bridgeExists - - - - -com.r3corda.node.services.messaging / ArtemisMessagingServer / bridgeExists
      -
      -

      bridgeExists

      - -fun bridgeExists(name: <ERROR CLASS>): <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/bridge-to-network-map-service.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/bridge-to-network-map-service.html index 8417ea9724..206686adc3 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/bridge-to-network-map-service.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/bridge-to-network-map-service.html @@ -7,8 +7,8 @@ com.r3corda.node.services.messaging / ArtemisMessagingServer / bridgeToNetworkMapService

      bridgeToNetworkMapService

      - -fun bridgeToNetworkMapService(networkMapService: NodeInfo?): Unit
      + +fun bridgeToNetworkMapService(networkMapService: SingleMessageRecipient?): Unit


      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/connector-exists.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/connector-exists.html deleted file mode 100644 index 8f9d47b976..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/connector-exists.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingServer.connectorExists - - - - -com.r3corda.node.services.messaging / ArtemisMessagingServer / connectorExists
      -
      -

      connectorExists

      - -fun connectorExists(hostAndPort: <ERROR CLASS>): Boolean
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/deploy-bridge.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/deploy-bridge.html deleted file mode 100644 index ff260b3639..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/deploy-bridge.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingServer.deployBridge - - - - -com.r3corda.node.services.messaging / ArtemisMessagingServer / deployBridge
      -
      -

      deployBridge

      - -fun deployBridge(hostAndPort: <ERROR CLASS>, name: <ERROR CLASS>): <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/index.html index ca1b2fc878..2fed92972d 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/index.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/index.html @@ -25,7 +25,7 @@ a fully connected network, trusted network or on localhost.

      <init> -ArtemisMessagingServer(directory: Path, config: NodeConfiguration, myHostPort: <ERROR CLASS>, networkMapCache: NetworkMapCache)

      This class configures and manages an Apache Artemis message queue broker.

      +ArtemisMessagingServer(config: NodeConfiguration, myHostPort: <ERROR CLASS>, networkMapCache: NetworkMapCache)

      This class configures and manages an Apache Artemis message queue broker.

      @@ -54,13 +54,7 @@ a fully connected network, trusted network or on localhost.

      config -val config: NodeConfiguration - - - -directory - -val directory: Path +val config: NodeSSLConfiguration @@ -69,33 +63,9 @@ a fully connected network, trusted network or on localhost.

      -addConnector - -fun addConnector(hostAndPort: <ERROR CLASS>): <ERROR CLASS> - - - -bridgeExists - -fun bridgeExists(name: <ERROR CLASS>): <ERROR CLASS> - - - bridgeToNetworkMapService -fun bridgeToNetworkMapService(networkMapService: NodeInfo?): Unit - - - -connectorExists - -fun connectorExists(hostAndPort: <ERROR CLASS>): Boolean - - - -deployBridge - -fun deployBridge(hostAndPort: <ERROR CLASS>, name: <ERROR CLASS>): <ERROR CLASS> +fun bridgeToNetworkMapService(networkMapService: SingleMessageRecipient?): Unit @@ -116,6 +86,14 @@ a fully connected network, trusted network or on localhost.

      +checkStorePasswords + +fun checkStorePasswords(): Unit

      Returns nothing if the keystore was opened OK or throws if not. Useful to check the password, as +unfortunately Artemis tends to bury the exception when the password is wrong.

      + + + + configureWithDevSSLCertificate fun configureWithDevSSLCertificate(): Unit

      Strictly for dev only automatically construct a server certificate/private key signed from @@ -124,15 +102,15 @@ the CA certs in Node resources. Then provision KeyStores into certificates folde -tcpTransport +parseKeyFromQueueName -fun tcpTransport(direction: ConnectionDirection, host: String, port: Int): <ERROR CLASS> +fun parseKeyFromQueueName(name: String): PublicKey -tryParseKeyFromQueueName +tcpTransport -fun tryParseKeyFromQueueName(queueName: <ERROR CLASS>): PublicKey? +fun tcpTransport(direction: ConnectionDirection, host: String, port: Int): <ERROR CLASS> diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/my-address.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/my-address.html deleted file mode 100644 index f53ccb60bf..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-server/my-address.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingServer.myAddress - - - - -com.r3corda.node.services.messaging / ArtemisMessagingServer / myAddress
      -
      -

      myAddress

      - -val myAddress: SingleMessageRecipient
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/-init-.html deleted file mode 100644 index cecaad77d5..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingService.Handler.<init> - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / Handler / <init>
      -
      -

      <init>

      -Handler(executor: Executor?, topicSession: TopicSession, callback: (Message, MessageHandlerRegistration) -> Unit)
      -

      A registration to handle messages of different types

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/callback.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/callback.html deleted file mode 100644 index 66fc6bac3e..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/callback.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingService.Handler.callback - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / Handler / callback
      -
      -

      callback

      - -val callback: (Message, MessageHandlerRegistration) -> Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/executor.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/executor.html deleted file mode 100644 index 59035784e7..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/executor.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingService.Handler.executor - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / Handler / executor
      -
      -

      executor

      - -val executor: Executor?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/index.html deleted file mode 100644 index a0b48f9ffe..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/index.html +++ /dev/null @@ -1,50 +0,0 @@ - - -ArtemisMessagingService.Handler - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / Handler
      -
      -

      Handler

      -inner class Handler : MessageHandlerRegistration
      -

      A registration to handle messages of different types

      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -Handler(executor: Executor?, topicSession: TopicSession, callback: (Message, MessageHandlerRegistration) -> Unit)

      A registration to handle messages of different types

      -
      -

      Properties

      - - - - - - - - - - - - - - - -
      -callback -val callback: (Message, MessageHandlerRegistration) -> Unit
      -executor -val executor: Executor?
      -topicSession -val topicSession: TopicSession
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/topic-session.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/topic-session.html deleted file mode 100644 index a0567c1689..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/topic-session.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingService.Handler.topicSession - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / Handler / topicSession
      -
      -

      topicSession

      - -val topicSession: TopicSession
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/topic.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/topic.html deleted file mode 100644 index abd6bedaea..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-handler/topic.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingService.Handler.topic - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / Handler / topic
      -
      -

      topic

      - -val topic: String
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-init-.html deleted file mode 100644 index f5d6af0c83..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-init-.html +++ /dev/null @@ -1,35 +0,0 @@ - - -ArtemisMessagingService.<init> - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / <init>
      -
      -

      <init>

      -ArtemisMessagingService(directory: Path, myHostPort: <ERROR CLASS>, config: NodeConfiguration, defaultExecutor: Executor = RunOnCallerThread)
      -

      This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. -Artemis is a message queue broker and here, we embed the entire server inside our own process. Nodes communicate -with each other using an Artemis specific protocol, but it supports other protocols like AMQP/1.0 -as well for interop.

      -

      The current implementation is skeletal and lacks features like security or firewall tunnelling (that is, you must -be able to receive TCP connections in order to receive messages). It is good enough for local communication within -a fully connected network, trusted network or on localhost.

      -
      -
      -

      Parameters

      - -directory - A place where Artemis can stash its message journal and other files.
      -
      - -myHostPort - What host and port to bind to for receiving inbound connections.
      -
      - -config - The config object is used to pass in the passwords for the certificate KeyStore and TrustStore
      -
      - -defaultExecutor - This will be used as the default executor to run message handlers on, if no other is specified.
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-s-e-s-s-i-o-n_-i-d_-p-r-o-p-e-r-t-y.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-s-e-s-s-i-o-n_-i-d_-p-r-o-p-e-r-t-y.html deleted file mode 100644 index a2dff740b4..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-s-e-s-s-i-o-n_-i-d_-p-r-o-p-e-r-t-y.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingService.SESSION_ID_PROPERTY - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / SESSION_ID_PROPERTY
      -
      -

      SESSION_ID_PROPERTY

      - -val SESSION_ID_PROPERTY: String
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-t-o-p-i-c_-p-r-o-p-e-r-t-y.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-t-o-p-i-c_-p-r-o-p-e-r-t-y.html deleted file mode 100644 index 048956d47a..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/-t-o-p-i-c_-p-r-o-p-e-r-t-y.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingService.TOPIC_PROPERTY - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / TOPIC_PROPERTY
      -
      -

      TOPIC_PROPERTY

      - -val TOPIC_PROPERTY: String
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/add-message-handler.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/add-message-handler.html deleted file mode 100644 index 5babe6d2f6..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/add-message-handler.html +++ /dev/null @@ -1,50 +0,0 @@ - - -ArtemisMessagingService.addMessageHandler - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / addMessageHandler
      -
      -

      addMessageHandler

      - -fun addMessageHandler(topic: String, sessionID: Long, executor: Executor?, callback: (Message, MessageHandlerRegistration) -> Unit): MessageHandlerRegistration
      -Overrides MessagingService.addMessageHandler
      -

      The provided function will be invoked for each received message whose topic matches the given string, on the given -executor.

      -

      If no executor is received then the callback will run on threads provided by the messaging service, and the -callback is expected to be thread safe as a result.

      -

      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 -itself and yet addMessageHandler hasnt returned the handle yet.

      -
      -
      -

      Parameters

      - -topic - identifier for the general subject of the message, for example "platform.network_map.fetch". -The topic can be the empty string to match all messages (session ID must be DEFAULT_SESSION_ID).
      -
      - -sessionID - identifier for the session the message is part of. For services listening before -a session is established, use DEFAULT_SESSION_ID.
      -
      -
      - -fun addMessageHandler(topicSession: TopicSession, executor: Executor?, callback: (Message, MessageHandlerRegistration) -> Unit): MessageHandlerRegistration
      -Overrides MessagingService.addMessageHandler
      -

      The provided function will be invoked for each received message whose topic and session matches, on the -given executor.

      -

      If no executor is received then the callback will run on threads provided by the messaging service, and the -callback is expected to be thread safe as a result.

      -

      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 -itself and yet addMessageHandler hasnt returned the handle yet.

      -
      -
      -

      Parameters

      - -topicSession - identifier for the topic and session to listen for messages arriving on.
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/configure-with-dev-s-s-l-certificate.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/configure-with-dev-s-s-l-certificate.html deleted file mode 100644 index 4a3d20c1c8..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/configure-with-dev-s-s-l-certificate.html +++ /dev/null @@ -1,17 +0,0 @@ - - -ArtemisMessagingService.configureWithDevSSLCertificate - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / configureWithDevSSLCertificate
      -
      -

      configureWithDevSSLCertificate

      - -fun configureWithDevSSLCertificate(): Unit
      -

      Strictly for dev only automatically construct a server certificate/private key signed from -the CA certs in Node resources. Then provision KeyStores into certificates folder under node path.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/create-message.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/create-message.html deleted file mode 100644 index 34f70346b6..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/create-message.html +++ /dev/null @@ -1,34 +0,0 @@ - - -ArtemisMessagingService.createMessage - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / createMessage
      -
      -

      createMessage

      - -fun createMessage(topicSession: TopicSession, data: ByteArray): Message
      -Overrides MessagingService.createMessage
      -

      Returns an initialised Message with the current time, etc, already filled in.

      -

      Parameters

      - -topicSession - identifier for the topic and session the message is sent to.
      -
      -
      - -fun createMessage(topic: String, sessionID: Long, data: ByteArray): Message
      -Overrides MessagingService.createMessage
      -

      Returns an initialised Message with the current time, etc, already filled in.

      -

      Parameters

      - -topic - identifier for the general subject of the message, for example "platform.network_map.fetch". -Must not be blank.
      -
      - -sessionID - identifier for the session the message is part of. For messages sent to services before the -construction of a session, use DEFAULT_SESSION_ID.
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/default-executor.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/default-executor.html deleted file mode 100644 index 69bc9cfb7a..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/default-executor.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingService.defaultExecutor - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / defaultExecutor
      -
      -

      defaultExecutor

      - -val defaultExecutor: Executor
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/directory.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/directory.html deleted file mode 100644 index aa6d77e4d4..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/directory.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingService.directory - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / directory
      -
      -

      directory

      - -val directory: Path
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/index.html deleted file mode 100644 index 30d485fe57..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/index.html +++ /dev/null @@ -1,242 +0,0 @@ - - -ArtemisMessagingService - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService
      -
      -

      ArtemisMessagingService

      -class ArtemisMessagingService : SingletonSerializeAsToken, MessagingServiceInternal
      -

      This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. -Artemis is a message queue broker and here, we embed the entire server inside our own process. Nodes communicate -with each other using an Artemis specific protocol, but it supports other protocols like AMQP/1.0 -as well for interop.

      -

      The current implementation is skeletal and lacks features like security or firewall tunnelling (that is, you must -be able to receive TCP connections in order to receive messages). It is good enough for local communication within -a fully connected network, trusted network or on localhost.

      -
      -
      -

      Parameters

      - -directory - A place where Artemis can stash its message journal and other files.
      -
      - -myHostPort - What host and port to bind to for receiving inbound connections.
      -
      - -config - The config object is used to pass in the passwords for the certificate KeyStore and TrustStore
      -
      - -defaultExecutor - This will be used as the default executor to run message handlers on, if no other is specified.
      -
      -
      -

      Types

      - - - - - - - -
      -Handler -inner class Handler : MessageHandlerRegistration

      A registration to handle messages of different types

      -
      -

      Constructors

      - - - - - - - -
      -<init> -ArtemisMessagingService(directory: Path, myHostPort: <ERROR CLASS>, config: NodeConfiguration, defaultExecutor: Executor = RunOnCallerThread)

      This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. -Artemis is a message queue broker and here, we embed the entire server inside our own process. Nodes communicate -with each other using an Artemis specific protocol, but it supports other protocols like AMQP/1.0 -as well for interop.

      -
      -

      Properties

      - - - - - - - - - - - - - - - - - - - - - - - -
      -config -val config: NodeConfiguration
      -defaultExecutor -val defaultExecutor: Executor
      -directory -val directory: Path
      -myAddress -val myAddress: SingleMessageRecipient

      Returns an address that refers to this node.

      -
      -myHostPort -val myHostPort: <ERROR CLASS>
      -

      Functions

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -addMessageHandler -fun addMessageHandler(topic: String, sessionID: Long, executor: Executor?, callback: (Message, MessageHandlerRegistration) -> Unit): MessageHandlerRegistration

      The provided function will be invoked for each received message whose topic matches the given string, on the given -executor.

      -fun addMessageHandler(topicSession: TopicSession, executor: Executor?, callback: (Message, MessageHandlerRegistration) -> Unit): MessageHandlerRegistration

      The provided function will be invoked for each received message whose topic and session matches, on the -given executor.

      -
      -configureWithDevSSLCertificate -fun configureWithDevSSLCertificate(): Unit

      Strictly for dev only automatically construct a server certificate/private key signed from -the CA certs in Node resources. Then provision KeyStores into certificates folder under node path.

      -
      -createMessage -fun createMessage(topicSession: TopicSession, data: ByteArray): Message
      -fun createMessage(topic: String, sessionID: Long, data: ByteArray): Message

      Returns an initialised Message with the current time, etc, already filled in.

      -
      -registerTrustedAddress -fun registerTrustedAddress(address: SingleMessageRecipient): Unit
      -removeMessageHandler -fun removeMessageHandler(registration: MessageHandlerRegistration): Unit

      Removes a handler given the object returned from addMessageHandler. The callback will no longer be invoked once -this method has returned, although executions that are currently in flight will not be interrupted.

      -
      -send -fun send(message: Message, target: MessageRecipients): Unit

      Sends a message to the given receiver. The details of how receivers are identified is up to the messaging -implementation: the type system provides an opaque high level view, with more fine grained control being -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.

      -
      -start -fun start(): Unit
      -stop -fun stop(): Unit
      -

      Inherited Functions

      - - - - - - - -
      -toToken -open fun toToken(context: SerializeAsTokenContext): SerializationToken
      -

      Companion Object Properties

      - - - - - - - - - - - - - - - -
      -SESSION_ID_PROPERTY -val SESSION_ID_PROPERTY: String
      -TOPIC_PROPERTY -val TOPIC_PROPERTY: String
      -log -val log: <ERROR CLASS>
      -

      Companion Object Functions

      - - - - - - - - - - - -
      -makeRecipient -fun makeRecipient(hostAndPort: <ERROR CLASS>): SingleMessageRecipient

      Temp helper until network map is established.

      -fun makeRecipient(hostname: String): <ERROR CLASS>
      -toHostAndPort -fun toHostAndPort(hostname: String): <ERROR CLASS>
      -

      Extension Functions

      - - - - - - - - - - - -
      -runOnNextMessage -fun MessagingService.runOnNextMessage(topic: String, sessionID: Long, executor: Executor? = null, callback: (Message) -> Unit): Unit

      Registers a handler for the given topic and session ID that runs the given callback with the message and then removes -itself. This is useful for one-shot handlers that arent supposed to stick around permanently. Note that this callback -doesnt take the registration object, unlike the callback to MessagingService.addMessageHandler, as the handler is -automatically deregistered before the callback runs.

      -fun MessagingService.runOnNextMessage(topicSession: TopicSession, executor: Executor? = null, callback: (Message) -> Unit): Unit

      Registers a handler for the given topic and session that runs the given callback with the message and then removes -itself. This is useful for one-shot handlers that arent supposed to stick around permanently. Note that this callback -doesnt take the registration object, unlike the callback to MessagingService.addMessageHandler.

      -
      -send -fun MessagingService.send(topic: String, sessionID: Long, payload: Any, to: MessageRecipients): Unit
      -fun MessagingService.send(topicSession: TopicSession, payload: Any, to: MessageRecipients): Unit
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/log.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/log.html deleted file mode 100644 index be20d81003..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/log.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingService.log - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / log
      -
      -

      log

      - -val log: <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/make-recipient.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/make-recipient.html deleted file mode 100644 index ff0fa0740f..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/make-recipient.html +++ /dev/null @@ -1,20 +0,0 @@ - - -ArtemisMessagingService.makeRecipient - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / makeRecipient
      -
      -

      makeRecipient

      - -fun makeRecipient(hostAndPort: <ERROR CLASS>): SingleMessageRecipient
      -

      Temp helper until network map is established.

      -
      -
      - -fun makeRecipient(hostname: String): <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/my-address.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/my-address.html deleted file mode 100644 index 277fcf82a2..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/my-address.html +++ /dev/null @@ -1,17 +0,0 @@ - - -ArtemisMessagingService.myAddress - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / myAddress
      -
      -

      myAddress

      - -val myAddress: SingleMessageRecipient
      -Overrides MessagingService.myAddress
      -

      Returns an address that refers to this node.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/my-host-port.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/my-host-port.html deleted file mode 100644 index 3300b9e7b9..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/my-host-port.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingService.myHostPort - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / myHostPort
      -
      -

      myHostPort

      - -val myHostPort: <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/register-trusted-address.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/register-trusted-address.html deleted file mode 100644 index 8a5f6efd2a..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/register-trusted-address.html +++ /dev/null @@ -1,16 +0,0 @@ - - -ArtemisMessagingService.registerTrustedAddress - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / registerTrustedAddress
      -
      -

      registerTrustedAddress

      - -fun registerTrustedAddress(address: SingleMessageRecipient): Unit
      -Overrides MessagingServiceInternal.registerTrustedAddress
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/remove-message-handler.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/remove-message-handler.html deleted file mode 100644 index ddf672cdb3..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/remove-message-handler.html +++ /dev/null @@ -1,24 +0,0 @@ - - -ArtemisMessagingService.removeMessageHandler - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / removeMessageHandler
      -
      -

      removeMessageHandler

      - -fun removeMessageHandler(registration: MessageHandlerRegistration): Unit
      -Overrides MessagingService.removeMessageHandler
      -

      Removes a handler given the object returned from addMessageHandler. The callback will no longer be invoked once -this method has returned, although executions that are currently in flight will not be interrupted.

      -

      Exceptions

      - -IllegalArgumentException - if the given registration isnt valid for this messaging service.
      -
      - -IllegalStateException - if the given registration was already de-registered.
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/stop.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/stop.html deleted file mode 100644 index bb1f8ab698..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/stop.html +++ /dev/null @@ -1,16 +0,0 @@ - - -ArtemisMessagingService.stop - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / stop
      -
      -

      stop

      - -fun stop(): Unit
      -Overrides MessagingServiceInternal.stop
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/to-host-and-port.html b/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/to-host-and-port.html deleted file mode 100644 index ca9c94feb8..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/to-host-and-port.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ArtemisMessagingService.toHostAndPort - - - - -com.r3corda.node.services.messaging / ArtemisMessagingService / toHostAndPort
      -
      -

      toHostAndPort

      - -fun toHostAndPort(hostname: String): <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/-init-.html new file mode 100644 index 0000000000..23b554d1d7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/-init-.html @@ -0,0 +1,15 @@ + + +ClientRPCRequestMessage.<init> - + + + +com.r3corda.node.services.messaging / ClientRPCRequestMessage / <init>
      +
      +

      <init>

      +ClientRPCRequestMessage(args: SerializedBytes<Array<Any>>, replyToAddress: String, observationsToAddress: String?, methodName: String)
      +

      The contents of an RPC request message, separated from the MQ layer.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/-m-e-t-h-o-d_-n-a-m-e.html b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/-m-e-t-h-o-d_-n-a-m-e.html new file mode 100644 index 0000000000..528871fb30 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/-m-e-t-h-o-d_-n-a-m-e.html @@ -0,0 +1,15 @@ + + +ClientRPCRequestMessage.METHOD_NAME - + + + +com.r3corda.node.services.messaging / ClientRPCRequestMessage / METHOD_NAME
      +
      +

      METHOD_NAME

      + +const val METHOD_NAME: String
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/-o-b-s-e-r-v-a-t-i-o-n-s_-t-o.html b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/-o-b-s-e-r-v-a-t-i-o-n-s_-t-o.html new file mode 100644 index 0000000000..bad0532f64 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/-o-b-s-e-r-v-a-t-i-o-n-s_-t-o.html @@ -0,0 +1,15 @@ + + +ClientRPCRequestMessage.OBSERVATIONS_TO - + + + +com.r3corda.node.services.messaging / ClientRPCRequestMessage / OBSERVATIONS_TO
      +
      +

      OBSERVATIONS_TO

      + +const val OBSERVATIONS_TO: String
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/-r-e-p-l-y_-t-o.html b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/-r-e-p-l-y_-t-o.html new file mode 100644 index 0000000000..c85ed15d64 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/-r-e-p-l-y_-t-o.html @@ -0,0 +1,15 @@ + + +ClientRPCRequestMessage.REPLY_TO - + + + +com.r3corda.node.services.messaging / ClientRPCRequestMessage / REPLY_TO
      +
      +

      REPLY_TO

      + +const val REPLY_TO: String
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/args.html b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/args.html new file mode 100644 index 0000000000..0efa2627f3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/args.html @@ -0,0 +1,15 @@ + + +ClientRPCRequestMessage.args - + + + +com.r3corda.node.services.messaging / ClientRPCRequestMessage / args
      +
      +

      args

      + +val args: SerializedBytes<Array<Any>>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/index.html new file mode 100644 index 0000000000..3a1d4fe2b4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/index.html @@ -0,0 +1,79 @@ + + +ClientRPCRequestMessage - + + + +com.r3corda.node.services.messaging / ClientRPCRequestMessage
      +
      +

      ClientRPCRequestMessage

      +data class ClientRPCRequestMessage
      +

      The contents of an RPC request message, separated from the MQ layer.

      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +ClientRPCRequestMessage(args: SerializedBytes<Array<Any>>, replyToAddress: String, observationsToAddress: String?, methodName: String)

      The contents of an RPC request message, separated from the MQ layer.

      +
      +

      Properties

      + + + + + + + + + + + + + + + + + + + +
      +args +val args: SerializedBytes<Array<Any>>
      +methodName +val methodName: String
      +observationsToAddress +val observationsToAddress: String?
      +replyToAddress +val replyToAddress: String
      +

      Companion Object Properties

      + + + + + + + + + + + + + + + +
      +METHOD_NAME +const val METHOD_NAME: String
      +OBSERVATIONS_TO +const val OBSERVATIONS_TO: String
      +REPLY_TO +const val REPLY_TO: String
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/method-name.html b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/method-name.html new file mode 100644 index 0000000000..4686fc2562 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/method-name.html @@ -0,0 +1,15 @@ + + +ClientRPCRequestMessage.methodName - + + + +com.r3corda.node.services.messaging / ClientRPCRequestMessage / methodName
      +
      +

      methodName

      + +val methodName: String
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/observations-to-address.html b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/observations-to-address.html new file mode 100644 index 0000000000..ce94e7be5f --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/observations-to-address.html @@ -0,0 +1,15 @@ + + +ClientRPCRequestMessage.observationsToAddress - + + + +com.r3corda.node.services.messaging / ClientRPCRequestMessage / observationsToAddress
      +
      +

      observationsToAddress

      + +val observationsToAddress: String?
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/reply-to-address.html b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/reply-to-address.html new file mode 100644 index 0000000000..a7be1d1991 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-client-r-p-c-request-message/reply-to-address.html @@ -0,0 +1,15 @@ + + +ClientRPCRequestMessage.replyToAddress - + + + +com.r3corda.node.services.messaging / ClientRPCRequestMessage / replyToAddress
      +
      +

      replyToAddress

      + +val replyToAddress: String
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-corda-r-p-c-ops.html b/docs/build/html/api/com.r3corda.node.services.messaging/-corda-r-p-c-ops.html new file mode 100644 index 0000000000..c94db7f7cb --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-corda-r-p-c-ops.html @@ -0,0 +1,41 @@ + + +CordaRPCOps - + + + +com.r3corda.node.services.messaging / CordaRPCOps
      +
      +

      CordaRPCOps

      +interface CordaRPCOps : RPCOps
      +

      RPC operations that the node exposes to clients using the Java client library. These can be called from +client apps and are implemented by the node in the ServerRPCOps class.

      +
      +
      +

      Inherited Properties

      + + + + + + + +
      +protocolVersion +abstract val protocolVersion: Int

      Returns the RPC protocol version. Exists since version 0 so guaranteed to be present.

      +
      +

      Inheritors

      + + + + + + + +
      +ServerRPCOps +class ServerRPCOps : CordaRPCOps

      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.

      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-marshalled-observation/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-marshalled-observation/-init-.html new file mode 100644 index 0000000000..7928957420 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-marshalled-observation/-init-.html @@ -0,0 +1,15 @@ + + +MarshalledObservation.<init> - + + + +com.r3corda.node.services.messaging / MarshalledObservation / <init>
      +
      +

      <init>

      +MarshalledObservation(forHandle: Int, what: <ERROR CLASS><out <ERROR CLASS>>)
      +

      Used in the RPC wire protocol to wrap an observation with the handle of the observable its intended for.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-marshalled-observation/for-handle.html b/docs/build/html/api/com.r3corda.node.services.messaging/-marshalled-observation/for-handle.html new file mode 100644 index 0000000000..8d5d02639a --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-marshalled-observation/for-handle.html @@ -0,0 +1,15 @@ + + +MarshalledObservation.forHandle - + + + +com.r3corda.node.services.messaging / MarshalledObservation / forHandle
      +
      +

      forHandle

      + +val forHandle: Int
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-marshalled-observation/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-marshalled-observation/index.html new file mode 100644 index 0000000000..6d7338dc5e --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-marshalled-observation/index.html @@ -0,0 +1,44 @@ + + +MarshalledObservation - + + + +com.r3corda.node.services.messaging / MarshalledObservation
      +
      +

      MarshalledObservation

      +data class MarshalledObservation
      +

      Used in the RPC wire protocol to wrap an observation with the handle of the observable its intended for.

      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +MarshalledObservation(forHandle: Int, what: <ERROR CLASS><out <ERROR CLASS>>)

      Used in the RPC wire protocol to wrap an observation with the handle of the observable its intended for.

      +
      +

      Properties

      + + + + + + + + + + + +
      +forHandle +val forHandle: Int
      +what +val what: <ERROR CLASS><out <ERROR CLASS>>
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-marshalled-observation/what.html b/docs/build/html/api/com.r3corda.node.services.messaging/-marshalled-observation/what.html new file mode 100644 index 0000000000..9c459e8a2d --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-marshalled-observation/what.html @@ -0,0 +1,15 @@ + + +MarshalledObservation.what - + + + +com.r3corda.node.services.messaging / MarshalledObservation / what
      +
      +

      what

      + +val what: <ERROR CLASS><out <ERROR CLASS>>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-handler/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-handler/-init-.html new file mode 100644 index 0000000000..64604a4241 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-handler/-init-.html @@ -0,0 +1,15 @@ + + +NodeMessagingClient.Handler.<init> - + + + +com.r3corda.node.services.messaging / NodeMessagingClient / Handler / <init>
      +
      +

      <init>

      +Handler(executor: Executor?, topicSession: TopicSession, callback: (Message, MessageHandlerRegistration) -> Unit)
      +

      A registration to handle messages of different types

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-handler/callback.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-handler/callback.html similarity index 71% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-handler/callback.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-handler/callback.html index 25ca6b0dcd..58d1fc7c1b 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-handler/callback.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-handler/callback.html @@ -1,13 +1,13 @@ -ArtemisMessagingClient.Handler.callback - +NodeMessagingClient.Handler.callback - -com.r3corda.node.services.messaging / ArtemisMessagingClient / Handler / callback
      +com.r3corda.node.services.messaging / NodeMessagingClient / Handler / callback

      callback

      - + val callback: (Message, MessageHandlerRegistration) -> Unit


      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-handler/executor.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-handler/executor.html similarity index 61% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-handler/executor.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-handler/executor.html index 97f6842558..8677d31458 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-handler/executor.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-handler/executor.html @@ -1,13 +1,13 @@ -ArtemisMessagingClient.Handler.executor - +NodeMessagingClient.Handler.executor - -com.r3corda.node.services.messaging / ArtemisMessagingClient / Handler / executor
      +com.r3corda.node.services.messaging / NodeMessagingClient / Handler / executor

      executor

      - + val executor: Executor?


      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-handler/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-handler/index.html similarity index 51% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-handler/index.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-handler/index.html index e76cca9ee7..d26c5f68b1 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-handler/index.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-handler/index.html @@ -1,10 +1,10 @@ -ArtemisMessagingClient.Handler - +NodeMessagingClient.Handler - -com.r3corda.node.services.messaging / ArtemisMessagingClient / Handler
      +com.r3corda.node.services.messaging / NodeMessagingClient / Handler

      Handler

      data class Handler : MessageHandlerRegistration
      @@ -18,7 +18,7 @@ <init> -Handler(executor: Executor?, topicSession: TopicSession, callback: (Message, MessageHandlerRegistration) -> Unit)

      A registration to handle messages of different types

      +Handler(executor: Executor?, topicSession: TopicSession, callback: (Message, MessageHandlerRegistration) -> Unit)

      A registration to handle messages of different types

      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-handler/topic-session.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-handler/topic-session.html similarity index 58% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-handler/topic-session.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-handler/topic-session.html index 5db5a30f19..423169ef99 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-handler/topic-session.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-handler/topic-session.html @@ -1,13 +1,13 @@ -ArtemisMessagingClient.Handler.topicSession - +NodeMessagingClient.Handler.topicSession - -com.r3corda.node.services.messaging / ArtemisMessagingClient / Handler / topicSession
      +com.r3corda.node.services.messaging / NodeMessagingClient / Handler / topicSession

      topicSession

      - + val topicSession: TopicSession


      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-init-.html new file mode 100644 index 0000000000..330857a049 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-init-.html @@ -0,0 +1,39 @@ + + +NodeMessagingClient.<init> - + + + +com.r3corda.node.services.messaging / NodeMessagingClient / <init>
      +
      +

      <init>

      +NodeMessagingClient(config: NodeConfiguration, serverHostPort: <ERROR CLASS>, myIdentity: PublicKey?, executor: AffinityExecutor, persistentInbox: Boolean = true, rpcOps: CordaRPCOps? = null)
      +

      This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. +Artemis is a message queue broker and here we run a client connecting to the specified broker instance +ArtemisMessagingServer. Its primarily concerned with peer-to-peer messaging.

      +

      Message handlers are run on the provided AffinityExecutor synchronously, that is, the Artemis callback threads +are blocked until the handler is scheduled and completed. This allows backpressure to propagate from the given +executor through into Artemis and from there, back through to senders.

      +

      An implementation of CordaRPCOps can be provided. If given, clients using the CordaMQClient RPC library can +invoke methods on the provided implementation. There is more documentation on this in the docsite and the +CordaRPCClient class.

      +
      +
      +

      Parameters

      + +serverHostPort - The address of the broker instance to connect to (might be running in the same process)
      +
      + +myIdentity - Either the public key to be used as the ArtemisMQ address and queue name for the node globally, or null to indicate +that this is a NetworkMapService node which will be bound globally to the name "networkmap"
      +
      + +executor - An executor to run received message tasks upon.
      +
      + +persistentInbox - If true the inbox will be created persistent if not already created. +If false the inbox queue will be transient, which is appropriate for UI clients for example.
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-s-e-s-s-i-o-n_-i-d_-p-r-o-p-e-r-t-y.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-s-e-s-s-i-o-n_-i-d_-p-r-o-p-e-r-t-y.html similarity index 57% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-s-e-s-s-i-o-n_-i-d_-p-r-o-p-e-r-t-y.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-s-e-s-s-i-o-n_-i-d_-p-r-o-p-e-r-t-y.html index d2cae14b36..ef8db7afb9 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-s-e-s-s-i-o-n_-i-d_-p-r-o-p-e-r-t-y.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-s-e-s-s-i-o-n_-i-d_-p-r-o-p-e-r-t-y.html @@ -1,13 +1,13 @@ -ArtemisMessagingClient.SESSION_ID_PROPERTY - +NodeMessagingClient.SESSION_ID_PROPERTY - -com.r3corda.node.services.messaging / ArtemisMessagingClient / SESSION_ID_PROPERTY
      +com.r3corda.node.services.messaging / NodeMessagingClient / SESSION_ID_PROPERTY

      SESSION_ID_PROPERTY

      - + val SESSION_ID_PROPERTY: String


      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-t-o-p-i-c_-p-r-o-p-e-r-t-y.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-t-o-p-i-c_-p-r-o-p-e-r-t-y.html similarity index 58% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-t-o-p-i-c_-p-r-o-p-e-r-t-y.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-t-o-p-i-c_-p-r-o-p-e-r-t-y.html index 64f4d198ce..5103c7f635 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/-t-o-p-i-c_-p-r-o-p-e-r-t-y.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/-t-o-p-i-c_-p-r-o-p-e-r-t-y.html @@ -1,13 +1,13 @@ -ArtemisMessagingClient.TOPIC_PROPERTY - +NodeMessagingClient.TOPIC_PROPERTY - -com.r3corda.node.services.messaging / ArtemisMessagingClient / TOPIC_PROPERTY
      +com.r3corda.node.services.messaging / NodeMessagingClient / TOPIC_PROPERTY

      TOPIC_PROPERTY

      - + val TOPIC_PROPERTY: String


      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/add-message-handler.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/add-message-handler.html new file mode 100644 index 0000000000..f293cddbde --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/add-message-handler.html @@ -0,0 +1,50 @@ + + +NodeMessagingClient.addMessageHandler - + + + +com.r3corda.node.services.messaging / NodeMessagingClient / addMessageHandler
      +
      +

      addMessageHandler

      + +fun addMessageHandler(topic: String, sessionID: Long, executor: Executor?, callback: (Message, MessageHandlerRegistration) -> Unit): MessageHandlerRegistration
      +Overrides MessagingService.addMessageHandler
      +

      The provided function will be invoked for each received message whose topic matches the given string, on the given +executor.

      +

      If no executor is received then the callback will run on threads provided by the messaging service, and the +callback is expected to be thread safe as a result.

      +

      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 +itself and yet addMessageHandler hasnt returned the handle yet.

      +
      +
      +

      Parameters

      + +topic - identifier for the general subject of the message, for example "platform.network_map.fetch". +The topic can be the empty string to match all messages (session ID must be DEFAULT_SESSION_ID).
      +
      + +sessionID - identifier for the session the message is part of. For services listening before +a session is established, use DEFAULT_SESSION_ID.
      +
      +
      + +fun addMessageHandler(topicSession: TopicSession, executor: Executor?, callback: (Message, MessageHandlerRegistration) -> Unit): MessageHandlerRegistration
      +Overrides MessagingService.addMessageHandler
      +

      The provided function will be invoked for each received message whose topic and session matches, on the +given executor.

      +

      If no executor is received then the callback will run on threads provided by the messaging service, and the +callback is expected to be thread safe as a result.

      +

      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 +itself and yet addMessageHandler hasnt returned the handle yet.

      +
      +
      +

      Parameters

      + +topicSession - identifier for the topic and session to listen for messages arriving on.
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/create-message.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/create-message.html new file mode 100644 index 0000000000..ddf5cf7827 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/create-message.html @@ -0,0 +1,34 @@ + + +NodeMessagingClient.createMessage - + + + +com.r3corda.node.services.messaging / NodeMessagingClient / createMessage
      +
      +

      createMessage

      + +fun createMessage(topicSession: TopicSession, data: ByteArray): Message
      +Overrides MessagingService.createMessage
      +

      Returns an initialised Message with the current time, etc, already filled in.

      +

      Parameters

      + +topicSession - identifier for the topic and session the message is sent to.
      +
      +
      + +fun createMessage(topic: String, sessionID: Long, data: ByteArray): Message
      +Overrides MessagingService.createMessage
      +

      Returns an initialised Message with the current time, etc, already filled in.

      +

      Parameters

      + +topic - identifier for the general subject of the message, for example "platform.network_map.fetch". +Must not be blank.
      +
      + +sessionID - identifier for the session the message is part of. For messages sent to services before the +construction of a session, use DEFAULT_SESSION_ID.
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/executor.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/executor.html similarity index 65% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/executor.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/executor.html index 8edd80f6e1..f7f4859446 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/executor.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/executor.html @@ -1,13 +1,13 @@ -ArtemisMessagingClient.executor - +NodeMessagingClient.executor - -com.r3corda.node.services.messaging / ArtemisMessagingClient / executor
      +com.r3corda.node.services.messaging / NodeMessagingClient / executor

      executor

      - + val executor: AffinityExecutor


      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/index.html similarity index 58% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/index.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/index.html index bc70fa0463..a43c185ce9 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/index.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/index.html @@ -1,19 +1,22 @@ -ArtemisMessagingClient - +NodeMessagingClient - -com.r3corda.node.services.messaging / ArtemisMessagingClient
      +com.r3corda.node.services.messaging / NodeMessagingClient

      -

      ArtemisMessagingClient

      -class ArtemisMessagingClient : ArtemisMessagingComponent, MessagingServiceInternal
      +

      NodeMessagingClient

      +class NodeMessagingClient : ArtemisMessagingComponent, MessagingServiceInternal

      This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. Artemis is a message queue broker and here we run a client connecting to the specified broker instance -ArtemisMessagingServer.

      +ArtemisMessagingServer. Its primarily concerned with peer-to-peer messaging.

      Message handlers are run on the provided AffinityExecutor synchronously, that is, the Artemis callback threads -are blocked until the handler is scheduled and completed. This allows backpressure to propagate from the given executor -through into Artemis and from there, back through to senders.

      +are blocked until the handler is scheduled and completed. This allows backpressure to propagate from the given +executor through into Artemis and from there, back through to senders.

      +

      An implementation of CordaRPCOps can be provided. If given, clients using the CordaMQClient RPC library can +invoke methods on the provided implementation. There is more documentation on this in the docsite and the +CordaRPCClient class.



      Parameters

      @@ -51,9 +54,9 @@ If false the inbox queue will be transient, which is appropriate for UI clients <init> -ArtemisMessagingClient(directory: Path, config: NodeConfiguration, serverHostPort: <ERROR CLASS>, myIdentity: PublicKey?, executor: AffinityExecutor, persistentInbox: Boolean = true)

      This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. +NodeMessagingClient(config: NodeConfiguration, serverHostPort: <ERROR CLASS>, myIdentity: PublicKey?, executor: AffinityExecutor, persistentInbox: Boolean = true, rpcOps: CordaRPCOps? = null)

      This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. Artemis is a message queue broker and here we run a client connecting to the specified broker instance -ArtemisMessagingServer.

      +ArtemisMessagingServer. Its primarily concerned with peer-to-peer messaging.

      @@ -101,13 +104,7 @@ Artemis is a message queue broker and here we run a client connecting to the spe config -val config: NodeConfiguration - - - -directory - -val directory: Path +val config: NodeSSLConfiguration @@ -118,9 +115,9 @@ Artemis is a message queue broker and here we run a client connecting to the spe addMessageHandler -fun addMessageHandler(topic: String, sessionID: Long, executor: Executor?, callback: (Message, MessageHandlerRegistration) -> Unit): MessageHandlerRegistration

      The provided function will be invoked for each received message whose topic matches the given string, on the given +fun addMessageHandler(topic: String, sessionID: Long, executor: Executor?, callback: (Message, MessageHandlerRegistration) -> Unit): MessageHandlerRegistration

      The provided function will be invoked for each received message whose topic matches the given string, on the given executor.

      -fun addMessageHandler(topicSession: TopicSession, executor: Executor?, callback: (Message, MessageHandlerRegistration) -> Unit): MessageHandlerRegistration

      The provided function will be invoked for each received message whose topic and session matches, on the +fun addMessageHandler(topicSession: TopicSession, executor: Executor?, callback: (Message, MessageHandlerRegistration) -> Unit): MessageHandlerRegistration

      The provided function will be invoked for each received message whose topic and session matches, on the given executor.

      @@ -128,15 +125,15 @@ given executor.

      createMessage -fun createMessage(topicSession: TopicSession, data: ByteArray): Message
      -fun createMessage(topic: String, sessionID: Long, data: ByteArray): Message

      Returns an initialised Message with the current time, etc, already filled in.

      +fun createMessage(topicSession: TopicSession, data: ByteArray): Message
      +fun createMessage(topic: String, sessionID: Long, data: ByteArray): Message

      Returns an initialised Message with the current time, etc, already filled in.

      removeMessageHandler -fun removeMessageHandler(registration: MessageHandlerRegistration): Unit

      Removes a handler given the object returned from addMessageHandler. The callback will no longer be invoked once +fun removeMessageHandler(registration: MessageHandlerRegistration): Unit

      Removes a handler given the object returned from addMessageHandler. The callback will no longer be invoked once this method has returned, although executions that are currently in flight will not be interrupted.

      @@ -144,14 +141,14 @@ this method has returned, although executions that are currently in flight will run -fun run(): Unit

      Starts the event loop: this method only returns once stop has been called.

      +fun run(): Unit

      Starts the p2p event loop: this method only returns once stop has been called.

      send -fun send(message: Message, target: MessageRecipients): Unit

      Sends a message to the given receiver. The details of how receivers are identified is up to the messaging +fun send(message: Message, target: MessageRecipients): Unit

      Sends a message to the given receiver. The details of how receivers are identified is up to the messaging implementation: the type system provides an opaque high level view, with more fine grained control being 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.

      @@ -180,6 +177,14 @@ shutdown is asynchronous.

      +checkStorePasswords + +fun checkStorePasswords(): Unit

      Returns nothing if the keystore was opened OK or throws if not. Useful to check the password, as +unfortunately Artemis tends to bury the exception when the password is wrong.

      + + + + configureWithDevSSLCertificate fun configureWithDevSSLCertificate(): Unit

      Strictly for dev only automatically construct a server certificate/private key signed from @@ -188,15 +193,15 @@ the CA certs in Node resources. Then provision KeyStores into certificates folde -tcpTransport +parseKeyFromQueueName -fun tcpTransport(direction: ConnectionDirection, host: String, port: Int): <ERROR CLASS> +fun parseKeyFromQueueName(name: String): PublicKey -tryParseKeyFromQueueName +tcpTransport -fun tryParseKeyFromQueueName(queueName: <ERROR CLASS>): PublicKey? +fun tcpTransport(direction: ConnectionDirection, host: String, port: Int): <ERROR CLASS> @@ -230,7 +235,7 @@ the CA certs in Node resources. Then provision KeyStores into certificates folde makeNetworkMapAddress -fun makeNetworkMapAddress(hostAndPort: <ERROR CLASS>): SingleMessageRecipient

      This should be the only way to generate an ArtemisAddress and that only of the remote NetworkMapService node. +fun makeNetworkMapAddress(hostAndPort: <ERROR CLASS>): SingleMessageRecipient

      This should be the only way to generate an ArtemisAddress and that only of the remote NetworkMapService node. All other addresses come from the NetworkMapCache, or myAddress below. The node will populate with their own identity based address when they register with the NetworkMapService.

      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/log.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/log.html similarity index 60% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/log.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/log.html index 99a407b60c..1694bd7086 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/log.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/log.html @@ -1,13 +1,13 @@ -ArtemisMessagingClient.log - +NodeMessagingClient.log - -com.r3corda.node.services.messaging / ArtemisMessagingClient / log
      +com.r3corda.node.services.messaging / NodeMessagingClient / log

      log

      - + val log: <ERROR CLASS>


      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/make-network-map-address.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/make-network-map-address.html new file mode 100644 index 0000000000..d0ca36df71 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/make-network-map-address.html @@ -0,0 +1,18 @@ + + +NodeMessagingClient.makeNetworkMapAddress - + + + +com.r3corda.node.services.messaging / NodeMessagingClient / makeNetworkMapAddress
      +
      +

      makeNetworkMapAddress

      + +fun makeNetworkMapAddress(hostAndPort: <ERROR CLASS>): SingleMessageRecipient
      +

      This should be the only way to generate an ArtemisAddress and that only of the remote NetworkMapService node. +All other addresses come from the NetworkMapCache, or myAddress below. +The node will populate with their own identity based address when they register with the NetworkMapService.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/my-address.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/my-address.html similarity index 75% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/my-address.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/my-address.html index 1a08f712b4..1cf3b7a867 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/my-address.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/my-address.html @@ -1,13 +1,13 @@ -ArtemisMessagingClient.myAddress - +NodeMessagingClient.myAddress - -com.r3corda.node.services.messaging / ArtemisMessagingClient / myAddress
      +com.r3corda.node.services.messaging / NodeMessagingClient / myAddress

      myAddress

      - + val myAddress: SingleMessageRecipient
      Overrides MessagingService.myAddress

      Apart from the NetworkMapService this is the only other address accessible to the node outside of lookups against the NetworkMapCache.

      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/my-identity.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/my-identity.html similarity index 66% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/my-identity.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/my-identity.html index f1218b668f..33bc75f66d 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/my-identity.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/my-identity.html @@ -1,13 +1,13 @@ -ArtemisMessagingClient.myIdentity - +NodeMessagingClient.myIdentity - -com.r3corda.node.services.messaging / ArtemisMessagingClient / myIdentity
      +com.r3corda.node.services.messaging / NodeMessagingClient / myIdentity

      myIdentity

      - + val myIdentity: PublicKey?


      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/persistent-inbox.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/persistent-inbox.html similarity index 58% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/persistent-inbox.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/persistent-inbox.html index 0b1a22ff21..7a0fd9c33c 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/persistent-inbox.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/persistent-inbox.html @@ -1,13 +1,13 @@ -ArtemisMessagingClient.persistentInbox - +NodeMessagingClient.persistentInbox - -com.r3corda.node.services.messaging / ArtemisMessagingClient / persistentInbox
      +com.r3corda.node.services.messaging / NodeMessagingClient / persistentInbox

      persistentInbox

      - + val persistentInbox: Boolean


      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/remove-message-handler.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/remove-message-handler.html similarity index 56% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/remove-message-handler.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/remove-message-handler.html index d34e08f37c..aa160b6e8e 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/remove-message-handler.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/remove-message-handler.html @@ -1,14 +1,14 @@ -ArtemisMessagingClient.removeMessageHandler - +NodeMessagingClient.removeMessageHandler - -com.r3corda.node.services.messaging / ArtemisMessagingClient / removeMessageHandler
      +com.r3corda.node.services.messaging / NodeMessagingClient / removeMessageHandler

      removeMessageHandler

      - -fun removeMessageHandler(registration: MessageHandlerRegistration): Unit
      + +fun removeMessageHandler(registration: MessageHandlerRegistration): Unit
      Overrides MessagingService.removeMessageHandler

      Removes a handler given the object returned from addMessageHandler. The callback will no longer be invoked once this method has returned, although executions that are currently in flight will not be interrupted.

      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/run.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/run.html similarity index 54% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/run.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/run.html index 70b1417f26..217e61d44b 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/run.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/run.html @@ -1,15 +1,15 @@ -ArtemisMessagingClient.run - +NodeMessagingClient.run - -com.r3corda.node.services.messaging / ArtemisMessagingClient / run
      +com.r3corda.node.services.messaging / NodeMessagingClient / run

      run

      - + fun run(): Unit
      -

      Starts the event loop: this method only returns once stop has been called.

      +

      Starts the p2p event loop: this method only returns once stop has been called.



      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/send.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/send.html similarity index 50% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/send.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/send.html index 1f9238b421..0936fadec8 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/send.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/send.html @@ -1,14 +1,14 @@ -ArtemisMessagingService.send - +NodeMessagingClient.send - -com.r3corda.node.services.messaging / ArtemisMessagingService / send
      +com.r3corda.node.services.messaging / NodeMessagingClient / send

      send

      - -fun send(message: Message, target: MessageRecipients): Unit
      + +fun send(message: Message, target: MessageRecipients): Unit
      Overrides MessagingService.send

      Sends a message to the given receiver. The details of how receivers are identified is up to the messaging implementation: the type system provides an opaque high level view, with more fine grained control being diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/server-host-port.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/server-host-port.html similarity index 59% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/server-host-port.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/server-host-port.html index c7fde7880c..88fc7df027 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/server-host-port.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/server-host-port.html @@ -1,13 +1,13 @@ -ArtemisMessagingClient.serverHostPort - +NodeMessagingClient.serverHostPort - -com.r3corda.node.services.messaging / ArtemisMessagingClient / serverHostPort
      +com.r3corda.node.services.messaging / NodeMessagingClient / serverHostPort

      serverHostPort

      - + val serverHostPort: <ERROR CLASS>


      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/start.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/start.html similarity index 63% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/start.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/start.html index 7e28565aa6..039d158275 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/start.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/start.html @@ -1,13 +1,13 @@ -ArtemisMessagingClient.start - +NodeMessagingClient.start - -com.r3corda.node.services.messaging / ArtemisMessagingClient / start
      +com.r3corda.node.services.messaging / NodeMessagingClient / start

      start

      - + fun start(): Unit


      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/stop.html b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/stop.html similarity index 81% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/stop.html rename to docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/stop.html index 2289ff0e25..43e01e01cc 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-client/stop.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-node-messaging-client/stop.html @@ -1,13 +1,13 @@ -ArtemisMessagingClient.stop - +NodeMessagingClient.stop - -com.r3corda.node.services.messaging / ArtemisMessagingClient / stop
      +com.r3corda.node.services.messaging / NodeMessagingClient / stop

      stop

      - + fun stop(): Unit
      Overrides MessagingServiceInternal.stop

      Initiates shutdown: if called from a thread that isnt controlled by the executor passed to the constructor diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/-init-.html new file mode 100644 index 0000000000..56915e5ae7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/-init-.html @@ -0,0 +1,18 @@ + + +RPCDispatcher.<init> - + + + +com.r3corda.node.services.messaging / RPCDispatcher / <init>
      +
      +

      <init>

      +RPCDispatcher(target: Any)
      +

      Intended to service transient clients only (not p2p nodes) for short-lived, transient request/response pairs. +If you need robustness, this is the wrong system. If you dont want a response, this is probably the +wrong system (you could just send a message). If you want complex customisation of how requests/responses +are handled, this is probably the wrong system.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/dispatch.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/dispatch.html new file mode 100644 index 0000000000..24493a3ad0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/dispatch.html @@ -0,0 +1,15 @@ + + +RPCDispatcher.dispatch - + + + +com.r3corda.node.services.messaging / RPCDispatcher / dispatch
      +
      +

      dispatch

      + +fun dispatch(msg: ClientRPCRequestMessage): Unit
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/index.html new file mode 100644 index 0000000000..b3aa00ec82 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/index.html @@ -0,0 +1,67 @@ + + +RPCDispatcher - + + + +com.r3corda.node.services.messaging / RPCDispatcher
      +
      +

      RPCDispatcher

      +abstract class RPCDispatcher
      +

      Intended to service transient clients only (not p2p nodes) for short-lived, transient request/response pairs. +If you need robustness, this is the wrong system. If you dont want a response, this is probably the +wrong system (you could just send a message). If you want complex customisation of how requests/responses +are handled, this is probably the wrong system.

      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +RPCDispatcher(target: Any)

      Intended to service transient clients only (not p2p nodes) for short-lived, transient request/response pairs. +If you need robustness, this is the wrong system. If you dont want a response, this is probably the +wrong system (you could just send a message). If you want complex customisation of how requests/responses +are handled, this is probably the wrong system.

      +
      +

      Properties

      + + + + + + + +
      +target +val target: Any
      +

      Functions

      + + + + + + + + + + + + + + + +
      +dispatch +fun dispatch(msg: ClientRPCRequestMessage): Unit
      +send +abstract fun send(bits: SerializedBytes<*>, toAddress: String): Unit
      +start +fun start(rpcConsumer: <ERROR CLASS>, rpcNotificationConsumer: <ERROR CLASS>?, onExecutor: AffinityExecutor): Unit
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/send.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/send.html new file mode 100644 index 0000000000..864aee0720 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/send.html @@ -0,0 +1,15 @@ + + +RPCDispatcher.send - + + + +com.r3corda.node.services.messaging / RPCDispatcher / send
      +
      +

      send

      + +abstract fun send(bits: SerializedBytes<*>, toAddress: String): Unit
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/start.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/start.html new file mode 100644 index 0000000000..3032523b0a --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/start.html @@ -0,0 +1,15 @@ + + +RPCDispatcher.start - + + + +com.r3corda.node.services.messaging / RPCDispatcher / start
      +
      +

      start

      + +fun start(rpcConsumer: <ERROR CLASS>, rpcNotificationConsumer: <ERROR CLASS>?, onExecutor: AffinityExecutor): Unit
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/target.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/target.html new file mode 100644 index 0000000000..1a8803c512 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-dispatcher/target.html @@ -0,0 +1,15 @@ + + +RPCDispatcher.target - + + + +com.r3corda.node.services.messaging / RPCDispatcher / target
      +
      +

      target

      + +val target: Any
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-exception/-deadline-exceeded/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-exception/-deadline-exceeded/-init-.html new file mode 100644 index 0000000000..3b9ccb0369 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-exception/-deadline-exceeded/-init-.html @@ -0,0 +1,14 @@ + + +RPCException.DeadlineExceeded.<init> - + + + +com.r3corda.node.services.messaging / RPCException / DeadlineExceeded / <init>
      +
      +

      <init>

      +DeadlineExceeded(rpcName: String)
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-exception/-deadline-exceeded/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-exception/-deadline-exceeded/index.html new file mode 100644 index 0000000000..31afc5d712 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-exception/-deadline-exceeded/index.html @@ -0,0 +1,25 @@ + + +RPCException.DeadlineExceeded - + + + +com.r3corda.node.services.messaging / RPCException / DeadlineExceeded
      +
      +

      DeadlineExceeded

      +class DeadlineExceeded : RPCException
      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +DeadlineExceeded(rpcName: String)
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-exception/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-exception/-init-.html new file mode 100644 index 0000000000..fdc8f896cc --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-exception/-init-.html @@ -0,0 +1,19 @@ + + +RPCException.<init> - + + + +com.r3corda.node.services.messaging / RPCException / <init>
      +
      +

      <init>

      +RPCException(msg: String)
      +
      +
      +RPCException(msg: String, cause: Throwable?)
      +

      Thrown to indicate a fatal error in the RPC system itself, as opposed to an error generated by the invoked +method.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-exception/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-exception/index.html new file mode 100644 index 0000000000..7d0ef7e670 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-exception/index.html @@ -0,0 +1,62 @@ + + +RPCException - + + + +com.r3corda.node.services.messaging / RPCException
      +
      +

      RPCException

      +open class RPCException : RuntimeException
      +

      Thrown to indicate a fatal error in the RPC system itself, as opposed to an error generated by the invoked +method.

      +
      +
      +

      Exceptions

      + + + + + + + +
      +DeadlineExceeded +class DeadlineExceeded : RPCException
      +

      Constructors

      + + + + + + + +
      +<init> +RPCException(msg: String)RPCException(msg: String, cause: Throwable?)

      Thrown to indicate a fatal error in the RPC system itself, as opposed to an error generated by the invoked +method.

      +
      +

      Extension Properties

      + + + + + + + +
      +rootCause +val Throwable.rootCause: Throwable
      +

      Inheritors

      + + + + + + + +
      +DeadlineExceeded +class DeadlineExceeded : RPCException
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-ops/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-ops/index.html new file mode 100644 index 0000000000..0fde87fc77 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-ops/index.html @@ -0,0 +1,41 @@ + + +RPCOps - + + + +com.r3corda.node.services.messaging / RPCOps
      +
      +

      RPCOps

      +interface RPCOps
      +

      Base interface that all RPC servers must implement. Note: in Corda theres only one RPC interface. This base +interface is here in case we split the RPC system out into a separate library one day.

      +
      +
      +

      Properties

      + + + + + + + +
      +protocolVersion +abstract val protocolVersion: Int

      Returns the RPC protocol version. Exists since version 0 so guaranteed to be present.

      +
      +

      Inheritors

      + + + + + + + +
      +CordaRPCOps +interface CordaRPCOps : RPCOps

      RPC operations that the node exposes to clients using the Java client library. These can be called from +client apps and are implemented by the node in the ServerRPCOps class.

      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-ops/protocol-version.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-ops/protocol-version.html new file mode 100644 index 0000000000..8e535daef3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-ops/protocol-version.html @@ -0,0 +1,16 @@ + + +RPCOps.protocolVersion - + + + +com.r3corda.node.services.messaging / RPCOps / protocolVersion
      +
      +

      protocolVersion

      + +abstract val protocolVersion: Int
      +

      Returns the RPC protocol version. Exists since version 0 so guaranteed to be present.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-returns-observables/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-returns-observables/-init-.html new file mode 100644 index 0000000000..446ed3557a --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-returns-observables/-init-.html @@ -0,0 +1,17 @@ + + +RPCReturnsObservables.<init> - + + + +com.r3corda.node.services.messaging / RPCReturnsObservables / <init>
      +
      +

      <init>

      +RPCReturnsObservables()
      +

      If an RPC is tagged with this annotation it may return one or more observables anywhere in its response graph. +Calling such a method comes with consequences: its slower, and consumes server side resources as observations +will buffer up on the server until theyre consumed by the client.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-returns-observables/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-returns-observables/index.html new file mode 100644 index 0000000000..d988192b70 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-returns-observables/index.html @@ -0,0 +1,31 @@ + + +RPCReturnsObservables - + + + +com.r3corda.node.services.messaging / RPCReturnsObservables
      +
      +

      RPCReturnsObservables

      +@Target([AnnotationTarget.FUNCTION]) annotation class RPCReturnsObservables
      +

      If an RPC is tagged with this annotation it may return one or more observables anywhere in its response graph. +Calling such a method comes with consequences: its slower, and consumes server side resources as observations +will buffer up on the server until theyre consumed by the client.

      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +RPCReturnsObservables()

      If an RPC is tagged with this annotation it may return one or more observables anywhere in its response graph. +Calling such a method comes with consequences: its slower, and consumes server side resources as observations +will buffer up on the server until theyre consumed by the client.

      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-since-version/-init-.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-since-version/-init-.html new file mode 100644 index 0000000000..0ea1f3e38a --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-since-version/-init-.html @@ -0,0 +1,15 @@ + + +RPCSinceVersion.<init> - + + + +com.r3corda.node.services.messaging / RPCSinceVersion / <init>
      +
      +

      <init>

      +RPCSinceVersion(version: Int)
      +

      Records the protocol version in which this RPC was added.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-since-version/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-since-version/index.html new file mode 100644 index 0000000000..e4aedd7759 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-since-version/index.html @@ -0,0 +1,38 @@ + + +RPCSinceVersion - + + + +com.r3corda.node.services.messaging / RPCSinceVersion
      +
      +

      RPCSinceVersion

      +@Target([AnnotationTarget.FUNCTION]) annotation class RPCSinceVersion
      +

      Records the protocol version in which this RPC was added.

      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +RPCSinceVersion(version: Int)

      Records the protocol version in which this RPC was added.

      +
      +

      Properties

      + + + + + + + +
      +version +val version: Int
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-since-version/version.html b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-since-version/version.html new file mode 100644 index 0000000000..a0b83ca6a2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/-r-p-c-since-version/version.html @@ -0,0 +1,15 @@ + + +RPCSinceVersion.version - + + + +com.r3corda.node.services.messaging / RPCSinceVersion / version
      +
      +

      version

      + +val version: Int
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/create-r-p-c-kryo.html b/docs/build/html/api/com.r3corda.node.services.messaging/create-r-p-c-kryo.html new file mode 100644 index 0000000000..881e346ddb --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/create-r-p-c-kryo.html @@ -0,0 +1,15 @@ + + +createRPCKryo - + + + +com.r3corda.node.services.messaging / createRPCKryo
      +
      +

      createRPCKryo

      + +fun createRPCKryo(observableSerializer: <ERROR CLASS><<ERROR CLASS><Any>>? = null): <ERROR CLASS>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/index.html b/docs/build/html/api/com.r3corda.node.services.messaging/index.html index 643de24709..39a1f7ea22 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/index.html +++ b/docs/build/html/api/com.r3corda.node.services.messaging/index.html @@ -12,15 +12,6 @@ -ArtemisMessagingClient - -class ArtemisMessagingClient : ArtemisMessagingComponent, MessagingServiceInternal

      This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. -Artemis is a message queue broker and here we run a client connecting to the specified broker instance -ArtemisMessagingServer.

      - - - - ArtemisMessagingComponent abstract class ArtemisMessagingComponent : SingletonSerializeAsToken

      The base class for Artemis services that defines shared data structures and transport configuration

      @@ -33,6 +24,119 @@ Artemis is a message queue broker and here we run a client connecting to the spe class ArtemisMessagingServer : ArtemisMessagingComponent

      This class configures and manages an Apache Artemis message queue broker.

      + + +ClientRPCRequestMessage + +data class ClientRPCRequestMessage

      The contents of an RPC request message, separated from the MQ layer.

      + + + + +CordaRPCOps + +interface CordaRPCOps : RPCOps

      RPC operations that the node exposes to clients using the Java client library. These can be called from +client apps and are implemented by the node in the ServerRPCOps class.

      + + + + +MarshalledObservation + +data class MarshalledObservation

      Used in the RPC wire protocol to wrap an observation with the handle of the observable its intended for.

      + + + + +NodeMessagingClient + +class NodeMessagingClient : ArtemisMessagingComponent, MessagingServiceInternal

      This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. +Artemis is a message queue broker and here we run a client connecting to the specified broker instance +ArtemisMessagingServer. Its primarily concerned with peer-to-peer messaging.

      + + + + +RPCDispatcher + +abstract class RPCDispatcher

      Intended to service transient clients only (not p2p nodes) for short-lived, transient request/response pairs. +If you need robustness, this is the wrong system. If you dont want a response, this is probably the +wrong system (you could just send a message). If you want complex customisation of how requests/responses +are handled, this is probably the wrong system.

      + + + + +RPCOps + +interface RPCOps

      Base interface that all RPC servers must implement. Note: in Corda theres only one RPC interface. This base +interface is here in case we split the RPC system out into a separate library one day.

      + + + + +

      Annotations

      + + + + + + + + + + + +
      +RPCReturnsObservables +annotation class RPCReturnsObservables

      If an RPC is tagged with this annotation it may return one or more observables anywhere in its response graph. +Calling such a method comes with consequences: its slower, and consumes server side resources as observations +will buffer up on the server until theyre consumed by the client.

      +
      +RPCSinceVersion +annotation class RPCSinceVersion

      Records the protocol version in which this RPC was added.

      +
      +

      Exceptions

      + + + + + + + +
      +RPCException +open class RPCException : RuntimeException

      Thrown to indicate a fatal error in the RPC system itself, as opposed to an error generated by the invoked +method.

      +
      +

      Properties

      + + + + + + + +
      +rpcLog +val rpcLog: <ERROR CLASS>

      Global RPC logger

      +
      +

      Functions

      + + + + + + + + + +
      +createRPCKryo +fun createRPCKryo(observableSerializer: <ERROR CLASS><<ERROR CLASS><Any>>? = null): <ERROR CLASS>
      +toRPCRequestMessage +fun <ERROR CLASS>.toRPCRequestMessage(): ClientRPCRequestMessage

      Convert an Artemis ClientMessage to a MQ-neutral ClientRPCRequestMessage.

      +
      diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/rpc-log.html b/docs/build/html/api/com.r3corda.node.services.messaging/rpc-log.html new file mode 100644 index 0000000000..ce510207e5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/rpc-log.html @@ -0,0 +1,19 @@ + + +rpcLog - + + + +com.r3corda.node.services.messaging / rpcLog
      +
      +

      rpcLog

      + +val rpcLog: <ERROR CLASS>
      +

      Global RPC logger

      +

      Getter
      +

      Global RPC logger

      +

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/to-r-p-c-request-message.html b/docs/build/html/api/com.r3corda.node.services.messaging/to-r-p-c-request-message.html new file mode 100644 index 0000000000..8cae90b65e --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.messaging/to-r-p-c-request-message.html @@ -0,0 +1,16 @@ + + +toRPCRequestMessage - + + + +com.r3corda.node.services.messaging / toRPCRequestMessage
      +
      +

      toRPCRequestMessage

      + +fun <ERROR CLASS>.toRPCRequestMessage(): ClientRPCRequestMessage
      +

      Convert an Artemis ClientMessage to a MQ-neutral ClientRPCRequestMessage.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/-init-.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/-init-.html deleted file mode 100644 index eedf872509..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/-init-.html +++ /dev/null @@ -1,17 +0,0 @@ - - -ClientToServiceCommand.ExitCash.<init> - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / ExitCash / <init>
      -
      -

      <init>

      -ExitCash(currency: Currency, issueRef: OpaqueBytes, pennies: Long, id: UUID = UUID.randomUUID())
      -

      Parameters

      - -id - the ID to be provided in events resulting from this request.
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/currency.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/currency.html deleted file mode 100644 index 5d07d778d7..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/currency.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ClientToServiceCommand.ExitCash.currency - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / ExitCash / currency
      -
      -

      currency

      - -val currency: Currency
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/index.html deleted file mode 100644 index deb7d8cead..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/index.html +++ /dev/null @@ -1,62 +0,0 @@ - - -ClientToServiceCommand.ExitCash - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / ExitCash
      -
      -

      ExitCash

      -class ExitCash : ClientToServiceCommand
      -

      Parameters

      - -id - the ID to be provided in events resulting from this request.
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -ExitCash(currency: Currency, issueRef: OpaqueBytes, pennies: Long, id: UUID = UUID.randomUUID())
      -

      Properties

      - - - - - - - - - - - - - - - -
      -currency -val currency: Currency
      -issueRef -val issueRef: OpaqueBytes
      -pennies -val pennies: Long
      -

      Inherited Properties

      - - - - - - - -
      -id -val id: UUID
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/issue-ref.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/issue-ref.html deleted file mode 100644 index 2e1f9eb7e1..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/issue-ref.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ClientToServiceCommand.ExitCash.issueRef - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / ExitCash / issueRef
      -
      -

      issueRef

      - -val issueRef: OpaqueBytes
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/pennies.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/pennies.html deleted file mode 100644 index a687995e90..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-exit-cash/pennies.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ClientToServiceCommand.ExitCash.pennies - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / ExitCash / pennies
      -
      -

      pennies

      - -val pennies: Long
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/-init-.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/-init-.html deleted file mode 100644 index 5ee5f75dbd..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/-init-.html +++ /dev/null @@ -1,34 +0,0 @@ - - -ClientToServiceCommand.IssueCash.<init> - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / IssueCash / <init>
      -
      -

      <init>

      -IssueCash(currency: Currency, issueRef: OpaqueBytes, pennies: Long, recipient: PublicKey, notary: Party, id: UUID = UUID.randomUUID())
      -

      Issue cash state objects.

      -

      Parameters

      - -currency - the currency to issue.
      -
      - -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.
      -
      - -pennies - the amount to issue, in the smallest unit of the currency.
      -
      - -recipient - the public key of the recipient.
      -
      - -notary - the notary to use for this transaction.
      -
      - -id - the ID to be provided in events resulting from this request.
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/currency.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/currency.html deleted file mode 100644 index 30a34e3dda..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/currency.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ClientToServiceCommand.IssueCash.currency - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / IssueCash / currency
      -
      -

      currency

      - -val currency: Currency
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/index.html deleted file mode 100644 index 3a1f43d1d9..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/index.html +++ /dev/null @@ -1,92 +0,0 @@ - - -ClientToServiceCommand.IssueCash - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / IssueCash
      -
      -

      IssueCash

      -class IssueCash : ClientToServiceCommand
      -

      Issue cash state objects.

      -

      Parameters

      - -currency - the currency to issue.
      -
      - -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.
      -
      - -pennies - the amount to issue, in the smallest unit of the currency.
      -
      - -recipient - the public key of the recipient.
      -
      - -notary - the notary to use for this transaction.
      -
      - -id - the ID to be provided in events resulting from this request.
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -IssueCash(currency: Currency, issueRef: OpaqueBytes, pennies: Long, recipient: PublicKey, notary: Party, id: UUID = UUID.randomUUID())

      Issue cash state objects.

      -
      -

      Properties

      - - - - - - - - - - - - - - - - - - - - - - - -
      -currency -val currency: Currency
      -issueRef -val issueRef: OpaqueBytes
      -notary -val notary: Party
      -pennies -val pennies: Long
      -recipient -val recipient: PublicKey
      -

      Inherited Properties

      - - - - - - - -
      -id -val id: UUID
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/issue-ref.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/issue-ref.html deleted file mode 100644 index 379e72e04b..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/issue-ref.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ClientToServiceCommand.IssueCash.issueRef - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / IssueCash / issueRef
      -
      -

      issueRef

      - -val issueRef: OpaqueBytes
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/notary.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/notary.html deleted file mode 100644 index 6002122add..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/notary.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ClientToServiceCommand.IssueCash.notary - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / IssueCash / notary
      -
      -

      notary

      - -val notary: Party
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/pennies.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/pennies.html deleted file mode 100644 index 67ad1bcf25..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/pennies.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ClientToServiceCommand.IssueCash.pennies - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / IssueCash / pennies
      -
      -

      pennies

      - -val pennies: Long
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/recipient.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/recipient.html deleted file mode 100644 index 13bf149e06..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-issue-cash/recipient.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ClientToServiceCommand.IssueCash.recipient - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / IssueCash / recipient
      -
      -

      recipient

      - -val recipient: PublicKey
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/-init-.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/-init-.html deleted file mode 100644 index fe3b3a01e0..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -ClientToServiceCommand.PayCash.<init> - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / PayCash / <init>
      -
      -

      <init>

      -PayCash(tokenDef: Issued<Currency>, pennies: Long, owner: PublicKey, id: UUID = UUID.randomUUID())
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/index.html deleted file mode 100644 index 21e3628fb8..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/index.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ClientToServiceCommand.PayCash - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / PayCash
      -
      -

      PayCash

      -class PayCash : ClientToServiceCommand
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -PayCash(tokenDef: Issued<Currency>, pennies: Long, owner: PublicKey, id: UUID = UUID.randomUUID())
      -

      Properties

      - - - - - - - - - - - - - - - -
      -owner -val owner: PublicKey
      -pennies -val pennies: Long
      -tokenDef -val tokenDef: Issued<Currency>
      -

      Inherited Properties

      - - - - - - - -
      -id -val id: UUID
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/owner.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/owner.html deleted file mode 100644 index 791516fce0..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/owner.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ClientToServiceCommand.PayCash.owner - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / PayCash / owner
      -
      -

      owner

      - -val owner: PublicKey
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/pennies.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/pennies.html deleted file mode 100644 index 7b9abf00d9..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/pennies.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ClientToServiceCommand.PayCash.pennies - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / PayCash / pennies
      -
      -

      pennies

      - -val pennies: Long
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/token-def.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/token-def.html deleted file mode 100644 index ac7fd23536..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/-pay-cash/token-def.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ClientToServiceCommand.PayCash.tokenDef - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / PayCash / tokenDef
      -
      -

      tokenDef

      - -val tokenDef: Issued<Currency>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/id.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/id.html deleted file mode 100644 index b93877c889..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/id.html +++ /dev/null @@ -1,15 +0,0 @@ - - -ClientToServiceCommand.id - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand / id
      -
      -

      id

      - -val id: UUID
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/index.html deleted file mode 100644 index d5b8d40512..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-client-to-service-command/index.html +++ /dev/null @@ -1,77 +0,0 @@ - - -ClientToServiceCommand - - - - -com.r3corda.node.services.monitor / ClientToServiceCommand
      -
      -

      ClientToServiceCommand

      -sealed class ClientToServiceCommand
      -

      A command from the monitoring client, to the node.

      -

      Parameters

      - -id - ID used to tag event(s) resulting from a command.
      -
      -
      -

      Types

      - - - - - - - - - - - - - - - -
      -ExitCash -class ExitCash : ClientToServiceCommand
      -IssueCash -class IssueCash : ClientToServiceCommand

      Issue cash state objects.

      -
      -PayCash -class PayCash : ClientToServiceCommand
      -

      Properties

      - - - - - - - -
      -id -val id: UUID
      -

      Inheritors

      - - - - - - - - - - - - - - - -
      -ExitCash -class ExitCash : ClientToServiceCommand
      -IssueCash -class IssueCash : ClientToServiceCommand

      Issue cash state objects.

      -
      -PayCash -class PayCash : ClientToServiceCommand
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-d-e-r-e-g-i-s-t-e-r_-t-o-p-i-c.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-d-e-r-e-g-i-s-t-e-r_-t-o-p-i-c.html similarity index 58% rename from docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-d-e-r-e-g-i-s-t-e-r_-t-o-p-i-c.html rename to docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-d-e-r-e-g-i-s-t-e-r_-t-o-p-i-c.html index 72b61e3c3f..923c8ea623 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-d-e-r-e-g-i-s-t-e-r_-t-o-p-i-c.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-d-e-r-e-g-i-s-t-e-r_-t-o-p-i-c.html @@ -1,13 +1,13 @@ -WalletMonitorService.DEREGISTER_TOPIC - +NodeMonitorService.DEREGISTER_TOPIC - -com.r3corda.node.services.monitor / WalletMonitorService / DEREGISTER_TOPIC
      +com.r3corda.node.services.monitor / NodeMonitorService / DEREGISTER_TOPIC

      DEREGISTER_TOPIC

      - + val DEREGISTER_TOPIC: String


      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-i-n_-e-v-e-n-t_-t-o-p-i-c.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-i-n_-e-v-e-n-t_-t-o-p-i-c.html similarity index 58% rename from docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-i-n_-e-v-e-n-t_-t-o-p-i-c.html rename to docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-i-n_-e-v-e-n-t_-t-o-p-i-c.html index 5b802efe02..840c0dbe1a 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-i-n_-e-v-e-n-t_-t-o-p-i-c.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-i-n_-e-v-e-n-t_-t-o-p-i-c.html @@ -1,13 +1,13 @@ -WalletMonitorService.IN_EVENT_TOPIC - +NodeMonitorService.IN_EVENT_TOPIC - -com.r3corda.node.services.monitor / WalletMonitorService / IN_EVENT_TOPIC
      +com.r3corda.node.services.monitor / NodeMonitorService / IN_EVENT_TOPIC

      IN_EVENT_TOPIC

      - + val IN_EVENT_TOPIC: String


      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-init-.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-init-.html new file mode 100644 index 0000000000..895cfa7bdb --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-init-.html @@ -0,0 +1,20 @@ + + +NodeMonitorService.<init> - + + + +com.r3corda.node.services.monitor / NodeMonitorService / <init>
      +
      +

      <init>

      +NodeMonitorService(services: ServiceHubInternal, smm: StateMachineManager)
      +

      Service which allows external clients to monitor the nodes vault and state machine manager, as well as trigger +actions within the node. The service also sends requests for user input back to clients, for example to enter +additional information while a protocol runs, or confirm an action.

      +

      This is intended to enable a range of tools from end user UI to ops tools which monitor health across a number of nodes.

      +
      +
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-input-state-ref-resolve-failed/-init-.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-input-state-ref-resolve-failed/-init-.html new file mode 100644 index 0000000000..0170831299 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-input-state-ref-resolve-failed/-init-.html @@ -0,0 +1,14 @@ + + +NodeMonitorService.InputStateRefResolveFailed.<init> - + + + +com.r3corda.node.services.monitor / NodeMonitorService / InputStateRefResolveFailed / <init>
      +
      +

      <init>

      +InputStateRefResolveFailed(stateRefs: List<StateRef>)
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-input-state-ref-resolve-failed/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-input-state-ref-resolve-failed/index.html similarity index 53% rename from docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-input-state-ref-resolve-failed/index.html rename to docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-input-state-ref-resolve-failed/index.html index 7390d94436..a747bab07e 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-input-state-ref-resolve-failed/index.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-input-state-ref-resolve-failed/index.html @@ -1,10 +1,10 @@ -WalletMonitorService.InputStateRefResolveFailed - +NodeMonitorService.InputStateRefResolveFailed - -com.r3corda.node.services.monitor / WalletMonitorService / InputStateRefResolveFailed
      +com.r3corda.node.services.monitor / NodeMonitorService / InputStateRefResolveFailed

      InputStateRefResolveFailed

      class InputStateRefResolveFailed : Exception
      @@ -17,7 +17,7 @@ <init> -InputStateRefResolveFailed(stateRefs: List<StateRef>) +InputStateRefResolveFailed(stateRefs: List<StateRef>) diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-o-u-t_-e-v-e-n-t_-t-o-p-i-c.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-o-u-t_-e-v-e-n-t_-t-o-p-i-c.html similarity index 58% rename from docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-o-u-t_-e-v-e-n-t_-t-o-p-i-c.html rename to docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-o-u-t_-e-v-e-n-t_-t-o-p-i-c.html index 8274609f33..5173b4737f 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-o-u-t_-e-v-e-n-t_-t-o-p-i-c.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-o-u-t_-e-v-e-n-t_-t-o-p-i-c.html @@ -1,13 +1,13 @@ -WalletMonitorService.OUT_EVENT_TOPIC - +NodeMonitorService.OUT_EVENT_TOPIC - -com.r3corda.node.services.monitor / WalletMonitorService / OUT_EVENT_TOPIC
      +com.r3corda.node.services.monitor / NodeMonitorService / OUT_EVENT_TOPIC

      OUT_EVENT_TOPIC

      - + val OUT_EVENT_TOPIC: String


      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-r-e-g-i-s-t-e-r_-t-o-p-i-c.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-r-e-g-i-s-t-e-r_-t-o-p-i-c.html similarity index 58% rename from docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-r-e-g-i-s-t-e-r_-t-o-p-i-c.html rename to docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-r-e-g-i-s-t-e-r_-t-o-p-i-c.html index ba98d0b50f..fc09a74854 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-r-e-g-i-s-t-e-r_-t-o-p-i-c.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-r-e-g-i-s-t-e-r_-t-o-p-i-c.html @@ -1,13 +1,13 @@ -WalletMonitorService.REGISTER_TOPIC - +NodeMonitorService.REGISTER_TOPIC - -com.r3corda.node.services.monitor / WalletMonitorService / REGISTER_TOPIC
      +com.r3corda.node.services.monitor / NodeMonitorService / REGISTER_TOPIC

      REGISTER_TOPIC

      - + val REGISTER_TOPIC: String


      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-registered-listener/-init-.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-registered-listener/-init-.html new file mode 100644 index 0000000000..535a899df7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-registered-listener/-init-.html @@ -0,0 +1,14 @@ + + +NodeMonitorService.RegisteredListener.<init> - + + + +com.r3corda.node.services.monitor / NodeMonitorService / RegisteredListener / <init>
      +
      +

      <init>

      +RegisteredListener(recipients: MessageRecipients, sessionID: Long)
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-registered-listener/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-registered-listener/index.html similarity index 58% rename from docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-registered-listener/index.html rename to docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-registered-listener/index.html index 547e83cbeb..b3d05c2422 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-registered-listener/index.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-registered-listener/index.html @@ -1,10 +1,10 @@ -WalletMonitorService.RegisteredListener - +NodeMonitorService.RegisteredListener - -com.r3corda.node.services.monitor / WalletMonitorService / RegisteredListener
      +com.r3corda.node.services.monitor / NodeMonitorService / RegisteredListener

      RegisteredListener

      data class RegisteredListener
      @@ -17,7 +17,7 @@ <init> -RegisteredListener(recipients: MessageRecipients, sessionID: Long) +RegisteredListener(recipients: MessageRecipients, sessionID: Long) diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-registered-listener/recipients.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-registered-listener/recipients.html similarity index 57% rename from docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-registered-listener/recipients.html rename to docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-registered-listener/recipients.html index 79437225b7..417d51e162 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-registered-listener/recipients.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-registered-listener/recipients.html @@ -1,13 +1,13 @@ -WalletMonitorService.RegisteredListener.recipients - +NodeMonitorService.RegisteredListener.recipients - -com.r3corda.node.services.monitor / WalletMonitorService / RegisteredListener / recipients
      +com.r3corda.node.services.monitor / NodeMonitorService / RegisteredListener / recipients

      recipients

      - + val recipients: MessageRecipients


      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-registered-listener/session-i-d.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-registered-listener/session-i-d.html similarity index 51% rename from docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-registered-listener/session-i-d.html rename to docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-registered-listener/session-i-d.html index d1cfe04812..f5ce9a4f65 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-registered-listener/session-i-d.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-registered-listener/session-i-d.html @@ -1,13 +1,13 @@ -WalletMonitorService.RegisteredListener.sessionID - +NodeMonitorService.RegisteredListener.sessionID - -com.r3corda.node.services.monitor / WalletMonitorService / RegisteredListener / sessionID
      +com.r3corda.node.services.monitor / NodeMonitorService / RegisteredListener / sessionID

      sessionID

      - + val sessionID: Long


      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-s-t-a-t-e_-t-o-p-i-c.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-s-t-a-t-e_-t-o-p-i-c.html similarity index 59% rename from docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-s-t-a-t-e_-t-o-p-i-c.html rename to docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-s-t-a-t-e_-t-o-p-i-c.html index c683b16f55..d109a1e9ff 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-s-t-a-t-e_-t-o-p-i-c.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/-s-t-a-t-e_-t-o-p-i-c.html @@ -1,13 +1,13 @@ -WalletMonitorService.STATE_TOPIC - +NodeMonitorService.STATE_TOPIC - -com.r3corda.node.services.monitor / WalletMonitorService / STATE_TOPIC
      +com.r3corda.node.services.monitor / NodeMonitorService / STATE_TOPIC

      STATE_TOPIC

      - + val STATE_TOPIC: String


      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/index.html new file mode 100644 index 0000000000..e1e45d8d53 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/index.html @@ -0,0 +1,176 @@ + + +NodeMonitorService - + + + +com.r3corda.node.services.monitor / NodeMonitorService
      +
      +

      NodeMonitorService

      +class NodeMonitorService : AbstractNodeService
      +

      Service which allows external clients to monitor the nodes vault and state machine manager, as well as trigger +actions within the node. The service also sends requests for user input back to clients, for example to enter +additional information while a protocol runs, or confirm an action.

      +

      This is intended to enable a range of tools from end user UI to ops tools which monitor health across a number of nodes.

      +
      +
      +
      +
      +

      Types

      + + + + + + + +
      +RegisteredListener +data class RegisteredListener
      +

      Exceptions

      + + + + + + + +
      +InputStateRefResolveFailed +class InputStateRefResolveFailed : Exception
      +

      Constructors

      + + + + + + + +
      +<init> +NodeMonitorService(services: ServiceHubInternal, smm: StateMachineManager)

      Service which allows external clients to monitor the nodes vault and state machine manager, as well as trigger +actions within the node. The service also sends requests for user input back to clients, for example to enter +additional information while a protocol runs, or confirm an action.

      +
      +

      Properties

      + + + + + + + + + + + +
      +listeners +val listeners: MutableSet<RegisteredListener>
      +smm +val smm: StateMachineManager
      +

      Inherited Properties

      + + + + + + + + + + + +
      +net +val net: MessagingServiceInternal
      +services +val services: ServiceHubInternal
      +

      Functions

      + + + + + + + + + + + +
      +processDeregisterRequest +fun processDeregisterRequest(req: DeregisterRequest): Unit

      Process a request from a monitor to remove them from the subscribers.

      +
      +processRegisterRequest +fun processRegisterRequest(req: RegisterRequest): Unit

      Process a request from a monitor to add them to the subscribers. This includes hooks to authenticate the request, +but currently all requests pass (and theres no access control on vaults, so it has no actual meaning).

      +
      +

      Inherited Functions

      + + + + + + + + + + + +
      +addMessageHandler +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): MessageHandlerRegistration

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +common boilerplate code. Exceptions are caught and passed to the provided consumer. If you just want a simple +acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): MessageHandlerRegistration

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +common boilerplate code. Exceptions are propagated to the messaging layer. If you just want a simple +acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      +
      +addProtocolHandler +fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>, onResultFuture: (<ERROR CLASS><R>, H) -> Unit): Unit

      Register a handler to kick-off a protocol when a HandshakeMessage is received by the node. This performs the +necessary steps to enable communication between the two protocols, including calling ProtocolLogic.registerSession.

      +fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>): Unit
      +

      Companion Object Properties

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +DEREGISTER_TOPIC +val DEREGISTER_TOPIC: String
      +IN_EVENT_TOPIC +val IN_EVENT_TOPIC: String
      +OUT_EVENT_TOPIC +val OUT_EVENT_TOPIC: String
      +REGISTER_TOPIC +val REGISTER_TOPIC: String
      +STATE_TOPIC +val STATE_TOPIC: String
      +logger +val logger: <ERROR CLASS>
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/listeners.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/listeners.html similarity index 69% rename from docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/listeners.html rename to docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/listeners.html index a5f4ed73c3..c455fcd9f4 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/listeners.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/listeners.html @@ -1,13 +1,13 @@ -WalletMonitorService.listeners - +NodeMonitorService.listeners - -com.r3corda.node.services.monitor / WalletMonitorService / listeners
      +com.r3corda.node.services.monitor / NodeMonitorService / listeners

      listeners

      - + val listeners: MutableSet<RegisteredListener>


      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/logger.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/logger.html similarity index 61% rename from docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/logger.html rename to docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/logger.html index 0356feee6a..e3be1b6393 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/logger.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/logger.html @@ -1,13 +1,13 @@ -WalletMonitorService.logger - +NodeMonitorService.logger - -com.r3corda.node.services.monitor / WalletMonitorService / logger
      +com.r3corda.node.services.monitor / NodeMonitorService / logger

      logger

      - + val logger: <ERROR CLASS>


      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/process-deregister-request.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/process-deregister-request.html new file mode 100644 index 0000000000..6008795d48 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/process-deregister-request.html @@ -0,0 +1,16 @@ + + +NodeMonitorService.processDeregisterRequest - + + + +com.r3corda.node.services.monitor / NodeMonitorService / processDeregisterRequest
      +
      +

      processDeregisterRequest

      + +fun processDeregisterRequest(req: DeregisterRequest): Unit
      +

      Process a request from a monitor to remove them from the subscribers.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/process-register-request.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/process-register-request.html new file mode 100644 index 0000000000..0a5f98e66a --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/process-register-request.html @@ -0,0 +1,17 @@ + + +NodeMonitorService.processRegisterRequest - + + + +com.r3corda.node.services.monitor / NodeMonitorService / processRegisterRequest
      +
      +

      processRegisterRequest

      + +fun processRegisterRequest(req: RegisterRequest): Unit
      +

      Process a request from a monitor to add them to the subscribers. This includes hooks to authenticate the request, +but currently all requests pass (and theres no access control on vaults, so it has no actual meaning).

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/smm.html b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/smm.html similarity index 68% rename from docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/smm.html rename to docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/smm.html index e3b7ba654d..d01548a9d6 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/smm.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-node-monitor-service/smm.html @@ -1,13 +1,13 @@ -WalletMonitorService.smm - +NodeMonitorService.smm - -com.r3corda.node.services.monitor / WalletMonitorService / smm
      +com.r3corda.node.services.monitor / NodeMonitorService / smm

      smm

      - + val smm: StateMachineManager


      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-output-state/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-output-state/index.html index 2e4a7a3812..a5f3e22e01 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-output-state/index.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-output-state/index.html @@ -49,5 +49,16 @@ +

      Functions

      + + + + + + + +
      +toString +fun toString(): String
      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-output-state/to-string.html b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-output-state/to-string.html new file mode 100644 index 0000000000..1863f16ef4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-output-state/to-string.html @@ -0,0 +1,15 @@ + + +ServiceToClientEvent.OutputState.toString - + + + +com.r3corda.node.services.monitor / ServiceToClientEvent / OutputState / toString
      +
      +

      toString

      + +fun toString(): String
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-progress/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-progress/index.html index 46f7461e5a..b11d86333f 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-progress/index.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-progress/index.html @@ -49,5 +49,16 @@ +

      Functions

      + + + + + + + +
      +toString +fun toString(): String
      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-progress/to-string.html b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-progress/to-string.html new file mode 100644 index 0000000000..732f8a065a --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-progress/to-string.html @@ -0,0 +1,15 @@ + + +ServiceToClientEvent.Progress.toString - + + + +com.r3corda.node.services.monitor / ServiceToClientEvent / Progress / toString
      +
      +

      toString

      + +fun toString(): String
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-state-machine/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-state-machine/index.html index 4a8fe30419..061b18fb0d 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-state-machine/index.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-state-machine/index.html @@ -55,5 +55,16 @@ +

      Functions

      + + + + + + + +
      +toString +fun toString(): String
      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-state-machine/to-string.html b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-state-machine/to-string.html new file mode 100644 index 0000000000..caabd19d7a --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-state-machine/to-string.html @@ -0,0 +1,15 @@ + + +ServiceToClientEvent.StateMachine.toString - + + + +com.r3corda.node.services.monitor / ServiceToClientEvent / StateMachine / toString
      +
      +

      toString

      + +fun toString(): String
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction-build/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction-build/index.html index 2a75243842..0abccb19c3 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction-build/index.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction-build/index.html @@ -49,5 +49,16 @@ +

      Functions

      + + + + + + + +
      +toString +fun toString(): String
      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction-build/to-string.html b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction-build/to-string.html new file mode 100644 index 0000000000..b076117eba --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction-build/to-string.html @@ -0,0 +1,15 @@ + + +ServiceToClientEvent.TransactionBuild.toString - + + + +com.r3corda.node.services.monitor / ServiceToClientEvent / TransactionBuild / toString
      +
      +

      toString

      + +fun toString(): String
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction/-init-.html b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction/-init-.html index e2e4722387..b8e159c732 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction/-init-.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction/-init-.html @@ -7,7 +7,7 @@ com.r3corda.node.services.monitor / ServiceToClientEvent / Transaction / <init>

      <init>

      -Transaction(time: Instant, transaction: SignedTransaction)
      +Transaction(time: Instant, transaction: LedgerTransaction)


      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction/index.html index 00a96033e8..6e38602ca4 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction/index.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction/index.html @@ -17,7 +17,7 @@ <init> -Transaction(time: Instant, transaction: SignedTransaction) +Transaction(time: Instant, transaction: LedgerTransaction) @@ -28,7 +28,7 @@ transaction -val transaction: SignedTransaction +val transaction: LedgerTransaction @@ -43,5 +43,16 @@ +

      Functions

      + + + + + + + +
      +toString +fun toString(): String
      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction/to-string.html b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction/to-string.html new file mode 100644 index 0000000000..40c25ed0a7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction/to-string.html @@ -0,0 +1,15 @@ + + +ServiceToClientEvent.Transaction.toString - + + + +com.r3corda.node.services.monitor / ServiceToClientEvent / Transaction / toString
      +
      +

      toString

      + +fun toString(): String
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction/transaction.html b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction/transaction.html index 17537e7b15..0377826fb0 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction/transaction.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-service-to-client-event/-transaction/transaction.html @@ -8,7 +8,7 @@

      transaction

      -val transaction: SignedTransaction
      +val transaction: LedgerTransaction


      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-state-snapshot-message/-init-.html b/docs/build/html/api/com.r3corda.node.services.monitor/-state-snapshot-message/-init-.html index 025f564c36..51d939115d 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-state-snapshot-message/-init-.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-state-snapshot-message/-init-.html @@ -7,7 +7,7 @@ com.r3corda.node.services.monitor / StateSnapshotMessage / <init>

      <init>

      -StateSnapshotMessage(contractStates: Collection<ContractState>, protocolStates: Collection<String>)
      +StateSnapshotMessage(contractStates: Collection<StateAndRef<ContractState>>, protocolStates: Collection<String>)


      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-state-snapshot-message/contract-states.html b/docs/build/html/api/com.r3corda.node.services.monitor/-state-snapshot-message/contract-states.html index a2112ca4f2..29ae986792 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-state-snapshot-message/contract-states.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-state-snapshot-message/contract-states.html @@ -8,7 +8,7 @@

      contractStates

      -val contractStates: Collection<ContractState>
      +val contractStates: Collection<StateAndRef<ContractState>>


      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-state-snapshot-message/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-state-snapshot-message/index.html index a3c5ca07ed..18f53800af 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-state-snapshot-message/index.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-state-snapshot-message/index.html @@ -17,7 +17,7 @@ <init> -StateSnapshotMessage(contractStates: Collection<ContractState>, protocolStates: Collection<String>) +StateSnapshotMessage(contractStates: Collection<StateAndRef<ContractState>>, protocolStates: Collection<String>) @@ -28,7 +28,7 @@ contractStates -val contractStates: Collection<ContractState> +val contractStates: Collection<StateAndRef<ContractState>> diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-complete/-init-.html b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-complete/-init-.html deleted file mode 100644 index eac4c68d29..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-complete/-init-.html +++ /dev/null @@ -1,19 +0,0 @@ - - -TransactionBuildResult.Complete.<init> - - - - -com.r3corda.node.services.monitor / TransactionBuildResult / Complete / <init>
      -
      -

      <init>

      -Complete(transaction: SignedTransaction, message: String?)
      -

      State indicating the action undertaken has been completed (it was not complex enough to require a -state machine starting).

      -

      Parameters

      - -transaction - the transaction created as a result.
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-complete/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-complete/index.html deleted file mode 100644 index ec1a6c3fbe..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-complete/index.html +++ /dev/null @@ -1,49 +0,0 @@ - - -TransactionBuildResult.Complete - - - - -com.r3corda.node.services.monitor / TransactionBuildResult / Complete
      -
      -

      Complete

      -class Complete : TransactionBuildResult
      -

      State indicating the action undertaken has been completed (it was not complex enough to require a -state machine starting).

      -

      Parameters

      - -transaction - the transaction created as a result.
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -Complete(transaction: SignedTransaction, message: String?)

      State indicating the action undertaken has been completed (it was not complex enough to require a -state machine starting).

      -
      -

      Properties

      - - - - - - - - - - - -
      -message -val message: String?
      -transaction -val transaction: SignedTransaction
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-complete/message.html b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-complete/message.html deleted file mode 100644 index c93bc270c7..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-complete/message.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionBuildResult.Complete.message - - - - -com.r3corda.node.services.monitor / TransactionBuildResult / Complete / message
      -
      -

      message

      - -val message: String?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-complete/transaction.html b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-complete/transaction.html deleted file mode 100644 index 445aa59e26..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-complete/transaction.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TransactionBuildResult.Complete.transaction - - - - -com.r3corda.node.services.monitor / TransactionBuildResult / Complete / transaction
      -
      -

      transaction

      - -val transaction: SignedTransaction
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-failed/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-failed/index.html index 7de4f60850..fc93c37b4d 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-failed/index.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-failed/index.html @@ -36,5 +36,16 @@ state machine), or before a state machine was started.

      +

      Functions

      + + + + + + + +
      +toString +fun toString(): String
      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-failed/to-string.html b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-failed/to-string.html new file mode 100644 index 0000000000..75ff958744 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-failed/to-string.html @@ -0,0 +1,15 @@ + + +TransactionBuildResult.Failed.toString - + + + +com.r3corda.node.services.monitor / TransactionBuildResult / Failed / toString
      +
      +

      toString

      + +fun toString(): String
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-protocol-started/-init-.html b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-protocol-started/-init-.html index 283b3f45f0..29adb59e2c 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-protocol-started/-init-.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-protocol-started/-init-.html @@ -7,7 +7,7 @@ com.r3corda.node.services.monitor / TransactionBuildResult / ProtocolStarted / <init>

      <init>

      -ProtocolStarted(fiberId: Long, transaction: SignedTransaction?, message: String?)
      +ProtocolStarted(fiberId: Long, transaction: LedgerTransaction?, message: String?)

      State indicating that a protocol is managing this request, and that the client should track protocol state machine updates for further information. The monitor will separately receive notification of the state machine having been added, as it would any other state machine. This response is used solely to enable the monitor to identify diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-protocol-started/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-protocol-started/index.html index 755b98116e..b0b1e435c1 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-protocol-started/index.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-protocol-started/index.html @@ -24,7 +24,7 @@ the state machine (and its progress) as associated with the request.

      <init> -ProtocolStarted(fiberId: Long, transaction: SignedTransaction?, message: String?)

      State indicating that a protocol is managing this request, and that the client should track protocol state machine +ProtocolStarted(fiberId: Long, transaction: LedgerTransaction?, message: String?)

      State indicating that a protocol is managing this request, and that the client should track protocol state machine updates for further information. The monitor will separately receive notification of the state machine having been added, as it would any other state machine. This response is used solely to enable the monitor to identify the state machine (and its progress) as associated with the request.

      @@ -51,7 +51,18 @@ the state machine (and its progress) as associated with the request.

      transaction -val transaction: SignedTransaction? +val transaction: LedgerTransaction? + + + +

      Functions

      + + + + +
      +toString +fun toString(): String
      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-protocol-started/to-string.html b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-protocol-started/to-string.html new file mode 100644 index 0000000000..d79cbde6b2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-protocol-started/to-string.html @@ -0,0 +1,15 @@ + + +TransactionBuildResult.ProtocolStarted.toString - + + + +com.r3corda.node.services.monitor / TransactionBuildResult / ProtocolStarted / toString
      +
      +

      toString

      + +fun toString(): String
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-protocol-started/transaction.html b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-protocol-started/transaction.html index b71afe2868..263ecd9f55 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-protocol-started/transaction.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/-protocol-started/transaction.html @@ -8,7 +8,7 @@

      transaction

      -val transaction: SignedTransaction?
      +val transaction: LedgerTransaction?


      diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/index.html index 789e5db964..f2949c53e9 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/index.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/-transaction-build-result/index.html @@ -15,14 +15,6 @@ -Complete - -class Complete : TransactionBuildResult

      State indicating the action undertaken has been completed (it was not complex enough to require a -state machine starting).

      - - - - Failed class Failed : TransactionBuildResult

      State indicating the action undertaken failed, either directly (it is not something which requires a @@ -46,14 +38,6 @@ the state machine (and its progress) as associated with the request.

      -Complete - -class Complete : TransactionBuildResult

      State indicating the action undertaken has been completed (it was not complex enough to require a -state machine starting).

      - - - - Failed class Failed : TransactionBuildResult

      State indicating the action undertaken failed, either directly (it is not something which requires a diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-init-.html b/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-init-.html deleted file mode 100644 index 699525de9d..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-init-.html +++ /dev/null @@ -1,20 +0,0 @@ - - -WalletMonitorService.<init> - - - - -com.r3corda.node.services.monitor / WalletMonitorService / <init>
      -
      -

      <init>

      -WalletMonitorService(net: MessagingService, smm: StateMachineManager, services: ServiceHub)
      -

      Service which allows external clients to monitor the wallet service and state machine manager, as well as trigger -actions within the node. The service also sends requests for user input back to clients, for example to enter -additional information while a protocol runs, or confirm an action.

      -

      This is intended to enable a range of tools from end user UI to ops tools which monitor health across a number of nodes.

      -
      -
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-input-state-ref-resolve-failed/-init-.html b/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-input-state-ref-resolve-failed/-init-.html deleted file mode 100644 index 3a5d2a677e..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-input-state-ref-resolve-failed/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -WalletMonitorService.InputStateRefResolveFailed.<init> - - - - -com.r3corda.node.services.monitor / WalletMonitorService / InputStateRefResolveFailed / <init>
      -
      -

      <init>

      -InputStateRefResolveFailed(stateRefs: List<StateRef>)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-public-key-lookup-failed/-init-.html b/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-public-key-lookup-failed/-init-.html deleted file mode 100644 index 87d3103114..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-public-key-lookup-failed/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -WalletMonitorService.PublicKeyLookupFailed.<init> - - - - -com.r3corda.node.services.monitor / WalletMonitorService / PublicKeyLookupFailed / <init>
      -
      -

      <init>

      -PublicKeyLookupFailed(failedPublicKey: PublicKey)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-public-key-lookup-failed/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-public-key-lookup-failed/index.html deleted file mode 100644 index 6aa9c2e8b0..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-public-key-lookup-failed/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - -WalletMonitorService.PublicKeyLookupFailed - - - - -com.r3corda.node.services.monitor / WalletMonitorService / PublicKeyLookupFailed
      -
      -

      PublicKeyLookupFailed

      -class PublicKeyLookupFailed : Exception
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -PublicKeyLookupFailed(failedPublicKey: PublicKey)
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-registered-listener/-init-.html b/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-registered-listener/-init-.html deleted file mode 100644 index 41ee6565ba..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/-registered-listener/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -WalletMonitorService.RegisteredListener.<init> - - - - -com.r3corda.node.services.monitor / WalletMonitorService / RegisteredListener / <init>
      -
      -

      <init>

      -RegisteredListener(recipients: MessageRecipients, sessionID: Long)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/index.html deleted file mode 100644 index 331b6f14ee..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/index.html +++ /dev/null @@ -1,174 +0,0 @@ - - -WalletMonitorService - - - - -com.r3corda.node.services.monitor / WalletMonitorService
      -
      -

      WalletMonitorService

      -class WalletMonitorService : AbstractNodeService
      -

      Service which allows external clients to monitor the wallet service and state machine manager, as well as trigger -actions within the node. The service also sends requests for user input back to clients, for example to enter -additional information while a protocol runs, or confirm an action.

      -

      This is intended to enable a range of tools from end user UI to ops tools which monitor health across a number of nodes.

      -
      -
      -
      -
      -

      Types

      - - - - - - - -
      -RegisteredListener -data class RegisteredListener
      -

      Exceptions

      - - - - - - - -
      -InputStateRefResolveFailed -class InputStateRefResolveFailed : Exception
      -

      Constructors

      - - - - - - - -
      -<init> -WalletMonitorService(net: MessagingService, smm: StateMachineManager, services: ServiceHub)

      Service which allows external clients to monitor the wallet service and state machine manager, as well as trigger -actions within the node. The service also sends requests for user input back to clients, for example to enter -additional information while a protocol runs, or confirm an action.

      -
      -

      Properties

      - - - - - - - - - - - - - - - -
      -listeners -val listeners: MutableSet<RegisteredListener>
      -services -val services: ServiceHub
      -smm -val smm: StateMachineManager
      -

      Inherited Properties

      - - - - - - - - - - - -
      -net -val net: MessagingService
      -networkMapCache -val networkMapCache: NetworkMapCache
      -

      Functions

      - - - - - - - - - - - -
      -processDeregisterRequest -fun processDeregisterRequest(req: DeregisterRequest): Unit

      Process a request from a monitor to remove them from the subscribers.

      -
      -processRegisterRequest -fun processRegisterRequest(req: RegisterRequest): Unit

      Process a request from a monitor to add them to the subscribers. This includes hooks to authenticate the request, -but currently all requests pass (and theres no access control on wallets, so it has no actual meaning).

      -
      -

      Inherited Functions

      - - - - - - - -
      -addMessageHandler -fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): Unit

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of -common boilerplate code. Exceptions are caught and passed to the provided consumer. If you just want a simple -acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      -fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): Unit

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of -common boilerplate code. Exceptions are propagated to the messaging layer. If you just want a simple -acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      -
      -

      Companion Object Properties

      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -DEREGISTER_TOPIC -val DEREGISTER_TOPIC: String
      -IN_EVENT_TOPIC -val IN_EVENT_TOPIC: String
      -OUT_EVENT_TOPIC -val OUT_EVENT_TOPIC: String
      -REGISTER_TOPIC -val REGISTER_TOPIC: String
      -STATE_TOPIC -val STATE_TOPIC: String
      -logger -val logger: <ERROR CLASS>
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/process-deregister-request.html b/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/process-deregister-request.html deleted file mode 100644 index 4f41fe16fc..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/process-deregister-request.html +++ /dev/null @@ -1,16 +0,0 @@ - - -WalletMonitorService.processDeregisterRequest - - - - -com.r3corda.node.services.monitor / WalletMonitorService / processDeregisterRequest
      -
      -

      processDeregisterRequest

      - -fun processDeregisterRequest(req: DeregisterRequest): Unit
      -

      Process a request from a monitor to remove them from the subscribers.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/process-register-request.html b/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/process-register-request.html deleted file mode 100644 index d60df923eb..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/process-register-request.html +++ /dev/null @@ -1,17 +0,0 @@ - - -WalletMonitorService.processRegisterRequest - - - - -com.r3corda.node.services.monitor / WalletMonitorService / processRegisterRequest
      -
      -

      processRegisterRequest

      - -fun processRegisterRequest(req: RegisterRequest): Unit
      -

      Process a request from a monitor to add them to the subscribers. This includes hooks to authenticate the request, -but currently all requests pass (and theres no access control on wallets, so it has no actual meaning).

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/services.html b/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/services.html deleted file mode 100644 index cc04a1c044..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.monitor/-wallet-monitor-service/services.html +++ /dev/null @@ -1,15 +0,0 @@ - - -WalletMonitorService.services - - - - -com.r3corda.node.services.monitor / WalletMonitorService / services
      -
      -

      services

      - -val services: ServiceHub
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.monitor/index.html b/docs/build/html/api/com.r3corda.node.services.monitor/index.html index e2a803d309..82af6e8040 100644 --- a/docs/build/html/api/com.r3corda.node.services.monitor/index.html +++ b/docs/build/html/api/com.r3corda.node.services.monitor/index.html @@ -30,6 +30,15 @@ +NodeMonitorService + +class NodeMonitorService : AbstractNodeService

      Service which allows external clients to monitor the nodes vault and state machine manager, as well as trigger +actions within the node. The service also sends requests for user input back to clients, for example to enter +additional information while a protocol runs, or confirm an action.

      + + + + RegisterRequest data class RegisterRequest : DirectRequestMessage @@ -59,15 +68,6 @@ sealed class TransactionBuildResult - - -WalletMonitorService - -class WalletMonitorService : AbstractNodeService

      Service which allows external clients to monitor the wallet service and state machine manager, as well as trigger -actions within the node. The service also sends requests for user input back to clients, for example to enter -additional information while a protocol runs, or confirm an action.

      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/-init-.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/-init-.html new file mode 100644 index 0000000000..1336373aab --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/-init-.html @@ -0,0 +1,19 @@ + + +AbstractNetworkMapService.<init> - + + + +com.r3corda.node.services.network / AbstractNetworkMapService / <init>
      +
      +

      <init>

      +AbstractNetworkMapService(services: ServiceHubInternal)
      +

      Abstracted out core functionality as the basis for a persistent implementation, as well as existing in-memory implementation.

      +

      Design is slightly refactored to track time and map version of last acknowledge per subscriber to facilitate +subscriber clean up and is simpler to persist than the previous implementation based on a set of missing messages acks.

      +
      +
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/_map-version.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/_map-version.html new file mode 100644 index 0000000000..296bd85805 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/_map-version.html @@ -0,0 +1,15 @@ + + +AbstractNetworkMapService._mapVersion - + + + +com.r3corda.node.services.network / AbstractNetworkMapService / _mapVersion
      +
      +

      _mapVersion

      + +protected val _mapVersion: AtomicInteger
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/get-unacknowledged-count.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/get-unacknowledged-count.html new file mode 100644 index 0000000000..be1e0f1b07 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/get-unacknowledged-count.html @@ -0,0 +1,15 @@ + + +AbstractNetworkMapService.getUnacknowledgedCount - + + + +com.r3corda.node.services.network / AbstractNetworkMapService / getUnacknowledgedCount
      +
      +

      getUnacknowledgedCount

      + +fun getUnacknowledgedCount(subscriber: SingleMessageRecipient, mapVersion: Int): Int?
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/index.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/index.html new file mode 100644 index 0000000000..abfdd25c2c --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/index.html @@ -0,0 +1,200 @@ + + +AbstractNetworkMapService - + + + +com.r3corda.node.services.network / AbstractNetworkMapService
      +
      +

      AbstractNetworkMapService

      +abstract class AbstractNetworkMapService : NetworkMapService, AbstractNodeService
      +

      Abstracted out core functionality as the basis for a persistent implementation, as well as existing in-memory implementation.

      +

      Design is slightly refactored to track time and map version of last acknowledge per subscriber to facilitate +subscriber clean up and is simpler to persist than the previous implementation based on a set of missing messages acks.

      +
      +
      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +AbstractNetworkMapService(services: ServiceHubInternal)

      Abstracted out core functionality as the basis for a persistent implementation, as well as existing in-memory implementation.

      +
      +

      Properties

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +_mapVersion +val _mapVersion: AtomicInteger
      +mapVersion +val mapVersion: Int
      +maxSizeRegistrationRequestBytes +val maxSizeRegistrationRequestBytes: Int

      Maximum credible size for a registration request. Generally requests are around 500-600 bytes, so this gives a +10 times overhead.

      +
      +maxUnacknowledgedUpdates +val maxUnacknowledgedUpdates: Int

      Maximum number of unacknowledged updates to send to a node before automatically unregistering them for updates

      +
      +nodes +open val nodes: List<NodeInfo>
      +registeredNodes +abstract val registeredNodes: MutableMap<Party, NodeRegistrationInfo>
      +subscribers +abstract val subscribers: ThreadBox<MutableMap<SingleMessageRecipient, LastAcknowledgeInfo>>
      +

      Inherited Properties

      + + + + + + + + + + + +
      +net +val net: MessagingServiceInternal
      +services +val services: ServiceHubInternal
      +

      Functions

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +getUnacknowledgedCount +fun getUnacknowledgedCount(subscriber: SingleMessageRecipient, mapVersion: Int): Int?
      +notifySubscribers +fun notifySubscribers(wireReg: WireNodeRegistration, mapVersion: Int): Unit
      +processAcknowledge +fun processAcknowledge(req: UpdateAcknowledge): Unit
      +processFetchAllRequest +fun processFetchAllRequest(req: FetchMapRequest): FetchMapResponse
      +processQueryRequest +fun processQueryRequest(req: QueryIdentityRequest): QueryIdentityResponse
      +processRegistrationChangeRequest +fun processRegistrationChangeRequest(req: RegistrationRequest): RegistrationResponse
      +processSubscriptionRequest +fun processSubscriptionRequest(req: SubscribeRequest): SubscribeResponse
      +setup +fun setup(): Unit
      +unregisterNetworkHandlers +fun unregisterNetworkHandlers(): Unit
      +

      Inherited Functions

      + + + + + + + + + + + +
      +addMessageHandler +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): MessageHandlerRegistration

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +common boilerplate code. Exceptions are caught and passed to the provided consumer. If you just want a simple +acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): MessageHandlerRegistration

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +common boilerplate code. Exceptions are propagated to the messaging layer. If you just want a simple +acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      +
      +addProtocolHandler +fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>, onResultFuture: (<ERROR CLASS><R>, H) -> Unit): Unit

      Register a handler to kick-off a protocol when a HandshakeMessage is received by the node. This performs the +necessary steps to enable communication between the two protocols, including calling ProtocolLogic.registerSession.

      +fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>): Unit
      +

      Inheritors

      + + + + + + + + + + + +
      +InMemoryNetworkMapService +class InMemoryNetworkMapService : AbstractNetworkMapService
      +PersistentNetworkMapService +class PersistentNetworkMapService : AbstractNetworkMapService

      A network map service backed by a database to survive restarts of the node hosting it.

      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/map-version.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/map-version.html new file mode 100644 index 0000000000..49f5f25385 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/map-version.html @@ -0,0 +1,15 @@ + + +AbstractNetworkMapService.mapVersion - + + + +com.r3corda.node.services.network / AbstractNetworkMapService / mapVersion
      +
      +

      mapVersion

      + +val mapVersion: Int
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/max-size-registration-request-bytes.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/max-size-registration-request-bytes.html similarity index 77% rename from docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/max-size-registration-request-bytes.html rename to docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/max-size-registration-request-bytes.html index af14366a0c..4f1631d51f 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/max-size-registration-request-bytes.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/max-size-registration-request-bytes.html @@ -1,13 +1,13 @@ -InMemoryNetworkMapService.maxSizeRegistrationRequestBytes - +AbstractNetworkMapService.maxSizeRegistrationRequestBytes - -com.r3corda.node.services.network / InMemoryNetworkMapService / maxSizeRegistrationRequestBytes
      +com.r3corda.node.services.network / AbstractNetworkMapService / maxSizeRegistrationRequestBytes

      maxSizeRegistrationRequestBytes

      - + val maxSizeRegistrationRequestBytes: Int

      Maximum credible size for a registration request. Generally requests are around 500-600 bytes, so this gives a 10 times overhead.

      diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/max-unacknowledged-updates.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/max-unacknowledged-updates.html similarity index 75% rename from docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/max-unacknowledged-updates.html rename to docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/max-unacknowledged-updates.html index cc160c32c0..7798df648e 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/max-unacknowledged-updates.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/max-unacknowledged-updates.html @@ -1,13 +1,13 @@ -InMemoryNetworkMapService.maxUnacknowledgedUpdates - +AbstractNetworkMapService.maxUnacknowledgedUpdates - -com.r3corda.node.services.network / InMemoryNetworkMapService / maxUnacknowledgedUpdates
      +com.r3corda.node.services.network / AbstractNetworkMapService / maxUnacknowledgedUpdates

      maxUnacknowledgedUpdates

      - + val maxUnacknowledgedUpdates: Int

      Maximum number of unacknowledged updates to send to a node before automatically unregistering them for updates


      diff --git a/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/nodes.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/nodes.html new file mode 100644 index 0000000000..7ecca4e0e8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/nodes.html @@ -0,0 +1,16 @@ + + +AbstractNetworkMapService.nodes - + + + +com.r3corda.node.services.network / AbstractNetworkMapService / nodes
      +
      +

      nodes

      + +open val nodes: List<NodeInfo>
      +Overrides NetworkMapService.nodes
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/notify-subscribers.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/notify-subscribers.html new file mode 100644 index 0000000000..7439a2c185 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/notify-subscribers.html @@ -0,0 +1,15 @@ + + +AbstractNetworkMapService.notifySubscribers - + + + +com.r3corda.node.services.network / AbstractNetworkMapService / notifySubscribers
      +
      +

      notifySubscribers

      + +fun notifySubscribers(wireReg: WireNodeRegistration, mapVersion: Int): Unit
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/process-acknowledge.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/process-acknowledge.html similarity index 77% rename from docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/process-acknowledge.html rename to docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/process-acknowledge.html index a7713f556c..f83eaa4114 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/process-acknowledge.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/process-acknowledge.html @@ -1,14 +1,14 @@ -InMemoryNetworkMapService.processAcknowledge - +AbstractNetworkMapService.processAcknowledge - -com.r3corda.node.services.network / InMemoryNetworkMapService / processAcknowledge
      +com.r3corda.node.services.network / AbstractNetworkMapService / processAcknowledge

      processAcknowledge

      - -fun processAcknowledge(req: UpdateAcknowledge): Unit
      + +fun processAcknowledge(req: UpdateAcknowledge): Unit


      diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/process-fetch-all-request.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/process-fetch-all-request.html similarity index 73% rename from docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/process-fetch-all-request.html rename to docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/process-fetch-all-request.html index 3df2ffe9f5..bcaa2261c0 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/process-fetch-all-request.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/process-fetch-all-request.html @@ -1,14 +1,14 @@ -InMemoryNetworkMapService.processFetchAllRequest - +AbstractNetworkMapService.processFetchAllRequest - -com.r3corda.node.services.network / InMemoryNetworkMapService / processFetchAllRequest
      +com.r3corda.node.services.network / AbstractNetworkMapService / processFetchAllRequest

      processFetchAllRequest

      - -fun processFetchAllRequest(req: FetchMapRequest): FetchMapResponse
      + +fun processFetchAllRequest(req: FetchMapRequest): FetchMapResponse


      diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/process-query-request.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/process-query-request.html similarity index 79% rename from docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/process-query-request.html rename to docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/process-query-request.html index 8541dcaa93..e3c59c915f 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/process-query-request.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/process-query-request.html @@ -1,14 +1,14 @@ -InMemoryNetworkMapService.processQueryRequest - +AbstractNetworkMapService.processQueryRequest - -com.r3corda.node.services.network / InMemoryNetworkMapService / processQueryRequest
      +com.r3corda.node.services.network / AbstractNetworkMapService / processQueryRequest

      processQueryRequest

      - -fun processQueryRequest(req: QueryIdentityRequest): QueryIdentityResponse
      + +fun processQueryRequest(req: QueryIdentityRequest): QueryIdentityResponse


      diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/process-registration-change-request.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/process-registration-change-request.html similarity index 80% rename from docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/process-registration-change-request.html rename to docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/process-registration-change-request.html index 6b80b92d78..3134d64c63 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/process-registration-change-request.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/process-registration-change-request.html @@ -1,14 +1,14 @@ -InMemoryNetworkMapService.processRegistrationChangeRequest - +AbstractNetworkMapService.processRegistrationChangeRequest - -com.r3corda.node.services.network / InMemoryNetworkMapService / processRegistrationChangeRequest
      +com.r3corda.node.services.network / AbstractNetworkMapService / processRegistrationChangeRequest

      processRegistrationChangeRequest

      - -fun processRegistrationChangeRequest(req: RegistrationRequest): RegistrationResponse
      + +fun processRegistrationChangeRequest(req: RegistrationRequest): RegistrationResponse


      diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/process-subscription-request.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/process-subscription-request.html similarity index 74% rename from docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/process-subscription-request.html rename to docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/process-subscription-request.html index b04d70f8cc..0de43d5b28 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/process-subscription-request.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/process-subscription-request.html @@ -1,14 +1,14 @@ -InMemoryNetworkMapService.processSubscriptionRequest - +AbstractNetworkMapService.processSubscriptionRequest - -com.r3corda.node.services.network / InMemoryNetworkMapService / processSubscriptionRequest
      +com.r3corda.node.services.network / AbstractNetworkMapService / processSubscriptionRequest

      processSubscriptionRequest

      - -fun processSubscriptionRequest(req: SubscribeRequest): SubscribeResponse
      + +fun processSubscriptionRequest(req: SubscribeRequest): SubscribeResponse


      diff --git a/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/registered-nodes.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/registered-nodes.html new file mode 100644 index 0000000000..bd6e50c0c9 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/registered-nodes.html @@ -0,0 +1,15 @@ + + +AbstractNetworkMapService.registeredNodes - + + + +com.r3corda.node.services.network / AbstractNetworkMapService / registeredNodes
      +
      +

      registeredNodes

      + +protected abstract val registeredNodes: MutableMap<Party, NodeRegistrationInfo>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/setup.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/setup.html new file mode 100644 index 0000000000..f280503e48 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/setup.html @@ -0,0 +1,15 @@ + + +AbstractNetworkMapService.setup - + + + +com.r3corda.node.services.network / AbstractNetworkMapService / setup
      +
      +

      setup

      + +protected fun setup(): Unit
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/subscribers.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/subscribers.html new file mode 100644 index 0000000000..b95527fb21 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/subscribers.html @@ -0,0 +1,15 @@ + + +AbstractNetworkMapService.subscribers - + + + +com.r3corda.node.services.network / AbstractNetworkMapService / subscribers
      +
      +

      subscribers

      + +protected abstract val subscribers: ThreadBox<MutableMap<SingleMessageRecipient, LastAcknowledgeInfo>>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/unregister-network-handlers.html b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/unregister-network-handlers.html new file mode 100644 index 0000000000..cdceed15e2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-abstract-network-map-service/unregister-network-handlers.html @@ -0,0 +1,15 @@ + + +AbstractNetworkMapService.unregisterNetworkHandlers - + + + +com.r3corda.node.services.network / AbstractNetworkMapService / unregisterNetworkHandlers
      +
      +

      unregisterNetworkHandlers

      + +fun unregisterNetworkHandlers(): Unit
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/-init-.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/-init-.html deleted file mode 100644 index bc7576f112..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -InMemoryMessagingNetwork.Builder.<init> - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / Builder / <init>
      -
      -

      <init>

      -Builder(manuallyPumped: Boolean, id: Handle)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/id.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/id.html deleted file mode 100644 index 7e91726db5..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/id.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.Builder.id - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / Builder / id
      -
      -

      id

      - -val id: Handle
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/index.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/index.html deleted file mode 100644 index bff436776c..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - -InMemoryMessagingNetwork.Builder - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / Builder
      -
      -

      Builder

      -inner class Builder : MessagingServiceBuilder<InMemoryMessaging>
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -Builder(manuallyPumped: Boolean, id: Handle)
      -

      Properties

      - - - - - - - - - - - -
      -id -val id: Handle
      -manuallyPumped -val manuallyPumped: Boolean
      -

      Functions

      - - - - - - - -
      -start -fun start(): <ERROR CLASS><InMemoryMessaging>
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/manually-pumped.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/manually-pumped.html deleted file mode 100644 index 1b98fd835b..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/manually-pumped.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.Builder.manuallyPumped - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / Builder / manuallyPumped
      -
      -

      manuallyPumped

      - -val manuallyPumped: Boolean
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/start.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/start.html deleted file mode 100644 index 62c2ac9d91..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-builder/start.html +++ /dev/null @@ -1,16 +0,0 @@ - - -InMemoryMessagingNetwork.Builder.start - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / Builder / start
      -
      -

      start

      - -fun start(): <ERROR CLASS><InMemoryMessaging>
      -Overrides MessagingServiceBuilder.start
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/-init-.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/-init-.html deleted file mode 100644 index aaab533cdf..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -InMemoryMessagingNetwork.Handle.<init> - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / Handle / <init>
      -
      -

      <init>

      -Handle(id: Int, description: String)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/description.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/description.html deleted file mode 100644 index a4c3fcfbf6..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/description.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.Handle.description - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / Handle / description
      -
      -

      description

      - -val description: String
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/equals.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/equals.html deleted file mode 100644 index 63b77a473f..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/equals.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.Handle.equals - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / Handle / equals
      -
      -

      equals

      - -fun equals(other: Any?): Boolean
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/hash-code.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/hash-code.html deleted file mode 100644 index 18040182d5..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/hash-code.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.Handle.hashCode - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / Handle / hashCode
      -
      -

      hashCode

      - -fun hashCode(): Int
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/id.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/id.html deleted file mode 100644 index 3c73d94f20..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/id.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.Handle.id - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / Handle / id
      -
      -

      id

      - -val id: Int
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/index.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/index.html deleted file mode 100644 index 62b9fb77d8..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - -InMemoryMessagingNetwork.Handle - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / Handle
      -
      -

      Handle

      -class Handle : SingleMessageRecipient
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -Handle(id: Int, description: String)
      -

      Properties

      - - - - - - - - - - - -
      -description -val description: String
      -id -val id: Int
      -

      Functions

      - - - - - - - - - - - - - - - -
      -equals -fun equals(other: Any?): Boolean
      -hashCode -fun hashCode(): Int
      -toString -fun toString(): String
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/to-string.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/to-string.html deleted file mode 100644 index e78e5bfb3e..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-handle/to-string.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.Handle.toString - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / Handle / toString
      -
      -

      toString

      - -fun toString(): String
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/-init-.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/-init-.html deleted file mode 100644 index 3a9cef0b3c..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.Handler.<init> - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / Handler / <init>
      -
      -

      <init>

      -Handler(executor: Executor?, topicSession: TopicSession, callback: (Message, MessageHandlerRegistration) -> Unit)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/callback.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/callback.html deleted file mode 100644 index 084eb3d264..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/callback.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.Handler.callback - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / Handler / callback
      -
      -

      callback

      - -val callback: (Message, MessageHandlerRegistration) -> Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/executor.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/executor.html deleted file mode 100644 index b0699e2339..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/executor.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.Handler.executor - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / Handler / executor
      -
      -

      executor

      - -val executor: Executor?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/index.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/index.html deleted file mode 100644 index e7c6f5e56f..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/index.html +++ /dev/null @@ -1,48 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.Handler - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / Handler
      -
      -

      Handler

      -inner class Handler : MessageHandlerRegistration
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -Handler(executor: Executor?, topicSession: TopicSession, callback: (Message, MessageHandlerRegistration) -> Unit)
      -

      Properties

      - - - - - - - - - - - - - - - -
      -callback -val callback: (Message, MessageHandlerRegistration) -> Unit
      -executor -val executor: Executor?
      -topicSession -val topicSession: TopicSession
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/topic-session.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/topic-session.html deleted file mode 100644 index cff61bfbdf..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/topic-session.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.Handler.topicSession - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / Handler / topicSession
      -
      -

      topicSession

      - -val topicSession: TopicSession
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/topic.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/topic.html deleted file mode 100644 index 43899d22ce..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-handler/topic.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.Handler.topic - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / Handler / topic
      -
      -

      topic

      - -val topic: String
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-init-.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-init-.html deleted file mode 100644 index 68e2854c0f..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-init-.html +++ /dev/null @@ -1,20 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.<init> - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / <init>
      -
      -

      <init>

      -InMemoryMessaging(manuallyPumped: Boolean, handle: Handle)
      -

      An InMemoryMessaging provides a MessagingService that isnt backed by any kind of network or disk storage -system, but just uses regular queues on the heap instead. It is intended for unit testing and developer convenience -when all entities on the network are being simulated in-process.

      -

      An instance can be obtained by creating a builder and then using the start method.

      -
      -
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-inner-state/-init-.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-inner-state/-init-.html deleted file mode 100644 index f914b220b7..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-inner-state/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.InnerState.<init> - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / InnerState / <init>
      -
      -

      <init>

      -InnerState()
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-inner-state/handlers.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-inner-state/handlers.html deleted file mode 100644 index 5e058368b1..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-inner-state/handlers.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.InnerState.handlers - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / InnerState / handlers
      -
      -

      handlers

      - -val handlers: MutableList<Handler>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-inner-state/index.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-inner-state/index.html deleted file mode 100644 index 74e7f687d6..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-inner-state/index.html +++ /dev/null @@ -1,42 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.InnerState - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / InnerState
      -
      -

      InnerState

      -protected inner class InnerState
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -InnerState()
      -

      Properties

      - - - - - - - - - - - -
      -handlers -val handlers: MutableList<Handler>
      -pendingRedelivery -val pendingRedelivery: LinkedList<MessageTransfer>
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-inner-state/pending-redelivery.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-inner-state/pending-redelivery.html deleted file mode 100644 index ffe880d9da..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/-inner-state/pending-redelivery.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.InnerState.pendingRedelivery - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / InnerState / pendingRedelivery
      -
      -

      pendingRedelivery

      - -val pendingRedelivery: LinkedList<MessageTransfer>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/add-message-handler.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/add-message-handler.html deleted file mode 100644 index 89775c6010..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/add-message-handler.html +++ /dev/null @@ -1,50 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.addMessageHandler - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / addMessageHandler
      -
      -

      addMessageHandler

      - -fun addMessageHandler(topic: String, sessionID: Long, executor: Executor?, callback: (Message, MessageHandlerRegistration) -> Unit): MessageHandlerRegistration
      -Overrides MessagingService.addMessageHandler
      -

      The provided function will be invoked for each received message whose topic matches the given string, on the given -executor.

      -

      If no executor is received then the callback will run on threads provided by the messaging service, and the -callback is expected to be thread safe as a result.

      -

      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 -itself and yet addMessageHandler hasnt returned the handle yet.

      -
      -
      -

      Parameters

      - -topic - identifier for the general subject of the message, for example "platform.network_map.fetch". -The topic can be the empty string to match all messages (session ID must be DEFAULT_SESSION_ID).
      -
      - -sessionID - identifier for the session the message is part of. For services listening before -a session is established, use DEFAULT_SESSION_ID.
      -
      -
      - -fun addMessageHandler(topicSession: TopicSession, executor: Executor?, callback: (Message, MessageHandlerRegistration) -> Unit): MessageHandlerRegistration
      -Overrides MessagingService.addMessageHandler
      -

      The provided function will be invoked for each received message whose topic and session matches, on the -given executor.

      -

      If no executor is received then the callback will run on threads provided by the messaging service, and the -callback is expected to be thread safe as a result.

      -

      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 -itself and yet addMessageHandler hasnt returned the handle yet.

      -
      -
      -

      Parameters

      - -topicSession - identifier for the topic and session to listen for messages arriving on.
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/background-thread.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/background-thread.html deleted file mode 100644 index 304b243007..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/background-thread.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.backgroundThread - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / backgroundThread
      -
      -

      backgroundThread

      - -protected val backgroundThread: Nothing?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/create-message.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/create-message.html deleted file mode 100644 index b1dba10ab1..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/create-message.html +++ /dev/null @@ -1,20 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.createMessage - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / createMessage
      -
      -

      createMessage

      - -fun createMessage(topic: String, sessionID: Long, data: ByteArray): Message
      -Overrides MessagingService.createMessage
      - -fun createMessage(topicSession: TopicSession, data: ByteArray): Message
      -Overrides MessagingService.createMessage
      -

      Returns the given (topic & session, data) pair as a newly created message object.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/index.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/index.html deleted file mode 100644 index 697a96e676..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/index.html +++ /dev/null @@ -1,128 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging
      -
      -

      InMemoryMessaging

      -inner class InMemoryMessaging : SingletonSerializeAsToken, MessagingServiceInternal
      -

      An InMemoryMessaging provides a MessagingService that isnt backed by any kind of network or disk storage -system, but just uses regular queues on the heap instead. It is intended for unit testing and developer convenience -when all entities on the network are being simulated in-process.

      -

      An instance can be obtained by creating a builder and then using the start method.

      -
      -
      -
      -
      -

      Types

      - - - - - - - -
      -Handler -inner class Handler : MessageHandlerRegistration
      -

      Constructors

      - - - - - - - -
      -<init> -InMemoryMessaging(manuallyPumped: Boolean, handle: Handle)

      An InMemoryMessaging provides a MessagingService that isnt backed by any kind of network or disk storage -system, but just uses regular queues on the heap instead. It is intended for unit testing and developer convenience -when all entities on the network are being simulated in-process.

      -
      -

      Properties

      - - - - - - - -
      -myAddress -val myAddress: SingleMessageRecipient

      Returns an address that refers to this node.

      -
      -

      Functions

      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -addMessageHandler -fun addMessageHandler(topic: String, sessionID: Long, executor: Executor?, callback: (Message, MessageHandlerRegistration) -> Unit): MessageHandlerRegistration

      The provided function will be invoked for each received message whose topic matches the given string, on the given -executor.

      -fun addMessageHandler(topicSession: TopicSession, executor: Executor?, callback: (Message, MessageHandlerRegistration) -> Unit): MessageHandlerRegistration

      The provided function will be invoked for each received message whose topic and session matches, on the -given executor.

      -
      -createMessage -fun createMessage(topic: String, sessionID: Long, data: ByteArray): Message
      -fun createMessage(topicSession: TopicSession, data: ByteArray): Message

      Returns the given (topic & session, data) pair as a newly created message object.

      -
      -pumpReceive -fun pumpReceive(block: Boolean): MessageTransfer?

      Delivers a single message from the internal queue. If there are no messages waiting to be delivered and block -is true, waits until one has been provided on a different thread via send. If block is false, the return -result indicates whether a message was delivered or not.

      -
      -removeMessageHandler -fun removeMessageHandler(registration: MessageHandlerRegistration): Unit

      Removes a handler given the object returned from addMessageHandler. The callback will no longer be invoked once -this method has returned, although executions that are currently in flight will not be interrupted.

      -
      -send -fun send(message: Message, target: MessageRecipients): Unit

      Sends a message to the given receiver. The details of how receivers are identified is up to the messaging -implementation: the type system provides an opaque high level view, with more fine grained control being -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.

      -
      -stop -fun stop(): Unit

      Initiates shutdown: if called from a thread that isnt controlled by the executor passed to the constructor -then this will block until all in-flight messages have finished being handled and acknowledged. If called -from a thread thats a part of the AffinityExecutor given to the constructor, it returns immediately and -shutdown is asynchronous.

      -
      -

      Inherited Functions

      - - - - - - - -
      -toToken -open fun toToken(context: SerializeAsTokenContext): SerializationToken
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/my-address.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/my-address.html deleted file mode 100644 index 6e6a4a2d41..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/my-address.html +++ /dev/null @@ -1,17 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.myAddress - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / myAddress
      -
      -

      myAddress

      - -val myAddress: SingleMessageRecipient
      -Overrides MessagingService.myAddress
      -

      Returns an address that refers to this node.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/pump-receive.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/pump-receive.html deleted file mode 100644 index 3aa0d40c12..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/pump-receive.html +++ /dev/null @@ -1,20 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.pumpReceive - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / pumpReceive
      -
      -

      pumpReceive

      - -fun pumpReceive(block: Boolean): MessageTransfer?
      -

      Delivers a single message from the internal queue. If there are no messages waiting to be delivered and block -is true, waits until one has been provided on a different thread via send. If block is false, the return -result indicates whether a message was delivered or not.

      -

      Return
      -the message that was processed, if any in this round.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/register-trusted-address.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/register-trusted-address.html deleted file mode 100644 index a578d02de5..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/register-trusted-address.html +++ /dev/null @@ -1,16 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.registerTrustedAddress - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / registerTrustedAddress
      -
      -

      registerTrustedAddress

      - -fun registerTrustedAddress(address: SingleMessageRecipient): Unit
      -Overrides MessagingServiceInternal.registerTrustedAddress
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/remove-message-handler.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/remove-message-handler.html deleted file mode 100644 index 123666ff96..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/remove-message-handler.html +++ /dev/null @@ -1,24 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.removeMessageHandler - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / removeMessageHandler
      -
      -

      removeMessageHandler

      - -fun removeMessageHandler(registration: MessageHandlerRegistration): Unit
      -Overrides MessagingService.removeMessageHandler
      -

      Removes a handler given the object returned from addMessageHandler. The callback will no longer be invoked once -this method has returned, although executions that are currently in flight will not be interrupted.

      -

      Exceptions

      - -IllegalArgumentException - if the given registration isnt valid for this messaging service.
      -
      - -IllegalStateException - if the given registration was already de-registered.
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/running.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/running.html deleted file mode 100644 index 96ab205223..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/running.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.running - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / running
      -
      -

      running

      - -protected var running: Boolean
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/send.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/send.html deleted file mode 100644 index 56eac8fd3d..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/send.html +++ /dev/null @@ -1,24 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.send - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / send
      -
      -

      send

      - -fun send(message: Message, target: MessageRecipients): Unit
      -Overrides MessagingService.send
      -

      Sends a message to the given receiver. The details of how receivers are identified is up to the messaging -implementation: the type system provides an opaque high level view, with more fine grained control being -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.

      -

      There is no way to know if a message has been received. If your protocol requires this, you need the recipient -to send an ACK message back.

      -
      -
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/state.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/state.html deleted file mode 100644 index 9879a754ad..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/state.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.state - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / state
      -
      -

      state

      - -protected val state: ThreadBox<InnerState>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/stop.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/stop.html deleted file mode 100644 index 71293d4962..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-in-memory-messaging/stop.html +++ /dev/null @@ -1,20 +0,0 @@ - - -InMemoryMessagingNetwork.InMemoryMessaging.stop - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / InMemoryMessaging / stop
      -
      -

      stop

      - -fun stop(): Unit
      -Overrides MessagingServiceInternal.stop
      -

      Initiates shutdown: if called from a thread that isnt controlled by the executor passed to the constructor -then this will block until all in-flight messages have finished being handled and acknowledged. If called -from a thread thats a part of the AffinityExecutor given to the constructor, it returns immediately and -shutdown is asynchronous.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-init-.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-init-.html deleted file mode 100644 index 1c07d02f7b..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-init-.html +++ /dev/null @@ -1,19 +0,0 @@ - - -InMemoryMessagingNetwork.<init> - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / <init>
      -
      -

      <init>

      -InMemoryMessagingNetwork(sendManuallyPumped: Boolean)
      -

      An in-memory network allows you to manufacture InMemoryMessagings for a set of participants. Each -InMemoryMessaging maintains a queue of messages it has received, and a background thread that dispatches -messages one by one to registered handlers. Alternatively, a messaging system may be manually pumped, in which -case no thread is created and a caller is expected to force delivery one at a time (this is useful for unit -testing).

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-latency-calculator/between.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-latency-calculator/between.html deleted file mode 100644 index 6fd58d56a5..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-latency-calculator/between.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.LatencyCalculator.between - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / LatencyCalculator / between
      -
      -

      between

      - -abstract fun between(sender: SingleMessageRecipient, receiver: SingleMessageRecipient): Duration
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-latency-calculator/index.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-latency-calculator/index.html deleted file mode 100644 index f894a8a6e5..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-latency-calculator/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - -InMemoryMessagingNetwork.LatencyCalculator - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / LatencyCalculator
      -
      -

      LatencyCalculator

      -interface LatencyCalculator
      -
      -
      -

      Functions

      - - - - - - - -
      -between -abstract fun between(sender: SingleMessageRecipient, receiver: SingleMessageRecipient): Duration
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-m-e-s-s-a-g-e-s_-l-o-g_-n-a-m-e.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-m-e-s-s-a-g-e-s_-l-o-g_-n-a-m-e.html deleted file mode 100644 index f86faa931f..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-m-e-s-s-a-g-e-s_-l-o-g_-n-a-m-e.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.MESSAGES_LOG_NAME - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / MESSAGES_LOG_NAME
      -
      -

      MESSAGES_LOG_NAME

      - -val MESSAGES_LOG_NAME: String
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/-init-.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/-init-.html deleted file mode 100644 index 3149d4839e..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -InMemoryMessagingNetwork.MessageTransfer.<init> - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / MessageTransfer / <init>
      -
      -

      <init>

      -MessageTransfer(sender: InMemoryMessaging, message: Message, recipients: MessageRecipients)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/index.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/index.html deleted file mode 100644 index 8d35aa1ce3..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/index.html +++ /dev/null @@ -1,59 +0,0 @@ - - -InMemoryMessagingNetwork.MessageTransfer - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / MessageTransfer
      -
      -

      MessageTransfer

      -data class MessageTransfer
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -MessageTransfer(sender: InMemoryMessaging, message: Message, recipients: MessageRecipients)
      -

      Properties

      - - - - - - - - - - - - - - - -
      -message -val message: Message
      -recipients -val recipients: MessageRecipients
      -sender -val sender: InMemoryMessaging
      -

      Functions

      - - - - - - - -
      -toString -fun toString(): String
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/message.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/message.html deleted file mode 100644 index 7cdca3ab4c..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/message.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.MessageTransfer.message - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / MessageTransfer / message
      -
      -

      message

      - -val message: Message
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/recipients.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/recipients.html deleted file mode 100644 index 78bdc5e352..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/recipients.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.MessageTransfer.recipients - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / MessageTransfer / recipients
      -
      -

      recipients

      - -val recipients: MessageRecipients
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/sender.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/sender.html deleted file mode 100644 index 82a852d4f4..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/-message-transfer/sender.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.MessageTransfer.sender - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / MessageTransfer / sender
      -
      -

      sender

      - -val sender: InMemoryMessaging
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/create-node-with-i-d.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/create-node-with-i-d.html deleted file mode 100644 index a692d9a696..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/create-node-with-i-d.html +++ /dev/null @@ -1,25 +0,0 @@ - - -InMemoryMessagingNetwork.createNodeWithID - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / createNodeWithID
      -
      -

      createNodeWithID

      - -fun createNodeWithID(manuallyPumped: Boolean, id: Int, description: String? = null): MessagingServiceBuilder<InMemoryMessaging>
      -

      Creates a node at the given address: useful if you want to recreate a node to simulate a restart.

      -

      Parameters

      - -manuallyPumped - see createNode.
      -
      - -id - the numeric ID to use, e.g. set to whatever ID the node used last time.
      -
      - -description - text string that identifies this node for message logging (if is enabled) or null to autogenerate.
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/create-node.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/create-node.html deleted file mode 100644 index b39b05da60..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/create-node.html +++ /dev/null @@ -1,23 +0,0 @@ - - -InMemoryMessagingNetwork.createNode - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / createNode
      -
      -

      createNode

      - -fun createNode(manuallyPumped: Boolean): <ERROR CLASS><Handle, MessagingServiceBuilder<InMemoryMessaging>>
      -

      Creates a node and returns the new object that identifies its location on the network to senders, and the -InMemoryMessaging that the recipient/in-memory node uses to receive messages and send messages itself.

      -

      If manuallyPumped is set to true, then you are expected to call the InMemoryMessaging.pump method on the InMemoryMessaging -in order to cause the delivery of a single message, which will occur on the thread of the caller. If set to false -then this class will set up a background thread to deliver messages asynchronously, if the handler specifies no -executor.

      -
      -
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/endpoints.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/endpoints.html deleted file mode 100644 index b08758df1e..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/endpoints.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.endpoints - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / endpoints
      -
      -

      endpoints

      - -val endpoints: List<InMemoryMessaging>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/everyone-online.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/everyone-online.html deleted file mode 100644 index 7241f034f4..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/everyone-online.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.everyoneOnline - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / everyoneOnline
      -
      -

      everyoneOnline

      - -val everyoneOnline: AllPossibleRecipients
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/index.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/index.html deleted file mode 100644 index 142e32ec14..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/index.html +++ /dev/null @@ -1,175 +0,0 @@ - - -InMemoryMessagingNetwork - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork
      -
      -

      InMemoryMessagingNetwork

      -class InMemoryMessagingNetwork : SingletonSerializeAsToken
      -

      An in-memory network allows you to manufacture InMemoryMessagings for a set of participants. Each -InMemoryMessaging maintains a queue of messages it has received, and a background thread that dispatches -messages one by one to registered handlers. Alternatively, a messaging system may be manually pumped, in which -case no thread is created and a caller is expected to force delivery one at a time (this is useful for unit -testing).

      -
      -
      -

      Types

      - - - - - - - - - - - - - - - - - - - - - - - -
      -Builder -inner class Builder : MessagingServiceBuilder<InMemoryMessaging>
      -Handle -class Handle : SingleMessageRecipient
      -InMemoryMessaging -inner class InMemoryMessaging : SingletonSerializeAsToken, MessagingServiceInternal

      An InMemoryMessaging provides a MessagingService that isnt backed by any kind of network or disk storage -system, but just uses regular queues on the heap instead. It is intended for unit testing and developer convenience -when all entities on the network are being simulated in-process.

      -
      -LatencyCalculator -interface LatencyCalculator
      -MessageTransfer -data class MessageTransfer
      -

      Constructors

      - - - - - - - -
      -<init> -InMemoryMessagingNetwork(sendManuallyPumped: Boolean)

      An in-memory network allows you to manufacture InMemoryMessagings for a set of participants. Each -InMemoryMessaging maintains a queue of messages it has received, and a background thread that dispatches -messages one by one to registered handlers. Alternatively, a messaging system may be manually pumped, in which -case no thread is created and a caller is expected to force delivery one at a time (this is useful for unit -testing).

      -
      -

      Properties

      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -endpoints -val endpoints: List<InMemoryMessaging>
      -everyoneOnline -val everyoneOnline: AllPossibleRecipients
      -latencyCalculator -var latencyCalculator: LatencyCalculator?

      This can be set to an object which can inject artificial latency between sender/recipient pairs.

      -
      -receivedMessages -val receivedMessages: <ERROR CLASS><MessageTransfer>
      -sendManuallyPumped -val sendManuallyPumped: Boolean
      -sentMessages -val sentMessages: <ERROR CLASS><MessageTransfer>
      -

      Functions

      - - - - - - - - - - - - - - - - - - - - - - - -
      -createNode -fun createNode(manuallyPumped: Boolean): <ERROR CLASS><Handle, MessagingServiceBuilder<InMemoryMessaging>>

      Creates a node and returns the new object that identifies its location on the network to senders, and the -InMemoryMessaging that the recipient/in-memory node uses to receive messages and send messages itself.

      -
      -createNodeWithID -fun createNodeWithID(manuallyPumped: Boolean, id: Int, description: String? = null): MessagingServiceBuilder<InMemoryMessaging>

      Creates a node at the given address: useful if you want to recreate a node to simulate a restart.

      -
      -pumpSend -fun pumpSend(block: Boolean): MessageTransfer?
      -pumpSendInternal -fun pumpSendInternal(transfer: MessageTransfer): Unit
      -stop -fun stop(): Unit
      -

      Inherited Functions

      - - - - - - - -
      -toToken -open fun toToken(context: SerializeAsTokenContext): SerializationToken
      -

      Companion Object Properties

      - - - - - - - -
      -MESSAGES_LOG_NAME -val MESSAGES_LOG_NAME: String
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/latency-calculator.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/latency-calculator.html deleted file mode 100644 index c557924412..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/latency-calculator.html +++ /dev/null @@ -1,16 +0,0 @@ - - -InMemoryMessagingNetwork.latencyCalculator - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / latencyCalculator
      -
      -

      latencyCalculator

      - -var latencyCalculator: LatencyCalculator?
      -

      This can be set to an object which can inject artificial latency between sender/recipient pairs.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/pump-send-internal.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/pump-send-internal.html deleted file mode 100644 index 242283b31f..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/pump-send-internal.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.pumpSendInternal - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / pumpSendInternal
      -
      -

      pumpSendInternal

      - -fun pumpSendInternal(transfer: MessageTransfer): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/pump-send.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/pump-send.html deleted file mode 100644 index 441973d30c..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/pump-send.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.pumpSend - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / pumpSend
      -
      -

      pumpSend

      - -fun pumpSend(block: Boolean): MessageTransfer?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/received-messages.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/received-messages.html deleted file mode 100644 index 3221e919a5..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/received-messages.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.receivedMessages - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / receivedMessages
      -
      -

      receivedMessages

      - -val receivedMessages: <ERROR CLASS><MessageTransfer>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/send-manually-pumped.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/send-manually-pumped.html deleted file mode 100644 index de38c759b9..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/send-manually-pumped.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.sendManuallyPumped - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / sendManuallyPumped
      -
      -

      sendManuallyPumped

      - -val sendManuallyPumped: Boolean
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/sent-messages.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/sent-messages.html deleted file mode 100644 index 856f1e1744..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/sent-messages.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.sentMessages - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / sentMessages
      -
      -

      sentMessages

      - -val sentMessages: <ERROR CLASS><MessageTransfer>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/stop.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/stop.html deleted file mode 100644 index 002500d4b9..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-messaging-network/stop.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryMessagingNetwork.stop - - - - -com.r3corda.node.services.network / InMemoryMessagingNetwork / stop
      -
      -

      stop

      - -fun stop(): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/add-map-service.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/add-map-service.html index d4876bd151..941d7c2e0a 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/add-map-service.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/add-map-service.html @@ -7,8 +7,8 @@ com.r3corda.node.services.network / InMemoryNetworkMapCache / addMapService

      addMapService

      - -open fun addMapService(net: MessagingService, service: NodeInfo, subscribe: Boolean, ifChangedSinceVer: Int?): <ERROR CLASS><Unit>
      + +open fun addMapService(net: MessagingService, networkMapAddress: SingleMessageRecipient, subscribe: Boolean, ifChangedSinceVer: Int?): <ERROR CLASS><Unit>
      Overrides NetworkMapCache.addMapService

      Add a network map service; fetches a copy of the latest map from the service and subscribes to any further updates.

      @@ -16,8 +16,8 @@ updates.

      net - the network messaging service.

      - -service - the network map service to fetch current state from.
      + +networkMapAddress - the network map service to fetch current state from.

      subscribe - if the cache should subscribe to updates.
      diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/index.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/index.html index bd3655a4c8..e0e571197e 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/index.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/index.html @@ -35,6 +35,13 @@ +mapServiceRegistered + +open val mapServiceRegistered: <ERROR CLASS><Unit>

      Future to track completion of the NetworkMapService registration.

      + + + + networkMapNodes open val networkMapNodes: List<NodeInfo>

      A list of nodes that advertise a network map service

      @@ -56,13 +63,6 @@ -ratesOracleNodes - -open val ratesOracleNodes: List<NodeInfo>

      A list of nodes that advertise a rates oracle service

      - - - - registeredNodes var registeredNodes: MutableMap<Party, NodeInfo> @@ -85,7 +85,7 @@ elsewhere.

      addMapService -open fun addMapService(net: MessagingService, service: NodeInfo, subscribe: Boolean, ifChangedSinceVer: Int?): <ERROR CLASS><Unit>

      Add a network map service; fetches a copy of the latest map from the service and subscribes to any further +open fun addMapService(net: MessagingService, networkMapAddress: SingleMessageRecipient, subscribe: Boolean, ifChangedSinceVer: Int?): <ERROR CLASS><Unit>

      Add a network map service; fetches a copy of the latest map from the service and subscribes to any further updates.

      @@ -147,6 +147,13 @@ or the appropriate oracle for a contract.

      open fun removeNode(node: NodeInfo): Unit

      Removes a node from the local cache.

      + + +runWithoutMapService + +open fun runWithoutMapService(): Unit

      For testing where the network map cache is manipulated marks the service as immediately ready.

      + +

      Inherited Functions

      @@ -160,17 +167,5 @@ or the appropriate oracle for a contract.

      -

      Inheritors

      - - - - - - - -
      -MockNetworkMapCache -class MockNetworkMapCache : InMemoryNetworkMapCache

      Network map cache with no backing map service.

      -
      diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/map-service-registered.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/map-service-registered.html new file mode 100644 index 0000000000..3a230d48b6 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/map-service-registered.html @@ -0,0 +1,20 @@ + + +InMemoryNetworkMapCache.mapServiceRegistered - + + + +com.r3corda.node.services.network / InMemoryNetworkMapCache / mapServiceRegistered
      +
      +

      mapServiceRegistered

      + +open val mapServiceRegistered: <ERROR CLASS><Unit>
      +Overrides NetworkMapCache.mapServiceRegistered
      +

      Future to track completion of the NetworkMapService registration.

      +

      Getter
      +

      Future to track completion of the NetworkMapService registration.

      +

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/net-internal.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/net-internal.html deleted file mode 100644 index 83853d22ca..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/net-internal.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryNetworkMapCache.netInternal - - - - -com.r3corda.node.services.network / InMemoryNetworkMapCache / netInternal
      -
      -

      netInternal

      - -val netInternal: MessagingServiceInternal?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/rates-oracle-nodes.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/rates-oracle-nodes.html deleted file mode 100644 index a1508ff82f..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/rates-oracle-nodes.html +++ /dev/null @@ -1,20 +0,0 @@ - - -InMemoryNetworkMapCache.ratesOracleNodes - - - - -com.r3corda.node.services.network / InMemoryNetworkMapCache / ratesOracleNodes
      -
      -

      ratesOracleNodes

      - -open val ratesOracleNodes: List<NodeInfo>
      -Overrides NetworkMapCache.ratesOracleNodes
      -

      A list of nodes that advertise a rates oracle service

      -

      Getter
      -

      A list of nodes that advertise a rates oracle service

      -

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/run-without-map-service.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/run-without-map-service.html new file mode 100644 index 0000000000..c734eb83f8 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-cache/run-without-map-service.html @@ -0,0 +1,17 @@ + + +InMemoryNetworkMapCache.runWithoutMapService - + + + +com.r3corda.node.services.network / InMemoryNetworkMapCache / runWithoutMapService
      +
      +

      runWithoutMapService

      + +open fun runWithoutMapService(): Unit
      +Overrides NetworkMapCache.runWithoutMapService
      +

      For testing where the network map cache is manipulated marks the service as immediately ready.

      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/-init-.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/-init-.html index 7b83602df8..7ad6fbc00a 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/-init-.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/-init-.html @@ -7,7 +7,7 @@ com.r3corda.node.services.network / InMemoryNetworkMapService / <init>

      <init>

      -InMemoryNetworkMapService(net: MessagingService, home: NodeRegistration, cache: NetworkMapCache)
      +InMemoryNetworkMapService(services: ServiceHubInternal)


      diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/cache.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/cache.html deleted file mode 100644 index 9636342868..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/cache.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryNetworkMapService.cache - - - - -com.r3corda.node.services.network / InMemoryNetworkMapService / cache
      -
      -

      cache

      - -val cache: NetworkMapCache
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/get-unacknowledged-count.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/get-unacknowledged-count.html deleted file mode 100644 index d2feca3946..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/get-unacknowledged-count.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryNetworkMapService.getUnacknowledgedCount - - - - -com.r3corda.node.services.network / InMemoryNetworkMapService / getUnacknowledgedCount
      -
      -

      getUnacknowledgedCount

      - -fun getUnacknowledgedCount(subscriber: SingleMessageRecipient): Int?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/index.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/index.html index 64306bc7cf..35e6a5bd21 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/index.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/index.html @@ -7,7 +7,7 @@ com.r3corda.node.services.network / InMemoryNetworkMapService

      InMemoryNetworkMapService

      -class InMemoryNetworkMapService : NetworkMapService, AbstractNodeService
      +class InMemoryNetworkMapService : AbstractNetworkMapService


      Constructors

      @@ -17,7 +17,7 @@ <init> -InMemoryNetworkMapService(net: MessagingService, home: NodeRegistration, cache: NetworkMapCache) +InMemoryNetworkMapService(services: ServiceHubInternal) @@ -26,30 +26,15 @@ -cache +registeredNodes -val cache: NetworkMapCache +val registeredNodes: MutableMap<Party, NodeRegistrationInfo> -maxSizeRegistrationRequestBytes +subscribers -val maxSizeRegistrationRequestBytes: Int

      Maximum credible size for a registration request. Generally requests are around 500-600 bytes, so this gives a -10 times overhead.

      - - - - -maxUnacknowledgedUpdates - -val maxUnacknowledgedUpdates: Int

      Maximum number of unacknowledged updates to send to a node before automatically unregistering them for updates

      - - - - -nodes - -val nodes: List<NodeInfo> +val subscribers: <ERROR CLASS> @@ -58,62 +43,36 @@ -net +_mapVersion -val net: MessagingService +val _mapVersion: AtomicInteger -networkMapCache +mapVersion -val networkMapCache: NetworkMapCache - - - -

      Functions

      - - - - - +val mapVersion: Int +maxSizeRegistrationRequestBytes +val maxSizeRegistrationRequestBytes: Int

      Maximum credible size for a registration request. Generally requests are around 500-600 bytes, so this gives a +10 times overhead.

      + +maxUnacknowledgedUpdates +val maxUnacknowledgedUpdates: Int

      Maximum number of unacknowledged updates to send to a node before automatically unregistering them for updates

      + +nodes - - - - - - - - - - - - +open val nodes: List<NodeInfo>
      -getUnacknowledgedCount -fun getUnacknowledgedCount(subscriber: SingleMessageRecipient): Int?
      -notifySubscribers -fun notifySubscribers(wireReg: WireNodeRegistration): Unit
      -processAcknowledge -fun processAcknowledge(req: UpdateAcknowledge): Unit
      -processFetchAllRequest -fun processFetchAllRequest(req: FetchMapRequest): FetchMapResponse
      -processQueryRequest -fun processQueryRequest(req: QueryIdentityRequest): QueryIdentityResponse
      -processRegistrationChangeRequest -fun processRegistrationChangeRequest(req: RegistrationRequest): RegistrationResponse
      -processSubscriptionRequest -fun processSubscriptionRequest(req: SubscribeRequest): SubscribeResponse
      @@ -122,15 +81,57 @@ -addMessageHandler +getUnacknowledgedCount -fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): Unit

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of -common boilerplate code. Exceptions are caught and passed to the provided consumer. If you just want a simple -acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      -fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): Unit

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of -common boilerplate code. Exceptions are propagated to the messaging layer. If you just want a simple -acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      - +fun getUnacknowledgedCount(subscriber: SingleMessageRecipient, mapVersion: Int): Int? + + + +notifySubscribers + +fun notifySubscribers(wireReg: WireNodeRegistration, mapVersion: Int): Unit + + + +processAcknowledge + +fun processAcknowledge(req: UpdateAcknowledge): Unit + + + +processFetchAllRequest + +fun processFetchAllRequest(req: FetchMapRequest): FetchMapResponse + + + +processQueryRequest + +fun processQueryRequest(req: QueryIdentityRequest): QueryIdentityResponse + + + +processRegistrationChangeRequest + +fun processRegistrationChangeRequest(req: RegistrationRequest): RegistrationResponse + + + +processSubscriptionRequest + +fun processSubscriptionRequest(req: SubscribeRequest): SubscribeResponse + + + +setup + +fun setup(): Unit + + + +unregisterNetworkHandlers + +fun unregisterNetworkHandlers(): Unit diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/nodes.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/nodes.html deleted file mode 100644 index c55e1dbc11..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/nodes.html +++ /dev/null @@ -1,16 +0,0 @@ - - -InMemoryNetworkMapService.nodes - - - - -com.r3corda.node.services.network / InMemoryNetworkMapService / nodes
      -
      -

      nodes

      - -val nodes: List<NodeInfo>
      -Overrides NetworkMapService.nodes
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/notify-subscribers.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/notify-subscribers.html deleted file mode 100644 index cdd74963bb..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/notify-subscribers.html +++ /dev/null @@ -1,15 +0,0 @@ - - -InMemoryNetworkMapService.notifySubscribers - - - - -com.r3corda.node.services.network / InMemoryNetworkMapService / notifySubscribers
      -
      -

      notifySubscribers

      - -fun notifySubscribers(wireReg: WireNodeRegistration): Unit
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/registered-nodes.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/registered-nodes.html new file mode 100644 index 0000000000..9ec997a271 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/registered-nodes.html @@ -0,0 +1,16 @@ + + +InMemoryNetworkMapService.registeredNodes - + + + +com.r3corda.node.services.network / InMemoryNetworkMapService / registeredNodes
      +
      +

      registeredNodes

      + +protected val registeredNodes: MutableMap<Party, NodeRegistrationInfo>
      +Overrides AbstractNetworkMapService.registeredNodes
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/subscribers.html b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/subscribers.html new file mode 100644 index 0000000000..c577f87550 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-in-memory-network-map-service/subscribers.html @@ -0,0 +1,16 @@ + + +InMemoryNetworkMapService.subscribers - + + + +com.r3corda.node.services.network / InMemoryNetworkMapService / subscribers
      +
      +

      subscribers

      + +protected val subscribers: <ERROR CLASS>
      +Overrides AbstractNetworkMapService.subscribers
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-last-acknowledge-info/-init-.html b/docs/build/html/api/com.r3corda.node.services.network/-last-acknowledge-info/-init-.html new file mode 100644 index 0000000000..2260bcaac4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-last-acknowledge-info/-init-.html @@ -0,0 +1,14 @@ + + +LastAcknowledgeInfo.<init> - + + + +com.r3corda.node.services.network / LastAcknowledgeInfo / <init>
      +
      +

      <init>

      +LastAcknowledgeInfo(mapVersion: Int)
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-last-acknowledge-info/index.html b/docs/build/html/api/com.r3corda.node.services.network/-last-acknowledge-info/index.html new file mode 100644 index 0000000000..df2c4f4c75 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-last-acknowledge-info/index.html @@ -0,0 +1,36 @@ + + +LastAcknowledgeInfo - + + + +com.r3corda.node.services.network / LastAcknowledgeInfo
      +
      +

      LastAcknowledgeInfo

      +data class LastAcknowledgeInfo
      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +LastAcknowledgeInfo(mapVersion: Int)
      +

      Properties

      + + + + + + + +
      +mapVersion +val mapVersion: Int
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-last-acknowledge-info/map-version.html b/docs/build/html/api/com.r3corda.node.services.network/-last-acknowledge-info/map-version.html new file mode 100644 index 0000000000..1593eac9fb --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-last-acknowledge-info/map-version.html @@ -0,0 +1,15 @@ + + +LastAcknowledgeInfo.mapVersion - + + + +com.r3corda.node.services.network / LastAcknowledgeInfo / mapVersion
      +
      +

      mapVersion

      + +val mapVersion: Int
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/-init-.html b/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/-init-.html deleted file mode 100644 index be0cb8f5a4..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetworkMapCache.<init> - - - - -com.r3corda.node.services.network / MockNetworkMapCache / <init>
      -
      -

      <init>

      -MockNetworkMapCache()
      -

      Network map cache with no backing map service.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/-mock-address/-init-.html b/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/-mock-address/-init-.html deleted file mode 100644 index c13301f1f1..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/-mock-address/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -MockNetworkMapCache.MockAddress.<init> - - - - -com.r3corda.node.services.network / MockNetworkMapCache / MockAddress / <init>
      -
      -

      <init>

      -MockAddress(id: String)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/-mock-address/id.html b/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/-mock-address/id.html deleted file mode 100644 index 5dc5754d60..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/-mock-address/id.html +++ /dev/null @@ -1,15 +0,0 @@ - - -MockNetworkMapCache.MockAddress.id - - - - -com.r3corda.node.services.network / MockNetworkMapCache / MockAddress / id
      -
      -

      id

      - -val id: String
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/-mock-address/index.html b/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/-mock-address/index.html deleted file mode 100644 index 590b76a61a..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/-mock-address/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - -MockNetworkMapCache.MockAddress - - - - -com.r3corda.node.services.network / MockNetworkMapCache / MockAddress
      -
      -

      MockAddress

      -data class MockAddress : SingleMessageRecipient
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -MockAddress(id: String)
      -

      Properties

      - - - - - - - -
      -id -val id: String
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/add-registration.html b/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/add-registration.html deleted file mode 100644 index 7bcef8b4a4..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/add-registration.html +++ /dev/null @@ -1,17 +0,0 @@ - - -MockNetworkMapCache.addRegistration - - - - -com.r3corda.node.services.network / MockNetworkMapCache / addRegistration
      -
      -

      addRegistration

      - -fun addRegistration(node: NodeInfo): Unit
      -

      Directly add a registration to the internal cache. DOES NOT fire the change listeners, as its -not a change being received.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/changed.html b/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/changed.html deleted file mode 100644 index 43e1f7b603..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/changed.html +++ /dev/null @@ -1,17 +0,0 @@ - - -MockNetworkMapCache.changed - - - - -com.r3corda.node.services.network / MockNetworkMapCache / changed
      -
      -

      changed

      - -val changed: <ERROR CLASS><MapChange>
      -Overrides InMemoryNetworkMapCache.changed
      -

      Tracks changes to the network map cache

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/delete-registration.html b/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/delete-registration.html deleted file mode 100644 index b8894a304b..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/delete-registration.html +++ /dev/null @@ -1,17 +0,0 @@ - - -MockNetworkMapCache.deleteRegistration - - - - -com.r3corda.node.services.network / MockNetworkMapCache / deleteRegistration
      -
      -

      deleteRegistration

      - -fun deleteRegistration(identity: Party): Boolean
      -

      Directly remove a registration from the internal cache. DOES NOT fire the change listeners, as its -not a change being received.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/index.html b/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/index.html deleted file mode 100644 index c66f9c2431..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.network/-mock-network-map-cache/index.html +++ /dev/null @@ -1,190 +0,0 @@ - - -MockNetworkMapCache - - - - -com.r3corda.node.services.network / MockNetworkMapCache
      -
      -

      MockNetworkMapCache

      -class MockNetworkMapCache : InMemoryNetworkMapCache
      -

      Network map cache with no backing map service.

      -
      -
      -

      Types

      - - - - - - - -
      -MockAddress -data class MockAddress : SingleMessageRecipient
      -

      Constructors

      - - - - - - - -
      -<init> -MockNetworkMapCache()

      Network map cache with no backing map service.

      -
      -

      Properties

      - - - - - - - -
      -changed -val changed: <ERROR CLASS><MapChange>

      Tracks changes to the network map cache

      -
      -

      Inherited Properties

      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -networkMapNodes -open val networkMapNodes: List<NodeInfo>

      A list of nodes that advertise a network map service

      -
      -notaryNodes -open val notaryNodes: List<NodeInfo>

      A list of nodes that advertise a notary service

      -
      -partyNodes -open val partyNodes: List<NodeInfo>

      A list of all nodes the cache is aware of

      -
      -ratesOracleNodes -open val ratesOracleNodes: List<NodeInfo>

      A list of nodes that advertise a rates oracle service

      -
      -registeredNodes -var registeredNodes: MutableMap<Party, NodeInfo>
      -regulators -open val regulators: List<NodeInfo>

      A list of nodes that advertise a regulatory service. Identifying the correct regulator for a trade is outside -the scope of the network map service, and this is intended solely as a sanity check on configuration stored -elsewhere.

      -
      -

      Functions

      - - - - - - - - - - - -
      -addRegistration -fun addRegistration(node: NodeInfo): Unit

      Directly add a registration to the internal cache. DOES NOT fire the change listeners, as its -not a change being received.

      -
      -deleteRegistration -fun deleteRegistration(identity: Party): Boolean

      Directly remove a registration from the internal cache. DOES NOT fire the change listeners, as its -not a change being received.

      -
      -

      Inherited Functions

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -addMapService -open fun addMapService(net: MessagingService, service: NodeInfo, subscribe: Boolean, ifChangedSinceVer: Int?): <ERROR CLASS><Unit>

      Add a network map service; fetches a copy of the latest map from the service and subscribes to any further -updates.

      -
      -addNode -open fun addNode(node: NodeInfo): Unit

      Adds a node to the local cache (generally only used for adding ourselves).

      -
      -deregisterForUpdates -open fun deregisterForUpdates(net: MessagingService, service: NodeInfo): <ERROR CLASS><Unit>

      Unsubscribes from updates from the given map service.

      -
      -get -open fun get(): <ERROR CLASS>

      Get a copy of all nodes in the map.

      -open fun get(serviceType: ServiceType): <ERROR CLASS>

      Get the collection of nodes which advertise a specific service.

      -
      -getNodeByLegalName -open fun getNodeByLegalName(name: String): <ERROR CLASS>

      Look up the node info for a legal name.

      -
      -getNodeByPublicKey -open fun getNodeByPublicKey(publicKey: PublicKey): <ERROR CLASS>

      Look up the node info for a public key.

      -
      -getRecommended -open fun getRecommended(type: ServiceType, contract: Contract, vararg party: Party): NodeInfo?

      Get a recommended node that advertises a service, and is suitable for the specified contract and parties. -Implementations might understand, for example, the correct regulator to use for specific contracts/parties, -or the appropriate oracle for a contract.

      -
      -processUpdatePush -fun processUpdatePush(req: Update): Unit
      -removeNode -open fun removeNode(node: NodeInfo): Unit

      Removes a node from the local cache.

      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update-acknowledge/-init-.html b/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update-acknowledge/-init-.html index 1d627082e5..f09617f5c8 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update-acknowledge/-init-.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update-acknowledge/-init-.html @@ -7,7 +7,7 @@ com.r3corda.node.services.network / NetworkMapService / UpdateAcknowledge / <init>

      <init>

      -UpdateAcknowledge(wireRegHash: SecureHash, replyTo: MessageRecipients)
      +UpdateAcknowledge(mapVersion: Int, replyTo: MessageRecipients)


      diff --git a/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update-acknowledge/index.html b/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update-acknowledge/index.html index ceae2371f3..ab706cffed 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update-acknowledge/index.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update-acknowledge/index.html @@ -17,7 +17,7 @@ <init> -UpdateAcknowledge(wireRegHash: SecureHash, replyTo: MessageRecipients) +UpdateAcknowledge(mapVersion: Int, replyTo: MessageRecipients) @@ -26,15 +26,15 @@ -replyTo +mapVersion -val replyTo: MessageRecipients +val mapVersion: Int -wireRegHash +replyTo -val wireRegHash: SecureHash +val replyTo: MessageRecipients diff --git a/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update-acknowledge/wire-reg-hash.html b/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update-acknowledge/map-version.html similarity index 57% rename from docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update-acknowledge/wire-reg-hash.html rename to docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update-acknowledge/map-version.html index ac6c497243..c8d7b0bbbc 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update-acknowledge/wire-reg-hash.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update-acknowledge/map-version.html @@ -1,14 +1,14 @@ -NetworkMapService.UpdateAcknowledge.wireRegHash - +NetworkMapService.UpdateAcknowledge.mapVersion - -com.r3corda.node.services.network / NetworkMapService / UpdateAcknowledge / wireRegHash
      +com.r3corda.node.services.network / NetworkMapService / UpdateAcknowledge / mapVersion

      -

      wireRegHash

      - -val wireRegHash: SecureHash
      +

      mapVersion

      + +val mapVersion: Int


      diff --git a/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update/-init-.html b/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update/-init-.html index 470a2777c9..06ae099b67 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update/-init-.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update/-init-.html @@ -7,7 +7,7 @@ com.r3corda.node.services.network / NetworkMapService / Update / <init>

      <init>

      -Update(wireReg: WireNodeRegistration, replyTo: MessageRecipients)
      +Update(wireReg: WireNodeRegistration, mapVersion: Int, replyTo: MessageRecipients)


      diff --git a/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update/index.html b/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update/index.html index 8cc2cd4de3..27dce9c52e 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update/index.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update/index.html @@ -17,7 +17,7 @@ <init> -Update(wireReg: WireNodeRegistration, replyTo: MessageRecipients) +Update(wireReg: WireNodeRegistration, mapVersion: Int, replyTo: MessageRecipients) @@ -26,6 +26,12 @@ +mapVersion + +val mapVersion: Int + + + replyTo val replyTo: MessageRecipients diff --git a/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update/map-version.html b/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update/map-version.html new file mode 100644 index 0000000000..b94e06efb3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/-update/map-version.html @@ -0,0 +1,15 @@ + + +NetworkMapService.Update.mapVersion - + + + +com.r3corda.node.services.network / NetworkMapService / Update / mapVersion
      +
      +

      mapVersion

      + +val mapVersion: Int
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/index.html b/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/index.html index 3b56656b12..3a427ba2b1 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/index.html +++ b/docs/build/html/api/com.r3corda.node.services.network/-network-map-service/index.html @@ -160,9 +160,10 @@ replace each other based on a serial number present in the change.

      -InMemoryNetworkMapService +AbstractNetworkMapService -class InMemoryNetworkMapService : NetworkMapService, AbstractNodeService +abstract class AbstractNetworkMapService : NetworkMapService, AbstractNodeService

      Abstracted out core functionality as the basis for a persistent implementation, as well as existing in-memory implementation.

      + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-node-registration-info/-init-.html b/docs/build/html/api/com.r3corda.node.services.network/-node-registration-info/-init-.html new file mode 100644 index 0000000000..7b0442010e --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-node-registration-info/-init-.html @@ -0,0 +1,14 @@ + + +NodeRegistrationInfo.<init> - + + + +com.r3corda.node.services.network / NodeRegistrationInfo / <init>
      +
      +

      <init>

      +NodeRegistrationInfo(reg: NodeRegistration, mapVersion: Int)
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-node-registration-info/index.html b/docs/build/html/api/com.r3corda.node.services.network/-node-registration-info/index.html new file mode 100644 index 0000000000..a04905657d --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-node-registration-info/index.html @@ -0,0 +1,42 @@ + + +NodeRegistrationInfo - + + + +com.r3corda.node.services.network / NodeRegistrationInfo
      +
      +

      NodeRegistrationInfo

      +data class NodeRegistrationInfo
      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +NodeRegistrationInfo(reg: NodeRegistration, mapVersion: Int)
      +

      Properties

      + + + + + + + + + + + +
      +mapVersion +val mapVersion: Int
      +reg +val reg: NodeRegistration
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-node-registration-info/map-version.html b/docs/build/html/api/com.r3corda.node.services.network/-node-registration-info/map-version.html new file mode 100644 index 0000000000..294422ebba --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-node-registration-info/map-version.html @@ -0,0 +1,15 @@ + + +NodeRegistrationInfo.mapVersion - + + + +com.r3corda.node.services.network / NodeRegistrationInfo / mapVersion
      +
      +

      mapVersion

      + +val mapVersion: Int
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-node-registration-info/reg.html b/docs/build/html/api/com.r3corda.node.services.network/-node-registration-info/reg.html new file mode 100644 index 0000000000..040bc5e8cd --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-node-registration-info/reg.html @@ -0,0 +1,15 @@ + + +NodeRegistrationInfo.reg - + + + +com.r3corda.node.services.network / NodeRegistrationInfo / reg
      +
      +

      reg

      + +val reg: NodeRegistration
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-persistent-network-map-service/-init-.html b/docs/build/html/api/com.r3corda.node.services.network/-persistent-network-map-service/-init-.html new file mode 100644 index 0000000000..0fcd773ed4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-persistent-network-map-service/-init-.html @@ -0,0 +1,20 @@ + + +PersistentNetworkMapService.<init> - + + + +com.r3corda.node.services.network / PersistentNetworkMapService / <init>
      +
      +

      <init>

      +PersistentNetworkMapService(services: ServiceHubInternal)
      +

      A network map service backed by a database to survive restarts of the node hosting it.

      +

      Majority of the logic is inherited from AbstractNetworkMapService.

      +

      This class needs database transactions to be in-flight during method calls and init, otherwise it will throw +exceptions.

      +
      +
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-persistent-network-map-service/index.html b/docs/build/html/api/com.r3corda.node.services.network/-persistent-network-map-service/index.html new file mode 100644 index 0000000000..b9b4f6ae76 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-persistent-network-map-service/index.html @@ -0,0 +1,146 @@ + + +PersistentNetworkMapService - + + + +com.r3corda.node.services.network / PersistentNetworkMapService
      +
      +

      PersistentNetworkMapService

      +class PersistentNetworkMapService : AbstractNetworkMapService
      +

      A network map service backed by a database to survive restarts of the node hosting it.

      +

      Majority of the logic is inherited from AbstractNetworkMapService.

      +

      This class needs database transactions to be in-flight during method calls and init, otherwise it will throw +exceptions.

      +
      +
      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +PersistentNetworkMapService(services: ServiceHubInternal)

      A network map service backed by a database to survive restarts of the node hosting it.

      +
      +

      Properties

      + + + + + + + + + + + +
      +registeredNodes +val registeredNodes: MutableMap<Party, NodeRegistrationInfo>
      +subscribers +val subscribers: ThreadBox<JDBCHashMap<SingleMessageRecipient, LastAcknowledgeInfo>>
      +

      Inherited Properties

      + + + + + + + + + + + + + + + + + + + + + + + +
      +_mapVersion +val _mapVersion: AtomicInteger
      +mapVersion +val mapVersion: Int
      +maxSizeRegistrationRequestBytes +val maxSizeRegistrationRequestBytes: Int

      Maximum credible size for a registration request. Generally requests are around 500-600 bytes, so this gives a +10 times overhead.

      +
      +maxUnacknowledgedUpdates +val maxUnacknowledgedUpdates: Int

      Maximum number of unacknowledged updates to send to a node before automatically unregistering them for updates

      +
      +nodes +open val nodes: List<NodeInfo>
      +

      Inherited Functions

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +getUnacknowledgedCount +fun getUnacknowledgedCount(subscriber: SingleMessageRecipient, mapVersion: Int): Int?
      +notifySubscribers +fun notifySubscribers(wireReg: WireNodeRegistration, mapVersion: Int): Unit
      +processAcknowledge +fun processAcknowledge(req: UpdateAcknowledge): Unit
      +processFetchAllRequest +fun processFetchAllRequest(req: FetchMapRequest): FetchMapResponse
      +processQueryRequest +fun processQueryRequest(req: QueryIdentityRequest): QueryIdentityResponse
      +processRegistrationChangeRequest +fun processRegistrationChangeRequest(req: RegistrationRequest): RegistrationResponse
      +processSubscriptionRequest +fun processSubscriptionRequest(req: SubscribeRequest): SubscribeResponse
      +setup +fun setup(): Unit
      +unregisterNetworkHandlers +fun unregisterNetworkHandlers(): Unit
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-persistent-network-map-service/registered-nodes.html b/docs/build/html/api/com.r3corda.node.services.network/-persistent-network-map-service/registered-nodes.html new file mode 100644 index 0000000000..e244bc0fde --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-persistent-network-map-service/registered-nodes.html @@ -0,0 +1,16 @@ + + +PersistentNetworkMapService.registeredNodes - + + + +com.r3corda.node.services.network / PersistentNetworkMapService / registeredNodes
      +
      +

      registeredNodes

      + +protected val registeredNodes: MutableMap<Party, NodeRegistrationInfo>
      +Overrides AbstractNetworkMapService.registeredNodes
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/-persistent-network-map-service/subscribers.html b/docs/build/html/api/com.r3corda.node.services.network/-persistent-network-map-service/subscribers.html new file mode 100644 index 0000000000..0f64b3a68f --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.network/-persistent-network-map-service/subscribers.html @@ -0,0 +1,16 @@ + + +PersistentNetworkMapService.subscribers - + + + +com.r3corda.node.services.network / PersistentNetworkMapService / subscribers
      +
      +

      subscribers

      + +protected val subscribers: ThreadBox<JDBCHashMap<SingleMessageRecipient, LastAcknowledgeInfo>>
      +Overrides AbstractNetworkMapService.subscribers
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.network/index.html b/docs/build/html/api/com.r3corda.node.services.network/index.html index 636eec9a2b..8829410804 100644 --- a/docs/build/html/api/com.r3corda.node.services.network/index.html +++ b/docs/build/html/api/com.r3corda.node.services.network/index.html @@ -12,13 +12,9 @@ -InMemoryMessagingNetwork +AbstractNetworkMapService -class InMemoryMessagingNetwork : SingletonSerializeAsToken

      An in-memory network allows you to manufacture InMemoryMessagings for a set of participants. Each -InMemoryMessaging maintains a queue of messages it has received, and a background thread that dispatches -messages one by one to registered handlers. Alternatively, a messaging system may be manually pumped, in which -case no thread is created and a caller is expected to force delivery one at a time (this is useful for unit -testing).

      +abstract class AbstractNetworkMapService : NetworkMapService, AbstractNodeService

      Abstracted out core functionality as the basis for a persistent implementation, as well as existing in-memory implementation.

      @@ -32,14 +28,13 @@ testing).

      InMemoryNetworkMapService -class InMemoryNetworkMapService : NetworkMapService, AbstractNodeService +class InMemoryNetworkMapService : AbstractNetworkMapService -MockNetworkMapCache +LastAcknowledgeInfo -class MockNetworkMapCache : InMemoryNetworkMapCache

      Network map cache with no backing map service.

      - +data class LastAcknowledgeInfo @@ -60,6 +55,19 @@ replace each other based on a serial number present in the change.

      +NodeRegistrationInfo + +data class NodeRegistrationInfo + + + +PersistentNetworkMapService + +class PersistentNetworkMapService : AbstractNetworkMapService

      A network map service backed by a database to survive restarts of the node hosting it.

      + + + + WireNodeRegistration class WireNodeRegistration : SignedData<NodeRegistration>

      A node registration and its signature as a pair.

      diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-init-.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-init-.html deleted file mode 100644 index 0612032c4a..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-init-.html +++ /dev/null @@ -1,24 +0,0 @@ - - -DataVendingService.<init> - - - - -com.r3corda.node.services.persistence / DataVendingService / <init>
      -
      -

      <init>

      -DataVendingService(net: MessagingService, services: ServiceHubInternal)
      -

      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.

      -

      Note that in our data model, to be able to name a thing by hash automatically gives the power to request it. There -are no access control lists. If you want to keep some data private, then you must be careful who you give its name -to, and trust that they will not pass the name onwards. If someone suspects some data might exist but does not have -its name, then the 256-bit search space theyd have to cover makes it physically impossible to enumerate, and as -such the hash of a piece of data can be seen as a type of password allowing access to it.

      -

      Additionally, because nodes do not store invalid transactions, requesting such a transaction will always yield null.

      -
      -
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-n-o-t-i-f-y_-t-x_-p-r-o-t-o-c-o-l_-t-o-p-i-c.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-n-o-t-i-f-y_-t-x_-p-r-o-t-o-c-o-l_-t-o-p-i-c.html deleted file mode 100644 index 7f163f7aeb..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-n-o-t-i-f-y_-t-x_-p-r-o-t-o-c-o-l_-t-o-p-i-c.html +++ /dev/null @@ -1,16 +0,0 @@ - - -DataVendingService.NOTIFY_TX_PROTOCOL_TOPIC - - - - -com.r3corda.node.services.persistence / DataVendingService / NOTIFY_TX_PROTOCOL_TOPIC
      -
      -

      NOTIFY_TX_PROTOCOL_TOPIC

      - -val NOTIFY_TX_PROTOCOL_TOPIC: String
      -

      Topic for messages notifying a node of a new transaction

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/-init-.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/-init-.html deleted file mode 100644 index 30480bec03..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -DataVendingService.NotifyTxRequestMessage.<init> - - - - -com.r3corda.node.services.persistence / DataVendingService / NotifyTxRequestMessage / <init>
      -
      -

      <init>

      -NotifyTxRequestMessage(tx: SignedTransaction, replyToParty: Party, sessionID: Long)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/index.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/index.html deleted file mode 100644 index 76613c9b6b..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/index.html +++ /dev/null @@ -1,59 +0,0 @@ - - -DataVendingService.NotifyTxRequestMessage - - - - -com.r3corda.node.services.persistence / DataVendingService / NotifyTxRequestMessage
      -
      -

      NotifyTxRequestMessage

      -data class NotifyTxRequestMessage : PartyRequestMessage
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -NotifyTxRequestMessage(tx: SignedTransaction, replyToParty: Party, sessionID: Long)
      -

      Properties

      - - - - - - - - - - - - - - - -
      -replyToParty -val replyToParty: Party
      -sessionID -val sessionID: Long
      -tx -val tx: SignedTransaction
      -

      Inherited Functions

      - - - - - - - -
      -getReplyTo -open fun getReplyTo(networkMapCache: NetworkMapCache): MessageRecipients
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/session-i-d.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/session-i-d.html deleted file mode 100644 index 9c8ef10842..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/session-i-d.html +++ /dev/null @@ -1,16 +0,0 @@ - - -DataVendingService.NotifyTxRequestMessage.sessionID - - - - -com.r3corda.node.services.persistence / DataVendingService / NotifyTxRequestMessage / sessionID
      -
      -

      sessionID

      - -val sessionID: Long
      -Overrides ServiceRequestMessage.sessionID
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/tx.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/tx.html deleted file mode 100644 index 6457def97c..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-request-message/tx.html +++ /dev/null @@ -1,15 +0,0 @@ - - -DataVendingService.NotifyTxRequestMessage.tx - - - - -com.r3corda.node.services.persistence / DataVendingService / NotifyTxRequestMessage / tx
      -
      -

      tx

      - -val tx: SignedTransaction
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-response-message/-init-.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-response-message/-init-.html deleted file mode 100644 index f8c3be5c0e..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-response-message/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -DataVendingService.NotifyTxResponseMessage.<init> - - - - -com.r3corda.node.services.persistence / DataVendingService / NotifyTxResponseMessage / <init>
      -
      -

      <init>

      -NotifyTxResponseMessage(accepted: Boolean)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-response-message/accepted.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-response-message/accepted.html deleted file mode 100644 index d44b0e3d72..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-response-message/accepted.html +++ /dev/null @@ -1,15 +0,0 @@ - - -DataVendingService.NotifyTxResponseMessage.accepted - - - - -com.r3corda.node.services.persistence / DataVendingService / NotifyTxResponseMessage / accepted
      -
      -

      accepted

      - -val accepted: Boolean
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-response-message/index.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-response-message/index.html deleted file mode 100644 index 39b7bf2d04..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/-notify-tx-response-message/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - -DataVendingService.NotifyTxResponseMessage - - - - -com.r3corda.node.services.persistence / DataVendingService / NotifyTxResponseMessage
      -
      -

      NotifyTxResponseMessage

      -data class NotifyTxResponseMessage
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -NotifyTxResponseMessage(accepted: Boolean)
      -

      Properties

      - - - - - - - -
      -accepted -val accepted: Boolean
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/index.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/index.html deleted file mode 100644 index e101dca68c..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/index.html +++ /dev/null @@ -1,117 +0,0 @@ - - -DataVendingService - - - - -com.r3corda.node.services.persistence / DataVendingService
      -
      -

      DataVendingService

      -class DataVendingService : AbstractNodeService
      -

      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.

      -

      Note that in our data model, to be able to name a thing by hash automatically gives the power to request it. There -are no access control lists. If you want to keep some data private, then you must be careful who you give its name -to, and trust that they will not pass the name onwards. If someone suspects some data might exist but does not have -its name, then the 256-bit search space theyd have to cover makes it physically impossible to enumerate, and as -such the hash of a piece of data can be seen as a type of password allowing access to it.

      -

      Additionally, because nodes do not store invalid transactions, requesting such a transaction will always yield null.

      -
      -
      -
      -
      -

      Types

      - - - - - - - - - - - -
      -NotifyTxRequestMessage -data class NotifyTxRequestMessage : PartyRequestMessage
      -NotifyTxResponseMessage -data class NotifyTxResponseMessage
      -

      Constructors

      - - - - - - - -
      -<init> -DataVendingService(net: MessagingService, services: ServiceHubInternal)

      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.

      -
      -

      Properties

      - - - - - - - -
      -storage -val storage: StorageService
      -

      Inherited Properties

      - - - - - - - - - - - -
      -net -val net: MessagingService
      -networkMapCache -val networkMapCache: NetworkMapCache
      -

      Inherited Functions

      - - - - - - - -
      -addMessageHandler -fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): Unit

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of -common boilerplate code. Exceptions are caught and passed to the provided consumer. If you just want a simple -acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      -fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): Unit

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of -common boilerplate code. Exceptions are propagated to the messaging layer. If you just want a simple -acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      -
      -

      Companion Object Properties

      - - - - - - - - - - - -
      -NOTIFY_TX_PROTOCOL_TOPIC -val NOTIFY_TX_PROTOCOL_TOPIC: String

      Topic for messages notifying a node of a new transaction

      -
      -logger -val logger: <ERROR CLASS>
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/storage.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/storage.html deleted file mode 100644 index 99b7d74254..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending-service/storage.html +++ /dev/null @@ -1,15 +0,0 @@ - - -DataVendingService.storage - - - - -com.r3corda.node.services.persistence / DataVendingService / storage
      -
      -

      storage

      - -val storage: StorageService
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-n-o-t-i-f-y_-t-x_-p-r-o-t-o-c-o-l_-t-o-p-i-c.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-n-o-t-i-f-y_-t-x_-p-r-o-t-o-c-o-l_-t-o-p-i-c.html deleted file mode 100644 index b73aecfb88..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-n-o-t-i-f-y_-t-x_-p-r-o-t-o-c-o-l_-t-o-p-i-c.html +++ /dev/null @@ -1,16 +0,0 @@ - - -DataVending.Service.NOTIFY_TX_PROTOCOL_TOPIC - - - - -com.r3corda.node.services.persistence / DataVending / Service / NOTIFY_TX_PROTOCOL_TOPIC
      -
      -

      NOTIFY_TX_PROTOCOL_TOPIC

      - -val NOTIFY_TX_PROTOCOL_TOPIC: String
      -

      Topic for messages notifying a node of a new transaction

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/-init-.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/-init-.html deleted file mode 100644 index 1b6f9b298a..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -DataVending.Service.NotifyTxRequestMessage.<init> - - - - -com.r3corda.node.services.persistence / DataVending / Service / NotifyTxRequestMessage / <init>
      -
      -

      <init>

      -NotifyTxRequestMessage(tx: SignedTransaction, replyToParty: Party, sessionID: Long)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/index.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/index.html deleted file mode 100644 index 6db0914813..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/index.html +++ /dev/null @@ -1,59 +0,0 @@ - - -DataVending.Service.NotifyTxRequestMessage - - - - -com.r3corda.node.services.persistence / DataVending / Service / NotifyTxRequestMessage
      -
      -

      NotifyTxRequestMessage

      -data class NotifyTxRequestMessage : PartyRequestMessage
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -NotifyTxRequestMessage(tx: SignedTransaction, replyToParty: Party, sessionID: Long)
      -

      Properties

      - - - - - - - - - - - - - - - -
      -replyToParty -val replyToParty: Party
      -sessionID -val sessionID: Long
      -tx -val tx: SignedTransaction
      -

      Inherited Functions

      - - - - - - - -
      -getReplyTo -open fun getReplyTo(networkMapCache: NetworkMapCache): MessageRecipients
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/reply-to-party.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/reply-to-party.html deleted file mode 100644 index 06ea5edbe8..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/reply-to-party.html +++ /dev/null @@ -1,16 +0,0 @@ - - -DataVending.Service.NotifyTxRequestMessage.replyToParty - - - - -com.r3corda.node.services.persistence / DataVending / Service / NotifyTxRequestMessage / replyToParty
      -
      -

      replyToParty

      - -val replyToParty: Party
      -Overrides PartyRequestMessage.replyToParty
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/session-i-d.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/session-i-d.html deleted file mode 100644 index 8f2c25c3f7..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/session-i-d.html +++ /dev/null @@ -1,16 +0,0 @@ - - -DataVending.Service.NotifyTxRequestMessage.sessionID - - - - -com.r3corda.node.services.persistence / DataVending / Service / NotifyTxRequestMessage / sessionID
      -
      -

      sessionID

      - -val sessionID: Long
      -Overrides ServiceRequestMessage.sessionID
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/tx.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/tx.html deleted file mode 100644 index d6f0d72a79..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-request-message/tx.html +++ /dev/null @@ -1,15 +0,0 @@ - - -DataVending.Service.NotifyTxRequestMessage.tx - - - - -com.r3corda.node.services.persistence / DataVending / Service / NotifyTxRequestMessage / tx
      -
      -

      tx

      - -val tx: SignedTransaction
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-response-message/-init-.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-response-message/-init-.html deleted file mode 100644 index 362fd6ea76..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-response-message/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -DataVending.Service.NotifyTxResponseMessage.<init> - - - - -com.r3corda.node.services.persistence / DataVending / Service / NotifyTxResponseMessage / <init>
      -
      -

      <init>

      -NotifyTxResponseMessage(accepted: Boolean)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-response-message/accepted.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-response-message/accepted.html deleted file mode 100644 index 2e264b45ef..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-response-message/accepted.html +++ /dev/null @@ -1,15 +0,0 @@ - - -DataVending.Service.NotifyTxResponseMessage.accepted - - - - -com.r3corda.node.services.persistence / DataVending / Service / NotifyTxResponseMessage / accepted
      -
      -

      accepted

      - -val accepted: Boolean
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-response-message/index.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-response-message/index.html deleted file mode 100644 index e148f9c96b..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/-notify-tx-response-message/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - -DataVending.Service.NotifyTxResponseMessage - - - - -com.r3corda.node.services.persistence / DataVending / Service / NotifyTxResponseMessage
      -
      -

      NotifyTxResponseMessage

      -data class NotifyTxResponseMessage
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -NotifyTxResponseMessage(accepted: Boolean)
      -

      Properties

      - - - - - - - -
      -accepted -val accepted: Boolean
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/index.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/index.html index 7e75277039..cd80d81885 100644 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/index.html +++ b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/index.html @@ -49,12 +49,6 @@ glue that sits between the network layer and the database layer.

      -services - -val services: ServiceHubInternal - - - storage val storage: StorageService @@ -68,13 +62,13 @@ glue that sits between the network layer and the database layer.

      net -val net: MessagingService +val net: MessagingServiceInternal -networkMapCache +services -val networkMapCache: NetworkMapCache +val services: ServiceHubInternal @@ -85,14 +79,22 @@ glue that sits between the network layer and the database layer.

      addMessageHandler -fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): Unit

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): MessageHandlerRegistration

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of common boilerplate code. Exceptions are caught and passed to the provided consumer. If you just want a simple acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      -fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): Unit

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): MessageHandlerRegistration

      Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of common boilerplate code. Exceptions are propagated to the messaging layer. If you just want a simple acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

      + + +addProtocolHandler + +fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>, onResultFuture: (<ERROR CLASS><R>, H) -> Unit): Unit

      Register a handler to kick-off a protocol when a HandshakeMessage is received by the node. This performs the +necessary steps to enable communication between the two protocols, including calling ProtocolLogic.registerSession.

      +fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>): Unit +

      Companion Object Properties

      @@ -113,7 +115,7 @@ acknowledgement response with no content, use com.r3corda.core.messa notify -fun notify(net: MessagingService, myIdentity: Party, recipient: NodeInfo, transaction: SignedTransaction): Unit

      Notify a node of a transaction. Normally any notarisation required would happen before this is called.

      +fun notify(net: MessagingService, myIdentity: Party, recipient: NodeInfo, transaction: SignedTransaction): Unit

      Notify a node of a transaction. Normally any notarisation required would happen before this is called.

      diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/notify.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/notify.html index def4890577..f92feffc34 100644 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/notify.html +++ b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/notify.html @@ -7,8 +7,8 @@ com.r3corda.node.services.persistence / DataVending / Service / notify

      notify

      - -fun notify(net: MessagingService, myIdentity: Party, recipient: NodeInfo, transaction: SignedTransaction): Unit
      + +fun notify(net: MessagingService, myIdentity: Party, recipient: NodeInfo, transaction: SignedTransaction): Unit

      Notify a node of a transaction. Normally any notarisation required would happen before this is called.



      diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/services.html b/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/services.html deleted file mode 100644 index 369c78e351..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-data-vending/-service/services.html +++ /dev/null @@ -1,15 +0,0 @@ - - -DataVending.Service.services - - - - -com.r3corda.node.services.persistence / DataVending / Service / services
      -
      -

      services

      - -val services: ServiceHubInternal
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-node-attachment-service/metrics.html b/docs/build/html/api/com.r3corda.node.services.persistence/-node-attachment-service/metrics.html deleted file mode 100644 index 13633ab5cf..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-node-attachment-service/metrics.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NodeAttachmentService.metrics - - - - -com.r3corda.node.services.persistence / NodeAttachmentService / metrics
      -
      -

      metrics

      - -val metrics: <ERROR CLASS>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/add-transaction.html b/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/add-transaction.html index 1dab47f1b6..68339ceaeb 100644 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/add-transaction.html +++ b/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/add-transaction.html @@ -7,8 +7,8 @@ com.r3corda.node.services.persistence / PerFileTransactionStorage / addTransaction

      addTransaction

      - -fun addTransaction(transaction: SignedTransaction): Unit
      + +fun addTransaction(transaction: SignedTransaction): Unit
      Overrides TransactionStorage.addTransaction

      Add a new transaction to the store. If the store already has a transaction with the same id it will be overwritten.

      diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/get-transaction.html b/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/get-transaction.html index 07769113e3..7b1a978a85 100644 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/get-transaction.html +++ b/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/get-transaction.html @@ -8,7 +8,7 @@

      getTransaction

      -fun getTransaction(id: SecureHash): SignedTransaction?
      +fun getTransaction(id: SecureHash): SignedTransaction?
      Overrides ReadOnlyTransactionStorage.getTransaction

      Return the transaction with the given id, or null if no such transaction exists.


      diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/index.html b/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/index.html index 2e5a4873b8..16bff3576d 100644 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/index.html +++ b/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/index.html @@ -36,14 +36,14 @@ transactions -val transactions: Iterable<SignedTransaction> +val transactions: Iterable<SignedTransaction> updates -val updates: <ERROR CLASS><SignedTransaction>

      Get a synchronous Observable of updates. When observations are pushed to the Observer, the Wallet will already incorporate -the update.

      +val updates: <ERROR CLASS><SignedTransaction>

      Get a synchronous Observable of updates. When observations are pushed to the Observer, the vault will already +incorporate the update.

      @@ -55,7 +55,7 @@ the update.

      addTransaction -fun addTransaction(transaction: SignedTransaction): Unit

      Add a new transaction to the store. If the store already has a transaction with the same id it will be +fun addTransaction(transaction: SignedTransaction): Unit

      Add a new transaction to the store. If the store already has a transaction with the same id it will be overwritten.

      @@ -63,7 +63,7 @@ overwritten.

      getTransaction -fun getTransaction(id: SecureHash): SignedTransaction?

      Return the transaction with the given id, or null if no such transaction exists.

      +fun getTransaction(id: SecureHash): SignedTransaction?

      Return the transaction with the given id, or null if no such transaction exists.

      diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/transactions.html b/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/transactions.html index 532c1ec7ee..7a627dc5a3 100644 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/transactions.html +++ b/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/transactions.html @@ -8,7 +8,7 @@

      transactions

      -val transactions: Iterable<SignedTransaction>
      +val transactions: Iterable<SignedTransaction>


      diff --git a/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/updates.html b/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/updates.html index 317797797b..fe8953d30d 100644 --- a/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/updates.html +++ b/docs/build/html/api/com.r3corda.node.services.persistence/-per-file-transaction-storage/updates.html @@ -8,13 +8,13 @@

      updates

      -val updates: <ERROR CLASS><SignedTransaction>
      +val updates: <ERROR CLASS><SignedTransaction>
      Overrides ReadOnlyTransactionStorage.updates
      -

      Get a synchronous Observable of updates. When observations are pushed to the Observer, the Wallet will already incorporate -the update.

      +

      Get a synchronous Observable of updates. When observations are pushed to the Observer, the vault will already +incorporate the update.

      Getter
      -

      Get a synchronous Observable of updates. When observations are pushed to the Observer, the Wallet will already incorporate -the update.

      +

      Get a synchronous Observable of updates. When observations are pushed to the Observer, the vault will already +incorporate the update.



      diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/-init-.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/-init-.html deleted file mode 100644 index 16729bea3f..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - -FiberRequest.ExpectingResponse.<init> - - - - -com.r3corda.node.services.statemachine / FiberRequest / ExpectingResponse / <init>
      -
      -

      <init>

      -ExpectingResponse(topic: String, destination: Party?, sessionIDForSend: Long, sessionIDForReceive: Long, obj: Any?, type: Class<R>)
      -

      A fiber which is expecting a message response.

      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/equals.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/equals.html deleted file mode 100644 index 060e561328..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/equals.html +++ /dev/null @@ -1,16 +0,0 @@ - - -FiberRequest.ExpectingResponse.equals - - - - -com.r3corda.node.services.statemachine / FiberRequest / ExpectingResponse / equals
      -
      -

      equals

      - -fun equals(other: Any?): Boolean
      -Overrides FiberRequest.equals
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/index.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/index.html deleted file mode 100644 index a01a7ce0de..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/index.html +++ /dev/null @@ -1,113 +0,0 @@ - - -FiberRequest.ExpectingResponse - - - - -com.r3corda.node.services.statemachine / FiberRequest / ExpectingResponse
      -
      -

      ExpectingResponse

      -class ExpectingResponse<R : Any> : FiberRequest
      -

      A fiber which is expecting a message response.

      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -ExpectingResponse(topic: String, destination: Party?, sessionIDForSend: Long, sessionIDForReceive: Long, obj: Any?, type: Class<R>)

      A fiber which is expecting a message response.

      -
      -

      Properties

      - - - - - - - -
      -responseType -val responseType: Class<R>
      -

      Inherited Properties

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -destination -val destination: Party?
      -payload -val payload: Any?
      -receiveTopicSession -val receiveTopicSession: TopicSession
      -sessionIDForReceive -val sessionIDForReceive: Long
      -sessionIDForSend -val sessionIDForSend: Long
      -stackTraceInCaseOfProblems -val stackTraceInCaseOfProblems: StackSnapshot?
      -topic -val topic: String
      -

      Functions

      - - - - - - - - - - - -
      -equals -fun equals(other: Any?): Boolean
      -toString -fun toString(): String
      -

      Inherited Functions

      - - - - - - - -
      -hashCode -open fun hashCode(): Int
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/response-type.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/response-type.html deleted file mode 100644 index 34dfd5bbb1..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/response-type.html +++ /dev/null @@ -1,15 +0,0 @@ - - -FiberRequest.ExpectingResponse.responseType - - - - -com.r3corda.node.services.statemachine / FiberRequest / ExpectingResponse / responseType
      -
      -

      responseType

      - -val responseType: Class<R>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/to-string.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/to-string.html deleted file mode 100644 index 3cd95281bb..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-expecting-response/to-string.html +++ /dev/null @@ -1,15 +0,0 @@ - - -FiberRequest.ExpectingResponse.toString - - - - -com.r3corda.node.services.statemachine / FiberRequest / ExpectingResponse / toString
      -
      -

      toString

      - -fun toString(): String
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-not-expecting-response/-init-.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-not-expecting-response/-init-.html deleted file mode 100644 index 293ada61fe..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-not-expecting-response/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -FiberRequest.NotExpectingResponse.<init> - - - - -com.r3corda.node.services.statemachine / FiberRequest / NotExpectingResponse / <init>
      -
      -

      <init>

      -NotExpectingResponse(topic: String, destination: Party, sessionIDForSend: Long, obj: Any?)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-not-expecting-response/index.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-not-expecting-response/index.html deleted file mode 100644 index f1e29866f2..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/-not-expecting-response/index.html +++ /dev/null @@ -1,89 +0,0 @@ - - -FiberRequest.NotExpectingResponse - - - - -com.r3corda.node.services.statemachine / FiberRequest / NotExpectingResponse
      -
      -

      NotExpectingResponse

      -class NotExpectingResponse : FiberRequest
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -NotExpectingResponse(topic: String, destination: Party, sessionIDForSend: Long, obj: Any?)
      -

      Inherited Properties

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -destination -val destination: Party?
      -payload -val payload: Any?
      -receiveTopicSession -val receiveTopicSession: TopicSession
      -sessionIDForReceive -val sessionIDForReceive: Long
      -sessionIDForSend -val sessionIDForSend: Long
      -stackTraceInCaseOfProblems -val stackTraceInCaseOfProblems: StackSnapshot?
      -topic -val topic: String
      -

      Inherited Functions

      - - - - - - - - - - - -
      -equals -open fun equals(other: Any?): Boolean
      -hashCode -open fun hashCode(): Int
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/equals.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/equals.html deleted file mode 100644 index b96c275a2b..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/equals.html +++ /dev/null @@ -1,15 +0,0 @@ - - -FiberRequest.equals - - - - -com.r3corda.node.services.statemachine / FiberRequest / equals
      -
      -

      equals

      - -open fun equals(other: Any?): Boolean
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/index.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/index.html deleted file mode 100644 index 14f370eb37..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/index.html +++ /dev/null @@ -1,114 +0,0 @@ - - -FiberRequest - - - - -com.r3corda.node.services.statemachine / FiberRequest
      -
      -

      FiberRequest

      -sealed class FiberRequest
      -
      -
      -

      Types

      - - - - - - - - - - - -
      -ExpectingResponse -class ExpectingResponse<R : Any> : FiberRequest

      A fiber which is expecting a message response.

      -
      -NotExpectingResponse -class NotExpectingResponse : FiberRequest
      -

      Properties

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -destination -val destination: Party?
      -payload -val payload: Any?
      -receiveTopicSession -val receiveTopicSession: TopicSession
      -sessionIDForReceive -val sessionIDForReceive: Long
      -sessionIDForSend -val sessionIDForSend: Long
      -stackTraceInCaseOfProblems -val stackTraceInCaseOfProblems: StackSnapshot?
      -topic -val topic: String
      -

      Functions

      - - - - - - - - - - - -
      -equals -open fun equals(other: Any?): Boolean
      -hashCode -open fun hashCode(): Int
      -

      Inheritors

      - - - - - - - - - - - -
      -ExpectingResponse -class ExpectingResponse<R : Any> : FiberRequest

      A fiber which is expecting a message response.

      -
      -NotExpectingResponse -class NotExpectingResponse : FiberRequest
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/receive-topic-session.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/receive-topic-session.html deleted file mode 100644 index 78d46dd8f4..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/receive-topic-session.html +++ /dev/null @@ -1,15 +0,0 @@ - - -FiberRequest.receiveTopicSession - - - - -com.r3corda.node.services.statemachine / FiberRequest / receiveTopicSession
      -
      -

      receiveTopicSession

      - -val receiveTopicSession: TopicSession
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/receive-topic.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/receive-topic.html deleted file mode 100644 index 49da2aefe1..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/receive-topic.html +++ /dev/null @@ -1,15 +0,0 @@ - - -FiberRequest.receiveTopic - - - - -com.r3corda.node.services.statemachine / FiberRequest / receiveTopic
      -
      -

      receiveTopic

      - -val receiveTopic: String
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/session-i-d-for-receive.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/session-i-d-for-receive.html deleted file mode 100644 index ecc7a1613a..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/session-i-d-for-receive.html +++ /dev/null @@ -1,15 +0,0 @@ - - -FiberRequest.sessionIDForReceive - - - - -com.r3corda.node.services.statemachine / FiberRequest / sessionIDForReceive
      -
      -

      sessionIDForReceive

      - -val sessionIDForReceive: Long
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/session-i-d-for-send.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/session-i-d-for-send.html deleted file mode 100644 index 0e4c08763c..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/session-i-d-for-send.html +++ /dev/null @@ -1,15 +0,0 @@ - - -FiberRequest.sessionIDForSend - - - - -com.r3corda.node.services.statemachine / FiberRequest / sessionIDForSend
      -
      -

      sessionIDForSend

      - -val sessionIDForSend: Long
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/stack-trace-in-case-of-problems.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/stack-trace-in-case-of-problems.html deleted file mode 100644 index d27fa802bc..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/stack-trace-in-case-of-problems.html +++ /dev/null @@ -1,15 +0,0 @@ - - -FiberRequest.stackTraceInCaseOfProblems - - - - -com.r3corda.node.services.statemachine / FiberRequest / stackTraceInCaseOfProblems
      -
      -

      stackTraceInCaseOfProblems

      - -val stackTraceInCaseOfProblems: StackSnapshot?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-i-o-request/index.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-i-o-request/index.html new file mode 100644 index 0000000000..5fc909971c --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-i-o-request/index.html @@ -0,0 +1,48 @@ + + +ProtocolIORequest - + + + +com.r3corda.node.services.statemachine / ProtocolIORequest
      +
      +

      ProtocolIORequest

      +interface ProtocolIORequest
      +
      +
      +

      Properties

      + + + + + + + + + + + +
      +stackTraceInCaseOfProblems +abstract val stackTraceInCaseOfProblems: StackSnapshot
      +topic +abstract val topic: String
      +

      Inheritors

      + + + + + + + + + + + +
      +ReceiveRequest +interface ReceiveRequest<T> : ProtocolIORequest
      +SendRequest +interface SendRequest : ProtocolIORequest
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-i-o-request/stack-trace-in-case-of-problems.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-i-o-request/stack-trace-in-case-of-problems.html new file mode 100644 index 0000000000..e43f109093 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-i-o-request/stack-trace-in-case-of-problems.html @@ -0,0 +1,15 @@ + + +ProtocolIORequest.stackTraceInCaseOfProblems - + + + +com.r3corda.node.services.statemachine / ProtocolIORequest / stackTraceInCaseOfProblems
      +
      +

      stackTraceInCaseOfProblems

      + +abstract val stackTraceInCaseOfProblems: StackSnapshot
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.core.messaging/-message/topic.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-i-o-request/topic.html similarity index 53% rename from docs/build/html/api/com.r3corda.core.messaging/-message/topic.html rename to docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-i-o-request/topic.html index 80c3373200..167e9fcc64 100644 --- a/docs/build/html/api/com.r3corda.core.messaging/-message/topic.html +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-i-o-request/topic.html @@ -1,13 +1,13 @@ -Message.topic - +ProtocolIORequest.topic - -com.r3corda.core.messaging / Message / topic
      +com.r3corda.node.services.statemachine / ProtocolIORequest / topic

      topic

      - + abstract val topic: String


      diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-state-machine-impl/index.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-state-machine-impl/index.html index 9beb050839..8239237cb0 100644 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-state-machine-impl/index.html +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-state-machine-impl/index.html @@ -75,7 +75,7 @@ being serialized and then deserialized.

      receive -fun <T : Any> receive(topic: String, sessionIDForReceive: Long, recvType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(topic: String, sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> @@ -93,7 +93,7 @@ being serialized and then deserialized.

      sendAndReceive -fun <T : Any> sendAndReceive(topic: String, destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any, recvType: Class<T>): UntrustworthyData<T> +fun <T : Any> sendAndReceive(topic: String, destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any, receiveType: Class<T>): UntrustworthyData<T> diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-state-machine-impl/receive.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-state-machine-impl/receive.html index 8418257978..d8ef87f703 100644 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-state-machine-impl/receive.html +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-state-machine-impl/receive.html @@ -8,7 +8,7 @@

      receive

      -fun <T : Any> receive(topic: String, sessionIDForReceive: Long, recvType: Class<T>): UntrustworthyData<T>
      +fun <T : Any> receive(topic: String, sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T>
      Overrides ProtocolStateMachine.receive


      diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-state-machine-impl/send-and-receive.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-state-machine-impl/send-and-receive.html index 878461decf..f3f759f4bf 100644 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-state-machine-impl/send-and-receive.html +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-protocol-state-machine-impl/send-and-receive.html @@ -8,7 +8,7 @@

      sendAndReceive

      -fun <T : Any> sendAndReceive(topic: String, destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any, recvType: Class<T>): UntrustworthyData<T>
      +fun <T : Any> sendAndReceive(topic: String, destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any, receiveType: Class<T>): UntrustworthyData<T>
      Overrides ProtocolStateMachine.sendAndReceive


      diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/-init-.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/-init-.html new file mode 100644 index 0000000000..35dbbbbe1b --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/-init-.html @@ -0,0 +1,14 @@ + + +ReceiveOnly.<init> - + + + +com.r3corda.node.services.statemachine / ReceiveOnly / <init>
      +
      +

      <init>

      +ReceiveOnly(topic: String, receiveType: Class<T>, receiveSessionID: Long)
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/index.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/index.html new file mode 100644 index 0000000000..cd9f2b23d0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/index.html @@ -0,0 +1,65 @@ + + +ReceiveOnly - + + + +com.r3corda.node.services.statemachine / ReceiveOnly
      +
      +

      ReceiveOnly

      +data class ReceiveOnly<T> : ReceiveRequest<T>
      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +ReceiveOnly(topic: String, receiveType: Class<T>, receiveSessionID: Long)
      +

      Properties

      + + + + + + + + + + + + + + + + + + + +
      +receiveSessionID +val receiveSessionID: Long
      +receiveType +val receiveType: Class<T>
      +stackTraceInCaseOfProblems +val stackTraceInCaseOfProblems: StackSnapshot
      +topic +val topic: String
      +

      Inherited Properties

      + + + + + + + +
      +receiveTopicSession +open val receiveTopicSession: TopicSession
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/receive-session-i-d.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/receive-session-i-d.html new file mode 100644 index 0000000000..7f2c90ba2f --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/receive-session-i-d.html @@ -0,0 +1,16 @@ + + +ReceiveOnly.receiveSessionID - + + + +com.r3corda.node.services.statemachine / ReceiveOnly / receiveSessionID
      +
      +

      receiveSessionID

      + +val receiveSessionID: Long
      +Overrides ReceiveRequest.receiveSessionID
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/receive-type.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/receive-type.html new file mode 100644 index 0000000000..e3de603b99 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/receive-type.html @@ -0,0 +1,16 @@ + + +ReceiveOnly.receiveType - + + + +com.r3corda.node.services.statemachine / ReceiveOnly / receiveType
      +
      +

      receiveType

      + +val receiveType: Class<T>
      +Overrides ReceiveRequest.receiveType
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/stack-trace-in-case-of-problems.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/stack-trace-in-case-of-problems.html new file mode 100644 index 0000000000..9382e20391 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/stack-trace-in-case-of-problems.html @@ -0,0 +1,16 @@ + + +ReceiveOnly.stackTraceInCaseOfProblems - + + + +com.r3corda.node.services.statemachine / ReceiveOnly / stackTraceInCaseOfProblems
      +
      +

      stackTraceInCaseOfProblems

      + +val stackTraceInCaseOfProblems: StackSnapshot
      +Overrides ProtocolIORequest.stackTraceInCaseOfProblems
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/topic.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/topic.html new file mode 100644 index 0000000000..465806ce81 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-only/topic.html @@ -0,0 +1,16 @@ + + +ReceiveOnly.topic - + + + +com.r3corda.node.services.statemachine / ReceiveOnly / topic
      +
      +

      topic

      + +val topic: String
      +Overrides ProtocolIORequest.topic
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-request/index.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-request/index.html new file mode 100644 index 0000000000..7866fb5bd4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-request/index.html @@ -0,0 +1,71 @@ + + +ReceiveRequest - + + + +com.r3corda.node.services.statemachine / ReceiveRequest
      +
      +

      ReceiveRequest

      +interface ReceiveRequest<T> : ProtocolIORequest
      +
      +
      +

      Properties

      + + + + + + + + + + + + + + + +
      +receiveSessionID +abstract val receiveSessionID: Long
      +receiveTopicSession +open val receiveTopicSession: TopicSession
      +receiveType +abstract val receiveType: Class<T>
      +

      Inherited Properties

      + + + + + + + + + + + +
      +stackTraceInCaseOfProblems +abstract val stackTraceInCaseOfProblems: StackSnapshot
      +topic +abstract val topic: String
      +

      Inheritors

      + + + + + + + + + + + +
      +ReceiveOnly +data class ReceiveOnly<T> : ReceiveRequest<T>
      +SendAndReceive +data class SendAndReceive<T> : SendRequest, ReceiveRequest<T>
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-request/receive-session-i-d.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-request/receive-session-i-d.html new file mode 100644 index 0000000000..2b9f773898 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-request/receive-session-i-d.html @@ -0,0 +1,15 @@ + + +ReceiveRequest.receiveSessionID - + + + +com.r3corda.node.services.statemachine / ReceiveRequest / receiveSessionID
      +
      +

      receiveSessionID

      + +abstract val receiveSessionID: Long
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-request/receive-topic-session.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-request/receive-topic-session.html new file mode 100644 index 0000000000..498ace5073 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-request/receive-topic-session.html @@ -0,0 +1,15 @@ + + +ReceiveRequest.receiveTopicSession - + + + +com.r3corda.node.services.statemachine / ReceiveRequest / receiveTopicSession
      +
      +

      receiveTopicSession

      + +open val receiveTopicSession: TopicSession
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-request/receive-type.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-request/receive-type.html new file mode 100644 index 0000000000..6b0d3d26a0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-receive-request/receive-type.html @@ -0,0 +1,15 @@ + + +ReceiveRequest.receiveType - + + + +com.r3corda.node.services.statemachine / ReceiveRequest / receiveType
      +
      +

      receiveType

      + +abstract val receiveType: Class<T>
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/-init-.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/-init-.html new file mode 100644 index 0000000000..b92193d6d1 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/-init-.html @@ -0,0 +1,14 @@ + + +SendAndReceive.<init> - + + + +com.r3corda.node.services.statemachine / SendAndReceive / <init>
      +
      +

      <init>

      +SendAndReceive(topic: String, destination: Party, payload: Any, sendSessionID: Long, receiveType: Class<T>, receiveSessionID: Long)
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/destination.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/destination.html new file mode 100644 index 0000000000..98868898be --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/destination.html @@ -0,0 +1,16 @@ + + +SendAndReceive.destination - + + + +com.r3corda.node.services.statemachine / SendAndReceive / destination
      +
      +

      destination

      + +val destination: Party
      +Overrides SendRequest.destination
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/index.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/index.html new file mode 100644 index 0000000000..bf255ad528 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/index.html @@ -0,0 +1,83 @@ + + +SendAndReceive - + + + +com.r3corda.node.services.statemachine / SendAndReceive
      +
      +

      SendAndReceive

      +data class SendAndReceive<T> : SendRequest, ReceiveRequest<T>
      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +SendAndReceive(topic: String, destination: Party, payload: Any, sendSessionID: Long, receiveType: Class<T>, receiveSessionID: Long)
      +

      Properties

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +destination +val destination: Party
      +payload +val payload: Any
      +receiveSessionID +val receiveSessionID: Long
      +receiveType +val receiveType: Class<T>
      +sendSessionID +val sendSessionID: Long
      +stackTraceInCaseOfProblems +val stackTraceInCaseOfProblems: StackSnapshot
      +topic +val topic: String
      +

      Inherited Properties

      + + + + + + + +
      +receiveTopicSession +open val receiveTopicSession: TopicSession
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/payload.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/payload.html new file mode 100644 index 0000000000..8720521e85 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/payload.html @@ -0,0 +1,16 @@ + + +SendAndReceive.payload - + + + +com.r3corda.node.services.statemachine / SendAndReceive / payload
      +
      +

      payload

      + +val payload: Any
      +Overrides SendRequest.payload
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/receive-session-i-d.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/receive-session-i-d.html new file mode 100644 index 0000000000..8c2decd3aa --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/receive-session-i-d.html @@ -0,0 +1,16 @@ + + +SendAndReceive.receiveSessionID - + + + +com.r3corda.node.services.statemachine / SendAndReceive / receiveSessionID
      +
      +

      receiveSessionID

      + +val receiveSessionID: Long
      +Overrides ReceiveRequest.receiveSessionID
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/receive-type.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/receive-type.html new file mode 100644 index 0000000000..efa861372f --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/receive-type.html @@ -0,0 +1,16 @@ + + +SendAndReceive.receiveType - + + + +com.r3corda.node.services.statemachine / SendAndReceive / receiveType
      +
      +

      receiveType

      + +val receiveType: Class<T>
      +Overrides ReceiveRequest.receiveType
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/send-session-i-d.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/send-session-i-d.html new file mode 100644 index 0000000000..46a7d51a77 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/send-session-i-d.html @@ -0,0 +1,16 @@ + + +SendAndReceive.sendSessionID - + + + +com.r3corda.node.services.statemachine / SendAndReceive / sendSessionID
      +
      +

      sendSessionID

      + +val sendSessionID: Long
      +Overrides SendRequest.sendSessionID
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/stack-trace-in-case-of-problems.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/stack-trace-in-case-of-problems.html new file mode 100644 index 0000000000..cbebac945c --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/stack-trace-in-case-of-problems.html @@ -0,0 +1,16 @@ + + +SendAndReceive.stackTraceInCaseOfProblems - + + + +com.r3corda.node.services.statemachine / SendAndReceive / stackTraceInCaseOfProblems
      +
      +

      stackTraceInCaseOfProblems

      + +val stackTraceInCaseOfProblems: StackSnapshot
      +Overrides ProtocolIORequest.stackTraceInCaseOfProblems
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/topic.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/topic.html new file mode 100644 index 0000000000..180cda8715 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-and-receive/topic.html @@ -0,0 +1,16 @@ + + +SendAndReceive.topic - + + + +com.r3corda.node.services.statemachine / SendAndReceive / topic
      +
      +

      topic

      + +val topic: String
      +Overrides ProtocolIORequest.topic
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/-init-.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/-init-.html new file mode 100644 index 0000000000..b4fc147822 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/-init-.html @@ -0,0 +1,14 @@ + + +SendOnly.<init> - + + + +com.r3corda.node.services.statemachine / SendOnly / <init>
      +
      +

      <init>

      +SendOnly(destination: Party, topic: String, payload: Any, sendSessionID: Long)
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/destination.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/destination.html similarity index 54% rename from docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/destination.html rename to docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/destination.html index 240a3b13f9..56c126bea1 100644 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/destination.html +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/destination.html @@ -1,14 +1,15 @@ -FiberRequest.destination - +SendOnly.destination - -com.r3corda.node.services.statemachine / FiberRequest / destination
      +com.r3corda.node.services.statemachine / SendOnly / destination

      destination

      - -val destination: Party?
      + +val destination: Party
      +Overrides SendRequest.destination


      diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/index.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/index.html new file mode 100644 index 0000000000..ec8d87c1e7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/index.html @@ -0,0 +1,60 @@ + + +SendOnly - + + + +com.r3corda.node.services.statemachine / SendOnly
      +
      +

      SendOnly

      +data class SendOnly : SendRequest
      +
      +
      +

      Constructors

      + + + + + + + +
      +<init> +SendOnly(destination: Party, topic: String, payload: Any, sendSessionID: Long)
      +

      Properties

      + + + + + + + + + + + + + + + + + + + + + + + +
      +destination +val destination: Party
      +payload +val payload: Any
      +sendSessionID +val sendSessionID: Long
      +stackTraceInCaseOfProblems +val stackTraceInCaseOfProblems: StackSnapshot
      +topic +val topic: String
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/payload.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/payload.html similarity index 51% rename from docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/payload.html rename to docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/payload.html index f022db5f0f..c5cbd3c18e 100644 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/payload.html +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/payload.html @@ -1,14 +1,15 @@ -FiberRequest.payload - +SendOnly.payload - -com.r3corda.node.services.statemachine / FiberRequest / payload
      +com.r3corda.node.services.statemachine / SendOnly / payload

      payload

      - -val payload: Any?
      + +val payload: Any
      +Overrides SendRequest.payload


      diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/send-session-i-d.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/send-session-i-d.html new file mode 100644 index 0000000000..d4fd9f2a88 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/send-session-i-d.html @@ -0,0 +1,16 @@ + + +SendOnly.sendSessionID - + + + +com.r3corda.node.services.statemachine / SendOnly / sendSessionID
      +
      +

      sendSessionID

      + +val sendSessionID: Long
      +Overrides SendRequest.sendSessionID
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/stack-trace-in-case-of-problems.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/stack-trace-in-case-of-problems.html new file mode 100644 index 0000000000..7e1af53b83 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/stack-trace-in-case-of-problems.html @@ -0,0 +1,16 @@ + + +SendOnly.stackTraceInCaseOfProblems - + + + +com.r3corda.node.services.statemachine / SendOnly / stackTraceInCaseOfProblems
      +
      +

      stackTraceInCaseOfProblems

      + +val stackTraceInCaseOfProblems: StackSnapshot
      +Overrides ProtocolIORequest.stackTraceInCaseOfProblems
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/topic.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/topic.html similarity index 55% rename from docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/topic.html rename to docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/topic.html index 573028b407..7400ec38d9 100644 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-fiber-request/topic.html +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-only/topic.html @@ -1,14 +1,15 @@ -FiberRequest.topic - +SendOnly.topic - -com.r3corda.node.services.statemachine / FiberRequest / topic
      +com.r3corda.node.services.statemachine / SendOnly / topic

      topic

      - + val topic: String
      +Overrides ProtocolIORequest.topic


      diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-request/destination.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-request/destination.html new file mode 100644 index 0000000000..c88c8e42f0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-request/destination.html @@ -0,0 +1,15 @@ + + +SendRequest.destination - + + + +com.r3corda.node.services.statemachine / SendRequest / destination
      +
      +

      destination

      + +abstract val destination: Party
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-request/index.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-request/index.html new file mode 100644 index 0000000000..f4efaba660 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-request/index.html @@ -0,0 +1,71 @@ + + +SendRequest - + + + +com.r3corda.node.services.statemachine / SendRequest
      +
      +

      SendRequest

      +interface SendRequest : ProtocolIORequest
      +
      +
      +

      Properties

      + + + + + + + + + + + + + + + +
      +destination +abstract val destination: Party
      +payload +abstract val payload: Any
      +sendSessionID +abstract val sendSessionID: Long
      +

      Inherited Properties

      + + + + + + + + + + + +
      +stackTraceInCaseOfProblems +abstract val stackTraceInCaseOfProblems: StackSnapshot
      +topic +abstract val topic: String
      +

      Inheritors

      + + + + + + + + + + + +
      +SendAndReceive +data class SendAndReceive<T> : SendRequest, ReceiveRequest<T>
      +SendOnly +data class SendOnly : SendRequest
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-request/payload.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-request/payload.html new file mode 100644 index 0000000000..ddbed9c8a3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-request/payload.html @@ -0,0 +1,15 @@ + + +SendRequest.payload - + + + +com.r3corda.node.services.statemachine / SendRequest / payload
      +
      +

      payload

      + +abstract val payload: Any
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-send-request/send-session-i-d.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-request/send-session-i-d.html new file mode 100644 index 0000000000..ee40e44c04 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/-send-request/send-session-i-d.html @@ -0,0 +1,15 @@ + + +SendRequest.sendSessionID - + + + +com.r3corda.node.services.statemachine / SendRequest / sendSessionID
      +
      +

      sendSessionID

      + +abstract val sendSessionID: Long
      +
      +
      + + diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-expecting-response/-init-.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-expecting-response/-init-.html deleted file mode 100644 index c4bcd5a38b..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-expecting-response/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -StateMachineManager.FiberRequest.ExpectingResponse.<init> - - - - -com.r3corda.node.services.statemachine / StateMachineManager / FiberRequest / ExpectingResponse / <init>
      -
      -

      <init>

      -ExpectingResponse(topic: String, destination: Party?, sessionIDForSend: Long, sessionIDForReceive: Long, obj: Any?, responseType: Class<R>)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-expecting-response/index.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-expecting-response/index.html deleted file mode 100644 index 8122b575b1..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-expecting-response/index.html +++ /dev/null @@ -1,77 +0,0 @@ - - -StateMachineManager.FiberRequest.ExpectingResponse - - - - -com.r3corda.node.services.statemachine / StateMachineManager / FiberRequest / ExpectingResponse
      -
      -

      ExpectingResponse

      -class ExpectingResponse<R : Any> : FiberRequest
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -ExpectingResponse(topic: String, destination: Party?, sessionIDForSend: Long, sessionIDForReceive: Long, obj: Any?, responseType: Class<R>)
      -

      Properties

      - - - - - - - -
      -responseType -val responseType: Class<R>
      -

      Inherited Properties

      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -destination -val destination: Party?
      -payload -val payload: Any?
      -sessionIDForReceive -val sessionIDForReceive: Long
      -sessionIDForSend -val sessionIDForSend: Long
      -stackTraceInCaseOfProblems -val stackTraceInCaseOfProblems: StackSnapshot
      -topic -val topic: String
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-expecting-response/response-type.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-expecting-response/response-type.html deleted file mode 100644 index c91f16e710..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-expecting-response/response-type.html +++ /dev/null @@ -1,15 +0,0 @@ - - -StateMachineManager.FiberRequest.ExpectingResponse.responseType - - - - -com.r3corda.node.services.statemachine / StateMachineManager / FiberRequest / ExpectingResponse / responseType
      -
      -

      responseType

      - -val responseType: Class<R>
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-init-.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-init-.html deleted file mode 100644 index cb46428641..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -StateMachineManager.FiberRequest.<init> - - - - -com.r3corda.node.services.statemachine / StateMachineManager / FiberRequest / <init>
      -
      -

      <init>

      -FiberRequest(topic: String, destination: Party?, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any?)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-not-expecting-response/-init-.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-not-expecting-response/-init-.html deleted file mode 100644 index 237cecc18f..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-not-expecting-response/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -StateMachineManager.FiberRequest.NotExpectingResponse.<init> - - - - -com.r3corda.node.services.statemachine / StateMachineManager / FiberRequest / NotExpectingResponse / <init>
      -
      -

      <init>

      -NotExpectingResponse(topic: String, destination: Party, sessionIDForSend: Long, obj: Any?)
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-not-expecting-response/index.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-not-expecting-response/index.html deleted file mode 100644 index 6d788ec6bd..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/-not-expecting-response/index.html +++ /dev/null @@ -1,66 +0,0 @@ - - -StateMachineManager.FiberRequest.NotExpectingResponse - - - - -com.r3corda.node.services.statemachine / StateMachineManager / FiberRequest / NotExpectingResponse
      -
      -

      NotExpectingResponse

      -class NotExpectingResponse : FiberRequest
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -NotExpectingResponse(topic: String, destination: Party, sessionIDForSend: Long, obj: Any?)
      -

      Inherited Properties

      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -destination -val destination: Party?
      -payload -val payload: Any?
      -sessionIDForReceive -val sessionIDForReceive: Long
      -sessionIDForSend -val sessionIDForSend: Long
      -stackTraceInCaseOfProblems -val stackTraceInCaseOfProblems: StackSnapshot
      -topic -val topic: String
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/destination.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/destination.html deleted file mode 100644 index 47dab798ca..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/destination.html +++ /dev/null @@ -1,15 +0,0 @@ - - -StateMachineManager.FiberRequest.destination - - - - -com.r3corda.node.services.statemachine / StateMachineManager / FiberRequest / destination
      -
      -

      destination

      - -val destination: Party?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/index.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/index.html deleted file mode 100644 index 96a93abf5d..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/index.html +++ /dev/null @@ -1,100 +0,0 @@ - - -StateMachineManager.FiberRequest - - - - -com.r3corda.node.services.statemachine / StateMachineManager / FiberRequest
      -
      -

      FiberRequest

      -class FiberRequest
      -
      -
      -

      Types

      - - - - - - - - - - - -
      -ExpectingResponse -class ExpectingResponse<R : Any> : FiberRequest
      -NotExpectingResponse -class NotExpectingResponse : FiberRequest
      -

      Constructors

      - - - - - - - -
      -<init> -FiberRequest(topic: String, destination: Party?, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any?)
      -

      Properties

      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -destination -val destination: Party?
      -payload -val payload: Any?
      -sessionIDForReceive -val sessionIDForReceive: Long
      -sessionIDForSend -val sessionIDForSend: Long
      -stackTraceInCaseOfProblems -val stackTraceInCaseOfProblems: StackSnapshot
      -topic -val topic: String
      -

      Inheritors

      - - - - - - - - - - - -
      -ExpectingResponse -class ExpectingResponse<R : Any> : FiberRequest
      -NotExpectingResponse -class NotExpectingResponse : FiberRequest
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/payload.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/payload.html deleted file mode 100644 index 25f37c18f8..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/payload.html +++ /dev/null @@ -1,15 +0,0 @@ - - -StateMachineManager.FiberRequest.payload - - - - -com.r3corda.node.services.statemachine / StateMachineManager / FiberRequest / payload
      -
      -

      payload

      - -val payload: Any?
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/session-i-d-for-receive.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/session-i-d-for-receive.html deleted file mode 100644 index cf526a8010..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/session-i-d-for-receive.html +++ /dev/null @@ -1,15 +0,0 @@ - - -StateMachineManager.FiberRequest.sessionIDForReceive - - - - -com.r3corda.node.services.statemachine / StateMachineManager / FiberRequest / sessionIDForReceive
      -
      -

      sessionIDForReceive

      - -val sessionIDForReceive: Long
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/session-i-d-for-send.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/session-i-d-for-send.html deleted file mode 100644 index 2e92529a64..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/session-i-d-for-send.html +++ /dev/null @@ -1,15 +0,0 @@ - - -StateMachineManager.FiberRequest.sessionIDForSend - - - - -com.r3corda.node.services.statemachine / StateMachineManager / FiberRequest / sessionIDForSend
      -
      -

      sessionIDForSend

      - -val sessionIDForSend: Long
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/stack-trace-in-case-of-problems.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/stack-trace-in-case-of-problems.html deleted file mode 100644 index 51f9e8c550..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/stack-trace-in-case-of-problems.html +++ /dev/null @@ -1,15 +0,0 @@ - - -StateMachineManager.FiberRequest.stackTraceInCaseOfProblems - - - - -com.r3corda.node.services.statemachine / StateMachineManager / FiberRequest / stackTraceInCaseOfProblems
      -
      -

      stackTraceInCaseOfProblems

      - -val stackTraceInCaseOfProblems: StackSnapshot
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/topic.html b/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/topic.html deleted file mode 100644 index afd2ac7e87..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/-state-machine-manager/-fiber-request/topic.html +++ /dev/null @@ -1,15 +0,0 @@ - - -StateMachineManager.FiberRequest.topic - - - - -com.r3corda.node.services.statemachine / StateMachineManager / FiberRequest / topic
      -
      -

      topic

      - -val topic: String
      -
      -
      - - diff --git a/docs/build/html/api/com.r3corda.node.services.statemachine/index.html b/docs/build/html/api/com.r3corda.node.services.statemachine/index.html index 19e0616c4d..5c32f76453 100644 --- a/docs/build/html/api/com.r3corda.node.services.statemachine/index.html +++ b/docs/build/html/api/com.r3corda.node.services.statemachine/index.html @@ -12,9 +12,9 @@ -FiberRequest +ProtocolIORequest -sealed class FiberRequest +interface ProtocolIORequest @@ -26,6 +26,36 @@ For any given flow there is only one PSM, even if that protocol invokes subproto +ReceiveOnly + +data class ReceiveOnly<T> : ReceiveRequest<T> + + + +ReceiveRequest + +interface ReceiveRequest<T> : ProtocolIORequest + + + +SendAndReceive + +data class SendAndReceive<T> : SendRequest, ReceiveRequest<T> + + + +SendOnly + +data class SendOnly : SendRequest + + + +SendRequest + +interface SendRequest : ProtocolIORequest + + + StateMachineManager class StateMachineManager

      A StateMachineManager is responsible for coordination and persistence of multiple ProtocolStateMachine objects. diff --git a/docs/build/html/api/com.r3corda.node.services.transactions/-notary-service/-init-.html b/docs/build/html/api/com.r3corda.node.services.transactions/-notary-service/-init-.html index 60d1cf4e4d..a34096c890 100644 --- a/docs/build/html/api/com.r3corda.node.services.transactions/-notary-service/-init-.html +++ b/docs/build/html/api/com.r3corda.node.services.transactions/-notary-service/-init-.html @@ -7,12 +7,13 @@ com.r3corda.node.services.transactions / NotaryService / <init>

      <init>

      -NotaryService(smm: StateMachineManager, net: MessagingService, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider, networkMapCache: NetworkMapCache)
      +NotaryService(services: ServiceHubInternal, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)

      A Notary service acts as the final signer of a transaction ensuring two things:

      • The (optional) timestamp of the transaction is valid.

        -
      • None of the referenced input states have previously been consumed by a transaction signed by this Notary

        -

      A transaction has to be signed by a Notary to be considered valid (except for output-only transactions without a timestamp).

      -

      This is the base implementation that can be customised with specific Notary transaction commit protocol.

      +
    • None of the referenced input states have previously been consumed by a transaction signed by this Notary +O +A transaction has to be signed by a Notary to be considered valid (except for output-only transactions without a timestamp).

      +

    This is the base implementation that can be customised with specific Notary transaction commit protocol.




    diff --git a/docs/build/html/api/com.r3corda.node.services.transactions/-notary-service/index.html b/docs/build/html/api/com.r3corda.node.services.transactions/-notary-service/index.html index 261ab29355..66bfff4ebe 100644 --- a/docs/build/html/api/com.r3corda.node.services.transactions/-notary-service/index.html +++ b/docs/build/html/api/com.r3corda.node.services.transactions/-notary-service/index.html @@ -10,9 +10,10 @@ abstract class NotaryService : AbstractNodeService

    A Notary service acts as the final signer of a transaction ensuring two things:

    • The (optional) timestamp of the transaction is valid.

      -
    • None of the referenced input states have previously been consumed by a transaction signed by this Notary

      -

    A transaction has to be signed by a Notary to be considered valid (except for output-only transactions without a timestamp).

    -

    This is the base implementation that can be customised with specific Notary transaction commit protocol.

    +
  • None of the referenced input states have previously been consumed by a transaction signed by this Notary +O +A transaction has to be signed by a Notary to be considered valid (except for output-only transactions without a timestamp).

    +

This is the base implementation that can be customised with specific Notary transaction commit protocol.




@@ -35,7 +36,7 @@ <init> -NotaryService(smm: StateMachineManager, net: MessagingService, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider, networkMapCache: NetworkMapCache)

A Notary service acts as the final signer of a transaction ensuring two things:

+NotaryService(services: ServiceHubInternal, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)

A Notary service acts as the final signer of a transaction ensuring two things:

@@ -58,12 +59,6 @@ -smm - -val smm: StateMachineManager - - - timestampChecker val timestampChecker: TimestampChecker @@ -83,13 +78,13 @@ net -val net: MessagingService +val net: MessagingServiceInternal -networkMapCache +services -val networkMapCache: NetworkMapCache +val services: ServiceHubInternal @@ -100,14 +95,22 @@ addMessageHandler -fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): Unit

Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): MessageHandlerRegistration

Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of common boilerplate code. Exceptions are caught and passed to the provided consumer. If you just want a simple acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

-fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): Unit

Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): MessageHandlerRegistration

Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of common boilerplate code. Exceptions are propagated to the messaging layer. If you just want a simple acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

+ + +addProtocolHandler + +fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>, onResultFuture: (<ERROR CLASS><R>, H) -> Unit): Unit

Register a handler to kick-off a protocol when a HandshakeMessage is received by the node. This performs the +necessary steps to enable communication between the two protocols, including calling ProtocolLogic.registerSession.

+fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>): Unit +

Inheritors

diff --git a/docs/build/html/api/com.r3corda.node.services.transactions/-notary-service/smm.html b/docs/build/html/api/com.r3corda.node.services.transactions/-notary-service/smm.html deleted file mode 100644 index 45ebe7a92a..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.transactions/-notary-service/smm.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NotaryService.smm - - - - -com.r3corda.node.services.transactions / NotaryService / smm
-
-

smm

- -val smm: StateMachineManager
-
-
- - diff --git a/docs/build/html/api/com.r3corda.node.services.transactions/-persistent-uniqueness-provider/-init-.html b/docs/build/html/api/com.r3corda.node.services.transactions/-persistent-uniqueness-provider/-init-.html new file mode 100644 index 0000000000..ecdfa4316a --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.transactions/-persistent-uniqueness-provider/-init-.html @@ -0,0 +1,15 @@ + + +PersistentUniquenessProvider.<init> - + + + +com.r3corda.node.services.transactions / PersistentUniquenessProvider / <init>
+
+

<init>

+PersistentUniquenessProvider()
+

A RDBMS backed Uniqueness provider

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.services.transactions/-persistent-uniqueness-provider/commit.html b/docs/build/html/api/com.r3corda.node.services.transactions/-persistent-uniqueness-provider/commit.html new file mode 100644 index 0000000000..df6d6ff9e1 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.transactions/-persistent-uniqueness-provider/commit.html @@ -0,0 +1,17 @@ + + +PersistentUniquenessProvider.commit - + + + +com.r3corda.node.services.transactions / PersistentUniquenessProvider / commit
+
+

commit

+ +fun commit(states: List<StateRef>, txId: SecureHash, callerIdentity: Party): Unit
+Overrides UniquenessProvider.commit
+

Commits all input states of the given transaction

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.services.transactions/-persistent-uniqueness-provider/committed-states.html b/docs/build/html/api/com.r3corda.node.services.transactions/-persistent-uniqueness-provider/committed-states.html new file mode 100644 index 0000000000..17d1013514 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.transactions/-persistent-uniqueness-provider/committed-states.html @@ -0,0 +1,17 @@ + + +PersistentUniquenessProvider.committedStates - + + + +com.r3corda.node.services.transactions / PersistentUniquenessProvider / committedStates
+
+

committedStates

+ +val committedStates: <ERROR CLASS>
+

For each input state store the consuming transaction information. +TODO: remove databaseTransaction here once node initialisation is wrapped in it

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.services.transactions/-persistent-uniqueness-provider/index.html b/docs/build/html/api/com.r3corda.node.services.transactions/-persistent-uniqueness-provider/index.html new file mode 100644 index 0000000000..a152fcba77 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.transactions/-persistent-uniqueness-provider/index.html @@ -0,0 +1,63 @@ + + +PersistentUniquenessProvider - + + + +com.r3corda.node.services.transactions / PersistentUniquenessProvider
+
+

PersistentUniquenessProvider

+class PersistentUniquenessProvider : UniquenessProvider, SingletonSerializeAsToken
+

A RDBMS backed Uniqueness provider

+
+
+

Constructors

+ + + + + + + +
+<init> +PersistentUniquenessProvider()

A RDBMS backed Uniqueness provider

+
+

Properties

+ + + + + + + +
+committedStates +val committedStates: <ERROR CLASS>

For each input state store the consuming transaction information. +TODO: remove databaseTransaction here once node initialisation is wrapped in it

+
+

Functions

+ + + + + + + +
+commit +fun commit(states: List<StateRef>, txId: SecureHash, callerIdentity: Party): Unit

Commits all input states of the given transaction

+
+

Inherited Functions

+ + + + + + + +
+toToken +open fun toToken(context: SerializeAsTokenContext): SerializationToken
+ + diff --git a/docs/build/html/api/com.r3corda.node.services.transactions/-simple-notary-service/-init-.html b/docs/build/html/api/com.r3corda.node.services.transactions/-simple-notary-service/-init-.html index 8442cab8f1..387d69bc46 100644 --- a/docs/build/html/api/com.r3corda.node.services.transactions/-simple-notary-service/-init-.html +++ b/docs/build/html/api/com.r3corda.node.services.transactions/-simple-notary-service/-init-.html @@ -7,7 +7,7 @@ com.r3corda.node.services.transactions / SimpleNotaryService / <init>

<init>

-SimpleNotaryService(smm: StateMachineManager, net: MessagingService, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider, networkMapCache: NetworkMapCache)
+SimpleNotaryService(services: ServiceHubInternal, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)

A simple Notary service that does not perform transaction validation



diff --git a/docs/build/html/api/com.r3corda.node.services.transactions/-simple-notary-service/index.html b/docs/build/html/api/com.r3corda.node.services.transactions/-simple-notary-service/index.html index e17b6a7620..c75e382312 100644 --- a/docs/build/html/api/com.r3corda.node.services.transactions/-simple-notary-service/index.html +++ b/docs/build/html/api/com.r3corda.node.services.transactions/-simple-notary-service/index.html @@ -29,7 +29,7 @@ <init> -SimpleNotaryService(smm: StateMachineManager, net: MessagingService, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider, networkMapCache: NetworkMapCache)

A simple Notary service that does not perform transaction validation

+SimpleNotaryService(services: ServiceHubInternal, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)

A simple Notary service that does not perform transaction validation

@@ -57,12 +57,6 @@ -smm - -val smm: StateMachineManager - - - timestampChecker val timestampChecker: TimestampChecker diff --git a/docs/build/html/api/com.r3corda.node.services.transactions/-validating-notary-service/-init-.html b/docs/build/html/api/com.r3corda.node.services.transactions/-validating-notary-service/-init-.html index e100b881f7..e913acd1cc 100644 --- a/docs/build/html/api/com.r3corda.node.services.transactions/-validating-notary-service/-init-.html +++ b/docs/build/html/api/com.r3corda.node.services.transactions/-validating-notary-service/-init-.html @@ -7,7 +7,7 @@ com.r3corda.node.services.transactions / ValidatingNotaryService / <init>

<init>

-ValidatingNotaryService(smm: StateMachineManager, net: MessagingService, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider, networkMapCache: NetworkMapCache)
+ValidatingNotaryService(services: ServiceHubInternal, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)

A Notary service that validates the transaction chain of he submitted transaction before committing it



diff --git a/docs/build/html/api/com.r3corda.node.services.transactions/-validating-notary-service/index.html b/docs/build/html/api/com.r3corda.node.services.transactions/-validating-notary-service/index.html index dff848d12d..aa7a31b88a 100644 --- a/docs/build/html/api/com.r3corda.node.services.transactions/-validating-notary-service/index.html +++ b/docs/build/html/api/com.r3corda.node.services.transactions/-validating-notary-service/index.html @@ -29,7 +29,7 @@ <init> -ValidatingNotaryService(smm: StateMachineManager, net: MessagingService, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider, networkMapCache: NetworkMapCache)

A Notary service that validates the transaction chain of he submitted transaction before committing it

+ValidatingNotaryService(services: ServiceHubInternal, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)

A Notary service that validates the transaction chain of he submitted transaction before committing it

@@ -57,12 +57,6 @@ -smm - -val smm: StateMachineManager - - - timestampChecker val timestampChecker: TimestampChecker diff --git a/docs/build/html/api/com.r3corda.node.services.transactions/index.html b/docs/build/html/api/com.r3corda.node.services.transactions/index.html index c13ab0c448..dcb915628b 100644 --- a/docs/build/html/api/com.r3corda.node.services.transactions/index.html +++ b/docs/build/html/api/com.r3corda.node.services.transactions/index.html @@ -26,6 +26,13 @@ +PersistentUniquenessProvider + +class PersistentUniquenessProvider : UniquenessProvider, SingletonSerializeAsToken

A RDBMS backed Uniqueness provider

+ + + + SimpleNotaryService class SimpleNotaryService : NotaryService

A simple Notary service that does not perform transaction validation

diff --git a/docs/build/html/api/com.r3corda.node.services.vault/-cash-balance-as-metrics-observer/-init-.html b/docs/build/html/api/com.r3corda.node.services.vault/-cash-balance-as-metrics-observer/-init-.html new file mode 100644 index 0000000000..d09894c630 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.vault/-cash-balance-as-metrics-observer/-init-.html @@ -0,0 +1,15 @@ + + +CashBalanceAsMetricsObserver.<init> - + + + +com.r3corda.node.services.vault / CashBalanceAsMetricsObserver / <init>
+
+

<init>

+CashBalanceAsMetricsObserver(serviceHubInternal: ServiceHubInternal)
+

This class observes the vault and reflect current cash balances as exposed metrics in the monitoring service.

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.services.wallet/-cash-balance-as-metrics-observer/index.html b/docs/build/html/api/com.r3corda.node.services.vault/-cash-balance-as-metrics-observer/index.html similarity index 57% rename from docs/build/html/api/com.r3corda.node.services.wallet/-cash-balance-as-metrics-observer/index.html rename to docs/build/html/api/com.r3corda.node.services.vault/-cash-balance-as-metrics-observer/index.html index 07887f0070..86f25fad1f 100644 --- a/docs/build/html/api/com.r3corda.node.services.wallet/-cash-balance-as-metrics-observer/index.html +++ b/docs/build/html/api/com.r3corda.node.services.vault/-cash-balance-as-metrics-observer/index.html @@ -4,11 +4,11 @@ -com.r3corda.node.services.wallet / CashBalanceAsMetricsObserver
+com.r3corda.node.services.vault / CashBalanceAsMetricsObserver

CashBalanceAsMetricsObserver

class CashBalanceAsMetricsObserver
-

This class observes the wallet and reflect current cash balances as exposed metrics in the monitoring service.

+

This class observes the vault and reflect current cash balances as exposed metrics in the monitoring service.



Constructors

@@ -18,7 +18,7 @@ <init> -CashBalanceAsMetricsObserver(serviceHubInternal: ServiceHubInternal)

This class observes the wallet and reflect current cash balances as exposed metrics in the monitoring service.

+CashBalanceAsMetricsObserver(serviceHubInternal: ServiceHubInternal)

This class observes the vault and reflect current cash balances as exposed metrics in the monitoring service.

diff --git a/docs/build/html/api/com.r3corda.node.services.wallet/-cash-balance-as-metrics-observer/service-hub-internal.html b/docs/build/html/api/com.r3corda.node.services.vault/-cash-balance-as-metrics-observer/service-hub-internal.html similarity index 63% rename from docs/build/html/api/com.r3corda.node.services.wallet/-cash-balance-as-metrics-observer/service-hub-internal.html rename to docs/build/html/api/com.r3corda.node.services.vault/-cash-balance-as-metrics-observer/service-hub-internal.html index 5215a5a06a..63b6c4c9f6 100644 --- a/docs/build/html/api/com.r3corda.node.services.wallet/-cash-balance-as-metrics-observer/service-hub-internal.html +++ b/docs/build/html/api/com.r3corda.node.services.vault/-cash-balance-as-metrics-observer/service-hub-internal.html @@ -4,10 +4,10 @@ -com.r3corda.node.services.wallet / CashBalanceAsMetricsObserver / serviceHubInternal
+com.r3corda.node.services.vault / CashBalanceAsMetricsObserver / serviceHubInternal

serviceHubInternal

- + val serviceHubInternal: ServiceHubInternal


diff --git a/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/-init-.html b/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/-init-.html new file mode 100644 index 0000000000..4fdc97deca --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/-init-.html @@ -0,0 +1,23 @@ + + +NodeVaultService.<init> - + + + +com.r3corda.node.services.vault / NodeVaultService / <init>
+
+

<init>

+NodeVaultService(services: ServiceHub)
+

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.

+

This class needs database transactions to be in-flight during method calls and init, and will throw exceptions if +this is not the case.

+

TODO: move query / filter criteria into the database query. +TODO: keep an audit trail with time stamps of previously unconsumed states "as of" a particular point in time. +TODO: have transaction storage do some caching.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/current-vault.html b/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/current-vault.html new file mode 100644 index 0000000000..0b8c652017 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/current-vault.html @@ -0,0 +1,22 @@ + + +NodeVaultService.currentVault - + + + +com.r3corda.node.services.vault / NodeVaultService / currentVault
+
+

currentVault

+ +val currentVault: Vault
+Overrides VaultService.currentVault
+

Returns a read-only snapshot of the vault at the time the call is made. Note that if you consume states or +keys in this vault, you must inform the vault service so it can update its internal state.

+

Getter
+

Returns a read-only snapshot of the vault at the time the call is made. Note that if you consume states or +keys in this vault, you must inform the vault service so it can update its internal state.

+

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/index.html b/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/index.html new file mode 100644 index 0000000000..3a122de311 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/index.html @@ -0,0 +1,143 @@ + + +NodeVaultService - + + + +com.r3corda.node.services.vault / NodeVaultService
+
+

NodeVaultService

+class NodeVaultService : SingletonSerializeAsToken, VaultService
+

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.

+

This class needs database transactions to be in-flight during method calls and init, and will throw exceptions if +this is not the case.

+

TODO: move query / filter criteria into the database query. +TODO: keep an audit trail with time stamps of previously unconsumed states "as of" a particular point in time. +TODO: have transaction storage do some caching.

+
+
+
+
+

Constructors

+ + + + + + + +
+<init> +NodeVaultService(services: ServiceHub)

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.

+
+

Properties

+ + + + + + + + + + + + + + + + + + + +
+currentVault +val currentVault: Vault

Returns a read-only snapshot of the vault at the time the call is made. Note that if you consume states or +keys in this vault, you must inform the vault service so it can update its internal state.

+
+linearHeads +val linearHeads: Map<UniqueIdentifier, StateAndRef<LinearState>>

Returns a snapshot of the heads of LinearStates.

+
+mutex +val mutex: ReentrantLock
+updates +val updates: <ERROR CLASS><Update>

Get a synchronous Observable of updates. When observations are pushed to the Observer, the vault will already +incorporate the update.

+
+

Functions

+ + + + + + + +
+notifyAll +fun notifyAll(txns: Iterable<WireTransaction>): Vault

Possibly update the vault by marking as spent states that these transactions consume, and adding any relevant +new states that they create. You should only insert transactions that have been successfully verified here

+
+

Inherited Functions

+ + + + + + + + + + + + + + + + + + + + + + + +
+linearHeadsOfType_ +open fun <T : LinearState> linearHeadsOfType_(stateType: Class<T>): Map<UniqueIdentifier, StateAndRef<T>>

Returns the linearHeads only when the type of the state would be considered an instanceof the given type.

+
+notify +open fun notify(tx: WireTransaction): Vault

Same as notifyAll but with a single transaction.

+
+statesForRefs +open fun statesForRefs(refs: List<StateRef>): Map<StateRef, TransactionState<*>?>
+toToken +open fun toToken(context: SerializeAsTokenContext): SerializationToken
+whenConsumed +open fun whenConsumed(ref: StateRef): <ERROR CLASS><Update>

Provide a Future for when a StateRef is consumed, which can be very useful in building tests.

+
+

Companion Object Properties

+ + + + + + + +
+log +val log: <ERROR CLASS>
+

Extension Functions

+ + + + + + + +
+linearHeadsOfType +fun <T : LinearState> VaultService.linearHeadsOfType(): <ERROR CLASS>
+ + diff --git a/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/linear-heads.html b/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/linear-heads.html new file mode 100644 index 0000000000..8a3a482691 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/linear-heads.html @@ -0,0 +1,23 @@ + + +NodeVaultService.linearHeads - + + + +com.r3corda.node.services.vault / NodeVaultService / linearHeads
+
+

linearHeads

+ +val linearHeads: Map<UniqueIdentifier, StateAndRef<LinearState>>
+Overrides VaultService.linearHeads
+

Returns a snapshot of the heads of LinearStates.

+

TODO: Represent this using an actual JDBCHashMap or look at vault design further.

+
+
+

Getter
+

Returns a snapshot of the heads of LinearStates.

+

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/log.html b/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/log.html new file mode 100644 index 0000000000..864705fbb1 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/log.html @@ -0,0 +1,15 @@ + + +NodeVaultService.log - + + + +com.r3corda.node.services.vault / NodeVaultService / log
+
+

log

+ +val log: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/mutex.html b/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/mutex.html new file mode 100644 index 0000000000..0665d799e1 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/mutex.html @@ -0,0 +1,15 @@ + + +NodeVaultService.mutex - + + + +com.r3corda.node.services.vault / NodeVaultService / mutex
+
+

mutex

+ +protected val mutex: ReentrantLock
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/notify-all.html b/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/notify-all.html new file mode 100644 index 0000000000..ecc0cc374f --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/notify-all.html @@ -0,0 +1,22 @@ + + +NodeVaultService.notifyAll - + + + +com.r3corda.node.services.vault / NodeVaultService / notifyAll
+
+

notifyAll

+ +fun notifyAll(txns: Iterable<WireTransaction>): Vault
+Overrides VaultService.notifyAll
+

Possibly update the vault by marking as spent states that these transactions consume, and adding any relevant +new states that they create. You should only insert transactions that have been successfully verified here

+

Returns the new vault that resulted from applying the transactions (note: it may quickly become out of date).

+

TODO: Consider if theres a good way to enforce the must-be-verified requirement in the type system.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/updates.html b/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/updates.html new file mode 100644 index 0000000000..ee54edc4ee --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.vault/-node-vault-service/updates.html @@ -0,0 +1,22 @@ + + +NodeVaultService.updates - + + + +com.r3corda.node.services.vault / NodeVaultService / updates
+
+

updates

+ +val updates: <ERROR CLASS><Update>
+Overrides VaultService.updates
+

Get a synchronous Observable of updates. When observations are pushed to the Observer, the vault will already +incorporate the update.

+

Getter
+

Get a synchronous Observable of updates. When observations are pushed to the Observer, the vault will already +incorporate the update.

+

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.services.vault/index.html b/docs/build/html/api/com.r3corda.node.services.vault/index.html new file mode 100644 index 0000000000..a6ff2078ec --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.services.vault/index.html @@ -0,0 +1,31 @@ + + +com.r3corda.node.services.vault - + + + +com.r3corda.node.services.vault
+
+

Package com.r3corda.node.services.vault

+

Types

+ + + + + + + + + + + +
+CashBalanceAsMetricsObserver +class CashBalanceAsMetricsObserver

This class observes the vault and reflect current cash balances as exposed metrics in the monitoring service.

+
+NodeVaultService +class NodeVaultService : SingletonSerializeAsToken, VaultService

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.

+
+ + diff --git a/docs/build/html/api/com.r3corda.node.services.wallet/-cash-balance-as-metrics-observer/-init-.html b/docs/build/html/api/com.r3corda.node.services.wallet/-cash-balance-as-metrics-observer/-init-.html deleted file mode 100644 index 9507902679..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.wallet/-cash-balance-as-metrics-observer/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - -CashBalanceAsMetricsObserver.<init> - - - - -com.r3corda.node.services.wallet / CashBalanceAsMetricsObserver / <init>
-
-

<init>

-CashBalanceAsMetricsObserver(serviceHubInternal: ServiceHubInternal)
-

This class observes the wallet and reflect current cash balances as exposed metrics in the monitoring service.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.node.services.wallet/-node-wallet-service/-init-.html b/docs/build/html/api/com.r3corda.node.services.wallet/-node-wallet-service/-init-.html deleted file mode 100644 index f2b3e378e1..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.wallet/-node-wallet-service/-init-.html +++ /dev/null @@ -1,21 +0,0 @@ - - -NodeWalletService.<init> - - - - -com.r3corda.node.services.wallet / NodeWalletService / <init>
-
-

<init>

-NodeWalletService(services: ServiceHub)
-

Currently, the node wallet service is a very simple RDBMS backed implementation. It will change significantly when -we add further functionality as the design for the wallet and wallet service matures.

-

TODO: move query / filter criteria into the database query. -TODO: keep an audit trail with time stamps of previously unconsumed states "as of" a particular point in time. -TODO: have transaction storage do some caching.

-
-
-
-
- - diff --git a/docs/build/html/api/com.r3corda.node.services.wallet/-node-wallet-service/index.html b/docs/build/html/api/com.r3corda.node.services.wallet/-node-wallet-service/index.html deleted file mode 100644 index 9742aa0867..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.wallet/-node-wallet-service/index.html +++ /dev/null @@ -1,109 +0,0 @@ - - -NodeWalletService - - - - -com.r3corda.node.services.wallet / NodeWalletService
-
-

NodeWalletService

-class NodeWalletService : InMemoryWalletService
-

Currently, the node wallet service is a very simple RDBMS backed implementation. It will change significantly when -we add further functionality as the design for the wallet and wallet service matures.

-

TODO: move query / filter criteria into the database query. -TODO: keep an audit trail with time stamps of previously unconsumed states "as of" a particular point in time. -TODO: have transaction storage do some caching.

-
-
-
-
-

Constructors

- - - - - - - -
-<init> -NodeWalletService(services: ServiceHub)

Currently, the node wallet service is a very simple RDBMS backed implementation. It will change significantly when -we add further functionality as the design for the wallet and wallet service matures.

-
-

Properties

- - - - - - - -
-log -val log: <ERROR CLASS>
-

Inherited Properties

- - - - - - - - - - - - - - - - - - - - - - - -
-currentWallet -open val currentWallet: Wallet

Returns a read-only snapshot of the wallet at the time the call is made. Note that if you consume states or -keys in this wallet, you must inform the wallet service so it can update its internal state.

-
-linearHeads -open val linearHeads: Map<UniqueIdentifier, StateAndRef<LinearState>>

Returns a snapshot of the heads of LinearStates.

-
-mutex -val mutex: ThreadBox<InnerState>
-services -val services: ServiceHub
-updates -open val updates: <ERROR CLASS><Update>

Get a synchronous Observable of updates. When observations are pushed to the Observer, the Wallet will already incorporate -the update.

-
-

Inherited Functions

- - - - - - - -
-notifyAll -open fun notifyAll(txns: Iterable<WireTransaction>): Wallet

Possibly update the wallet by marking as spent states that these transactions consume, and adding any relevant -new states that they create. You should only insert transactions that have been successfully verified here

-
-

Extension Functions

- - - - - - - -
-linearHeadsOfType -fun <T : LinearState> WalletService.linearHeadsOfType(): <ERROR CLASS>
- - diff --git a/docs/build/html/api/com.r3corda.node.services.wallet/-node-wallet-service/log.html b/docs/build/html/api/com.r3corda.node.services.wallet/-node-wallet-service/log.html deleted file mode 100644 index 81ba895039..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.wallet/-node-wallet-service/log.html +++ /dev/null @@ -1,16 +0,0 @@ - - -NodeWalletService.log - - - - -com.r3corda.node.services.wallet / NodeWalletService / log
-
-

log

- -protected val log: <ERROR CLASS>
-Overrides InMemoryWalletService.log
-
-
- - diff --git a/docs/build/html/api/com.r3corda.node.services.wallet/index.html b/docs/build/html/api/com.r3corda.node.services.wallet/index.html deleted file mode 100644 index 5cdb78a13d..0000000000 --- a/docs/build/html/api/com.r3corda.node.services.wallet/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - -com.r3corda.node.services.wallet - - - - -com.r3corda.node.services.wallet
-
-

Package com.r3corda.node.services.wallet

-

Types

- - - - - - - - - - - -
-CashBalanceAsMetricsObserver -class CashBalanceAsMetricsObserver

This class observes the wallet and reflect current cash balances as exposed metrics in the monitoring service.

-
-NodeWalletService -class NodeWalletService : InMemoryWalletService

Currently, the node wallet service is a very simple RDBMS backed implementation. It will change significantly when -we add further functionality as the design for the wallet and wallet service matures.

-
- - diff --git a/docs/build/html/api/com.r3corda.node.services/-fixing-session-initiation-handler/index.html b/docs/build/html/api/com.r3corda.node.services/-fixing-session-initiation-handler/index.html deleted file mode 100644 index 5a558837e1..0000000000 --- a/docs/build/html/api/com.r3corda.node.services/-fixing-session-initiation-handler/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - -FixingSessionInitiationHandler - - - - -com.r3corda.node.services / FixingSessionInitiationHandler
-
-

FixingSessionInitiationHandler

-object FixingSessionInitiationHandler
-

This is a temporary handler required for establishing random sessionIDs for the Fixer and Floater as part of -running scheduled fixings for the InterestRateSwap contract.

-

TODO: This will be replaced with the automatic sessionID / session setup work.

-
-
-
-
-

Functions

- - - - - - - -
-register -fun register(node: AbstractNode): Unit
- - diff --git a/docs/build/html/api/com.r3corda.node.services/-fixing-session-initiation-handler/register.html b/docs/build/html/api/com.r3corda.node.services/-fixing-session-initiation-handler/register.html deleted file mode 100644 index 380cbf494b..0000000000 --- a/docs/build/html/api/com.r3corda.node.services/-fixing-session-initiation-handler/register.html +++ /dev/null @@ -1,15 +0,0 @@ - - -FixingSessionInitiationHandler.register - - - - -com.r3corda.node.services / FixingSessionInitiationHandler / register
-
-

register

- -fun register(node: AbstractNode): Unit
-
-
- - diff --git a/docs/build/html/api/com.r3corda.node.services/-notary-change-service/-init-.html b/docs/build/html/api/com.r3corda.node.services/-notary-change-service/-init-.html deleted file mode 100644 index d284089409..0000000000 --- a/docs/build/html/api/com.r3corda.node.services/-notary-change-service/-init-.html +++ /dev/null @@ -1,16 +0,0 @@ - - -NotaryChangeService.<init> - - - - -com.r3corda.node.services / NotaryChangeService / <init>
-
-

<init>

-NotaryChangeService(net: MessagingService, smm: StateMachineManager, networkMapCache: NetworkMapCache)
-

A service that monitors the network for requests for changing the notary of a state, -and immediately runs the NotaryChangeProtocol if the auto-accept criteria are met.

-
-
- - diff --git a/docs/build/html/api/com.r3corda.node.services/-notary-change-service/index.html b/docs/build/html/api/com.r3corda.node.services/-notary-change-service/index.html deleted file mode 100644 index 50642f24b5..0000000000 --- a/docs/build/html/api/com.r3corda.node.services/-notary-change-service/index.html +++ /dev/null @@ -1,74 +0,0 @@ - - -NotaryChangeService - - - - -com.r3corda.node.services / NotaryChangeService
-
-

NotaryChangeService

-class NotaryChangeService : AbstractNodeService
-

A service that monitors the network for requests for changing the notary of a state, -and immediately runs the NotaryChangeProtocol if the auto-accept criteria are met.

-
-
-

Constructors

- - - - - - - -
-<init> -NotaryChangeService(net: MessagingService, smm: StateMachineManager, networkMapCache: NetworkMapCache)

A service that monitors the network for requests for changing the notary of a state, -and immediately runs the NotaryChangeProtocol if the auto-accept criteria are met.

-
-

Properties

- - - - - - - -
-smm -val smm: StateMachineManager
-

Inherited Properties

- - - - - - - - - - - -
-net -val net: MessagingService
-networkMapCache -val networkMapCache: NetworkMapCache
-

Inherited Functions

- - - - - - - -
-addMessageHandler -fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): Unit

Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of -common boilerplate code. Exceptions are caught and passed to the provided consumer. If you just want a simple -acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

-fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): Unit

Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of -common boilerplate code. Exceptions are propagated to the messaging layer. If you just want a simple -acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

-
- - diff --git a/docs/build/html/api/com.r3corda.node.services/-notary-change-service/smm.html b/docs/build/html/api/com.r3corda.node.services/-notary-change-service/smm.html deleted file mode 100644 index f3d3d68626..0000000000 --- a/docs/build/html/api/com.r3corda.node.services/-notary-change-service/smm.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NotaryChangeService.smm - - - - -com.r3corda.node.services / NotaryChangeService / smm
-
-

smm

- -val smm: StateMachineManager
-
-
- - diff --git a/docs/build/html/api/com.r3corda.node.services/-notary-change/-service/index.html b/docs/build/html/api/com.r3corda.node.services/-notary-change/-service/index.html index 135ce7f55c..ccd209d64e 100644 --- a/docs/build/html/api/com.r3corda.node.services/-notary-change/-service/index.html +++ b/docs/build/html/api/com.r3corda.node.services/-notary-change/-service/index.html @@ -25,17 +25,6 @@ and immediately runs the services - -val services: ServiceHubInternal - - -

Inherited Properties

@@ -43,13 +32,13 @@ and immediately runs the net +val net: MessagingServiceInternal +services +val services: ServiceHubInternal
-val net: MessagingService
-networkMapCache -val networkMapCache: NetworkMapCache
@@ -60,14 +49,22 @@ and immediately runs the addMessageHandler -fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): Unit

Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R, exceptionConsumer: (Message, Exception) -> Unit): MessageHandlerRegistration

Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of common boilerplate code. Exceptions are caught and passed to the provided consumer. If you just want a simple acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

-fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): Unit

Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of +fun <Q : ServiceRequestMessage, R : Any> addMessageHandler(topic: String, handler: (Q) -> R): MessageHandlerRegistration

Register a handler for a message topic. In comparison to using net.addMessageHandler() this manages a lot of common boilerplate code. Exceptions are propagated to the messaging layer. If you just want a simple acknowledgement response with no content, use com.r3corda.core.messaging.Ack.

+ + +addProtocolHandler + +fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>, onResultFuture: (<ERROR CLASS><R>, H) -> Unit): Unit

Register a handler to kick-off a protocol when a HandshakeMessage is received by the node. This performs the +necessary steps to enable communication between the two protocols, including calling ProtocolLogic.registerSession.

+fun <H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, protocolFactory: (H) -> ProtocolLogic<R>): Unit + diff --git a/docs/build/html/api/com.r3corda.node.services/-notary-change/-service/services.html b/docs/build/html/api/com.r3corda.node.services/-notary-change/-service/services.html deleted file mode 100644 index 70cb6bf61e..0000000000 --- a/docs/build/html/api/com.r3corda.node.services/-notary-change/-service/services.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NotaryChange.Service.services - - - - -com.r3corda.node.services / NotaryChange / Service / services
-
-

services

- -val services: ServiceHubInternal
-
-
- - diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/-init-.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/-init-.html new file mode 100644 index 0000000000..8c7992d27e --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/-init-.html @@ -0,0 +1,18 @@ + + +CertificateSigner.<init> - + + + +com.r3corda.node.utilities.certsigning / CertificateSigner / <init>
+
+

<init>

+CertificateSigner(config: NodeConfiguration, certService: CertificateSigningService)
+

This check the certificatePath for certificates required to connect to the Corda network. +If the certificates are not found, a PKCS10CertificationRequest will be submitted to Corda network permissioning server using CertificateSigningService. +This process will enter a slow polling loop until the request has been approved, and then +the certificate chain will be downloaded and stored in KeyStore reside in certificatePath.

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/build-key-store.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/build-key-store.html new file mode 100644 index 0000000000..8014486f65 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/build-key-store.html @@ -0,0 +1,15 @@ + + +CertificateSigner.buildKeyStore - + + + +com.r3corda.node.utilities.certsigning / CertificateSigner / buildKeyStore
+
+

buildKeyStore

+ +fun buildKeyStore(): Unit
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/cert-service.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/cert-service.html new file mode 100644 index 0000000000..3e67630647 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/cert-service.html @@ -0,0 +1,15 @@ + + +CertificateSigner.certService - + + + +com.r3corda.node.utilities.certsigning / CertificateSigner / certService
+
+

certService

+ +val certService: CertificateSigningService
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/config.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/config.html similarity index 56% rename from docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/config.html rename to docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/config.html index 770a80a333..f648180f83 100644 --- a/docs/build/html/api/com.r3corda.node.services.messaging/-artemis-messaging-service/config.html +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/config.html @@ -1,13 +1,13 @@ -ArtemisMessagingService.config - +CertificateSigner.config - -com.r3corda.node.services.messaging / ArtemisMessagingService / config
+com.r3corda.node.utilities.certsigning / CertificateSigner / config

config

- + val config: NodeConfiguration


diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/index.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/index.html new file mode 100644 index 0000000000..7925380f76 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/index.html @@ -0,0 +1,78 @@ + + +CertificateSigner - + + + +com.r3corda.node.utilities.certsigning / CertificateSigner
+
+

CertificateSigner

+class CertificateSigner
+

This check the certificatePath for certificates required to connect to the Corda network. +If the certificates are not found, a PKCS10CertificationRequest will be submitted to Corda network permissioning server using CertificateSigningService. +This process will enter a slow polling loop until the request has been approved, and then +the certificate chain will be downloaded and stored in KeyStore reside in certificatePath.

+
+
+

Constructors

+ + + + + + + +
+<init> +CertificateSigner(config: NodeConfiguration, certService: CertificateSigningService)

This check the certificatePath for certificates required to connect to the Corda network. +If the certificates are not found, a PKCS10CertificationRequest will be submitted to Corda network permissioning server using CertificateSigningService. +This process will enter a slow polling loop until the request has been approved, and then +the certificate chain will be downloaded and stored in KeyStore reside in certificatePath.

+
+

Properties

+ + + + + + + + + + + +
+certService +val certService: CertificateSigningService
+config +val config: NodeConfiguration
+

Functions

+ + + + + + + +
+buildKeyStore +fun buildKeyStore(): Unit
+

Companion Object Properties

+ + + + + + + + + + + +
+log +val log: <ERROR CLASS>
+pollInterval +val pollInterval: Duration
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/log.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/log.html new file mode 100644 index 0000000000..26ded4b960 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/log.html @@ -0,0 +1,15 @@ + + +CertificateSigner.log - + + + +com.r3corda.node.utilities.certsigning / CertificateSigner / log
+
+

log

+ +val log: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/poll-interval.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/poll-interval.html new file mode 100644 index 0000000000..427f428220 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signer/poll-interval.html @@ -0,0 +1,15 @@ + + +CertificateSigner.pollInterval - + + + +com.r3corda.node.utilities.certsigning / CertificateSigner / pollInterval
+
+

pollInterval

+ +val pollInterval: Duration
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signing-service/index.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signing-service/index.html new file mode 100644 index 0000000000..179420545f --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signing-service/index.html @@ -0,0 +1,44 @@ + + +CertificateSigningService - + + + +com.r3corda.node.utilities.certsigning / CertificateSigningService
+
+

CertificateSigningService

+interface CertificateSigningService
+
+
+

Functions

+ + + + + + + + + + + +
+retrieveCertificates +abstract fun retrieveCertificates(requestId: String): Array<Certificate>?

Poll Certificate Signing Server for the request and returns a chain of certificates if request has been approved, null otherwise.

+
+submitRequest +abstract fun submitRequest(request: <ERROR CLASS>): String

Submits a CSR to the signing service and returns an opaque request ID.

+
+

Inheritors

+ + + + + + + +
+HTTPCertificateSigningService +class HTTPCertificateSigningService : CertificateSigningService
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signing-service/retrieve-certificates.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signing-service/retrieve-certificates.html new file mode 100644 index 0000000000..f9bf66d1a2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signing-service/retrieve-certificates.html @@ -0,0 +1,16 @@ + + +CertificateSigningService.retrieveCertificates - + + + +com.r3corda.node.utilities.certsigning / CertificateSigningService / retrieveCertificates
+
+

retrieveCertificates

+ +abstract fun retrieveCertificates(requestId: String): Array<Certificate>?
+

Poll Certificate Signing Server for the request and returns a chain of certificates if request has been approved, null otherwise.

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signing-service/submit-request.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signing-service/submit-request.html new file mode 100644 index 0000000000..a4cd848ff0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-certificate-signing-service/submit-request.html @@ -0,0 +1,16 @@ + + +CertificateSigningService.submitRequest - + + + +com.r3corda.node.utilities.certsigning / CertificateSigningService / submitRequest
+
+

submitRequest

+ +abstract fun submitRequest(request: <ERROR CLASS>): String
+

Submits a CSR to the signing service and returns an opaque request ID.

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/-init-.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/-init-.html new file mode 100644 index 0000000000..ab801965af --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/-init-.html @@ -0,0 +1,14 @@ + + +HTTPCertificateSigningService.<init> - + + + +com.r3corda.node.utilities.certsigning / HTTPCertificateSigningService / <init>
+
+

<init>

+HTTPCertificateSigningService(server: <ERROR CLASS>)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/client-version.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/client-version.html new file mode 100644 index 0000000000..070e94806d --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/client-version.html @@ -0,0 +1,15 @@ + + +HTTPCertificateSigningService.clientVersion - + + + +com.r3corda.node.utilities.certsigning / HTTPCertificateSigningService / clientVersion
+
+

clientVersion

+ +val clientVersion: String
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/index.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/index.html new file mode 100644 index 0000000000..063879fb58 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/index.html @@ -0,0 +1,66 @@ + + +HTTPCertificateSigningService - + + + +com.r3corda.node.utilities.certsigning / HTTPCertificateSigningService
+
+

HTTPCertificateSigningService

+class HTTPCertificateSigningService : CertificateSigningService
+
+
+

Constructors

+ + + + + + + +
+<init> +HTTPCertificateSigningService(server: <ERROR CLASS>)
+

Properties

+ + + + + + + +
+server +val server: <ERROR CLASS>
+

Functions

+ + + + + + + + + + + +
+retrieveCertificates +fun retrieveCertificates(requestId: String): Array<Certificate>?

Poll Certificate Signing Server for the request and returns a chain of certificates if request has been approved, null otherwise.

+
+submitRequest +fun submitRequest(request: <ERROR CLASS>): String

Submits a CSR to the signing service and returns an opaque request ID.

+
+

Companion Object Properties

+ + + + + + + +
+clientVersion +val clientVersion: String
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/retrieve-certificates.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/retrieve-certificates.html new file mode 100644 index 0000000000..dac1c1280b --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/retrieve-certificates.html @@ -0,0 +1,17 @@ + + +HTTPCertificateSigningService.retrieveCertificates - + + + +com.r3corda.node.utilities.certsigning / HTTPCertificateSigningService / retrieveCertificates
+
+

retrieveCertificates

+ +fun retrieveCertificates(requestId: String): Array<Certificate>?
+Overrides CertificateSigningService.retrieveCertificates
+

Poll Certificate Signing Server for the request and returns a chain of certificates if request has been approved, null otherwise.

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/server.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/server.html new file mode 100644 index 0000000000..cb3815675b --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/server.html @@ -0,0 +1,15 @@ + + +HTTPCertificateSigningService.server - + + + +com.r3corda.node.utilities.certsigning / HTTPCertificateSigningService / server
+
+

server

+ +val server: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/submit-request.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/submit-request.html new file mode 100644 index 0000000000..547cfc64e0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-h-t-t-p-certificate-signing-service/submit-request.html @@ -0,0 +1,17 @@ + + +HTTPCertificateSigningService.submitRequest - + + + +com.r3corda.node.utilities.certsigning / HTTPCertificateSigningService / submitRequest
+
+

submitRequest

+ +fun submitRequest(request: <ERROR CLASS>): String
+Overrides CertificateSigningService.submitRequest
+

Submits a CSR to the signing service and returns an opaque request ID.

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-params-spec/base-directory-arg.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-params-spec/base-directory-arg.html new file mode 100644 index 0000000000..d4ac60aafe --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-params-spec/base-directory-arg.html @@ -0,0 +1,15 @@ + + +ParamsSpec.baseDirectoryArg - + + + +com.r3corda.node.utilities.certsigning / ParamsSpec / baseDirectoryArg
+
+

baseDirectoryArg

+ +val baseDirectoryArg: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-params-spec/config-file-arg.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-params-spec/config-file-arg.html new file mode 100644 index 0000000000..6937bd88f2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-params-spec/config-file-arg.html @@ -0,0 +1,15 @@ + + +ParamsSpec.configFileArg - + + + +com.r3corda.node.utilities.certsigning / ParamsSpec / configFileArg
+
+

configFileArg

+ +val configFileArg: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-params-spec/index.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-params-spec/index.html new file mode 100644 index 0000000000..58b3f1953c --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-params-spec/index.html @@ -0,0 +1,37 @@ + + +ParamsSpec - + + + +com.r3corda.node.utilities.certsigning / ParamsSpec
+
+

ParamsSpec

+object ParamsSpec
+
+
+

Properties

+ + + + + + + + + + + + + + + +
+baseDirectoryArg +val baseDirectoryArg: <ERROR CLASS>
+configFileArg +val configFileArg: <ERROR CLASS>
+parser +val parser: <ERROR CLASS>
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/-params-spec/parser.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-params-spec/parser.html new file mode 100644 index 0000000000..04c6064deb --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/-params-spec/parser.html @@ -0,0 +1,15 @@ + + +ParamsSpec.parser - + + + +com.r3corda.node.utilities.certsigning / ParamsSpec / parser
+
+

parser

+ +val parser: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/index.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/index.html new file mode 100644 index 0000000000..47b59e4fff --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/index.html @@ -0,0 +1,55 @@ + + +com.r3corda.node.utilities.certsigning - + + + +com.r3corda.node.utilities.certsigning
+
+

Package com.r3corda.node.utilities.certsigning

+

Types

+ + + + + + + + + + + + + + + + + + + +
+CertificateSigner +class CertificateSigner

This check the certificatePath for certificates required to connect to the Corda network. +If the certificates are not found, a PKCS10CertificationRequest will be submitted to Corda network permissioning server using CertificateSigningService. +This process will enter a slow polling loop until the request has been approved, and then +the certificate chain will be downloaded and stored in KeyStore reside in certificatePath.

+
+CertificateSigningService +interface CertificateSigningService
+HTTPCertificateSigningService +class HTTPCertificateSigningService : CertificateSigningService
+ParamsSpec +object ParamsSpec
+

Functions

+ + + + + + + +
+main +fun main(args: Array<String>): Unit
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities.certsigning/main.html b/docs/build/html/api/com.r3corda.node.utilities.certsigning/main.html new file mode 100644 index 0000000000..d3812c8fef --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities.certsigning/main.html @@ -0,0 +1,15 @@ + + +main - + + + +com.r3corda.node.utilities.certsigning / main
+
+

main

+ +fun main(args: Array<String>): Unit
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/-init-.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/-init-.html new file mode 100644 index 0000000000..662a2890f0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/-init-.html @@ -0,0 +1,38 @@ + + +AbstractJDBCHashMap.<init> - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / <init>
+
+

<init>

+AbstractJDBCHashMap(table: T, loadOnInit: Boolean = false)
+

A base class for a JDBC table backed hash map that iterates in insertion order by using +an ever increasing sequence number on entries. Iterators supports remove() but entries are not really mutable and +do not support setValue() method from MutableMap.MutableEntry.

+

You should only use keys that have overridden Object.hashCode and that have a good hash code distribution. Beware +changing the hashCode() implementation once objects have been persisted. A process to re-hash the entries persisted +would be necessary if you do this.

+

Subclasses must provide their own mapping to and from keys/values and the database table columns, but there are +inherited columns that all tables must provide to support iteration order and hashing.

+

The map operates in one of two modes.

+
  1. loadOnInit=true where the entire table is materialised in the JVM and only writes need to perform database access.

    +
  2. loadOnInit=false where all entries with the same key hash code are materialised in the JVM on demand when accessed +via any method other than via keys/values/entries properties, and thus the whole map is not materialised.

    +

All operations require a databaseTransaction to be started.

+

The keys/values/entries collections are really designed just for iterating and other uses might turn out to be +costly in terms of performance. Beware when loadOnInit=true, the iterator first sorts the entries which could be +costly too.

+

This class is not thread safe.

+

TODO: buckets grows forever. Support some form of LRU cache option (e.g. use LinkedHashMap.removeEldestEntry feature). +TODO: consider caching size once calculated for the first time. +TODO: buckets just use a list and so are vulnerable to poor hash code implementations with collisions. +TODO: if iterators are used extensively when loadOnInit=true, consider maintaining a collection of keys in iteration order to avoid sorting each time. +TODO: revisit whether we need the loadOnInit==true functionality and remove if not.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/add-key-to-insert.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/add-key-to-insert.html new file mode 100644 index 0000000000..ef9a5adff4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/add-key-to-insert.html @@ -0,0 +1,21 @@ + + +AbstractJDBCHashMap.addKeyToInsert - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / addKeyToInsert
+
+

addKeyToInsert

+ +protected abstract fun addKeyToInsert(it: <ERROR CLASS>, entry: Entry<K, V>, finalizables: MutableList<() -> Unit>): Unit
+

Implementation should marshall the key to the insert statement.

+

If some cleanup is required after the insert statement is executed, such as closing a Blob, then add a closure +to the finalizables to do so.

+

See example implementations in JDBCHashMap.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/add-value-to-insert.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/add-value-to-insert.html new file mode 100644 index 0000000000..91f2a6b30c --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/add-value-to-insert.html @@ -0,0 +1,21 @@ + + +AbstractJDBCHashMap.addValueToInsert - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / addValueToInsert
+
+

addValueToInsert

+ +protected abstract fun addValueToInsert(it: <ERROR CLASS>, entry: Entry<K, V>, finalizables: MutableList<() -> Unit>): Unit
+

Implementation should marshall the value to the insert statement.

+

If some cleanup is required after the insert statement is executed, such as closing a Blob, then add a closure +to the finalizables to do so.

+

See example implementations in JDBCHashMap.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/clear.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/clear.html new file mode 100644 index 0000000000..33e0ba7b48 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/clear.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashMap.clear - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / clear
+
+

clear

+ +open fun clear(): Unit
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/contains-key.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/contains-key.html new file mode 100644 index 0000000000..868e3babdb --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/contains-key.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashMap.containsKey - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / containsKey
+
+

containsKey

+ +open fun containsKey(key: K): Boolean
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/contains-value.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/contains-value.html new file mode 100644 index 0000000000..84e5e8a7a3 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/contains-value.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashMap.containsValue - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / containsValue
+
+

containsValue

+ +open fun containsValue(value: V): Boolean
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/entries.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/entries.html new file mode 100644 index 0000000000..835ef04e63 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/entries.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashMap.entries - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / entries
+
+

entries

+ +open val entries: MutableSet<MutableEntry<K, V>>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/get.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/get.html new file mode 100644 index 0000000000..dc11194327 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/get.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashMap.get - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / get
+
+

get

+ +open fun get(key: K): V?
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/index.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/index.html new file mode 100644 index 0000000000..9692a0a659 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/index.html @@ -0,0 +1,192 @@ + + +AbstractJDBCHashMap - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap
+
+

AbstractJDBCHashMap

+abstract class AbstractJDBCHashMap<K : Any, V : Any, T : JDBCHashedTable> : MutableMap<K, V>, AbstractMap<K, V>
+

A base class for a JDBC table backed hash map that iterates in insertion order by using +an ever increasing sequence number on entries. Iterators supports remove() but entries are not really mutable and +do not support setValue() method from MutableMap.MutableEntry.

+

You should only use keys that have overridden Object.hashCode and that have a good hash code distribution. Beware +changing the hashCode() implementation once objects have been persisted. A process to re-hash the entries persisted +would be necessary if you do this.

+

Subclasses must provide their own mapping to and from keys/values and the database table columns, but there are +inherited columns that all tables must provide to support iteration order and hashing.

+

The map operates in one of two modes.

+
  1. loadOnInit=true where the entire table is materialised in the JVM and only writes need to perform database access.

    +
  2. loadOnInit=false where all entries with the same key hash code are materialised in the JVM on demand when accessed +via any method other than via keys/values/entries properties, and thus the whole map is not materialised.

    +

All operations require a databaseTransaction to be started.

+

The keys/values/entries collections are really designed just for iterating and other uses might turn out to be +costly in terms of performance. Beware when loadOnInit=true, the iterator first sorts the entries which could be +costly too.

+

This class is not thread safe.

+

TODO: buckets grows forever. Support some form of LRU cache option (e.g. use LinkedHashMap.removeEldestEntry feature). +TODO: consider caching size once calculated for the first time. +TODO: buckets just use a list and so are vulnerable to poor hash code implementations with collisions. +TODO: if iterators are used extensively when loadOnInit=true, consider maintaining a collection of keys in iteration order to avoid sorting each time. +TODO: revisit whether we need the loadOnInit==true functionality and remove if not.

+
+
+
+
+

Constructors

+ + + + + + + +
+<init> +AbstractJDBCHashMap(table: T, loadOnInit: Boolean = false)

A base class for a JDBC table backed hash map that iterates in insertion order by using +an ever increasing sequence number on entries. Iterators supports remove() but entries are not really mutable and +do not support setValue() method from MutableMap.MutableEntry.

+
+

Properties

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+entries +open val entries: MutableSet<MutableEntry<K, V>>
+keys +open val keys: MutableSet<K>
+loadOnInit +val loadOnInit: Boolean
+size +open val size: Int
+table +val table: T
+values +open val values: MutableCollection<V>
+

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+addKeyToInsert +abstract fun addKeyToInsert(it: <ERROR CLASS>, entry: Entry<K, V>, finalizables: MutableList<() -> Unit>): Unit

Implementation should marshall the key to the insert statement.

+
+addValueToInsert +abstract fun addValueToInsert(it: <ERROR CLASS>, entry: Entry<K, V>, finalizables: MutableList<() -> Unit>): Unit

Implementation should marshall the value to the insert statement.

+
+clear +open fun clear(): Unit
+containsKey +open fun containsKey(key: K): Boolean
+containsValue +open fun containsValue(value: V): Boolean
+get +open fun get(key: K): V?
+isEmpty +open fun isEmpty(): Boolean
+keyFromRow +abstract fun keyFromRow(it: <ERROR CLASS>): K

Implementation should return the key object marshalled from the database table row.

+
+put +open fun put(key: K, value: V): V?
+remove +open fun remove(key: K): V?
+valueFromRow +abstract fun valueFromRow(it: <ERROR CLASS>): V

Implementation should return the value object marshalled from the database table row.

+
+

Companion Object Properties

+ + + + + + + +
+log +val log: <ERROR CLASS>
+

Inheritors

+ + + + + + + +
+JDBCHashMap +class JDBCHashMap<K : Any, V : Any> : AbstractJDBCHashMap<K, V, BlobMapTable>

A convenient JDBC table backed hash map with iteration order based on insertion order. +See AbstractJDBCHashMap for further implementation details.

+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/is-empty.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/is-empty.html new file mode 100644 index 0000000000..023ac38298 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/is-empty.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashMap.isEmpty - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / isEmpty
+
+

isEmpty

+ +open fun isEmpty(): Boolean
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/key-from-row.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/key-from-row.html new file mode 100644 index 0000000000..0763c01921 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/key-from-row.html @@ -0,0 +1,19 @@ + + +AbstractJDBCHashMap.keyFromRow - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / keyFromRow
+
+

keyFromRow

+ +protected abstract fun keyFromRow(it: <ERROR CLASS>): K
+

Implementation should return the key object marshalled from the database table row.

+

See example implementations in JDBCHashMap.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/keys.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/keys.html new file mode 100644 index 0000000000..642c9b963f --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/keys.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashMap.keys - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / keys
+
+

keys

+ +open val keys: MutableSet<K>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/load-on-init.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/load-on-init.html new file mode 100644 index 0000000000..7baf3e8a37 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/load-on-init.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashMap.loadOnInit - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / loadOnInit
+
+

loadOnInit

+ +val loadOnInit: Boolean
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/log.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/log.html new file mode 100644 index 0000000000..ffefd41281 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/log.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashMap.log - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / log
+
+

log

+ +protected val log: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/put.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/put.html new file mode 100644 index 0000000000..b7fe6a387d --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/put.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashMap.put - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / put
+
+

put

+ +open fun put(key: K, value: V): V?
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/remove.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/remove.html new file mode 100644 index 0000000000..c100350077 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/remove.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashMap.remove - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / remove
+
+

remove

+ +open fun remove(key: K): V?
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/size.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/size.html new file mode 100644 index 0000000000..f4e6bda63c --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/size.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashMap.size - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / size
+
+

size

+ +open val size: Int
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/table.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/table.html new file mode 100644 index 0000000000..1d56775e78 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/table.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashMap.table - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / table
+
+

table

+ +val table: T
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/value-from-row.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/value-from-row.html new file mode 100644 index 0000000000..d99dc6e0ad --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/value-from-row.html @@ -0,0 +1,19 @@ + + +AbstractJDBCHashMap.valueFromRow - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / valueFromRow
+
+

valueFromRow

+ +protected abstract fun valueFromRow(it: <ERROR CLASS>): V
+

Implementation should return the value object marshalled from the database table row.

+

See example implementations in JDBCHashMap.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/values.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/values.html new file mode 100644 index 0000000000..5f9a07652c --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-map/values.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashMap.values - + + + +com.r3corda.node.utilities / AbstractJDBCHashMap / values
+
+

values

+ +open val values: MutableCollection<V>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/-init-.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/-init-.html new file mode 100644 index 0000000000..4a6eafece4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/-init-.html @@ -0,0 +1,19 @@ + + +AbstractJDBCHashSet.<init> - + + + +com.r3corda.node.utilities / AbstractJDBCHashSet / <init>
+
+

<init>

+AbstractJDBCHashSet(table: T, loadOnInit: Boolean = false)
+

Base class for JDBC backed hash set that delegates to a JDBC backed hash map where the values are all +Unit and not actually persisted. Iteration order is order of insertion. Iterators can remove().

+

See AbstractJDBCHashMap for implementation details.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/add-element-to-insert.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/add-element-to-insert.html new file mode 100644 index 0000000000..c2d0a45cdf --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/add-element-to-insert.html @@ -0,0 +1,21 @@ + + +AbstractJDBCHashSet.addElementToInsert - + + + +com.r3corda.node.utilities / AbstractJDBCHashSet / addElementToInsert
+
+

addElementToInsert

+ +protected abstract fun addElementToInsert(it: <ERROR CLASS>, entry: K, finalizables: MutableList<() -> Unit>): Unit
+

Implementation should marshall the element to the insert statement.

+

If some cleanup is required after the insert statement is executed, such as closing a Blob, then add a closure +to the finalizables to do so.

+

See example implementations in JDBCHashSet.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/add.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/add.html new file mode 100644 index 0000000000..35834b85dd --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/add.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashSet.add - + + + +com.r3corda.node.utilities / AbstractJDBCHashSet / add
+
+

add

+ +open fun add(element: K): Boolean
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/clear.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/clear.html new file mode 100644 index 0000000000..3a34147744 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/clear.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashSet.clear - + + + +com.r3corda.node.utilities / AbstractJDBCHashSet / clear
+
+

clear

+ +open fun clear(): Unit
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/contains.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/contains.html new file mode 100644 index 0000000000..38888d2c7f --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/contains.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashSet.contains - + + + +com.r3corda.node.utilities / AbstractJDBCHashSet / contains
+
+

contains

+ +open fun contains(element: K): Boolean
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/element-from-row.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/element-from-row.html new file mode 100644 index 0000000000..bfc66e24d5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/element-from-row.html @@ -0,0 +1,19 @@ + + +AbstractJDBCHashSet.elementFromRow - + + + +com.r3corda.node.utilities / AbstractJDBCHashSet / elementFromRow
+
+

elementFromRow

+ +protected abstract fun elementFromRow(it: <ERROR CLASS>): K
+

Implementation should return the element object marshalled from the database table row.

+

See example implementations in JDBCHashSet.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/index.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/index.html new file mode 100644 index 0000000000..25c940a8a1 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/index.html @@ -0,0 +1,137 @@ + + +AbstractJDBCHashSet - + + + +com.r3corda.node.utilities / AbstractJDBCHashSet
+
+

AbstractJDBCHashSet

+abstract class AbstractJDBCHashSet<K : Any, T : JDBCHashedTable> : MutableSet<K>, AbstractSet<K>
+

Base class for JDBC backed hash set that delegates to a JDBC backed hash map where the values are all +Unit and not actually persisted. Iteration order is order of insertion. Iterators can remove().

+

See AbstractJDBCHashMap for implementation details.

+
+
+
+
+

Constructors

+ + + + + + + +
+<init> +AbstractJDBCHashSet(table: T, loadOnInit: Boolean = false)

Base class for JDBC backed hash set that delegates to a JDBC backed hash map where the values are all +Unit and not actually persisted. Iteration order is order of insertion. Iterators can remove().

+
+

Properties

+ + + + + + + + + + + + + + + +
+innerMap +val innerMap: AbstractJDBCHashMap<K, Unit, T>
+size +open val size: Int
+table +val table: T
+

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+add +open fun add(element: K): Boolean
+addElementToInsert +abstract fun addElementToInsert(it: <ERROR CLASS>, entry: K, finalizables: MutableList<() -> Unit>): Unit

Implementation should marshall the element to the insert statement.

+
+clear +open fun clear(): Unit
+contains +open fun contains(element: K): Boolean
+elementFromRow +abstract fun elementFromRow(it: <ERROR CLASS>): K

Implementation should return the element object marshalled from the database table row.

+
+isEmpty +open fun isEmpty(): Boolean
+iterator +open fun iterator(): MutableIterator<K>
+remove +open fun remove(element: K): Boolean
+

Extension Functions

+ + + + + + + +
+noneOrSingle +fun <T> Iterable<T>.noneOrSingle(predicate: (T) -> Boolean): T?

Returns the single element matching the given predicate, or null if element was not found, +or throws if more than one element was found.

+fun <T> Iterable<T>.noneOrSingle(): T?

Returns single element, or null if element was not found, or throws if more than one element was found.

+
+

Inheritors

+ + + + + + + +
+JDBCHashSet +class JDBCHashSet<K : Any> : AbstractJDBCHashSet<K, BlobSetTable>

A convenient JDBC table backed hash set with iteration order based on insertion order. +See AbstractJDBCHashSet and AbstractJDBCHashMap for further implementation details.

+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/inner-map.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/inner-map.html new file mode 100644 index 0000000000..1e78b1edd0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/inner-map.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashSet.innerMap - + + + +com.r3corda.node.utilities / AbstractJDBCHashSet / innerMap
+
+

innerMap

+ +protected val innerMap: AbstractJDBCHashMap<K, Unit, T>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/is-empty.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/is-empty.html new file mode 100644 index 0000000000..6073071792 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/is-empty.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashSet.isEmpty - + + + +com.r3corda.node.utilities / AbstractJDBCHashSet / isEmpty
+
+

isEmpty

+ +open fun isEmpty(): Boolean
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/iterator.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/iterator.html new file mode 100644 index 0000000000..3316ed0e09 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/iterator.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashSet.iterator - + + + +com.r3corda.node.utilities / AbstractJDBCHashSet / iterator
+
+

iterator

+ +open fun iterator(): MutableIterator<K>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/remove.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/remove.html new file mode 100644 index 0000000000..513eddc520 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/remove.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashSet.remove - + + + +com.r3corda.node.utilities / AbstractJDBCHashSet / remove
+
+

remove

+ +open fun remove(element: K): Boolean
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/size.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/size.html new file mode 100644 index 0000000000..1078c3441f --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/size.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashSet.size - + + + +com.r3corda.node.utilities / AbstractJDBCHashSet / size
+
+

size

+ +open val size: Int
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/table.html b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/table.html new file mode 100644 index 0000000000..307a484f82 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-abstract-j-d-b-c-hash-set/table.html @@ -0,0 +1,15 @@ + + +AbstractJDBCHashSet.table - + + + +com.r3corda.node.utilities / AbstractJDBCHashSet / table
+
+

table

+ +protected val table: T
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-blob-map-table/-init-.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-blob-map-table/-init-.html new file mode 100644 index 0000000000..cf4105e76e --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-blob-map-table/-init-.html @@ -0,0 +1,14 @@ + + +JDBCHashMap.BlobMapTable.<init> - + + + +com.r3corda.node.utilities / JDBCHashMap / BlobMapTable / <init>
+
+

<init>

+BlobMapTable(tableName: String)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-blob-map-table/index.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-blob-map-table/index.html new file mode 100644 index 0000000000..cd8b7a1b14 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-blob-map-table/index.html @@ -0,0 +1,59 @@ + + +JDBCHashMap.BlobMapTable - + + + +com.r3corda.node.utilities / JDBCHashMap / BlobMapTable
+
+

BlobMapTable

+class BlobMapTable : JDBCHashedTable
+
+
+

Constructors

+ + + + + + + +
+<init> +BlobMapTable(tableName: String)
+

Properties

+ + + + + + + + + + + +
+key +val key: <ERROR CLASS>
+value +val value: <ERROR CLASS>
+

Inherited Properties

+ + + + + + + + + + + +
+keyHash +val keyHash: <ERROR CLASS>
+seqNo +val seqNo: <ERROR CLASS>
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-blob-map-table/key.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-blob-map-table/key.html new file mode 100644 index 0000000000..e482855a52 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-blob-map-table/key.html @@ -0,0 +1,15 @@ + + +JDBCHashMap.BlobMapTable.key - + + + +com.r3corda.node.utilities / JDBCHashMap / BlobMapTable / key
+
+

key

+ +val key: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-blob-map-table/value.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-blob-map-table/value.html new file mode 100644 index 0000000000..11285ffa16 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-blob-map-table/value.html @@ -0,0 +1,15 @@ + + +JDBCHashMap.BlobMapTable.value - + + + +com.r3corda.node.utilities / JDBCHashMap / BlobMapTable / value
+
+

value

+ +val value: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-init-.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-init-.html new file mode 100644 index 0000000000..d95559974d --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/-init-.html @@ -0,0 +1,21 @@ + + +JDBCHashMap.<init> - + + + +com.r3corda.node.utilities / JDBCHashMap / <init>
+
+

<init>

+JDBCHashMap(tableName: String, loadOnInit: Boolean = false)
+

A convenient JDBC table backed hash map with iteration order based on insertion order. +See AbstractJDBCHashMap for further implementation details.

+

In this subclass, keys and values are represented by Blobs of Kryo serialized forms of the key and value objects. +If you can extend AbstractJDBCHashMap and implement less Kryo dependent key and/or value mappings then that is +likely preferrable.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/add-key-to-insert.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/add-key-to-insert.html new file mode 100644 index 0000000000..3e86360e0e --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/add-key-to-insert.html @@ -0,0 +1,21 @@ + + +JDBCHashMap.addKeyToInsert - + + + +com.r3corda.node.utilities / JDBCHashMap / addKeyToInsert
+
+

addKeyToInsert

+ +protected fun addKeyToInsert(it: <ERROR CLASS>, entry: Entry<K, V>, finalizables: MutableList<() -> Unit>): Unit
+

Implementation should marshall the key to the insert statement.

+

If some cleanup is required after the insert statement is executed, such as closing a Blob, then add a closure +to the finalizables to do so.

+

See example implementations in JDBCHashMap.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/add-value-to-insert.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/add-value-to-insert.html new file mode 100644 index 0000000000..d696518d4f --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/add-value-to-insert.html @@ -0,0 +1,21 @@ + + +JDBCHashMap.addValueToInsert - + + + +com.r3corda.node.utilities / JDBCHashMap / addValueToInsert
+
+

addValueToInsert

+ +protected fun addValueToInsert(it: <ERROR CLASS>, entry: Entry<K, V>, finalizables: MutableList<() -> Unit>): Unit
+

Implementation should marshall the value to the insert statement.

+

If some cleanup is required after the insert statement is executed, such as closing a Blob, then add a closure +to the finalizables to do so.

+

See example implementations in JDBCHashMap.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/index.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/index.html new file mode 100644 index 0000000000..7b6f3b1a0b --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/index.html @@ -0,0 +1,136 @@ + + +JDBCHashMap - + + + +com.r3corda.node.utilities / JDBCHashMap
+
+

JDBCHashMap

+class JDBCHashMap<K : Any, V : Any> : AbstractJDBCHashMap<K, V, BlobMapTable>
+

A convenient JDBC table backed hash map with iteration order based on insertion order. +See AbstractJDBCHashMap for further implementation details.

+

In this subclass, keys and values are represented by Blobs of Kryo serialized forms of the key and value objects. +If you can extend AbstractJDBCHashMap and implement less Kryo dependent key and/or value mappings then that is +likely preferrable.

+
+
+
+
+

Types

+ + + + + + + +
+BlobMapTable +class BlobMapTable : JDBCHashedTable
+

Constructors

+ + + + + + + +
+<init> +JDBCHashMap(tableName: String, loadOnInit: Boolean = false)

A convenient JDBC table backed hash map with iteration order based on insertion order. +See AbstractJDBCHashMap for further implementation details.

+
+

Inherited Properties

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+entries +open val entries: MutableSet<MutableEntry<K, V>>
+keys +open val keys: MutableSet<K>
+loadOnInit +val loadOnInit: Boolean
+size +open val size: Int
+table +val table: T
+values +open val values: MutableCollection<V>
+

Functions

+ + + + + + + + + + + + + + + + + + + +
+addKeyToInsert +fun addKeyToInsert(it: <ERROR CLASS>, entry: Entry<K, V>, finalizables: MutableList<() -> Unit>): Unit

Implementation should marshall the key to the insert statement.

+
+addValueToInsert +fun addValueToInsert(it: <ERROR CLASS>, entry: Entry<K, V>, finalizables: MutableList<() -> Unit>): Unit

Implementation should marshall the value to the insert statement.

+
+keyFromRow +fun keyFromRow(it: <ERROR CLASS>): K

Implementation should return the key object marshalled from the database table row.

+
+valueFromRow +fun valueFromRow(it: <ERROR CLASS>): V

Implementation should return the value object marshalled from the database table row.

+
+

Inherited Functions

+ + + + + + + + + + + +
+clear +open fun clear(): Unit
+isEmpty +open fun isEmpty(): Boolean
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/key-from-row.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/key-from-row.html new file mode 100644 index 0000000000..235bb4bc90 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/key-from-row.html @@ -0,0 +1,20 @@ + + +JDBCHashMap.keyFromRow - + + + +com.r3corda.node.utilities / JDBCHashMap / keyFromRow
+
+

keyFromRow

+ +protected fun keyFromRow(it: <ERROR CLASS>): K
+Overrides AbstractJDBCHashMap.keyFromRow
+

Implementation should return the key object marshalled from the database table row.

+

See example implementations in JDBCHashMap.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/value-from-row.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/value-from-row.html new file mode 100644 index 0000000000..a8ff7a912d --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-map/value-from-row.html @@ -0,0 +1,20 @@ + + +JDBCHashMap.valueFromRow - + + + +com.r3corda.node.utilities / JDBCHashMap / valueFromRow
+
+

valueFromRow

+ +protected fun valueFromRow(it: <ERROR CLASS>): V
+Overrides AbstractJDBCHashMap.valueFromRow
+

Implementation should return the value object marshalled from the database table row.

+

See example implementations in JDBCHashMap.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/-blob-set-table/-init-.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/-blob-set-table/-init-.html new file mode 100644 index 0000000000..2e16532ab7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/-blob-set-table/-init-.html @@ -0,0 +1,14 @@ + + +JDBCHashSet.BlobSetTable.<init> - + + + +com.r3corda.node.utilities / JDBCHashSet / BlobSetTable / <init>
+
+

<init>

+BlobSetTable(tableName: String)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/-blob-set-table/index.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/-blob-set-table/index.html new file mode 100644 index 0000000000..bcd0be0c1c --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/-blob-set-table/index.html @@ -0,0 +1,53 @@ + + +JDBCHashSet.BlobSetTable - + + + +com.r3corda.node.utilities / JDBCHashSet / BlobSetTable
+
+

BlobSetTable

+class BlobSetTable : JDBCHashedTable
+
+
+

Constructors

+ + + + + + + +
+<init> +BlobSetTable(tableName: String)
+

Properties

+ + + + + + + +
+key +val key: <ERROR CLASS>
+

Inherited Properties

+ + + + + + + + + + + +
+keyHash +val keyHash: <ERROR CLASS>
+seqNo +val seqNo: <ERROR CLASS>
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/-blob-set-table/key.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/-blob-set-table/key.html new file mode 100644 index 0000000000..6d185bf44f --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/-blob-set-table/key.html @@ -0,0 +1,15 @@ + + +JDBCHashSet.BlobSetTable.key - + + + +com.r3corda.node.utilities / JDBCHashSet / BlobSetTable / key
+
+

key

+ +val key: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/-init-.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/-init-.html new file mode 100644 index 0000000000..de9c6a7b71 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/-init-.html @@ -0,0 +1,21 @@ + + +JDBCHashSet.<init> - + + + +com.r3corda.node.utilities / JDBCHashSet / <init>
+
+

<init>

+JDBCHashSet(tableName: String, loadOnInit: Boolean = false)
+

A convenient JDBC table backed hash set with iteration order based on insertion order. +See AbstractJDBCHashSet and AbstractJDBCHashMap for further implementation details.

+

In this subclass, elements are represented by Blobs of Kryo serialized forms of the element objects. +If you can extend AbstractJDBCHashSet and implement less Kryo dependent element mappings then that is +likely preferrable.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/add-element-to-insert.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/add-element-to-insert.html new file mode 100644 index 0000000000..3be1b82c66 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/add-element-to-insert.html @@ -0,0 +1,21 @@ + + +JDBCHashSet.addElementToInsert - + + + +com.r3corda.node.utilities / JDBCHashSet / addElementToInsert
+
+

addElementToInsert

+ +protected fun addElementToInsert(it: <ERROR CLASS>, entry: K, finalizables: MutableList<() -> Unit>): Unit
+

Implementation should marshall the element to the insert statement.

+

If some cleanup is required after the insert statement is executed, such as closing a Blob, then add a closure +to the finalizables to do so.

+

See example implementations in JDBCHashSet.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/element-from-row.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/element-from-row.html new file mode 100644 index 0000000000..b25d6ffd35 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/element-from-row.html @@ -0,0 +1,20 @@ + + +JDBCHashSet.elementFromRow - + + + +com.r3corda.node.utilities / JDBCHashSet / elementFromRow
+
+

elementFromRow

+ +protected fun elementFromRow(it: <ERROR CLASS>): K
+Overrides AbstractJDBCHashSet.elementFromRow
+

Implementation should return the element object marshalled from the database table row.

+

See example implementations in JDBCHashSet.

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/index.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/index.html new file mode 100644 index 0000000000..e9ec5a276e --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hash-set/index.html @@ -0,0 +1,124 @@ + + +JDBCHashSet - + + + +com.r3corda.node.utilities / JDBCHashSet
+
+

JDBCHashSet

+class JDBCHashSet<K : Any> : AbstractJDBCHashSet<K, BlobSetTable>
+

A convenient JDBC table backed hash set with iteration order based on insertion order. +See AbstractJDBCHashSet and AbstractJDBCHashMap for further implementation details.

+

In this subclass, elements are represented by Blobs of Kryo serialized forms of the element objects. +If you can extend AbstractJDBCHashSet and implement less Kryo dependent element mappings then that is +likely preferrable.

+
+
+
+
+

Types

+ + + + + + + +
+BlobSetTable +class BlobSetTable : JDBCHashedTable
+

Constructors

+ + + + + + + +
+<init> +JDBCHashSet(tableName: String, loadOnInit: Boolean = false)

A convenient JDBC table backed hash set with iteration order based on insertion order. +See AbstractJDBCHashSet and AbstractJDBCHashMap for further implementation details.

+
+

Inherited Properties

+ + + + + + + + + + + + + + + +
+innerMap +val innerMap: AbstractJDBCHashMap<K, Unit, T>
+size +open val size: Int
+table +val table: T
+

Functions

+ + + + + + + + + + + +
+addElementToInsert +fun addElementToInsert(it: <ERROR CLASS>, entry: K, finalizables: MutableList<() -> Unit>): Unit

Implementation should marshall the element to the insert statement.

+
+elementFromRow +fun elementFromRow(it: <ERROR CLASS>): K

Implementation should return the element object marshalled from the database table row.

+
+

Inherited Functions

+ + + + + + + + + + + + + + + +
+clear +open fun clear(): Unit
+isEmpty +open fun isEmpty(): Boolean
+iterator +open fun iterator(): MutableIterator<K>
+

Extension Functions

+ + + + + + + +
+noneOrSingle +fun <T> Iterable<T>.noneOrSingle(predicate: (T) -> Boolean): T?

Returns the single element matching the given predicate, or null if element was not found, +or throws if more than one element was found.

+fun <T> Iterable<T>.noneOrSingle(): T?

Returns single element, or null if element was not found, or throws if more than one element was found.

+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hashed-table/-init-.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hashed-table/-init-.html new file mode 100644 index 0000000000..637260d4dc --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hashed-table/-init-.html @@ -0,0 +1,14 @@ + + +JDBCHashedTable.<init> - + + + +com.r3corda.node.utilities / JDBCHashedTable / <init>
+
+

<init>

+JDBCHashedTable(tableName: String)
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hashed-table/index.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hashed-table/index.html new file mode 100644 index 0000000000..7e4c2b8c7c --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hashed-table/index.html @@ -0,0 +1,59 @@ + + +JDBCHashedTable - + + + +com.r3corda.node.utilities / JDBCHashedTable
+
+

JDBCHashedTable

+open class JDBCHashedTable
+
+
+

Constructors

+ + + + + + + +
+<init> +JDBCHashedTable(tableName: String)
+

Properties

+ + + + + + + + + + + +
+keyHash +val keyHash: <ERROR CLASS>
+seqNo +val seqNo: <ERROR CLASS>
+

Inheritors

+ + + + + + + + + + + +
+BlobMapTable +class BlobMapTable : JDBCHashedTable
+BlobSetTable +class BlobSetTable : JDBCHashedTable
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hashed-table/key-hash.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hashed-table/key-hash.html new file mode 100644 index 0000000000..3fc3b6d0fc --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hashed-table/key-hash.html @@ -0,0 +1,15 @@ + + +JDBCHashedTable.keyHash - + + + +com.r3corda.node.utilities / JDBCHashedTable / keyHash
+
+

keyHash

+ +val keyHash: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hashed-table/seq-no.html b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hashed-table/seq-no.html new file mode 100644 index 0000000000..ff3e6307d4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/-j-d-b-c-hashed-table/seq-no.html @@ -0,0 +1,15 @@ + + +JDBCHashedTable.seqNo - + + + +com.r3corda.node.utilities / JDBCHashedTable / seqNo
+
+

seqNo

+ +val seqNo: <ERROR CLASS>
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/-mutable-clock/index.html b/docs/build/html/api/com.r3corda.node.utilities/-mutable-clock/index.html index a4b7e1ef73..0977fb0c4c 100644 --- a/docs/build/html/api/com.r3corda.node.utilities/-mutable-clock/index.html +++ b/docs/build/html/api/com.r3corda.node.utilities/-mutable-clock/index.html @@ -35,7 +35,7 @@ adjusted externally.

mutationCount -val mutationCount: Long

This tracks how many direct mutations of "now" have occured for this Clock, but not the passage of time.

+val mutationCount: Long

This tracks how many direct mutations of "now" have occurred for this Clock, but not the passage of time.

@@ -66,8 +66,8 @@ adjusted externally.

awaitWithDeadline -fun Clock.awaitWithDeadline(deadline: Instant, future: Future<*> = SettableFuture<Any>()): Boolean

Wait until the given Future is complete or the deadline is reached, with support for MutableClock implementations -used in demos or testing. This will also substitute a Fiber compatible Future if required.

+fun Clock.awaitWithDeadline(deadline: Instant, future: Future<*> = GuavaSettableFuture.create<Any>()): Boolean

Wait until the given Future is complete or the deadline is reached, with support for MutableClock implementations +used in demos or testing. This will substitute a Fiber compatible Future so the current Strand is not blocked.

@@ -82,13 +82,6 @@ used in demos or testing. This will also substitute a Fiber compatible Future i class DemoClock : MutableClock, SerializeAsToken

A Clock that can have the date advanced for use in demos.

- - -TestClock - -class TestClock : MutableClock, SerializeAsToken

A Clock that can have the time advanced for use in testing.

- - diff --git a/docs/build/html/api/com.r3corda.node.utilities/-mutable-clock/mutation-count.html b/docs/build/html/api/com.r3corda.node.utilities/-mutable-clock/mutation-count.html index d333e638e7..6fef6e6e18 100644 --- a/docs/build/html/api/com.r3corda.node.utilities/-mutable-clock/mutation-count.html +++ b/docs/build/html/api/com.r3corda.node.utilities/-mutable-clock/mutation-count.html @@ -9,7 +9,7 @@

mutationCount

val mutationCount: Long
-

This tracks how many direct mutations of "now" have occured for this Clock, but not the passage of time.

+

This tracks how many direct mutations of "now" have occurred for this Clock, but not the passage of time.

It starts at zero, and increments by one per mutation.



diff --git a/docs/build/html/api/com.r3corda.node.utilities/deserialize-from-blob.html b/docs/build/html/api/com.r3corda.node.utilities/deserialize-from-blob.html new file mode 100644 index 0000000000..b1eb279900 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/deserialize-from-blob.html @@ -0,0 +1,15 @@ + + +deserializeFromBlob - + + + +com.r3corda.node.utilities / deserializeFromBlob
+
+

deserializeFromBlob

+ +fun <T : Any> deserializeFromBlob(blob: Blob): T
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node.utilities/index.html b/docs/build/html/api/com.r3corda.node.utilities/index.html index 9026016464..15b1a2d391 100644 --- a/docs/build/html/api/com.r3corda.node.utilities/index.html +++ b/docs/build/html/api/com.r3corda.node.utilities/index.html @@ -29,6 +29,23 @@ if the terminal supports it. Otherwise it just prints out the name of the step w +AbstractJDBCHashMap + +abstract class AbstractJDBCHashMap<K : Any, V : Any, T : JDBCHashedTable> : MutableMap<K, V>, AbstractMap<K, V>

A base class for a JDBC table backed hash map that iterates in insertion order by using +an ever increasing sequence number on entries. Iterators supports remove() but entries are not really mutable and +do not support setValue() method from MutableMap.MutableEntry.

+ + + + +AbstractJDBCHashSet + +abstract class AbstractJDBCHashSet<K : Any, T : JDBCHashedTable> : MutableSet<K>, AbstractSet<K>

Base class for JDBC backed hash set that delegates to a JDBC backed hash map where the values are all +Unit and not actually persisted. Iteration order is order of insertion. Iterators can remove().

+ + + + AddOrRemove enum class AddOrRemove

Enum for when adding/removing something, for example adding or removing an entry in a directory.

@@ -51,6 +68,28 @@ for ensuring code runs on the right thread, and also for unit testing.

+JDBCHashMap + +class JDBCHashMap<K : Any, V : Any> : AbstractJDBCHashMap<K, V, BlobMapTable>

A convenient JDBC table backed hash map with iteration order based on insertion order. +See AbstractJDBCHashMap for further implementation details.

+ + + + +JDBCHashSet + +class JDBCHashSet<K : Any> : AbstractJDBCHashSet<K, BlobSetTable>

A convenient JDBC table backed hash set with iteration order based on insertion order. +See AbstractJDBCHashSet and AbstractJDBCHashMap for further implementation details.

+ + + + +JDBCHashedTable + +open class JDBCHashedTable + + + JsonSupport object JsonSupport

Utilities and serialisers for working with JSON representations of basic types. This adds Jackson support for @@ -93,6 +132,18 @@ adjusted externally.

fun <T> databaseTransaction(statement: <ERROR CLASS>.() -> T): T + + +deserializeFromBlob + +fun <T : Any> deserializeFromBlob(blob: Blob): T + + + +serializeToBlob + +fun <T : Any> serializeToBlob(value: T, finalizables: MutableList<() -> Unit>): Blob + diff --git a/docs/build/html/api/com.r3corda.node.utilities/java.time.-clock/await-with-deadline.html b/docs/build/html/api/com.r3corda.node.utilities/java.time.-clock/await-with-deadline.html index 6431b95af8..0351ea59d5 100644 --- a/docs/build/html/api/com.r3corda.node.utilities/java.time.-clock/await-with-deadline.html +++ b/docs/build/html/api/com.r3corda.node.utilities/java.time.-clock/await-with-deadline.html @@ -8,9 +8,9 @@

awaitWithDeadline

-fun Clock.awaitWithDeadline(deadline: Instant, future: Future<*> = SettableFuture<Any>()): Boolean
+fun Clock.awaitWithDeadline(deadline: Instant, future: Future<*> = GuavaSettableFuture.create<Any>()): Boolean

Wait until the given Future is complete or the deadline is reached, with support for MutableClock implementations -used in demos or testing. This will also substitute a Fiber compatible Future if required.

+used in demos or testing. This will substitute a Fiber compatible Future so the current Strand is not blocked.

Return
true if the Future is complete, false if the deadline was reached.


diff --git a/docs/build/html/api/com.r3corda.node.utilities/java.time.-clock/index.html b/docs/build/html/api/com.r3corda.node.utilities/java.time.-clock/index.html index 1556ad6237..4f7048b22c 100644 --- a/docs/build/html/api/com.r3corda.node.utilities/java.time.-clock/index.html +++ b/docs/build/html/api/com.r3corda.node.utilities/java.time.-clock/index.html @@ -13,8 +13,8 @@ awaitWithDeadline -fun Clock.awaitWithDeadline(deadline: Instant, future: Future<*> = SettableFuture<Any>()): Boolean

Wait until the given Future is complete or the deadline is reached, with support for MutableClock implementations -used in demos or testing. This will also substitute a Fiber compatible Future if required.

+fun Clock.awaitWithDeadline(deadline: Instant, future: Future<*> = GuavaSettableFuture.create<Any>()): Boolean

Wait until the given Future is complete or the deadline is reached, with support for MutableClock implementations +used in demos or testing. This will substitute a Fiber compatible Future so the current Strand is not blocked.

diff --git a/docs/build/html/api/com.r3corda.node.utilities/serialize-to-blob.html b/docs/build/html/api/com.r3corda.node.utilities/serialize-to-blob.html new file mode 100644 index 0000000000..8cd46e50c5 --- /dev/null +++ b/docs/build/html/api/com.r3corda.node.utilities/serialize-to-blob.html @@ -0,0 +1,15 @@ + + +serializeToBlob - + + + +com.r3corda.node.utilities / serializeToBlob
+
+

serializeToBlob

+ +fun <T : Any> serializeToBlob(value: T, finalizables: MutableList<() -> Unit>): Blob
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.node/index.html b/docs/build/html/api/com.r3corda.node/index.html index de3cbe48a6..17126688e3 100644 --- a/docs/build/html/api/com.r3corda.node/index.html +++ b/docs/build/html/api/com.r3corda.node/index.html @@ -18,17 +18,6 @@ -

Properties

- - - - - - - -
-log -val log: <ERROR CLASS>

Functions

diff --git a/docs/build/html/api/com.r3corda.node/log.html b/docs/build/html/api/com.r3corda.node/log.html deleted file mode 100644 index 0e74288987..0000000000 --- a/docs/build/html/api/com.r3corda.node/log.html +++ /dev/null @@ -1,15 +0,0 @@ - - -log - - - - -com.r3corda.node / log
-
-

log

- -val log: <ERROR CLASS>
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/-init-.html b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/-init-.html index a9ec7f8ef6..2768150469 100644 --- a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / AbstractStateReplacementProtocol / Acceptor / <init>

<init>

-Acceptor(otherSide: Party, sessionIdForSend: Long, sessionIdForReceive: Long, progressTracker: ProgressTracker = tracker())
+Acceptor(otherSide: Party, progressTracker: ProgressTracker = tracker())


diff --git a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/index.html b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/index.html index 5596a07fd4..4dacc53523 100644 --- a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/index.html @@ -7,7 +7,7 @@ com.r3corda.protocols / AbstractStateReplacementProtocol / Acceptor

Acceptor

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


Types

@@ -40,7 +40,7 @@ +Acceptor(otherSide: Party, progressTracker: ProgressTracker = tracker())
<init> -Acceptor(otherSide: Party, sessionIdForSend: Long, sessionIdForReceive: Long, progressTracker: ProgressTracker = tracker())
@@ -63,18 +63,6 @@ tracker will be made a child of the current step in the parent. If its null, thi progress.

- - -sessionIdForReceive - -val sessionIdForReceive: Long - - - -sessionIdForSend - -val sessionIdForSend: Long -

Inherited Properties

@@ -123,6 +111,15 @@ Note that this is temporary until protocol sessions are properly implemented.

open fun call(): Unit

This is where you fill out your business logic.

+ + +verifyProposal + +abstract fun verifyProposal(maybeProposal: UntrustworthyData<Proposal<T>>): Proposal<T>

Check the state change proposal to confirm that its 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.

+ +

Inherited Functions

@@ -132,26 +129,36 @@ Note that this is temporary until protocol sessions are properly implemented.

receive -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
-fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

+ send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

diff --git a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/session-id-for-receive.html b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/session-id-for-receive.html deleted file mode 100644 index ed5eedb68b..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/session-id-for-receive.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Acceptor.sessionIdForReceive - - - - -com.r3corda.protocols / AbstractStateReplacementProtocol / Acceptor / sessionIdForReceive
-
-

sessionIdForReceive

- -val sessionIdForReceive: Long
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/session-id-for-send.html b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/session-id-for-send.html deleted file mode 100644 index 311d6df461..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/session-id-for-send.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Acceptor.sessionIdForSend - - - - -com.r3corda.protocols / AbstractStateReplacementProtocol / Acceptor / sessionIdForSend
-
-

sessionIdForSend

- -val sessionIdForSend: Long
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/verify-proposal.html b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/verify-proposal.html new file mode 100644 index 0000000000..c39a057c04 --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-acceptor/verify-proposal.html @@ -0,0 +1,18 @@ + + +AbstractStateReplacementProtocol.Acceptor.verifyProposal - + + + +com.r3corda.protocols / AbstractStateReplacementProtocol / Acceptor / verifyProposal
+
+

verifyProposal

+ +abstract fun verifyProposal(maybeProposal: UntrustworthyData<Proposal<T>>): Proposal<T>
+

Check the state change proposal to confirm that its 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.

+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/-init-.html b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/-init-.html index 6f3381f9d8..8ebb6ba198 100644 --- a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / AbstractStateReplacementProtocol / Handshake / <init>

<init>

-Handshake(sessionIdForSend: Long, replyToParty: Party, sessionID: Long)
+Handshake(replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue())


diff --git a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/index.html b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/index.html index a42bd78fae..7db548412b 100644 --- a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/index.html @@ -7,7 +7,7 @@ com.r3corda.protocols / AbstractStateReplacementProtocol / Handshake

Handshake

-data class Handshake : PartyRequestMessage
+data class Handshake : HandshakeMessage


Constructors

@@ -17,7 +17,7 @@ <init> -Handshake(sessionIdForSend: Long, replyToParty: Party, sessionID: Long) +Handshake(replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue()) @@ -26,32 +26,32 @@ +receiveSessionID + +val receiveSessionID: Long + + + replyToParty val replyToParty: Party -sessionID +sendSessionID -val sessionID: Long - - - -sessionIdForSend - -val sessionIdForSend: Long +val sendSessionID: Long -

Inherited Functions

+

Inherited Properties

+sessionID +open val sessionID: Long
-getReplyTo -open fun getReplyTo(networkMapCache: NetworkMapCache): MessageRecipients
diff --git a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/session-id-for-send.html b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/receive-session-i-d.html similarity index 57% rename from docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/session-id-for-send.html rename to docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/receive-session-i-d.html index 8590e5a0cf..5fa4cb8edb 100644 --- a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/session-id-for-send.html +++ b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/receive-session-i-d.html @@ -1,14 +1,15 @@ -AbstractStateReplacementProtocol.Handshake.sessionIdForSend - +AbstractStateReplacementProtocol.Handshake.receiveSessionID - -com.r3corda.protocols / AbstractStateReplacementProtocol / Handshake / sessionIdForSend
+com.r3corda.protocols / AbstractStateReplacementProtocol / Handshake / receiveSessionID

-

sessionIdForSend

- -val sessionIdForSend: Long
+

receiveSessionID

+ +val receiveSessionID: Long
+Overrides HandshakeMessage.receiveSessionID


diff --git a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/send-session-i-d.html similarity index 54% rename from docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/session-i-d.html rename to docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/send-session-i-d.html index cb4f6f2da1..f1ea10b185 100644 --- a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/session-i-d.html +++ b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-handshake/send-session-i-d.html @@ -1,15 +1,15 @@ -AbstractStateReplacementProtocol.Handshake.sessionID - +AbstractStateReplacementProtocol.Handshake.sendSessionID - -com.r3corda.protocols / AbstractStateReplacementProtocol / Handshake / sessionID
+com.r3corda.protocols / AbstractStateReplacementProtocol / Handshake / sendSessionID

-

sessionID

- -val sessionID: Long
-Overrides ServiceRequestMessage.sessionID
+

sendSessionID

+ +val sendSessionID: Long
+Overrides HandshakeMessage.sendSessionID


diff --git a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-instigator/index.html b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-instigator/index.html index acfe7a59b2..67889b1b14 100644 --- a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-instigator/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-instigator/index.html @@ -120,26 +120,36 @@ Note that this is temporary until protocol sessions are properly implemented.

receive -fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T>
-fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

+ send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

diff --git a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-proposal/index.html b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-proposal/index.html index ce8077d39a..7298d25561 100644 --- a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-proposal/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-proposal/index.html @@ -29,7 +29,7 @@ stx -abstract val stx: SignedTransaction +abstract val stx: SignedTransaction diff --git a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-proposal/stx.html b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-proposal/stx.html index 571049fed7..dd5e639cff 100644 --- a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-proposal/stx.html +++ b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/-proposal/stx.html @@ -8,7 +8,7 @@

stx

-abstract val stx: SignedTransaction
+abstract val stx: SignedTransaction


diff --git a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/index.html b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/index.html index e6051c9fcb..66d9e9dd1b 100644 --- a/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-abstract-state-replacement-protocol/index.html @@ -26,13 +26,13 @@ use the new updated state for future transactions.

Acceptor -abstract class Acceptor<in T> : ProtocolLogic<Unit> +abstract class Acceptor<T> : ProtocolLogic<Unit> Handshake -data class Handshake : PartyRequestMessage +data class Handshake : HandshakeMessage diff --git a/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-init-.html b/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-init-.html index d5767f3db0..88f022256d 100644 --- a/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / BroadcastTransactionProtocol / <init>

<init>

-BroadcastTransactionProtocol(notarisedTransaction: SignedTransaction, events: Set<ClientToServiceCommand>, participants: Set<Party>)
+BroadcastTransactionProtocol(notarisedTransaction: SignedTransaction, events: Set<ClientToServiceCommand>, participants: Set<Party>)

Notify all involved parties about a transaction, including storing a copy. Normally this would be called via FinalityProtocol.

Parameters

diff --git a/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/-init-.html b/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/-init-.html index b2a6ae0ff9..4019bb2f53 100644 --- a/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / BroadcastTransactionProtocol / NotifyTxRequestMessage / <init>

<init>

-NotifyTxRequestMessage(tx: SignedTransaction, events: Set<ClientToServiceCommand>, replyToParty: Party, sessionID: Long)
+NotifyTxRequestMessage(tx: SignedTransaction, events: Set<ClientToServiceCommand>, replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue())


diff --git a/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/index.html b/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/index.html index 53f50a21d9..e7f75777db 100644 --- a/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/index.html @@ -7,7 +7,7 @@ com.r3corda.protocols / BroadcastTransactionProtocol / NotifyTxRequestMessage

NotifyTxRequestMessage

-data class NotifyTxRequestMessage : PartyRequestMessage
+data class NotifyTxRequestMessage : HandshakeMessage


Constructors

@@ -17,7 +17,7 @@ <init> -NotifyTxRequestMessage(tx: SignedTransaction, events: Set<ClientToServiceCommand>, replyToParty: Party, sessionID: Long) +NotifyTxRequestMessage(tx: SignedTransaction, events: Set<ClientToServiceCommand>, replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue()) @@ -32,32 +32,38 @@ +receiveSessionID + +val receiveSessionID: Long + + + replyToParty val replyToParty: Party -sessionID +sendSessionID -val sessionID: Long +val sendSessionID: Long tx -val tx: SignedTransaction +val tx: SignedTransaction -

Inherited Functions

+

Inherited Properties

+sessionID +open val sessionID: Long
-getReplyTo -open fun getReplyTo(networkMapCache: NetworkMapCache): MessageRecipients
diff --git a/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/receive-session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/receive-session-i-d.html new file mode 100644 index 0000000000..624bcfb897 --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/receive-session-i-d.html @@ -0,0 +1,16 @@ + + +BroadcastTransactionProtocol.NotifyTxRequestMessage.receiveSessionID - + + + +com.r3corda.protocols / BroadcastTransactionProtocol / NotifyTxRequestMessage / receiveSessionID
+
+

receiveSessionID

+ +val receiveSessionID: Long
+Overrides HandshakeMessage.receiveSessionID
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/send-session-i-d.html similarity index 52% rename from docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/session-i-d.html rename to docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/send-session-i-d.html index 68128f88ba..a063a9b5fd 100644 --- a/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/session-i-d.html +++ b/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/send-session-i-d.html @@ -1,15 +1,15 @@ -BroadcastTransactionProtocol.NotifyTxRequestMessage.sessionID - +BroadcastTransactionProtocol.NotifyTxRequestMessage.sendSessionID - -com.r3corda.protocols / BroadcastTransactionProtocol / NotifyTxRequestMessage / sessionID
+com.r3corda.protocols / BroadcastTransactionProtocol / NotifyTxRequestMessage / sendSessionID

-

sessionID

- -val sessionID: Long
-Overrides ServiceRequestMessage.sessionID
+

sendSessionID

+ +val sendSessionID: Long
+Overrides HandshakeMessage.sendSessionID


diff --git a/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/tx.html b/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/tx.html index 85106b5cf6..092d37f3ee 100644 --- a/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/tx.html +++ b/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/-notify-tx-request-message/tx.html @@ -8,7 +8,7 @@

tx

-val tx: SignedTransaction
+val tx: SignedTransaction


diff --git a/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/index.html b/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/index.html index dc0d67c7f0..6720c8223d 100644 --- a/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/index.html @@ -30,7 +30,7 @@ a list of participants who were successfully notified of the transaction.

NotifyTxRequestMessage -data class NotifyTxRequestMessage : PartyRequestMessage +data class NotifyTxRequestMessage : HandshakeMessage @@ -41,7 +41,7 @@ a list of participants who were successfully notified of the transaction.

<init> -BroadcastTransactionProtocol(notarisedTransaction: SignedTransaction, events: Set<ClientToServiceCommand>, participants: Set<Party>)

Notify all involved parties about a transaction, including storing a copy. Normally this would be called via +BroadcastTransactionProtocol(notarisedTransaction: SignedTransaction, events: Set<ClientToServiceCommand>, participants: Set<Party>)

Notify all involved parties about a transaction, including storing a copy. Normally this would be called via FinalityProtocol.

@@ -60,7 +60,7 @@ a list of participants who were successfully notified of the transaction.

notarisedTransaction -val notarisedTransaction: SignedTransaction +val notarisedTransaction: SignedTransaction @@ -135,26 +135,36 @@ access this lazily or from inside receive -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
-fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

+ send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

diff --git a/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/notarised-transaction.html b/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/notarised-transaction.html index 3cf0eb9250..d7504be4fe 100644 --- a/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/notarised-transaction.html +++ b/docs/build/html/api/com.r3corda.protocols/-broadcast-transaction-protocol/notarised-transaction.html @@ -8,7 +8,7 @@

notarisedTransaction

-val notarisedTransaction: SignedTransaction
+val notarisedTransaction: SignedTransaction


diff --git a/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/-init-.html b/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/-init-.html index 08fa7a539e..682fe76242 100644 --- a/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / FetchDataProtocol / Request / <init>

<init>

-Request(hashes: List<SecureHash>, replyToParty: Party, sessionID: Long)
+Request(hashes: List<SecureHash>, replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue())


diff --git a/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/index.html b/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/index.html index 2e55eb2ce6..8df3a46c58 100644 --- a/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/index.html @@ -7,7 +7,7 @@ com.r3corda.protocols / FetchDataProtocol / Request

Request

-data class Request : PartyRequestMessage
+data class Request : HandshakeMessage


Constructors

@@ -17,7 +17,7 @@ <init> -Request(hashes: List<SecureHash>, replyToParty: Party, sessionID: Long) +Request(hashes: List<SecureHash>, replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue()) @@ -32,26 +32,32 @@ +receiveSessionID + +val receiveSessionID: Long + + + replyToParty val replyToParty: Party -sessionID +sendSessionID -val sessionID: Long +val sendSessionID: Long -

Inherited Functions

+

Inherited Properties

+sessionID +open val sessionID: Long
-getReplyTo -open fun getReplyTo(networkMapCache: NetworkMapCache): MessageRecipients
diff --git a/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/receive-session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/receive-session-i-d.html new file mode 100644 index 0000000000..6674445b5d --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/receive-session-i-d.html @@ -0,0 +1,16 @@ + + +FetchDataProtocol.Request.receiveSessionID - + + + +com.r3corda.protocols / FetchDataProtocol / Request / receiveSessionID
+
+

receiveSessionID

+ +val receiveSessionID: Long
+Overrides HandshakeMessage.receiveSessionID
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/send-session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/send-session-i-d.html new file mode 100644 index 0000000000..d63cdd3791 --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/send-session-i-d.html @@ -0,0 +1,16 @@ + + +FetchDataProtocol.Request.sendSessionID - + + + +com.r3corda.protocols / FetchDataProtocol / Request / sendSessionID
+
+

sendSessionID

+ +val sendSessionID: Long
+Overrides HandshakeMessage.sendSessionID
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/session-i-d.html deleted file mode 100644 index 75489170f8..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/-request/session-i-d.html +++ /dev/null @@ -1,16 +0,0 @@ - - -FetchDataProtocol.Request.sessionID - - - - -com.r3corda.protocols / FetchDataProtocol / Request / sessionID
-
-

sessionID

- -val sessionID: Long
-Overrides ServiceRequestMessage.sessionID
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/index.html b/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/index.html index adf276ea89..6642b38612 100644 --- a/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-fetch-data-protocol/index.html @@ -33,7 +33,7 @@ same as the ultimate type, you must also override convert Request -data class Request : PartyRequestMessage +data class Request : HandshakeMessage @@ -178,26 +178,36 @@ Note that this is temporary until protocol sessions are properly implemented.

receive -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
-fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

+ send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

@@ -218,7 +228,7 @@ attachments are saved to local storage automatically.

FetchTransactionsProtocol -class FetchTransactionsProtocol : FetchDataProtocol<SignedTransaction, SignedTransaction>

Given a set of tx hashes (IDs), either loads them from local disk or asks the remote peer to provide them.

+class FetchTransactionsProtocol : FetchDataProtocol<SignedTransaction, SignedTransaction>

Given a set of tx hashes (IDs), either loads them from local disk or asks the remote peer to provide them.

diff --git a/docs/build/html/api/com.r3corda.protocols/-fetch-transactions-protocol/index.html b/docs/build/html/api/com.r3corda.protocols/-fetch-transactions-protocol/index.html index a8d1d6eba0..8ca540f8ce 100644 --- a/docs/build/html/api/com.r3corda.protocols/-fetch-transactions-protocol/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-fetch-transactions-protocol/index.html @@ -7,7 +7,7 @@ com.r3corda.protocols / FetchTransactionsProtocol

FetchTransactionsProtocol

-class FetchTransactionsProtocol : FetchDataProtocol<SignedTransaction, SignedTransaction>
+class FetchTransactionsProtocol : FetchDataProtocol<SignedTransaction, SignedTransaction>

Given a set of tx hashes (IDs), either loads them from local disk or asks the remote peer to provide them.

A malicious response in which the data provided by the remote peer does not hash to the requested hash results in FetchDataProtocol.DownloadedVsRequestedDataMismatch being thrown. If the remote peer doesnt have an entry, it @@ -66,7 +66,7 @@ Note that this is temporary until protocol sessions are properly implemented.

load -fun load(txid: SecureHash): SignedTransaction? +fun load(txid: SecureHash): SignedTransaction? diff --git a/docs/build/html/api/com.r3corda.protocols/-fetch-transactions-protocol/load.html b/docs/build/html/api/com.r3corda.protocols/-fetch-transactions-protocol/load.html index dd5d6bf33e..8a470084d8 100644 --- a/docs/build/html/api/com.r3corda.protocols/-fetch-transactions-protocol/load.html +++ b/docs/build/html/api/com.r3corda.protocols/-fetch-transactions-protocol/load.html @@ -8,7 +8,7 @@

load

-protected fun load(txid: SecureHash): SignedTransaction?
+protected fun load(txid: SecureHash): SignedTransaction?
Overrides FetchDataProtocol.load


diff --git a/docs/build/html/api/com.r3corda.protocols/-finality-protocol/-init-.html b/docs/build/html/api/com.r3corda.protocols/-finality-protocol/-init-.html index f2ccae0920..2b64ee2467 100644 --- a/docs/build/html/api/com.r3corda.protocols/-finality-protocol/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-finality-protocol/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / FinalityProtocol / <init>

<init>

-FinalityProtocol(transaction: SignedTransaction, events: Set<ClientToServiceCommand>, participants: Set<Party>, progressTracker: ProgressTracker = tracker())
+FinalityProtocol(transaction: SignedTransaction, events: Set<ClientToServiceCommand>, participants: Set<Party>, progressTracker: ProgressTracker = tracker())

Finalise a transaction by notarising it, then recording it locally, and then sending it to all involved parties.

Parameters

diff --git a/docs/build/html/api/com.r3corda.protocols/-finality-protocol/index.html b/docs/build/html/api/com.r3corda.protocols/-finality-protocol/index.html index b67cc77b17..d893bc6315 100644 --- a/docs/build/html/api/com.r3corda.protocols/-finality-protocol/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-finality-protocol/index.html @@ -46,7 +46,7 @@ a list of participants who were successfully notified of the transaction.

<init> -FinalityProtocol(transaction: SignedTransaction, events: Set<ClientToServiceCommand>, participants: Set<Party>, progressTracker: ProgressTracker = tracker())

Finalise a transaction by notarising it, then recording it locally, and then sending it to all involved parties.

+FinalityProtocol(transaction: SignedTransaction, events: Set<ClientToServiceCommand>, participants: Set<Party>, progressTracker: ProgressTracker = tracker())

Finalise a transaction by notarising it, then recording it locally, and then sending it to all involved parties.

@@ -88,7 +88,7 @@ Note that this is temporary until protocol sessions are properly implemented.

transaction -val transaction: SignedTransaction +val transaction: SignedTransaction @@ -139,26 +139,36 @@ access this lazily or from inside receive -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
-fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

+ send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

diff --git a/docs/build/html/api/com.r3corda.protocols/-finality-protocol/transaction.html b/docs/build/html/api/com.r3corda.protocols/-finality-protocol/transaction.html index bfbb47da03..53bf2bb868 100644 --- a/docs/build/html/api/com.r3corda.protocols/-finality-protocol/transaction.html +++ b/docs/build/html/api/com.r3corda.protocols/-finality-protocol/transaction.html @@ -8,7 +8,7 @@

transaction

-val transaction: SignedTransaction
+val transaction: SignedTransaction


diff --git a/docs/build/html/api/com.r3corda.protocols/-handshake-message/index.html b/docs/build/html/api/com.r3corda.protocols/-handshake-message/index.html new file mode 100644 index 0000000000..cd7c3472cf --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-handshake-message/index.html @@ -0,0 +1,128 @@ + + +HandshakeMessage - + + + +com.r3corda.protocols / HandshakeMessage
+
+

HandshakeMessage

+interface HandshakeMessage : PartyRequestMessage
+

A Handshake message is sent to initiate communication between two protocol instances. It contains the two session IDs +the two protocols will need to communicate. +Note: This is a temperary interface and will be removed once the protocol session work is implemented.

+
+
+

Properties

+ + + + + + + + + + + + + + + +
+receiveSessionID +abstract val receiveSessionID: Long
+sendSessionID +abstract val sendSessionID: Long
+sessionID +open val sessionID: Long
+

Inherited Properties

+ + + + + + + +
+replyToParty +abstract val replyToParty: Party
+

Inherited Functions

+ + + + + + + +
+getReplyTo +open fun getReplyTo(networkMapCache: NetworkMapCache): MessageRecipients
+

Inheritors

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+AutoOfferMessage +data class AutoOfferMessage : HandshakeMessage
+ExitMessage +data class ExitMessage : HandshakeMessage
+FixingSessionInitiation +data class FixingSessionInitiation : HandshakeMessage

Used to set up the session between Floater and Fixer

+
+Handshake +data class Handshake : HandshakeMessage
+Handshake +data class Handshake : HandshakeMessage
+NotifyTxRequestMessage +data class NotifyTxRequestMessage : HandshakeMessage
+QueryRequest +data class QueryRequest : HandshakeMessage
+Request +data class Request : HandshakeMessage
+SignRequest +data class SignRequest : HandshakeMessage
+UpdateBusinessDayMessage +data class UpdateBusinessDayMessage : HandshakeMessage
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-handshake-message/receive-session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-handshake-message/receive-session-i-d.html new file mode 100644 index 0000000000..f701bb88b0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-handshake-message/receive-session-i-d.html @@ -0,0 +1,15 @@ + + +HandshakeMessage.receiveSessionID - + + + +com.r3corda.protocols / HandshakeMessage / receiveSessionID
+
+

receiveSessionID

+ +abstract val receiveSessionID: Long
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-handshake-message/send-session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-handshake-message/send-session-i-d.html new file mode 100644 index 0000000000..898c6dbb74 --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-handshake-message/send-session-i-d.html @@ -0,0 +1,15 @@ + + +HandshakeMessage.sendSessionID - + + + +com.r3corda.protocols / HandshakeMessage / sendSessionID
+
+

sendSessionID

+ +abstract val sendSessionID: Long
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-handshake-message/session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-handshake-message/session-i-d.html new file mode 100644 index 0000000000..7281ac1a94 --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-handshake-message/session-i-d.html @@ -0,0 +1,18 @@ + + +HandshakeMessage.sessionID - + + + +com.r3corda.protocols / HandshakeMessage / sessionID
+
+

sessionID

+ +open val sessionID: Long
+Overrides ServiceRequestMessage.sessionID
+Deprecated: sessionID functions as receiveSessionID but it's recommended to use the later for clarity
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-acceptor/-init-.html b/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-acceptor/-init-.html index e804cd6a06..5f975707fe 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-acceptor/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-acceptor/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / NotaryChangeProtocol / Acceptor / <init>

<init>

-Acceptor(otherSide: Party, sessionIdForSend: Long, sessionIdForReceive: Long, progressTracker: ProgressTracker = tracker())
+Acceptor(otherSide: Party, progressTracker: ProgressTracker = tracker())


diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-acceptor/index.html b/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-acceptor/index.html index 5889c15f2b..0193dcbd7e 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-acceptor/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-acceptor/index.html @@ -17,7 +17,7 @@ <init> -Acceptor(otherSide: Party, sessionIdForSend: Long, sessionIdForReceive: Long, progressTracker: ProgressTracker = tracker()) +Acceptor(otherSide: Party, progressTracker: ProgressTracker = tracker()) @@ -53,17 +53,17 @@ Note that this is temporary until protocol sessions are properly implemented.

val otherSide: Party + + +

Functions

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

Check the notary change proposal.

+
-sessionIdForReceive -val sessionIdForReceive: Long
-sessionIdForSend -val sessionIdForSend: Long
diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-acceptor/verify-proposal.html b/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-acceptor/verify-proposal.html new file mode 100644 index 0000000000..4690b56c47 --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-acceptor/verify-proposal.html @@ -0,0 +1,21 @@ + + +NotaryChangeProtocol.Acceptor.verifyProposal - + + + +com.r3corda.protocols / NotaryChangeProtocol / Acceptor / verifyProposal
+
+

verifyProposal

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

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. +TODO: In more difficult cases this should call for human attention to manually verify and approve the proposal

+
+
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-proposal/-init-.html b/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-proposal/-init-.html index a1a91350e6..1978e1f401 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-proposal/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-proposal/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / NotaryChangeProtocol / Proposal / <init>

<init>

-Proposal(stateRef: StateRef, modification: Party, stx: SignedTransaction)
+Proposal(stateRef: StateRef, modification: Party, stx: SignedTransaction)


diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-proposal/index.html b/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-proposal/index.html index b45eded6c9..0b8034a6bf 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-proposal/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-proposal/index.html @@ -17,7 +17,7 @@ <init> -Proposal(stateRef: StateRef, modification: Party, stx: SignedTransaction) +Proposal(stateRef: StateRef, modification: Party, stx: SignedTransaction) @@ -40,7 +40,7 @@ stx -val stx: SignedTransaction +val stx: SignedTransaction diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-proposal/stx.html b/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-proposal/stx.html index 27fe41ddbc..b39e8a11ef 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-proposal/stx.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-change-protocol/-proposal/stx.html @@ -8,7 +8,7 @@

stx

-val stx: SignedTransaction
+val stx: SignedTransaction
Overrides Proposal.stx


diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-error/-conflict/-init-.html b/docs/build/html/api/com.r3corda.protocols/-notary-error/-conflict/-init-.html index 76a35debd6..28f04458a1 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-error/-conflict/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-error/-conflict/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / NotaryError / Conflict / <init>

<init>

-Conflict(tx: WireTransaction, conflict: SignedData<Conflict>)
+Conflict(tx: WireTransaction, conflict: SignedData<Conflict>)


diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-error/-conflict/index.html b/docs/build/html/api/com.r3corda.protocols/-notary-error/-conflict/index.html index 0c15eeb5d6..e1108e0ab6 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-error/-conflict/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-error/-conflict/index.html @@ -17,7 +17,7 @@ <init> -Conflict(tx: WireTransaction, conflict: SignedData<Conflict>) +Conflict(tx: WireTransaction, conflict: SignedData<Conflict>) @@ -34,7 +34,7 @@ tx -val tx: WireTransaction +val tx: WireTransaction diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-error/-conflict/tx.html b/docs/build/html/api/com.r3corda.protocols/-notary-error/-conflict/tx.html index 18cdbfdbb5..88252f21aa 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-error/-conflict/tx.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-error/-conflict/tx.html @@ -8,7 +8,7 @@

tx

-val tx: WireTransaction
+val tx: WireTransaction


diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-error/-more-than-one-timestamp/-init-.html b/docs/build/html/api/com.r3corda.protocols/-notary-error/-more-than-one-timestamp/-init-.html deleted file mode 100644 index e62dbe0e20..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-notary-error/-more-than-one-timestamp/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -NotaryError.MoreThanOneTimestamp.<init> - - - - -com.r3corda.protocols / NotaryError / MoreThanOneTimestamp / <init>
-
-

<init>

-MoreThanOneTimestamp()
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-error/-more-than-one-timestamp/index.html b/docs/build/html/api/com.r3corda.protocols/-notary-error/-more-than-one-timestamp/index.html deleted file mode 100644 index 8c5d6c4e63..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-notary-error/-more-than-one-timestamp/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - -NotaryError.MoreThanOneTimestamp - - - - -com.r3corda.protocols / NotaryError / MoreThanOneTimestamp
-
-

MoreThanOneTimestamp

-class MoreThanOneTimestamp : NotaryError
-
-
-

Constructors

- - - - - - - -
-<init> -MoreThanOneTimestamp()
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-error/-not-for-me/-init-.html b/docs/build/html/api/com.r3corda.protocols/-notary-error/-not-for-me/-init-.html deleted file mode 100644 index c9481943c0..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-notary-error/-not-for-me/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NotaryError.NotForMe.<init> - - - - -com.r3corda.protocols / NotaryError / NotForMe / <init>
-
-

<init>

-NotForMe()
-

Thrown if the timestamp command in the transaction doesnt list this Notary as a signer

-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-error/-not-for-me/index.html b/docs/build/html/api/com.r3corda.protocols/-notary-error/-not-for-me/index.html deleted file mode 100644 index dd5bde6e1b..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-notary-error/-not-for-me/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - -NotaryError.NotForMe - - - - -com.r3corda.protocols / NotaryError / NotForMe
-
-

NotForMe

-class NotForMe : NotaryError
-

Thrown if the timestamp command in the transaction doesnt list this Notary as a signer

-
-
-

Constructors

- - - - - - - -
-<init> -NotForMe()

Thrown if the timestamp command in the transaction doesnt list this Notary as a signer

-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-error/-signatures-missing/-init-.html b/docs/build/html/api/com.r3corda.protocols/-notary-error/-signatures-missing/-init-.html index 0e2ac5c831..3e6d8dc432 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-error/-signatures-missing/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-error/-signatures-missing/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / NotaryError / SignaturesMissing / <init>

<init>

-SignaturesMissing(missingSigners: List<PublicKey>)
+SignaturesMissing(missingSigners: Set<PublicKey>)


diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-error/-signatures-missing/index.html b/docs/build/html/api/com.r3corda.protocols/-notary-error/-signatures-missing/index.html index fccdcec069..9984859be7 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-error/-signatures-missing/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-error/-signatures-missing/index.html @@ -17,7 +17,7 @@ <init> -SignaturesMissing(missingSigners: List<PublicKey>) +SignaturesMissing(missingSigners: Set<PublicKey>) @@ -28,7 +28,7 @@ missingSigners -val missingSigners: List<PublicKey> +val missingSigners: Set<PublicKey> diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-error/-signatures-missing/missing-signers.html b/docs/build/html/api/com.r3corda.protocols/-notary-error/-signatures-missing/missing-signers.html index 30d8736421..752b0b2395 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-error/-signatures-missing/missing-signers.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-error/-signatures-missing/missing-signers.html @@ -8,7 +8,7 @@

missingSigners

-val missingSigners: List<PublicKey>
+val missingSigners: Set<PublicKey>


diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-client/-init-.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-client/-init-.html index 87e6e8660e..b1e463f929 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-client/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-client/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / NotaryProtocol / Client / <init>

<init>

-Client(stx: SignedTransaction, progressTracker: ProgressTracker = Client.tracker())
+Client(stx: SignedTransaction, progressTracker: ProgressTracker = Client.tracker())

A protocol 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.

Exceptions

diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-client/index.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-client/index.html index df625e702a..a4c1912933 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-client/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-client/index.html @@ -40,7 +40,7 @@ by another transaction or the timestamp is invalid.
<init> -Client(stx: SignedTransaction, progressTracker: ProgressTracker = Client.tracker())

A protocol to be used for obtaining a signature from a NotaryService ascertaining the transaction +Client(stx: SignedTransaction, progressTracker: ProgressTracker = Client.tracker())

A protocol 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.

@@ -122,26 +122,36 @@ access this lazily or from inside receive -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
-fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

+ send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-default-factory/create.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-default-factory/create.html index 9b88e30bdd..f1dd310985 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-default-factory/create.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-default-factory/create.html @@ -7,8 +7,8 @@ com.r3corda.protocols / NotaryProtocol / DefaultFactory / create

create

- -fun create(otherSide: Party, sendSessionID: Long, receiveSessionID: Long, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider): Service
+ +fun create(otherSide: Party, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider): Service
Overrides Factory.create


diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-default-factory/index.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-default-factory/index.html index b3c9ee74e0..1152b37cf2 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-default-factory/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-default-factory/index.html @@ -17,7 +17,7 @@ create -fun create(otherSide: Party, sendSessionID: Long, receiveSessionID: Long, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider): Service +fun create(otherSide: Party, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider): Service diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-factory/create.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-factory/create.html index 72aa0b33b7..41a523dedd 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-factory/create.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-factory/create.html @@ -7,8 +7,8 @@ com.r3corda.protocols / NotaryProtocol / Factory / create

create

- -abstract fun create(otherSide: Party, sendSessionID: Long, receiveSessionID: Long, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider): Service
+ +abstract fun create(otherSide: Party, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider): Service


diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-factory/index.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-factory/index.html index 8a1c1dcb9e..690093c36a 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-factory/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-factory/index.html @@ -17,7 +17,7 @@ create -abstract fun create(otherSide: Party, sendSessionID: Long, receiveSessionID: Long, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider): Service +abstract fun create(otherSide: Party, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider): Service diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/-init-.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/-init-.html index 6d2466a2b4..3f11938153 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / NotaryProtocol / Handshake / <init>

<init>

-Handshake(replyToParty: Party, sendSessionID: Long, sessionID: Long)
+Handshake(replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue())


diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/index.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/index.html index afcf2cff1f..1f82b44fdf 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/index.html @@ -7,7 +7,7 @@ com.r3corda.protocols / NotaryProtocol / Handshake

Handshake

-data class Handshake : PartyRequestMessage
+data class Handshake : HandshakeMessage


Constructors

@@ -17,7 +17,7 @@ <init> -Handshake(replyToParty: Party, sendSessionID: Long, sessionID: Long) +Handshake(replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue()) @@ -26,6 +26,12 @@ +receiveSessionID + +val receiveSessionID: Long + + + replyToParty val replyToParty: Party @@ -36,22 +42,16 @@ val sendSessionID: Long - - -sessionID - -val sessionID: Long - -

Inherited Functions

+

Inherited Properties

+sessionID +open val sessionID: Long
-getReplyTo -open fun getReplyTo(networkMapCache: NetworkMapCache): MessageRecipients
diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/receive-session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/receive-session-i-d.html similarity index 56% rename from docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/receive-session-i-d.html rename to docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/receive-session-i-d.html index 317a6b9f71..0b4a7ddd90 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/receive-session-i-d.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/receive-session-i-d.html @@ -1,14 +1,15 @@ -NotaryProtocol.Service.receiveSessionID - +NotaryProtocol.Handshake.receiveSessionID - -com.r3corda.protocols / NotaryProtocol / Service / receiveSessionID
+com.r3corda.protocols / NotaryProtocol / Handshake / receiveSessionID

receiveSessionID

- + val receiveSessionID: Long
+Overrides HandshakeMessage.receiveSessionID


diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/send-session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/send-session-i-d.html index b00205eb17..c8419ea59e 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/send-session-i-d.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/send-session-i-d.html @@ -9,6 +9,7 @@

sendSessionID

val sendSessionID: Long
+Overrides HandshakeMessage.sendSessionID


diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/session-i-d.html deleted file mode 100644 index fca7e1c6e8..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-handshake/session-i-d.html +++ /dev/null @@ -1,16 +0,0 @@ - - -NotaryProtocol.Handshake.sessionID - - - - -com.r3corda.protocols / NotaryProtocol / Handshake / sessionID
-
-

sessionID

- -val sessionID: Long
-Overrides ServiceRequestMessage.sessionID
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/-init-.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/-init-.html index abdae62367..ef5d965bfe 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / NotaryProtocol / Service / <init>

<init>

-Service(otherSide: Party, sendSessionID: Long, receiveSessionID: Long, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)
+Service(otherSide: Party, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)

Checks that the timestamp command is valid (if present) and commits the input state, or returns a conflict if any of the input states have been previously committed.

Extend this class, overriding beforeCommit to add custom transaction processing/validation logic.

diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/before-commit.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/before-commit.html index a946af88b7..8cea6b1062 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/before-commit.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/before-commit.html @@ -7,8 +7,8 @@ com.r3corda.protocols / NotaryProtocol / Service / beforeCommit

beforeCommit

- -open fun beforeCommit(stx: SignedTransaction, reqIdentity: Party): Unit
+ +open fun beforeCommit(stx: SignedTransaction, reqIdentity: Party): Unit

No pre-commit processing is done. Transaction is not checked for contract-validity, as that would require fully resolving it into a TransactionForVerification, for which the caller would have to reveal the whole transaction history chain. diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/index.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/index.html index 15bfa6662b..872ae83772 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/index.html @@ -23,7 +23,7 @@ if any of the input states have been previously committed.

<init> -Service(otherSide: Party, sendSessionID: Long, receiveSessionID: Long, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)

Checks that the timestamp command is valid (if present) and commits the input state, or returns a conflict +Service(otherSide: Party, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)

Checks that the timestamp command is valid (if present) and commits the input state, or returns a conflict if any of the input states have been previously committed.

@@ -40,18 +40,6 @@ if any of the input states have been previously committed.

-receiveSessionID - -val receiveSessionID: Long - - - -sendSessionID - -val sendSessionID: Long - - - timestampChecker val timestampChecker: TimestampChecker @@ -117,7 +105,7 @@ access this lazily or from inside beforeCommit -open fun beforeCommit(stx: SignedTransaction, reqIdentity: Party): Unit

No pre-commit processing is done. Transaction is not checked for contract-validity, as that would require fully +open fun beforeCommit(stx: SignedTransaction, reqIdentity: Party): Unit

No pre-commit processing is done. Transaction is not checked for contract-validity, as that would require fully resolving it into a TransactionForVerification, for which the caller would have to reveal the whole transaction history chain. As a result, the Notary will commit invalid transactions as well, but as it also records the identity of @@ -141,26 +129,36 @@ undo the commit of the input states (the exact mechanism still needs to be worke receive -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
-fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

+ send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/send-session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/send-session-i-d.html deleted file mode 100644 index 39cdcab9c0..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-service/send-session-i-d.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NotaryProtocol.Service.sendSessionID - - - - -com.r3corda.protocols / NotaryProtocol / Service / sendSessionID
-
-

sendSessionID

- -val sendSessionID: Long
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-sign-request/-init-.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-sign-request/-init-.html index ee0b5e8fd9..5989140c61 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-sign-request/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-sign-request/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / NotaryProtocol / SignRequest / <init>

<init>

-SignRequest(tx: SignedTransaction, callerIdentity: Party)
+SignRequest(tx: SignedTransaction, callerIdentity: Party)

TODO: The caller must authenticate instead of just specifying its identity



diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-sign-request/index.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-sign-request/index.html index c55af42a00..898d5fe0a6 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-sign-request/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-sign-request/index.html @@ -18,7 +18,7 @@ <init> -SignRequest(tx: SignedTransaction, callerIdentity: Party)

TODO: The caller must authenticate instead of just specifying its identity

+SignRequest(tx: SignedTransaction, callerIdentity: Party)

TODO: The caller must authenticate instead of just specifying its identity

@@ -36,7 +36,7 @@ tx -val tx: SignedTransaction +val tx: SignedTransaction diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-sign-request/tx.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-sign-request/tx.html index 48bdf26c3f..d0094aa7cd 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-sign-request/tx.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/-sign-request/tx.html @@ -8,7 +8,7 @@

tx

-val tx: SignedTransaction
+val tx: SignedTransaction


diff --git a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/index.html b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/index.html index 66e4cd6202..1ef44ddc4d 100644 --- a/docs/build/html/api/com.r3corda.protocols/-notary-protocol/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-notary-protocol/index.html @@ -37,7 +37,7 @@ timestamp is correct and none of its inputs have been used in another completed Handshake -data class Handshake : PartyRequestMessage +data class Handshake : HandshakeMessage diff --git a/docs/build/html/api/com.r3corda.protocols/-party-request-message/index.html b/docs/build/html/api/com.r3corda.protocols/-party-request-message/index.html index c7fe1bb900..61cf88ccb6 100644 --- a/docs/build/html/api/com.r3corda.protocols/-party-request-message/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-party-request-message/index.html @@ -48,39 +48,12 @@ -Handshake +HandshakeMessage -data class Handshake : PartyRequestMessage - - - -Handshake - -data class Handshake : PartyRequestMessage - - - -NotifyTxRequestMessage - -data class NotifyTxRequestMessage : PartyRequestMessage - - - -QueryRequest - -data class QueryRequest : PartyRequestMessage - - - -Request - -data class Request : PartyRequestMessage - - - -SignRequest - -data class SignRequest : PartyRequestMessage +interface HandshakeMessage : PartyRequestMessage

A Handshake message is sent to initiate communication between two protocol instances. It contains the two session IDs +the two protocols will need to communicate. +Note: This is a temperary interface and will be removed once the protocol session work is implemented.

+ diff --git a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-init-.html b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-init-.html index 0c2b458dd2..e911eb8703 100644 --- a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / RatesFixProtocol / <init>

<init>

-RatesFixProtocol(tx: TransactionBuilder, oracle: Party, fixOf: FixOf, expectedRate: BigDecimal, rateTolerance: BigDecimal, progressTracker: ProgressTracker = RatesFixProtocol.tracker(fixOf.name))
+RatesFixProtocol(tx: TransactionBuilder, oracle: Party, fixOf: FixOf, expectedRate: BigDecimal, rateTolerance: BigDecimal, progressTracker: ProgressTracker = RatesFixProtocol.tracker(fixOf.name))

This protocol queries the given oracle for an interest rate fix, and if it is within the given tolerance embeds the fix in the transaction and then proceeds to get the oracle to sign it. Although the call method combines the query and signing step, you can run the steps individually by constructing this object and then using the public methods diff --git a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/-init-.html b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/-init-.html index 496f1f1cc6..ef365effe0 100644 --- a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / RatesFixProtocol / QueryRequest / <init>

<init>

-QueryRequest(queries: List<FixOf>, replyToParty: Party, sessionID: Long, deadline: Instant)
+QueryRequest(queries: List<FixOf>, deadline: Instant, replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue())


diff --git a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/index.html b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/index.html index b98e361e0b..ea994cbfc1 100644 --- a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/index.html @@ -7,7 +7,7 @@ com.r3corda.protocols / RatesFixProtocol / QueryRequest

QueryRequest

-data class QueryRequest : PartyRequestMessage
+data class QueryRequest : HandshakeMessage


Constructors

@@ -17,7 +17,7 @@ <init> -QueryRequest(queries: List<FixOf>, replyToParty: Party, sessionID: Long, deadline: Instant) +QueryRequest(queries: List<FixOf>, deadline: Instant, replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue()) @@ -38,26 +38,32 @@ +receiveSessionID + +val receiveSessionID: Long + + + replyToParty val replyToParty: Party -sessionID +sendSessionID -val sessionID: Long +val sendSessionID: Long -

Inherited Functions

+

Inherited Properties

+sessionID +open val sessionID: Long
-getReplyTo -open fun getReplyTo(networkMapCache: NetworkMapCache): MessageRecipients
diff --git a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/receive-session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/receive-session-i-d.html new file mode 100644 index 0000000000..43d68e523c --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/receive-session-i-d.html @@ -0,0 +1,16 @@ + + +RatesFixProtocol.QueryRequest.receiveSessionID - + + + +com.r3corda.protocols / RatesFixProtocol / QueryRequest / receiveSessionID
+
+

receiveSessionID

+ +val receiveSessionID: Long
+Overrides HandshakeMessage.receiveSessionID
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/send-session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/send-session-i-d.html new file mode 100644 index 0000000000..5e37303ee6 --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/send-session-i-d.html @@ -0,0 +1,16 @@ + + +RatesFixProtocol.QueryRequest.sendSessionID - + + + +com.r3corda.protocols / RatesFixProtocol / QueryRequest / sendSessionID
+
+

sendSessionID

+ +val sendSessionID: Long
+Overrides HandshakeMessage.sendSessionID
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/session-i-d.html deleted file mode 100644 index bf45e9fe03..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-query-request/session-i-d.html +++ /dev/null @@ -1,16 +0,0 @@ - - -RatesFixProtocol.QueryRequest.sessionID - - - - -com.r3corda.protocols / RatesFixProtocol / QueryRequest / sessionID
-
-

sessionID

- -val sessionID: Long
-Overrides ServiceRequestMessage.sessionID
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/-init-.html b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/-init-.html index a49ddb4765..0f24f0dcc7 100644 --- a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / RatesFixProtocol / SignRequest / <init>

<init>

-SignRequest(tx: WireTransaction, replyToParty: Party, sessionID: Long)
+SignRequest(tx: WireTransaction, replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue())


diff --git a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/index.html b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/index.html index ff371c0341..ca92402190 100644 --- a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/index.html @@ -7,7 +7,7 @@ com.r3corda.protocols / RatesFixProtocol / SignRequest

SignRequest

-data class SignRequest : PartyRequestMessage
+data class SignRequest : HandshakeMessage


Constructors

@@ -17,7 +17,7 @@ <init> -SignRequest(tx: WireTransaction, replyToParty: Party, sessionID: Long) +SignRequest(tx: WireTransaction, replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue()) @@ -26,32 +26,38 @@ +receiveSessionID + +val receiveSessionID: Long + + + replyToParty val replyToParty: Party -sessionID +sendSessionID -val sessionID: Long +val sendSessionID: Long tx -val tx: WireTransaction +val tx: WireTransaction -

Inherited Functions

+

Inherited Properties

+sessionID +open val sessionID: Long
-getReplyTo -open fun getReplyTo(networkMapCache: NetworkMapCache): MessageRecipients
diff --git a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/receive-session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/receive-session-i-d.html new file mode 100644 index 0000000000..928bf99c86 --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/receive-session-i-d.html @@ -0,0 +1,16 @@ + + +RatesFixProtocol.SignRequest.receiveSessionID - + + + +com.r3corda.protocols / RatesFixProtocol / SignRequest / receiveSessionID
+
+

receiveSessionID

+ +val receiveSessionID: Long
+Overrides HandshakeMessage.receiveSessionID
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/send-session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/send-session-i-d.html new file mode 100644 index 0000000000..a2ad65618d --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/send-session-i-d.html @@ -0,0 +1,16 @@ + + +RatesFixProtocol.SignRequest.sendSessionID - + + + +com.r3corda.protocols / RatesFixProtocol / SignRequest / sendSessionID
+
+

sendSessionID

+ +val sendSessionID: Long
+Overrides HandshakeMessage.sendSessionID
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/session-i-d.html deleted file mode 100644 index efe052d1ff..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/session-i-d.html +++ /dev/null @@ -1,16 +0,0 @@ - - -RatesFixProtocol.SignRequest.sessionID - - - - -com.r3corda.protocols / RatesFixProtocol / SignRequest / sessionID
-
-

sessionID

- -val sessionID: Long
-Overrides ServiceRequestMessage.sessionID
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/tx.html b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/tx.html index af7a7ed5ea..4baf789371 100644 --- a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/tx.html +++ b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/-sign-request/tx.html @@ -8,7 +8,7 @@

tx

-val tx: WireTransaction
+val tx: WireTransaction


diff --git a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/index.html b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/index.html index c7dab55442..2c0ad65c79 100644 --- a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/index.html @@ -30,7 +30,7 @@ for each step.

QueryRequest -data class QueryRequest : PartyRequestMessage +data class QueryRequest : HandshakeMessage @@ -42,7 +42,7 @@ for each step.

SignRequest -data class SignRequest : PartyRequestMessage +data class SignRequest : HandshakeMessage @@ -70,7 +70,7 @@ for each step.

<init> -RatesFixProtocol(tx: TransactionBuilder, oracle: Party, fixOf: FixOf, expectedRate: BigDecimal, rateTolerance: BigDecimal, progressTracker: ProgressTracker = RatesFixProtocol.tracker(fixOf.name))

This protocol queries the given oracle for an interest rate fix, and if it is within the given tolerance embeds the +RatesFixProtocol(tx: TransactionBuilder, oracle: Party, fixOf: FixOf, expectedRate: BigDecimal, rateTolerance: BigDecimal, progressTracker: ProgressTracker = RatesFixProtocol.tracker(fixOf.name))

This protocol queries the given oracle for an interest rate fix, and if it is within the given tolerance embeds the fix in the transaction and then proceeds to get the oracle to sign it. Although the call method combines the query and signing step, you can run the steps individually by constructing this object and then using the public methods for each step.

@@ -103,7 +103,7 @@ Note that this is temporary until protocol sessions are properly implemented.

tx -val tx: TransactionBuilder +val tx: TransactionBuilder @@ -162,26 +162,36 @@ before its sent back to the oracle for signing (for example, adding output state receive -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
-fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

+ send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

diff --git a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/tx.html b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/tx.html index 2b65f0fd09..172440caca 100644 --- a/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/tx.html +++ b/docs/build/html/api/com.r3corda.protocols/-rates-fix-protocol/tx.html @@ -8,7 +8,7 @@

tx

-protected val tx: TransactionBuilder
+protected val tx: TransactionBuilder


diff --git a/docs/build/html/api/com.r3corda.protocols/-resolve-transactions-protocol/-init-.html b/docs/build/html/api/com.r3corda.protocols/-resolve-transactions-protocol/-init-.html index 10a13cb82d..63ff954b8c 100644 --- a/docs/build/html/api/com.r3corda.protocols/-resolve-transactions-protocol/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-resolve-transactions-protocol/-init-.html @@ -7,8 +7,8 @@ com.r3corda.protocols / ResolveTransactionsProtocol / <init>

<init>

-ResolveTransactionsProtocol(stx: SignedTransaction, otherSide: Party)
-ResolveTransactionsProtocol(wtx: WireTransaction, otherSide: Party)
+ResolveTransactionsProtocol(stx: SignedTransaction, otherSide: Party)
+ResolveTransactionsProtocol(wtx: WireTransaction, otherSide: Party)

Resolve the full history of a transaction and verify it with its dependencies.



@@ -18,10 +18,10 @@ dependencies. Once a transaction is checked its inserted into local storage so i checked again.

A couple of constructors are provided that accept a single transaction. When these are used, the dependencies of that transaction are resolved and then the transaction itself is verified. Again, if successful, the results are inserted -into the database as long as a SignedTransaction was provided. If only the WireTransaction form was provided +into the database as long as a SignedTransaction was provided. If only the WireTransaction form was provided then this isnt enough to put into the local database, so only the dependencies are checked and inserted. This way to use the protocol is helpful when resolving and verifying a finished but partially signed transaction.

-

The protocol returns a list of verified LedgerTransaction objects, in a depth-first order.

+

The protocol returns a list of verified LedgerTransaction objects, in a depth-first order.




diff --git a/docs/build/html/api/com.r3corda.protocols/-resolve-transactions-protocol/call.html b/docs/build/html/api/com.r3corda.protocols/-resolve-transactions-protocol/call.html index 83d25c4560..a33199f691 100644 --- a/docs/build/html/api/com.r3corda.protocols/-resolve-transactions-protocol/call.html +++ b/docs/build/html/api/com.r3corda.protocols/-resolve-transactions-protocol/call.html @@ -8,7 +8,7 @@

call

-fun call(): List<LedgerTransaction>
+fun call(): List<LedgerTransaction>
Overrides ProtocolLogic.call

This is where you fill out your business logic.


diff --git a/docs/build/html/api/com.r3corda.protocols/-resolve-transactions-protocol/index.html b/docs/build/html/api/com.r3corda.protocols/-resolve-transactions-protocol/index.html index 11ebedc478..9c0f2589c5 100644 --- a/docs/build/html/api/com.r3corda.protocols/-resolve-transactions-protocol/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-resolve-transactions-protocol/index.html @@ -7,16 +7,16 @@ com.r3corda.protocols / ResolveTransactionsProtocol

ResolveTransactionsProtocol

-class ResolveTransactionsProtocol : ProtocolLogic<List<LedgerTransaction>>
+class ResolveTransactionsProtocol : ProtocolLogic<List<LedgerTransaction>>

This protocol is used to verify the validity of a transaction by recursively checking the validity of all the dependencies. Once a transaction is checked its inserted into local storage so it can be relayed and wont be checked again.

A couple of constructors are provided that accept a single transaction. When these are used, the dependencies of that transaction are resolved and then the transaction itself is verified. Again, if successful, the results are inserted -into the database as long as a SignedTransaction was provided. If only the WireTransaction form was provided +into the database as long as a SignedTransaction was provided. If only the WireTransaction form was provided then this isnt enough to put into the local database, so only the dependencies are checked and inserted. This way to use the protocol is helpful when resolving and verifying a finished but partially signed transaction.

-

The protocol returns a list of verified LedgerTransaction objects, in a depth-first order.

+

The protocol returns a list of verified LedgerTransaction objects, in a depth-first order.




@@ -39,8 +39,8 @@ to use the protocol is helpful when resolving and verifying a finished but parti <init> -ResolveTransactionsProtocol(stx: SignedTransaction, otherSide: Party)
-ResolveTransactionsProtocol(wtx: WireTransaction, otherSide: Party)

Resolve the full history of a transaction and verify it with its dependencies.

+ResolveTransactionsProtocol(stx: SignedTransaction, otherSide: Party)
+ResolveTransactionsProtocol(wtx: WireTransaction, otherSide: Party)

Resolve the full history of a transaction and verify it with its dependencies.

ResolveTransactionsProtocol(txHashes: Set<SecureHash>, otherSide: Party)

This protocol is used to verify the validity of a transaction by recursively checking the validity of all the dependencies. Once a transaction is checked its inserted into local storage so it can be relayed and wont be checked again.

@@ -113,7 +113,7 @@ access this lazily or from inside call -fun call(): List<LedgerTransaction>

This is where you fill out your business logic.

+fun call(): List<LedgerTransaction>

This is where you fill out your business logic.

@@ -125,26 +125,36 @@ access this lazily or from inside receive -fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T>
-fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

+ send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/-init-.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/-init-.html index 1740ae331b..476b8597ae 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / TwoPartyDealProtocol / Acceptor / <init>

<init>

-Acceptor(otherSide: Party, notary: Party, dealToBuy: T, sessionID: Long, progressTracker: ProgressTracker = Secondary.tracker())
+Acceptor(otherParty: Party, notary: Party, dealToBuy: T, progressTracker: ProgressTracker = Secondary.tracker())

One side of the protocol for inserting a pre-agreed deal.



diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/assemble-shared-t-x.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/assemble-shared-t-x.html index e643c11019..8074839d03 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/assemble-shared-t-x.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/assemble-shared-t-x.html @@ -8,7 +8,7 @@

assembleSharedTX

-protected open fun assembleSharedTX(handshake: Handshake<T>): <ERROR CLASS><TransactionBuilder, List<PublicKey>>
+protected open fun assembleSharedTX(handshake: Handshake<T>): <ERROR CLASS><TransactionBuilder, List<PublicKey>>


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/index.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/index.html index 4e6b81f57e..8a5ca5d8f6 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/index.html @@ -18,7 +18,7 @@ <init> -Acceptor(otherSide: Party, notary: Party, dealToBuy: T, sessionID: Long, progressTracker: ProgressTracker = Secondary.tracker())

One side of the protocol for inserting a pre-agreed deal.

+Acceptor(otherParty: Party, notary: Party, dealToBuy: T, progressTracker: ProgressTracker = Secondary.tracker())

One side of the protocol for inserting a pre-agreed deal.

@@ -40,9 +40,9 @@ -otherSide +otherParty -open val otherSide: Party +open val otherParty: Party @@ -54,12 +54,6 @@ tracker will be made a child of the current step in the parent. If its null, thi progress.

- - -sessionID - -open val sessionID: Long -

Inherited Properties

@@ -82,7 +76,7 @@ Note that this is temporary until protocol sessions are properly implemented.

assembleSharedTX -open fun assembleSharedTX(handshake: Handshake<T>): <ERROR CLASS><TransactionBuilder, List<PublicKey>> +open fun assembleSharedTX(handshake: Handshake<T>): <ERROR CLASS><TransactionBuilder, List<PublicKey>> @@ -99,7 +93,7 @@ Note that this is temporary until protocol sessions are properly implemented.

call -open fun call(): SignedTransaction

This is where you fill out your business logic.

+open fun call(): SignedTransaction

This is where you fill out your business logic.

diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/other-party.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/other-party.html new file mode 100644 index 0000000000..dabcadc34a --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/other-party.html @@ -0,0 +1,16 @@ + + +TwoPartyDealProtocol.Acceptor.otherParty - + + + +com.r3corda.protocols / TwoPartyDealProtocol / Acceptor / otherParty
+
+

otherParty

+ +open val otherParty: Party
+Overrides Secondary.otherParty
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/other-side.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/other-side.html deleted file mode 100644 index 612449703a..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/other-side.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TwoPartyDealProtocol.Acceptor.otherSide - - - - -com.r3corda.protocols / TwoPartyDealProtocol / Acceptor / otherSide
-
-

otherSide

- -open val otherSide: Party
-Overrides Secondary.otherSide
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/session-i-d.html deleted file mode 100644 index a4b7f8e575..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-acceptor/session-i-d.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TwoPartyDealProtocol.Acceptor.sessionID - - - - -com.r3corda.protocols / TwoPartyDealProtocol / Acceptor / sessionID
-
-

sessionID

- -open val sessionID: Long
-Overrides Secondary.sessionID
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/-init-.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/-init-.html index 1151015509..d4a781a4dd 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / TwoPartyDealProtocol / Fixer / <init>

<init>

-Fixer(initiation: FixingSessionInitiation, progressTracker: ProgressTracker = Secondary.tracker())
+Fixer(otherParty: Party, oracleType: ServiceType, progressTracker: ProgressTracker = Secondary.tracker())

One side of the fixing protocol for an interest rate swap, but could easily be generalised further.

Do not infer too much from the name of the class. This is just to indicate that it is the "side" of the protocol that is run by the party with the fixed leg of swap deal, which is the basis for deciding diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/assemble-shared-t-x.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/assemble-shared-t-x.html index d779b66114..199e9f93b2 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/assemble-shared-t-x.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/assemble-shared-t-x.html @@ -8,7 +8,7 @@

assembleSharedTX

-protected fun assembleSharedTX(handshake: Handshake<StateRef>): <ERROR CLASS><TransactionBuilder, List<PublicKey>>
+protected fun assembleSharedTX(handshake: Handshake<StateRef>): <ERROR CLASS><TransactionBuilder, List<PublicKey>>


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/index.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/index.html index 2ba576ad56..e709ab2c28 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/index.html @@ -23,7 +23,7 @@ who does what in the protocol.

<init> -Fixer(initiation: FixingSessionInitiation, progressTracker: ProgressTracker = Secondary.tracker())

One side of the fixing protocol for an interest rate swap, but could easily be generalised further.

+Fixer(otherParty: Party, oracleType: ServiceType, progressTracker: ProgressTracker = Secondary.tracker())

One side of the fixing protocol for an interest rate swap, but could easily be generalised further.

@@ -33,15 +33,15 @@ who does what in the protocol.

-initiation +oracleType -val initiation: FixingSessionInitiation +val oracleType: ServiceType -otherSide +otherParty -val otherSide: Party +val otherParty: Party @@ -53,12 +53,6 @@ tracker will be made a child of the current step in the parent. If its null, thi progress.

- - -sessionID - -val sessionID: Long -

Inherited Properties

@@ -81,7 +75,7 @@ Note that this is temporary until protocol sessions are properly implemented.

assembleSharedTX -fun assembleSharedTX(handshake: Handshake<StateRef>): <ERROR CLASS><TransactionBuilder, List<PublicKey>> +fun assembleSharedTX(handshake: Handshake<StateRef>): <ERROR CLASS><TransactionBuilder, List<PublicKey>> @@ -98,7 +92,7 @@ Note that this is temporary until protocol sessions are properly implemented.

call -open fun call(): SignedTransaction

This is where you fill out your business logic.

+open fun call(): SignedTransaction

This is where you fill out your business logic.

diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/initiation.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/initiation.html deleted file mode 100644 index 9fc8fc0dc4..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/initiation.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TwoPartyDealProtocol.Fixer.initiation - - - - -com.r3corda.protocols / TwoPartyDealProtocol / Fixer / initiation
-
-

initiation

- -val initiation: FixingSessionInitiation
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/oracle-type.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/oracle-type.html new file mode 100644 index 0000000000..fa04336d6f --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/oracle-type.html @@ -0,0 +1,15 @@ + + +TwoPartyDealProtocol.Fixer.oracleType - + + + +com.r3corda.protocols / TwoPartyDealProtocol / Fixer / oracleType
+
+

oracleType

+ +val oracleType: ServiceType
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/other-party.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/other-party.html new file mode 100644 index 0000000000..50271567ba --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/other-party.html @@ -0,0 +1,16 @@ + + +TwoPartyDealProtocol.Fixer.otherParty - + + + +com.r3corda.protocols / TwoPartyDealProtocol / Fixer / otherParty
+
+

otherParty

+ +val otherParty: Party
+Overrides Secondary.otherParty
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/other-side.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/other-side.html deleted file mode 100644 index d405add903..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/other-side.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TwoPartyDealProtocol.Fixer.otherSide - - - - -com.r3corda.protocols / TwoPartyDealProtocol / Fixer / otherSide
-
-

otherSide

- -val otherSide: Party
-Overrides Secondary.otherSide
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/session-i-d.html deleted file mode 100644 index fd38c048c4..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixer/session-i-d.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TwoPartyDealProtocol.Fixer.sessionID - - - - -com.r3corda.protocols / TwoPartyDealProtocol / Fixer / sessionID
-
-

sessionID

- -val sessionID: Long
-Overrides Secondary.sessionID
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-role-decider/index.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-role-decider/index.html index 1511b0eceb..5b2fe79dca 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-role-decider/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-role-decider/index.html @@ -122,26 +122,36 @@ access this lazily or from inside receive -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
-fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

+ send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/-init-.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/-init-.html index 454587952e..5ed2d4e463 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / TwoPartyDealProtocol / FixingSessionInitiation / <init>

<init>

-FixingSessionInitiation(sessionID: Long, party: Party, sender: Party, timeout: Duration)
+FixingSessionInitiation(timeout: Duration, oracleType: ServiceType, replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue())

Used to set up the session between Floater and Fixer



diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/index.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/index.html index 6bfd8781bc..61baf515a7 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/index.html @@ -7,7 +7,7 @@ com.r3corda.protocols / TwoPartyDealProtocol / FixingSessionInitiation

FixingSessionInitiation

-data class FixingSessionInitiation
+data class FixingSessionInitiation : HandshakeMessage

Used to set up the session between Floater and Fixer



@@ -18,7 +18,7 @@ <init> -FixingSessionInitiation(sessionID: Long, party: Party, sender: Party, timeout: Duration)

Used to set up the session between Floater and Fixer

+FixingSessionInitiation(timeout: Duration, oracleType: ServiceType, replyToParty: Party, sendSessionID: Long = random63BitValue(), receiveSessionID: Long = random63BitValue())

Used to set up the session between Floater and Fixer

@@ -28,21 +28,27 @@ -party +oracleType -val party: Party +val oracleType: ServiceType -sender +receiveSessionID -val sender: Party +val receiveSessionID: Long -sessionID +replyToParty -val sessionID: Long +val replyToParty: Party + + + +sendSessionID + +val sendSessionID: Long @@ -52,5 +58,16 @@ +

Inherited Properties

+ + + + + + + +
+sessionID +open val sessionID: Long
diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/sender.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/oracle-type.html similarity index 56% rename from docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/sender.html rename to docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/oracle-type.html index 18c06ea640..4e07d1e941 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/sender.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/oracle-type.html @@ -1,14 +1,14 @@ -TwoPartyDealProtocol.FixingSessionInitiation.sender - +TwoPartyDealProtocol.FixingSessionInitiation.oracleType - -com.r3corda.protocols / TwoPartyDealProtocol / FixingSessionInitiation / sender
+com.r3corda.protocols / TwoPartyDealProtocol / FixingSessionInitiation / oracleType

-

sender

- -val sender: Party
+

oracleType

+ +val oracleType: ServiceType


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/receive-session-i-d.html similarity index 52% rename from docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/session-i-d.html rename to docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/receive-session-i-d.html index d6d1b6c660..3e5f2e95ee 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/session-i-d.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/receive-session-i-d.html @@ -1,14 +1,15 @@ -TwoPartyDealProtocol.FixingSessionInitiation.sessionID - +TwoPartyDealProtocol.FixingSessionInitiation.receiveSessionID - -com.r3corda.protocols / TwoPartyDealProtocol / FixingSessionInitiation / sessionID
+com.r3corda.protocols / TwoPartyDealProtocol / FixingSessionInitiation / receiveSessionID

-

sessionID

- -val sessionID: Long
+

receiveSessionID

+ +val receiveSessionID: Long
+Overrides HandshakeMessage.receiveSessionID


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/reply-to-party.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/reply-to-party.html new file mode 100644 index 0000000000..853b39aabe --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/reply-to-party.html @@ -0,0 +1,16 @@ + + +TwoPartyDealProtocol.FixingSessionInitiation.replyToParty - + + + +com.r3corda.protocols / TwoPartyDealProtocol / FixingSessionInitiation / replyToParty
+
+

replyToParty

+ +val replyToParty: Party
+Overrides PartyRequestMessage.replyToParty
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/party.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/send-session-i-d.html similarity index 54% rename from docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/party.html rename to docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/send-session-i-d.html index 8a33b57054..7dbb3a26ff 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/party.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-fixing-session-initiation/send-session-i-d.html @@ -1,14 +1,15 @@ -TwoPartyDealProtocol.FixingSessionInitiation.party - +TwoPartyDealProtocol.FixingSessionInitiation.sendSessionID - -com.r3corda.protocols / TwoPartyDealProtocol / FixingSessionInitiation / party
+com.r3corda.protocols / TwoPartyDealProtocol / FixingSessionInitiation / sendSessionID

-

party

- -val party: Party
+

sendSessionID

+ +val sendSessionID: Long
+Overrides HandshakeMessage.sendSessionID


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/-init-.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/-init-.html index 926a3a3daa..ba2502bbe3 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / TwoPartyDealProtocol / Floater / <init>

<init>

-Floater(payload: StateRef, otherSessionID: Long, progressTracker: ProgressTracker = Primary.tracker())
+Floater(otherParty: Party, payload: StateRef, progressTracker: ProgressTracker = Primary.tracker())

One side of the fixing protocol for an interest rate swap, but could easily be generalised furher.

As per the Fixer, do not infer too much from this class name in terms of business roles. This is just the "side" of the protocol run by the party with the floating leg as a way of deciding who diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/index.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/index.html index 3df6c8b9ef..157922e545 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/index.html @@ -23,7 +23,7 @@ does what in the protocol.

<init> -Floater(payload: StateRef, otherSessionID: Long, progressTracker: ProgressTracker = Primary.tracker())

One side of the fixing protocol for an interest rate swap, but could easily be generalised furher.

+Floater(otherParty: Party, payload: StateRef, progressTracker: ProgressTracker = Primary.tracker())

One side of the fixing protocol for an interest rate swap, but could easily be generalised furher.

@@ -45,15 +45,9 @@ does what in the protocol.

-otherSessionID +otherParty -val otherSessionID: Long - - - -otherSide - -val otherSide: Party +val otherParty: Party @@ -93,26 +87,26 @@ Note that this is temporary until protocol sessions are properly implemented.

call -open fun call(): SignedTransaction

This is where you fill out your business logic.

+open fun call(): SignedTransaction

This is where you fill out your business logic.

getPartialTransaction -fun getPartialTransaction(): UntrustworthyData<SignedTransaction> +fun getPartialTransaction(): UntrustworthyData<SignedTransaction> signWithOurKey -open fun signWithOurKey(partialTX: SignedTransaction): WithKey +open fun signWithOurKey(partialTX: SignedTransaction): WithKey verifyPartialTransaction -fun verifyPartialTransaction(untrustedPartialTX: UntrustworthyData<SignedTransaction>): SignedTransaction +fun verifyPartialTransaction(untrustedPartialTX: UntrustworthyData<SignedTransaction>): SignedTransaction diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/other-party.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/other-party.html new file mode 100644 index 0000000000..7eaaf9c0e2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/other-party.html @@ -0,0 +1,16 @@ + + +TwoPartyDealProtocol.Floater.otherParty - + + + +com.r3corda.protocols / TwoPartyDealProtocol / Floater / otherParty
+
+

otherParty

+ +val otherParty: Party
+Overrides Primary.otherParty
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/other-session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/other-session-i-d.html deleted file mode 100644 index e062563a0a..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/other-session-i-d.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TwoPartyDealProtocol.Floater.otherSessionID - - - - -com.r3corda.protocols / TwoPartyDealProtocol / Floater / otherSessionID
-
-

otherSessionID

- -val otherSessionID: Long
-Overrides Primary.otherSessionID
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/other-side.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/other-side.html deleted file mode 100644 index c47e99850c..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-floater/other-side.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TwoPartyDealProtocol.Floater.otherSide - - - - -com.r3corda.protocols / TwoPartyDealProtocol / Floater / otherSide
-
-

otherSide

- -val otherSide: Party
-Overrides Primary.otherSide
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-handshake/-init-.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-handshake/-init-.html index 2b83d2d4e9..2f9b8f583e 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-handshake/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-handshake/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / TwoPartyDealProtocol / Handshake / <init>

<init>

-Handshake(payload: T, publicKey: PublicKey, sessionID: Long)
+Handshake(payload: T, publicKey: PublicKey)


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-handshake/index.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-handshake/index.html index 4f1ec35133..825a5e6dfb 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-handshake/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-handshake/index.html @@ -17,7 +17,7 @@ <init> -Handshake(payload: T, publicKey: PublicKey, sessionID: Long) +Handshake(payload: T, publicKey: PublicKey) @@ -36,12 +36,6 @@ val publicKey: PublicKey - - -sessionID - -val sessionID: Long - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-handshake/session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-handshake/session-i-d.html deleted file mode 100644 index 64a3464b42..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-handshake/session-i-d.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TwoPartyDealProtocol.Handshake.sessionID - - - - -com.r3corda.protocols / TwoPartyDealProtocol / Handshake / sessionID
-
-

sessionID

- -val sessionID: Long
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/-init-.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/-init-.html index c8b5bb5929..23d0cde7b6 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / TwoPartyDealProtocol / Instigator / <init>

<init>

-Instigator(otherSide: Party, notary: Party, payload: T, myKeyPair: KeyPair, otherSessionID: Long, progressTracker: ProgressTracker = Primary.tracker())
+Instigator(otherParty: Party, notary: Party, payload: T, myKeyPair: KeyPair, progressTracker: ProgressTracker = Primary.tracker())

One side of the protocol for inserting a pre-agreed deal.



diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/index.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/index.html index 2bcf4f4a40..0734c7b015 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/index.html @@ -18,7 +18,7 @@ <init> -Instigator(otherSide: Party, notary: Party, payload: T, myKeyPair: KeyPair, otherSessionID: Long, progressTracker: ProgressTracker = Primary.tracker())

One side of the protocol for inserting a pre-agreed deal.

+Instigator(otherParty: Party, notary: Party, payload: T, myKeyPair: KeyPair, progressTracker: ProgressTracker = Primary.tracker())

One side of the protocol for inserting a pre-agreed deal.

@@ -46,15 +46,9 @@ -otherSessionID +otherParty -open val otherSessionID: Long - - - -otherSide - -open val otherSide: Party +open val otherParty: Party @@ -94,26 +88,26 @@ Note that this is temporary until protocol sessions are properly implemented.

call -open fun call(): SignedTransaction

This is where you fill out your business logic.

+open fun call(): SignedTransaction

This is where you fill out your business logic.

getPartialTransaction -fun getPartialTransaction(): UntrustworthyData<SignedTransaction> +fun getPartialTransaction(): UntrustworthyData<SignedTransaction> signWithOurKey -open fun signWithOurKey(partialTX: SignedTransaction): WithKey +open fun signWithOurKey(partialTX: SignedTransaction): WithKey verifyPartialTransaction -fun verifyPartialTransaction(untrustedPartialTX: UntrustworthyData<SignedTransaction>): SignedTransaction +fun verifyPartialTransaction(untrustedPartialTX: UntrustworthyData<SignedTransaction>): SignedTransaction diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/other-party.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/other-party.html new file mode 100644 index 0000000000..567b1abfcf --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/other-party.html @@ -0,0 +1,16 @@ + + +TwoPartyDealProtocol.Instigator.otherParty - + + + +com.r3corda.protocols / TwoPartyDealProtocol / Instigator / otherParty
+
+

otherParty

+ +open val otherParty: Party
+Overrides Primary.otherParty
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/other-session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/other-session-i-d.html deleted file mode 100644 index 5d557604bc..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/other-session-i-d.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TwoPartyDealProtocol.Instigator.otherSessionID - - - - -com.r3corda.protocols / TwoPartyDealProtocol / Instigator / otherSessionID
-
-

otherSessionID

- -open val otherSessionID: Long
-Overrides Primary.otherSessionID
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/other-side.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/other-side.html deleted file mode 100644 index 4584fcae3d..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-instigator/other-side.html +++ /dev/null @@ -1,16 +0,0 @@ - - -TwoPartyDealProtocol.Instigator.otherSide - - - - -com.r3corda.protocols / TwoPartyDealProtocol / Instigator / otherSide
-
-

otherSide

- -open val otherSide: Party
-Overrides Primary.otherSide
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/call.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/call.html index 15ce89bcde..717db4427e 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/call.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/call.html @@ -8,7 +8,7 @@

call

-open fun call(): SignedTransaction
+open fun call(): SignedTransaction
Overrides ProtocolLogic.call

This is where you fill out your business logic.


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/get-partial-transaction.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/get-partial-transaction.html index 6ee192d096..cb1dc271f8 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/get-partial-transaction.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/get-partial-transaction.html @@ -8,7 +8,7 @@

getPartialTransaction

-fun getPartialTransaction(): UntrustworthyData<SignedTransaction>
+fun getPartialTransaction(): UntrustworthyData<SignedTransaction>


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/index.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/index.html index 7def52aad4..26fc211c76 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/index.html @@ -7,7 +7,7 @@ com.r3corda.protocols / TwoPartyDealProtocol / Primary

Primary

-abstract class Primary<out U> : ProtocolLogic<SignedTransaction>
+abstract class Primary<out U> : ProtocolLogic<SignedTransaction>

Abstracted bilateral deal protocol participant that initiates communication/handshake.

Theres a good chance we can push at least some of this logic down into core protocol logic and helper methods etc.

@@ -91,15 +91,9 @@ and helper methods etc.

-otherSessionID +otherParty -abstract val otherSessionID: Long - - - -otherSide - -abstract val otherSide: Party +abstract val otherParty: Party @@ -162,26 +156,26 @@ access this lazily or from inside call -open fun call(): SignedTransaction

This is where you fill out your business logic.

+open fun call(): SignedTransaction

This is where you fill out your business logic.

getPartialTransaction -fun getPartialTransaction(): UntrustworthyData<SignedTransaction> +fun getPartialTransaction(): UntrustworthyData<SignedTransaction> signWithOurKey -open fun signWithOurKey(partialTX: SignedTransaction): WithKey +open fun signWithOurKey(partialTX: SignedTransaction): WithKey verifyPartialTransaction -fun verifyPartialTransaction(untrustedPartialTX: UntrustworthyData<SignedTransaction>): SignedTransaction +fun verifyPartialTransaction(untrustedPartialTX: UntrustworthyData<SignedTransaction>): SignedTransaction @@ -192,26 +186,36 @@ access this lazily or from inside receive -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
-fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

+ send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/other-session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/other-party.html similarity index 50% rename from docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/other-session-i-d.html rename to docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/other-party.html index a2461eed60..9e8cae7504 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/other-session-i-d.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/other-party.html @@ -1,14 +1,14 @@ -TwoPartyDealProtocol.Primary.otherSessionID - +TwoPartyDealProtocol.Primary.otherParty - -com.r3corda.protocols / TwoPartyDealProtocol / Primary / otherSessionID
+com.r3corda.protocols / TwoPartyDealProtocol / Primary / otherParty

-

otherSessionID

- -abstract val otherSessionID: Long
+

otherParty

+ +abstract val otherParty: Party


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/other-side.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/other-side.html deleted file mode 100644 index 595f90926b..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/other-side.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TwoPartyDealProtocol.Primary.otherSide - - - - -com.r3corda.protocols / TwoPartyDealProtocol / Primary / otherSide
-
-

otherSide

- -abstract val otherSide: Party
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/sign-with-our-key.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/sign-with-our-key.html index 64af5514f9..8c87997802 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/sign-with-our-key.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/sign-with-our-key.html @@ -7,8 +7,8 @@ com.r3corda.protocols / TwoPartyDealProtocol / Primary / signWithOurKey

signWithOurKey

- -open fun signWithOurKey(partialTX: SignedTransaction): WithKey
+ +open fun signWithOurKey(partialTX: SignedTransaction): WithKey


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/verify-partial-transaction.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/verify-partial-transaction.html index d51ec1d417..74a213c770 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/verify-partial-transaction.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-primary/verify-partial-transaction.html @@ -7,8 +7,8 @@ com.r3corda.protocols / TwoPartyDealProtocol / Primary / verifyPartialTransaction

verifyPartialTransaction

- -fun verifyPartialTransaction(untrustedPartialTX: UntrustworthyData<SignedTransaction>): SignedTransaction
+ +fun verifyPartialTransaction(untrustedPartialTX: UntrustworthyData<SignedTransaction>): SignedTransaction


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/assemble-shared-t-x.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/assemble-shared-t-x.html index 92c2ac79e7..f10decd1ff 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/assemble-shared-t-x.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/assemble-shared-t-x.html @@ -8,7 +8,7 @@

assembleSharedTX

-protected abstract fun assembleSharedTX(handshake: Handshake<U>): <ERROR CLASS><TransactionBuilder, List<PublicKey>>
+protected abstract fun assembleSharedTX(handshake: Handshake<U>): <ERROR CLASS><TransactionBuilder, List<PublicKey>>


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/call.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/call.html index 7f6c3d8038..59f348e80d 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/call.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/call.html @@ -8,7 +8,7 @@

call

-open fun call(): SignedTransaction
+open fun call(): SignedTransaction
Overrides ProtocolLogic.call

This is where you fill out your business logic.


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/index.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/index.html index 868d5b687e..b36803d7d9 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/index.html @@ -7,7 +7,7 @@ com.r3corda.protocols / TwoPartyDealProtocol / Secondary

Secondary

-abstract class Secondary<U> : ProtocolLogic<SignedTransaction>
+abstract class Secondary<U> : ProtocolLogic<SignedTransaction>

Abstracted bilateral deal protocol participant that is recipient of initial communication.

Theres a good chance we can push at least some of this logic down into core protocol logic and helper methods etc.

@@ -67,9 +67,9 @@ and helper methods etc.

-otherSide +otherParty -abstract val otherSide: Party +abstract val otherParty: Party @@ -83,12 +83,6 @@ progress.

-sessionID - -abstract val sessionID: Long - - - topic open val topic: String

The topic to use when communicating with other parties. If more than one topic is required then use sub-protocols. @@ -132,13 +126,13 @@ access this lazily or from inside assembleSharedTX -abstract fun assembleSharedTX(handshake: Handshake<U>): <ERROR CLASS><TransactionBuilder, List<PublicKey>> +abstract fun assembleSharedTX(handshake: Handshake<U>): <ERROR CLASS><TransactionBuilder, List<PublicKey>> call -open fun call(): SignedTransaction

This is where you fill out your business logic.

+open fun call(): SignedTransaction

This is where you fill out your business logic.

@@ -156,26 +150,36 @@ access this lazily or from inside receive -fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T>
-fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

+ send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/other-party.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/other-party.html new file mode 100644 index 0000000000..2170aa5dd9 --- /dev/null +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/other-party.html @@ -0,0 +1,15 @@ + + +TwoPartyDealProtocol.Secondary.otherParty - + + + +com.r3corda.protocols / TwoPartyDealProtocol / Secondary / otherParty
+
+

otherParty

+ +abstract val otherParty: Party
+
+
+ + diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/other-side.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/other-side.html deleted file mode 100644 index 8c4a359e84..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/other-side.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TwoPartyDealProtocol.Secondary.otherSide - - - - -com.r3corda.protocols / TwoPartyDealProtocol / Secondary / otherSide
-
-

otherSide

- -abstract val otherSide: Party
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/session-i-d.html deleted file mode 100644 index bf371642bd..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/-secondary/session-i-d.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TwoPartyDealProtocol.Secondary.sessionID - - - - -com.r3corda.protocols / TwoPartyDealProtocol / Secondary / sessionID
-
-

sessionID

- -abstract val sessionID: Long
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/index.html b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/index.html index 3341f97057..c81b9f24b4 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-deal-protocol/index.html @@ -44,7 +44,7 @@ FixingSessionInitiation -data class FixingSessionInitiation

Used to set up the session between Floater and Fixer

+data class FixingSessionInitiation : HandshakeMessage

Used to set up the session between Floater and Fixer

@@ -71,14 +71,14 @@ Primary -abstract class Primary<out U> : ProtocolLogic<SignedTransaction>

Abstracted bilateral deal protocol participant that initiates communication/handshake.

+abstract class Primary<out U> : ProtocolLogic<SignedTransaction>

Abstracted bilateral deal protocol participant that initiates communication/handshake.

Secondary -abstract class Secondary<U> : ProtocolLogic<SignedTransaction>

Abstracted bilateral deal protocol participant that is recipient of initial communication.

+abstract class Secondary<U> : ProtocolLogic<SignedTransaction>

Abstracted bilateral deal protocol participant that is recipient of initial communication.

diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/-init-.html b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/-init-.html index 261358137d..dea39afead 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / TwoPartyTradeProtocol / Buyer / <init>

<init>

-Buyer(otherSide: Party, notary: Party, acceptablePrice: Amount<Currency>, typeToBuy: Class<out OwnableState>, sessionID: Long)
+Buyer(otherParty: Party, notary: Party, acceptablePrice: Amount<Currency>, typeToBuy: Class<out OwnableState>)


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/call.html b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/call.html index 000dcf4f16..884a506df8 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/call.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/call.html @@ -8,7 +8,7 @@

call

-open fun call(): SignedTransaction
+open fun call(): SignedTransaction
Overrides ProtocolLogic.call

This is where you fill out your business logic.


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/index.html b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/index.html index ebacb1b033..6a364c7076 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/index.html @@ -7,7 +7,7 @@ com.r3corda.protocols / TwoPartyTradeProtocol / Buyer

Buyer

-class Buyer : ProtocolLogic<SignedTransaction>
+class Buyer : ProtocolLogic<SignedTransaction>


Types

@@ -46,7 +46,7 @@ <init> -Buyer(otherSide: Party, notary: Party, acceptablePrice: Amount<Currency>, typeToBuy: Class<out OwnableState>, sessionID: Long) +Buyer(otherParty: Party, notary: Party, acceptablePrice: Amount<Currency>, typeToBuy: Class<out OwnableState>) @@ -67,9 +67,9 @@ -otherSide +otherParty -val otherSide: Party +val otherParty: Party @@ -83,12 +83,6 @@ progress.

-sessionID - -val sessionID: Long - - - topic open val topic: String

The topic to use when communicating with other parties. If more than one topic is required then use sub-protocols. @@ -138,7 +132,7 @@ access this lazily or from inside call -open fun call(): SignedTransaction

This is where you fill out your business logic.

+open fun call(): SignedTransaction

This is where you fill out your business logic.

@@ -150,26 +144,36 @@ access this lazily or from inside receive -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
-fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

+ send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/other-side.html b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/other-party.html similarity index 53% rename from docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/other-side.html rename to docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/other-party.html index fa91b79a4e..70d026a16f 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/other-side.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/other-party.html @@ -1,14 +1,14 @@ -TwoPartyTradeProtocol.Buyer.otherSide - +TwoPartyTradeProtocol.Buyer.otherParty - -com.r3corda.protocols / TwoPartyTradeProtocol / Buyer / otherSide
+com.r3corda.protocols / TwoPartyTradeProtocol / Buyer / otherParty

-

otherSide

- -val otherSide: Party
+

otherParty

+ +val otherParty: Party


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/session-i-d.html deleted file mode 100644 index 16a5ced5b6..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-buyer/session-i-d.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TwoPartyTradeProtocol.Buyer.sessionID - - - - -com.r3corda.protocols / TwoPartyTradeProtocol / Buyer / sessionID
-
-

sessionID

- -val sessionID: Long
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller-trade-info/-init-.html b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller-trade-info/-init-.html index b3cc785c84..6d8dd49085 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller-trade-info/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller-trade-info/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / TwoPartyTradeProtocol / SellerTradeInfo / <init>

<init>

-SellerTradeInfo(assetForSale: StateAndRef<OwnableState>, price: Amount<Currency>, sellerOwnerKey: PublicKey, sessionID: Long)
+SellerTradeInfo(assetForSale: StateAndRef<OwnableState>, price: Amount<Currency>, sellerOwnerKey: PublicKey)


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller-trade-info/index.html b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller-trade-info/index.html index d3d152ecbb..0df8297b70 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller-trade-info/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller-trade-info/index.html @@ -17,7 +17,7 @@ <init> -SellerTradeInfo(assetForSale: StateAndRef<OwnableState>, price: Amount<Currency>, sellerOwnerKey: PublicKey, sessionID: Long) +SellerTradeInfo(assetForSale: StateAndRef<OwnableState>, price: Amount<Currency>, sellerOwnerKey: PublicKey) @@ -42,12 +42,6 @@ val sellerOwnerKey: PublicKey - - -sessionID - -val sessionID: Long - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller-trade-info/session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller-trade-info/session-i-d.html deleted file mode 100644 index 59b88fe408..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller-trade-info/session-i-d.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TwoPartyTradeProtocol.SellerTradeInfo.sessionID - - - - -com.r3corda.protocols / TwoPartyTradeProtocol / SellerTradeInfo / sessionID
-
-

sessionID

- -val sessionID: Long
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/-init-.html b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/-init-.html index 17388a3281..dcac84307f 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / TwoPartyTradeProtocol / Seller / <init>

<init>

-Seller(otherSide: Party, notaryNode: NodeInfo, assetToSell: StateAndRef<OwnableState>, price: Amount<Currency>, myKeyPair: KeyPair, buyerSessionID: Long, progressTracker: ProgressTracker = Seller.tracker())
+Seller(otherParty: Party, notaryNode: NodeInfo, assetToSell: StateAndRef<OwnableState>, price: Amount<Currency>, myKeyPair: KeyPair, progressTracker: ProgressTracker = Seller.tracker())


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/buyer-session-i-d.html b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/buyer-session-i-d.html deleted file mode 100644 index 49781acf61..0000000000 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/buyer-session-i-d.html +++ /dev/null @@ -1,15 +0,0 @@ - - -TwoPartyTradeProtocol.Seller.buyerSessionID - - - - -com.r3corda.protocols / TwoPartyTradeProtocol / Seller / buyerSessionID
-
-

buyerSessionID

- -val buyerSessionID: Long
-
-
- - diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/call.html b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/call.html index b7ef90fec2..5a4f86cf5e 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/call.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/call.html @@ -8,7 +8,7 @@

call

-open fun call(): SignedTransaction
+open fun call(): SignedTransaction
Overrides ProtocolLogic.call

This is where you fill out your business logic.


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/index.html b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/index.html index 5f243c7a8d..84fe37b1fc 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/index.html @@ -7,7 +7,7 @@ com.r3corda.protocols / TwoPartyTradeProtocol / Seller

Seller

-class Seller : ProtocolLogic<SignedTransaction>
+class Seller : ProtocolLogic<SignedTransaction>


Types

@@ -52,7 +52,7 @@ <init> -Seller(otherSide: Party, notaryNode: NodeInfo, assetToSell: StateAndRef<OwnableState>, price: Amount<Currency>, myKeyPair: KeyPair, buyerSessionID: Long, progressTracker: ProgressTracker = Seller.tracker()) +Seller(otherParty: Party, notaryNode: NodeInfo, assetToSell: StateAndRef<OwnableState>, price: Amount<Currency>, myKeyPair: KeyPair, progressTracker: ProgressTracker = Seller.tracker()) @@ -67,12 +67,6 @@ -buyerSessionID - -val buyerSessionID: Long - - - myKeyPair val myKeyPair: KeyPair @@ -85,9 +79,9 @@ -otherSide +otherParty -val otherSide: Party +val otherParty: Party @@ -150,14 +144,14 @@ access this lazily or from inside call -open fun call(): SignedTransaction

This is where you fill out your business logic.

+open fun call(): SignedTransaction

This is where you fill out your business logic.

signWithOurKey -open fun signWithOurKey(partialTX: SignedTransaction): WithKey +open fun signWithOurKey(partialTX: SignedTransaction): WithKey @@ -168,26 +162,36 @@ access this lazily or from inside receive -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
-fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party): UntrustworthyData<T> + + + +registerSession + +fun registerSession(receivedHandshake: HandshakeMessage): Unit

If a node receives a HandshakeMessage it needs to call this method on the initiated receipt protocol to enable +communication between it and the sender protocol. Calling this method, and other initiation steps, are already +handled by AbstractNodeService.addProtocolHandler.

+ send -fun send(destination: Party, sessionID: Long, payload: Any): Unit +fun send(otherParty: Party, payload: Any): Unit sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R

Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the ProtocolStateMachine and then calling the call method.

diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/other-side.html b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/other-party.html similarity index 52% rename from docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/other-side.html rename to docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/other-party.html index 2888cdfb72..24d268a3b0 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/other-side.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/other-party.html @@ -1,14 +1,14 @@ -TwoPartyTradeProtocol.Seller.otherSide - +TwoPartyTradeProtocol.Seller.otherParty - -com.r3corda.protocols / TwoPartyTradeProtocol / Seller / otherSide
+com.r3corda.protocols / TwoPartyTradeProtocol / Seller / otherParty

-

otherSide

- -val otherSide: Party
+

otherParty

+ +val otherParty: Party


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/sign-with-our-key.html b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/sign-with-our-key.html index b3513564e7..7f93a7e176 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/sign-with-our-key.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/-seller/sign-with-our-key.html @@ -7,8 +7,8 @@ com.r3corda.protocols / TwoPartyTradeProtocol / Seller / signWithOurKey

signWithOurKey

- -open fun signWithOurKey(partialTX: SignedTransaction): WithKey
+ +open fun signWithOurKey(partialTX: SignedTransaction): WithKey


diff --git a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/index.html b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/index.html index a3e9b6cea5..005441ee16 100644 --- a/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-two-party-trade-protocol/index.html @@ -12,7 +12,7 @@ and seller) and the following steps:

  1. S sends the StateAndRef pointing to what they want to sell to B, along with info about the price they require B to pay. For example this has probably been agreed on an exchange.

    -
  2. B sends to S a SignedTransaction that includes the state as input, Bs cash as input, the state with the new +

  3. B sends to S a SignedTransaction that includes the state as input, Bs 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 isnt valid because it lacks a signature from S authorising movement of the asset.

  4. S signs it and hands the now finalised SignedWireTransaction back to B.

    @@ -35,13 +35,13 @@ transaction is available: you can either block your thread waiting for the proto Buyer -class Buyer : ProtocolLogic<SignedTransaction> +class Buyer : ProtocolLogic<SignedTransaction> Seller -class Seller : ProtocolLogic<SignedTransaction> +class Seller : ProtocolLogic<SignedTransaction> diff --git a/docs/build/html/api/com.r3corda.protocols/-validating-notary-protocol/-init-.html b/docs/build/html/api/com.r3corda.protocols/-validating-notary-protocol/-init-.html index 0b9c8ebd7c..cd112b582d 100644 --- a/docs/build/html/api/com.r3corda.protocols/-validating-notary-protocol/-init-.html +++ b/docs/build/html/api/com.r3corda.protocols/-validating-notary-protocol/-init-.html @@ -7,7 +7,7 @@ com.r3corda.protocols / ValidatingNotaryProtocol / <init>

    <init>

    -ValidatingNotaryProtocol(otherSide: Party, sessionIdForSend: Long, sessionIdForReceive: Long, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)
    +ValidatingNotaryProtocol(otherSide: Party, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)

    A notary commit protocol that makes sure a given transaction is valid before committing it. This does mean that the calling party has to reveal the whole transaction history; however, we avoid complex conflict resolution logic where a party has its input states "blocked" by a transaction from another party, and needs to establish whether that transaction was diff --git a/docs/build/html/api/com.r3corda.protocols/-validating-notary-protocol/before-commit.html b/docs/build/html/api/com.r3corda.protocols/-validating-notary-protocol/before-commit.html index 91768c5916..1fbf73d42d 100644 --- a/docs/build/html/api/com.r3corda.protocols/-validating-notary-protocol/before-commit.html +++ b/docs/build/html/api/com.r3corda.protocols/-validating-notary-protocol/before-commit.html @@ -7,8 +7,8 @@ com.r3corda.protocols / ValidatingNotaryProtocol / beforeCommit

    beforeCommit

    - -fun beforeCommit(stx: SignedTransaction, reqIdentity: Party): Unit
    + +fun beforeCommit(stx: SignedTransaction, reqIdentity: Party): Unit
    Overrides Service.beforeCommit

    No pre-commit processing is done. Transaction is not checked for contract-validity, as that would require fully resolving it into a TransactionForVerification, for which the caller would have to reveal the whole transaction diff --git a/docs/build/html/api/com.r3corda.protocols/-validating-notary-protocol/index.html b/docs/build/html/api/com.r3corda.protocols/-validating-notary-protocol/index.html index d71e70ea2a..bf15c84910 100644 --- a/docs/build/html/api/com.r3corda.protocols/-validating-notary-protocol/index.html +++ b/docs/build/html/api/com.r3corda.protocols/-validating-notary-protocol/index.html @@ -21,7 +21,7 @@ indeed valid.

    <init> -ValidatingNotaryProtocol(otherSide: Party, sessionIdForSend: Long, sessionIdForReceive: Long, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)

    A notary commit protocol that makes sure a given transaction is valid before committing it. This does mean that the calling +ValidatingNotaryProtocol(otherSide: Party, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)

    A notary commit protocol that makes sure a given transaction is valid before committing it. This does mean that the calling party has to reveal the whole transaction history; however, we avoid complex conflict resolution logic where a party has its input states "blocked" by a transaction from another party, and needs to establish whether that transaction was indeed valid.

    @@ -40,18 +40,6 @@ indeed valid.

    -receiveSessionID - -val receiveSessionID: Long - - - -sendSessionID - -val sendSessionID: Long - - - timestampChecker val timestampChecker: TimestampChecker @@ -79,7 +67,7 @@ Note that this is temporary until protocol sessions are properly implemented.

    beforeCommit -fun beforeCommit(stx: SignedTransaction, reqIdentity: Party): Unit

    No pre-commit processing is done. Transaction is not checked for contract-validity, as that would require fully +fun beforeCommit(stx: SignedTransaction, reqIdentity: Party): Unit

    No pre-commit processing is done. Transaction is not checked for contract-validity, as that would require fully resolving it into a TransactionForVerification, for which the caller would have to reveal the whole transaction history chain. As a result, the Notary will commit invalid transactions as well, but as it also records the identity of diff --git a/docs/build/html/api/com.r3corda.protocols/index.html b/docs/build/html/api/com.r3corda.protocols/index.html index 114f0c7e3b..5607f140ea 100644 --- a/docs/build/html/api/com.r3corda.protocols/index.html +++ b/docs/build/html/api/com.r3corda.protocols/index.html @@ -56,7 +56,7 @@ attachments are saved to local storage automatically.

    FetchTransactionsProtocol -class FetchTransactionsProtocol : FetchDataProtocol<SignedTransaction, SignedTransaction>

    Given a set of tx hashes (IDs), either loads them from local disk or asks the remote peer to provide them.

    +class FetchTransactionsProtocol : FetchDataProtocol<SignedTransaction, SignedTransaction>

    Given a set of tx hashes (IDs), either loads them from local disk or asks the remote peer to provide them.

    @@ -68,6 +68,15 @@ attachments are saved to local storage automatically.

    +HandshakeMessage + +interface HandshakeMessage : PartyRequestMessage

    A Handshake message is sent to initiate communication between two protocol instances. It contains the two session IDs +the two protocols will need to communicate. +Note: This is a temperary interface and will be removed once the protocol session work is implemented.

    + + + + NotaryChangeProtocol object NotaryChangeProtocol : AbstractStateReplacementProtocol<Party>

    A protocol to be used for changing a states Notary. This is required since all input states to a transaction @@ -106,7 +115,7 @@ for each step.

    ResolveTransactionsProtocol -class ResolveTransactionsProtocol : ProtocolLogic<List<LedgerTransaction>>

    This protocol is used to verify the validity of a transaction by recursively checking the validity of all the +class ResolveTransactionsProtocol : ProtocolLogic<List<LedgerTransaction>>

    This protocol is used to verify the validity of a transaction by recursively checking the validity of all the dependencies. Once a transaction is checked its inserted into local storage so it can be relayed and wont be checked again.

    diff --git a/docs/build/html/api/com.r3corda.simulation/-i-r-s-simulation/-init-.html b/docs/build/html/api/com.r3corda.simulation/-i-r-s-simulation/-init-.html new file mode 100644 index 0000000000..3cf6819ae7 --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-i-r-s-simulation/-init-.html @@ -0,0 +1,15 @@ + + +IRSSimulation.<init> - + + + +com.r3corda.simulation / IRSSimulation / <init>
    +
    +

    <init>

    +IRSSimulation(networkSendManuallyPumped: Boolean, runAsync: Boolean, latencyInjector: <ERROR CLASS>?)
    +

    A simulation in which banks execute interest rate swaps with each other, including the fixing events.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-i-r-s-simulation/index.html b/docs/build/html/api/com.r3corda.simulation/-i-r-s-simulation/index.html similarity index 73% rename from docs/build/html/api/com.r3corda.node.internal.testing/-i-r-s-simulation/index.html rename to docs/build/html/api/com.r3corda.simulation/-i-r-s-simulation/index.html index ab9fb4286c..5df63e6be3 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-i-r-s-simulation/index.html +++ b/docs/build/html/api/com.r3corda.simulation/-i-r-s-simulation/index.html @@ -4,7 +4,7 @@ -com.r3corda.node.internal.testing / IRSSimulation
    +com.r3corda.simulation / IRSSimulation

    IRSSimulation

    class IRSSimulation : Simulation
    @@ -18,7 +18,7 @@ <init> -IRSSimulation(networkSendManuallyPumped: Boolean, runAsync: Boolean, latencyInjector: LatencyCalculator?)

    A simulation in which banks execute interest rate swaps with each other, including the fixing events.

    +IRSSimulation(networkSendManuallyPumped: Boolean, runAsync: Boolean, latencyInjector: <ERROR CLASS>?)

    A simulation in which banks execute interest rate swaps with each other, including the fixing events.

    @@ -99,7 +99,7 @@ in the UI somewhere.

    network -val network: MockNetwork +val network: <ERROR CLASS> @@ -152,7 +152,7 @@ in the UI somewhere.

    iterate -fun iterate(): MessageTransfer?

    Iterates the simulation by one step.

    +fun iterate(): <ERROR CLASS>?

    Iterates the simulation by one step.

    @@ -172,13 +172,13 @@ network bringup has been simulated.

    showConsensusFor -fun showConsensusFor(nodes: List<SimulatedNode>): Unit +fun showConsensusFor(nodes: List<SimulatedNode>): Unit showProgressFor -fun showProgressFor(nodes: List<SimulatedNode>): Unit +fun showProgressFor(nodes: List<SimulatedNode>): Unit @@ -190,7 +190,7 @@ network bringup has been simulated.

    startTradingCircle -fun startTradingCircle(tradeBetween: (Int, Int) -> <ERROR CLASS><out <ERROR CLASS>>): Unit

    Given a function that returns a future, iterates that function with arguments like (0, 1), (1, 2), (2, 3) etc +fun startTradingCircle(tradeBetween: (Int, Int) -> <ERROR CLASS><out <ERROR CLASS>>): Unit

    Given a function that returns a future, iterates that function with arguments like (0, 1), (1, 2), (2, 3) etc each time the returned future completes.

    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-i-r-s-simulation/iterate.html b/docs/build/html/api/com.r3corda.simulation/-i-r-s-simulation/iterate.html similarity index 66% rename from docs/build/html/api/com.r3corda.node.internal.testing/-i-r-s-simulation/iterate.html rename to docs/build/html/api/com.r3corda.simulation/-i-r-s-simulation/iterate.html index 2d2be5183f..96896304ab 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-i-r-s-simulation/iterate.html +++ b/docs/build/html/api/com.r3corda.simulation/-i-r-s-simulation/iterate.html @@ -4,11 +4,11 @@ -com.r3corda.node.internal.testing / IRSSimulation / iterate
    +com.r3corda.simulation / IRSSimulation / iterate

    iterate

    - -fun iterate(): MessageTransfer?
    + +fun iterate(): <ERROR CLASS>?
    Overrides Simulation.iterate

    Iterates the simulation by one step.

    The default implementation circles around the nodes, pumping until one of them handles a message. The next call diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-i-r-s-simulation/om.html b/docs/build/html/api/com.r3corda.simulation/-i-r-s-simulation/om.html similarity index 60% rename from docs/build/html/api/com.r3corda.node.internal.testing/-i-r-s-simulation/om.html rename to docs/build/html/api/com.r3corda.simulation/-i-r-s-simulation/om.html index 7ccc11958e..b0642cf371 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-i-r-s-simulation/om.html +++ b/docs/build/html/api/com.r3corda.simulation/-i-r-s-simulation/om.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / IRSSimulation / om
    +com.r3corda.simulation / IRSSimulation / om

    om

    - + val om: <ERROR CLASS>


    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-i-r-s-simulation/start-main-simulation.html b/docs/build/html/api/com.r3corda.simulation/-i-r-s-simulation/start-main-simulation.html similarity index 76% rename from docs/build/html/api/com.r3corda.node.internal.testing/-i-r-s-simulation/start-main-simulation.html rename to docs/build/html/api/com.r3corda.simulation/-i-r-s-simulation/start-main-simulation.html index 60ba6051a7..f4783af239 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-i-r-s-simulation/start-main-simulation.html +++ b/docs/build/html/api/com.r3corda.simulation/-i-r-s-simulation/start-main-simulation.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / IRSSimulation / startMainSimulation
    +com.r3corda.simulation / IRSSimulation / startMainSimulation

    startMainSimulation

    - + protected fun startMainSimulation(): <ERROR CLASS><Unit>
    Overrides Simulation.startMainSimulation

    Sub-classes should override this to trigger whatever they want to simulate. This method will be invoked once the diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/-init-.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/-init-.html similarity index 58% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/-init-.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/-init-.html index 5557efc7e9..50424d32e8 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/-init-.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/-init-.html @@ -4,7 +4,7 @@ -com.r3corda.node.internal.testing / Simulation / BankFactory / <init>
    +com.r3corda.simulation / Simulation / BankFactory / <init>

    <init>

    BankFactory()
    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/counter.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/counter.html similarity index 53% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/counter.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/counter.html index 4c32151b8e..2967611a79 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/counter.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/counter.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / BankFactory / counter
    +com.r3corda.simulation / Simulation / BankFactory / counter

    counter

    - + var counter: Int


    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/create-all.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/create-all.html similarity index 65% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/create-all.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/create-all.html index 7b31596368..e545509808 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-bank-factory/create-all.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/create-all.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / BankFactory / createAll
    +com.r3corda.simulation / Simulation / BankFactory / createAll

    createAll

    - + fun createAll(): List<SimulatedNode>


    diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/create.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/create.html new file mode 100644 index 0000000000..4200d4ec21 --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/create.html @@ -0,0 +1,15 @@ + + +Simulation.BankFactory.create - + + + +com.r3corda.simulation / Simulation / BankFactory / create
    +
    +

    create

    + +fun create(config: NodeConfiguration, network: <ERROR CLASS>, networkMapAddr: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): <ERROR CLASS>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/index.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/index.html new file mode 100644 index 0000000000..829b4e3bc0 --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-bank-factory/index.html @@ -0,0 +1,53 @@ + + +Simulation.BankFactory - + + + +com.r3corda.simulation / Simulation / BankFactory
    +
    +

    BankFactory

    +inner class BankFactory
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +BankFactory()
    +

    Properties

    + + + + + + + +
    +counter +var counter: Int
    +

    Functions

    + + + + + + + + + + + +
    +create +fun create(config: NodeConfiguration, network: <ERROR CLASS>, networkMapAddr: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): <ERROR CLASS>
    +createAll +fun createAll(): List<SimulatedNode>
    + + diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/-init-.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-init-.html new file mode 100644 index 0000000000..d5bef4aa63 --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-init-.html @@ -0,0 +1,19 @@ + + +Simulation.<init> - + + + +com.r3corda.simulation / Simulation / <init>
    +
    +

    <init>

    +Simulation(networkSendManuallyPumped: Boolean, runAsync: Boolean, latencyInjector: <ERROR CLASS>?)
    +

    Base class for network simulations that are based on the unit test / mock environment.

    +

    Sets up some nodes that can run protocols between each other, and exposes their progress trackers. Provides banks +in a few cities around the world.

    +
    +
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/-network-map-node-factory/create.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-network-map-node-factory/create.html new file mode 100644 index 0000000000..c2f803253c --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-network-map-node-factory/create.html @@ -0,0 +1,15 @@ + + +Simulation.NetworkMapNodeFactory.create - + + + +com.r3corda.simulation / Simulation / NetworkMapNodeFactory / create
    +
    +

    create

    + +fun create(config: NodeConfiguration, network: <ERROR CLASS>, networkMapAddr: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): <ERROR CLASS>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/-network-map-node-factory/index.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-network-map-node-factory/index.html new file mode 100644 index 0000000000..52ed6934a4 --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-network-map-node-factory/index.html @@ -0,0 +1,25 @@ + + +Simulation.NetworkMapNodeFactory - + + + +com.r3corda.simulation / Simulation / NetworkMapNodeFactory
    +
    +

    NetworkMapNodeFactory

    +object NetworkMapNodeFactory
    +
    +
    +

    Functions

    + + + + + + + +
    +create +fun create(config: NodeConfiguration, network: <ERROR CLASS>, networkMapAddr: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): <ERROR CLASS>
    + + diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/-notary-node-factory/create.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-notary-node-factory/create.html new file mode 100644 index 0000000000..e25bd39e05 --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-notary-node-factory/create.html @@ -0,0 +1,15 @@ + + +Simulation.NotaryNodeFactory.create - + + + +com.r3corda.simulation / Simulation / NotaryNodeFactory / create
    +
    +

    create

    + +fun create(config: NodeConfiguration, network: <ERROR CLASS>, networkMapAddr: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): <ERROR CLASS>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/-notary-node-factory/index.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-notary-node-factory/index.html new file mode 100644 index 0000000000..ddd593e306 --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-notary-node-factory/index.html @@ -0,0 +1,25 @@ + + +Simulation.NotaryNodeFactory - + + + +com.r3corda.simulation / Simulation / NotaryNodeFactory
    +
    +

    NotaryNodeFactory

    +object NotaryNodeFactory
    +
    +
    +

    Functions

    + + + + + + + +
    +create +fun create(config: NodeConfiguration, network: <ERROR CLASS>, networkMapAddr: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): <ERROR CLASS>
    + + diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/-rates-oracle-factory/create.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-rates-oracle-factory/create.html new file mode 100644 index 0000000000..a1531e4969 --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-rates-oracle-factory/create.html @@ -0,0 +1,15 @@ + + +Simulation.RatesOracleFactory.create - + + + +com.r3corda.simulation / Simulation / RatesOracleFactory / create
    +
    +

    create

    + +fun create(config: NodeConfiguration, network: <ERROR CLASS>, networkMapAddr: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): <ERROR CLASS>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/-rates-oracle-factory/index.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-rates-oracle-factory/index.html new file mode 100644 index 0000000000..87be55a6bd --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-rates-oracle-factory/index.html @@ -0,0 +1,25 @@ + + +Simulation.RatesOracleFactory - + + + +com.r3corda.simulation / Simulation / RatesOracleFactory
    +
    +

    RatesOracleFactory

    +object RatesOracleFactory
    +
    +
    +

    Functions

    + + + + + + + +
    +create +fun create(config: NodeConfiguration, network: <ERROR CLASS>, networkMapAddr: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): <ERROR CLASS>
    + + diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/-regulator-factory/create.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-regulator-factory/create.html new file mode 100644 index 0000000000..e692ff4402 --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-regulator-factory/create.html @@ -0,0 +1,15 @@ + + +Simulation.RegulatorFactory.create - + + + +com.r3corda.simulation / Simulation / RegulatorFactory / create
    +
    +

    create

    + +fun create(config: NodeConfiguration, network: <ERROR CLASS>, networkMapAddr: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): <ERROR CLASS>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/-regulator-factory/index.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-regulator-factory/index.html new file mode 100644 index 0000000000..2454650716 --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-regulator-factory/index.html @@ -0,0 +1,25 @@ + + +Simulation.RegulatorFactory - + + + +com.r3corda.simulation / Simulation / RegulatorFactory
    +
    +

    RegulatorFactory

    +object RegulatorFactory
    +
    +
    +

    Functions

    + + + + + + + +
    +create +fun create(config: NodeConfiguration, network: <ERROR CLASS>, networkMapAddr: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): <ERROR CLASS>
    + + diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/-simulated-node/-init-.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-simulated-node/-init-.html new file mode 100644 index 0000000000..fec4171e2f --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-simulated-node/-init-.html @@ -0,0 +1,14 @@ + + +Simulation.SimulatedNode.<init> - + + + +com.r3corda.simulation / Simulation / SimulatedNode / <init>
    +
    +

    <init>

    +SimulatedNode(config: NodeConfiguration, mockNet: <ERROR CLASS>, networkMapAddress: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?)
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-simulated-node/find-my-location.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-simulated-node/find-my-location.html similarity index 57% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-simulated-node/find-my-location.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/-simulated-node/find-my-location.html index c2dfceb27e..85d904dba5 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/-simulated-node/find-my-location.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-simulated-node/find-my-location.html @@ -4,12 +4,11 @@ -com.r3corda.node.internal.testing / Simulation / SimulatedNode / findMyLocation
    +com.r3corda.simulation / Simulation / SimulatedNode / findMyLocation

    findMyLocation

    - + open fun findMyLocation(): PhysicalLocation?
    -Overrides MockNode.findMyLocation


    diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/-simulated-node/index.html b/docs/build/html/api/com.r3corda.simulation/-simulation/-simulated-node/index.html new file mode 100644 index 0000000000..117a36fabf --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/-simulated-node/index.html @@ -0,0 +1,36 @@ + + +Simulation.SimulatedNode - + + + +com.r3corda.simulation / Simulation / SimulatedNode
    +
    +

    SimulatedNode

    +open class SimulatedNode
    +
    +
    +

    Constructors

    + + + + + + + +
    +<init> +SimulatedNode(config: NodeConfiguration, mockNet: <ERROR CLASS>, networkMapAddress: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?)
    +

    Functions

    + + + + + + + +
    +findMyLocation +open fun findMyLocation(): PhysicalLocation?
    + + diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/all-protocol-steps.html b/docs/build/html/api/com.r3corda.simulation/-simulation/all-protocol-steps.html similarity index 76% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/all-protocol-steps.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/all-protocol-steps.html index 8e355cd082..7ff6126f5e 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/all-protocol-steps.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/all-protocol-steps.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / allProtocolSteps
    +com.r3corda.simulation / Simulation / allProtocolSteps

    allProtocolSteps

    - + val allProtocolSteps: <ERROR CLASS><<ERROR CLASS><SimulatedNode, Change>>


    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/bank-factory.html b/docs/build/html/api/com.r3corda.simulation/-simulation/bank-factory.html similarity index 62% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/bank-factory.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/bank-factory.html index 4b357f4b56..17a1f22eeb 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/bank-factory.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/bank-factory.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / bankFactory
    +com.r3corda.simulation / Simulation / bankFactory

    bankFactory

    - + val bankFactory: BankFactory


    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/bank-locations.html b/docs/build/html/api/com.r3corda.simulation/-simulation/bank-locations.html similarity index 60% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/bank-locations.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/bank-locations.html index 4d7f56c8a4..9af6df91f3 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/bank-locations.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/bank-locations.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / bankLocations
    +com.r3corda.simulation / Simulation / bankLocations

    bankLocations

    - + val bankLocations: <ERROR CLASS>


    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/banks.html b/docs/build/html/api/com.r3corda.simulation/-simulation/banks.html similarity index 68% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/banks.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/banks.html index 1f6e5d6664..b1bafff6aa 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/banks.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/banks.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / banks
    +com.r3corda.simulation / Simulation / banks

    banks

    - + val banks: List<SimulatedNode>


    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/clocks.html b/docs/build/html/api/com.r3corda.simulation/-simulation/clocks.html similarity index 60% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/clocks.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/clocks.html index ba7bc1a4fc..f4b9a2b542 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/clocks.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/clocks.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / clocks
    +com.r3corda.simulation / Simulation / clocks

    clocks

    - + val clocks: <ERROR CLASS>


    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/current-date-and-time.html b/docs/build/html/api/com.r3corda.simulation/-simulation/current-date-and-time.html similarity index 75% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/current-date-and-time.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/current-date-and-time.html index f8c7cae3b4..768863e6bb 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/current-date-and-time.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/current-date-and-time.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / currentDateAndTime
    +com.r3corda.simulation / Simulation / currentDateAndTime

    currentDateAndTime

    - + var currentDateAndTime: LocalDateTime

    The current simulated date. By default this never changes. If you want it to change, you should do so from within your overridden iterate call. Changes in the current day surface in the dateChanges observable.

    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/date-changes.html b/docs/build/html/api/com.r3corda.simulation/-simulation/date-changes.html similarity index 70% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/date-changes.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/date-changes.html index 58391e1b23..3cddc929d7 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/date-changes.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/date-changes.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / dateChanges
    +com.r3corda.simulation / Simulation / dateChanges

    dateChanges

    - + val dateChanges: <ERROR CLASS><LocalDateTime>


    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/done-steps.html b/docs/build/html/api/com.r3corda.simulation/-simulation/done-steps.html similarity index 72% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/done-steps.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/done-steps.html index 4a446647ec..c4fc0c01a9 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/done-steps.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/done-steps.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / doneSteps
    +com.r3corda.simulation / Simulation / doneSteps

    doneSteps

    - + val doneSteps: <ERROR CLASS><Collection<SimulatedNode>>


    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/extra-node-labels.html b/docs/build/html/api/com.r3corda.simulation/-simulation/extra-node-labels.html similarity index 75% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/extra-node-labels.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/extra-node-labels.html index f8fbbba5fb..dc57837837 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/extra-node-labels.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/extra-node-labels.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / extraNodeLabels
    +com.r3corda.simulation / Simulation / extraNodeLabels

    extraNodeLabels

    - + val extraNodeLabels: MutableMap<SimulatedNode, String>

    A place for simulations to stash human meaningful text about what the node is "thinking", which might appear in the UI somewhere.

    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/index.html b/docs/build/html/api/com.r3corda.simulation/-simulation/index.html similarity index 70% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/index.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/index.html index eb958b7f55..14f64e2f71 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/index.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/index.html @@ -4,7 +4,7 @@ -com.r3corda.node.internal.testing / Simulation
    +com.r3corda.simulation / Simulation

    Simulation

    abstract class Simulation
    @@ -22,37 +22,37 @@ in a few cities around the world.

    BankFactory -inner class BankFactory : Factory +inner class BankFactory NetworkMapNodeFactory -object NetworkMapNodeFactory : Factory +object NetworkMapNodeFactory NotaryNodeFactory -object NotaryNodeFactory : Factory +object NotaryNodeFactory RatesOracleFactory -object RatesOracleFactory : Factory +object RatesOracleFactory RegulatorFactory -object RegulatorFactory : Factory +object RegulatorFactory SimulatedNode -open class SimulatedNode : MockNode +open class SimulatedNode @@ -63,7 +63,7 @@ in a few cities around the world.

    <init> -Simulation(networkSendManuallyPumped: Boolean, runAsync: Boolean, latencyInjector: LatencyCalculator?)

    Base class for network simulations that are based on the unit test / mock environment.

    +Simulation(networkSendManuallyPumped: Boolean, runAsync: Boolean, latencyInjector: <ERROR CLASS>?)

    Base class for network simulations that are based on the unit test / mock environment.

    @@ -133,7 +133,7 @@ in the UI somewhere.

    network -val network: MockNetwork +val network: <ERROR CLASS> @@ -186,20 +186,20 @@ in the UI somewhere.

    iterate -open fun iterate(): MessageTransfer?

    Iterates the simulation by one step.

    +open fun iterate(): <ERROR CLASS>?

    Iterates the simulation by one step.

    showConsensusFor -fun showConsensusFor(nodes: List<SimulatedNode>): Unit +fun showConsensusFor(nodes: List<SimulatedNode>): Unit showProgressFor -fun showProgressFor(nodes: List<SimulatedNode>): Unit +fun showProgressFor(nodes: List<SimulatedNode>): Unit @@ -219,7 +219,7 @@ network bringup has been simulated.

    startTradingCircle -fun startTradingCircle(tradeBetween: (Int, Int) -> <ERROR CLASS><out <ERROR CLASS>>): Unit

    Given a function that returns a future, iterates that function with arguments like (0, 1), (1, 2), (2, 3) etc +fun startTradingCircle(tradeBetween: (Int, Int) -> <ERROR CLASS><out <ERROR CLASS>>): Unit

    Given a function that returns a future, iterates that function with arguments like (0, 1), (1, 2), (2, 3) etc each time the returned future completes.

    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/iterate.html b/docs/build/html/api/com.r3corda.simulation/-simulation/iterate.html similarity index 67% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/iterate.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/iterate.html index 6595b0b202..ba0b00bf1d 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/iterate.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/iterate.html @@ -4,11 +4,11 @@ -com.r3corda.node.internal.testing / Simulation / iterate
    +com.r3corda.simulation / Simulation / iterate

    iterate

    - -open fun iterate(): MessageTransfer?
    + +open fun iterate(): <ERROR CLASS>?

    Iterates the simulation by one step.

    The default implementation circles around the nodes, pumping until one of them handles a message. The next call will carry on from where this one stopped. In an environment where you want to take actions between anything diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/network-initialisation-finished.html b/docs/build/html/api/com.r3corda.simulation/-simulation/network-initialisation-finished.html similarity index 67% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/network-initialisation-finished.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/network-initialisation-finished.html index 88de7346c1..ce20f01f64 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/network-initialisation-finished.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/network-initialisation-finished.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / networkInitialisationFinished
    +com.r3corda.simulation / Simulation / networkInitialisationFinished

    networkInitialisationFinished

    - + val networkInitialisationFinished: <ERROR CLASS><out <ERROR CLASS>>


    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/network-map.html b/docs/build/html/api/com.r3corda.simulation/-simulation/network-map.html similarity index 62% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/network-map.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/network-map.html index 4b52b98b87..d5b4ef7138 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/network-map.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/network-map.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / networkMap
    +com.r3corda.simulation / Simulation / networkMap

    networkMap

    - + val networkMap: SimulatedNode


    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/network-send-manually-pumped.html b/docs/build/html/api/com.r3corda.simulation/-simulation/network-send-manually-pumped.html similarity index 59% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/network-send-manually-pumped.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/network-send-manually-pumped.html index 167e7945c3..dfa1fa5d90 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/network-send-manually-pumped.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/network-send-manually-pumped.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / networkSendManuallyPumped
    +com.r3corda.simulation / Simulation / networkSendManuallyPumped

    networkSendManuallyPumped

    - + val networkSendManuallyPumped: Boolean


    diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/network.html b/docs/build/html/api/com.r3corda.simulation/-simulation/network.html new file mode 100644 index 0000000000..2287dd6c36 --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/network.html @@ -0,0 +1,15 @@ + + +Simulation.network - + + + +com.r3corda.simulation / Simulation / network
    +
    +

    network

    + +val network: <ERROR CLASS>
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/notary.html b/docs/build/html/api/com.r3corda.simulation/-simulation/notary.html similarity index 62% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/notary.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/notary.html index e1b1f30bf9..b634fd51f0 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/notary.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/notary.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / notary
    +com.r3corda.simulation / Simulation / notary

    notary

    - + val notary: SimulatedNode


    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/rates-oracle.html b/docs/build/html/api/com.r3corda.simulation/-simulation/rates-oracle.html similarity index 62% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/rates-oracle.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/rates-oracle.html index b908592777..a324bcc98a 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/rates-oracle.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/rates-oracle.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / ratesOracle
    +com.r3corda.simulation / Simulation / ratesOracle

    ratesOracle

    - + val ratesOracle: SimulatedNode


    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/regulators.html b/docs/build/html/api/com.r3corda.simulation/-simulation/regulators.html similarity index 68% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/regulators.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/regulators.html index 6f98f33c70..355ff84645 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/regulators.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/regulators.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / regulators
    +com.r3corda.simulation / Simulation / regulators

    regulators

    - + val regulators: List<SimulatedNode>


    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/service-providers.html b/docs/build/html/api/com.r3corda.simulation/-simulation/service-providers.html similarity index 67% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/service-providers.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/service-providers.html index 37cde5e0be..bcb02011e1 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/service-providers.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/service-providers.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / serviceProviders
    +com.r3corda.simulation / Simulation / serviceProviders

    serviceProviders

    - + val serviceProviders: List<SimulatedNode>


    diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/show-consensus-for.html b/docs/build/html/api/com.r3corda.simulation/-simulation/show-consensus-for.html new file mode 100644 index 0000000000..5a9edb68b9 --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/show-consensus-for.html @@ -0,0 +1,15 @@ + + +Simulation.showConsensusFor - + + + +com.r3corda.simulation / Simulation / showConsensusFor
    +
    +

    showConsensusFor

    + +protected fun showConsensusFor(nodes: List<SimulatedNode>): Unit
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/show-progress-for.html b/docs/build/html/api/com.r3corda.simulation/-simulation/show-progress-for.html new file mode 100644 index 0000000000..a8d6dffd88 --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/show-progress-for.html @@ -0,0 +1,15 @@ + + +Simulation.showProgressFor - + + + +com.r3corda.simulation / Simulation / showProgressFor
    +
    +

    showProgressFor

    + +protected fun showProgressFor(nodes: List<SimulatedNode>): Unit
    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/start-main-simulation.html b/docs/build/html/api/com.r3corda.simulation/-simulation/start-main-simulation.html similarity index 75% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/start-main-simulation.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/start-main-simulation.html index c03d0e7f33..91777982bc 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/start-main-simulation.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/start-main-simulation.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / startMainSimulation
    +com.r3corda.simulation / Simulation / startMainSimulation

    startMainSimulation

    - + protected open fun startMainSimulation(): <ERROR CLASS><Unit>

    Sub-classes should override this to trigger whatever they want to simulate. This method will be invoked once the network bringup has been simulated.

    diff --git a/docs/build/html/api/com.r3corda.simulation/-simulation/start-trading-circle.html b/docs/build/html/api/com.r3corda.simulation/-simulation/start-trading-circle.html new file mode 100644 index 0000000000..a265e381de --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/start-trading-circle.html @@ -0,0 +1,17 @@ + + +Simulation.startTradingCircle - + + + +com.r3corda.simulation / Simulation / startTradingCircle
    +
    +

    startTradingCircle

    + +fun startTradingCircle(tradeBetween: (Int, Int) -> <ERROR CLASS><out <ERROR CLASS>>): Unit
    +

    Given a function that returns a future, iterates that function with arguments like (0, 1), (1, 2), (2, 3) etc +each time the returned future completes.

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/start.html b/docs/build/html/api/com.r3corda.simulation/-simulation/start.html similarity index 69% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/start.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/start.html index 58c42bdf0f..55a72a2b4e 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/start.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/start.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / start
    +com.r3corda.simulation / Simulation / start

    start

    - + fun start(): <ERROR CLASS><Unit>


    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/stop.html b/docs/build/html/api/com.r3corda.simulation/-simulation/stop.html similarity index 63% rename from docs/build/html/api/com.r3corda.node.internal.testing/-simulation/stop.html rename to docs/build/html/api/com.r3corda.simulation/-simulation/stop.html index d53b3910c0..f5b97c1253 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-simulation/stop.html +++ b/docs/build/html/api/com.r3corda.simulation/-simulation/stop.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / Simulation / stop
    +com.r3corda.simulation / Simulation / stop

    stop

    - + fun stop(): Unit


    diff --git a/docs/build/html/api/com.r3corda.simulation/-trade-simulation/-init-.html b/docs/build/html/api/com.r3corda.simulation/-trade-simulation/-init-.html new file mode 100644 index 0000000000..6ac1f758e2 --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/-trade-simulation/-init-.html @@ -0,0 +1,16 @@ + + +TradeSimulation.<init> - + + + +com.r3corda.simulation / TradeSimulation / <init>
    +
    +

    <init>

    +TradeSimulation(runAsync: Boolean, latencyInjector: <ERROR CLASS>?)
    +

    Simulates a never ending series of trades that go pair-wise through the banks (e.g. A and B trade with each other, +then B and C trade with each other, then C and A etc).

    +
    +
    + + diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-trade-simulation/index.html b/docs/build/html/api/com.r3corda.simulation/-trade-simulation/index.html similarity index 75% rename from docs/build/html/api/com.r3corda.node.internal.testing/-trade-simulation/index.html rename to docs/build/html/api/com.r3corda.simulation/-trade-simulation/index.html index 88f2b83719..f30db9a1a4 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-trade-simulation/index.html +++ b/docs/build/html/api/com.r3corda.simulation/-trade-simulation/index.html @@ -4,7 +4,7 @@ -com.r3corda.node.internal.testing / TradeSimulation
    +com.r3corda.simulation / TradeSimulation

    TradeSimulation

    class TradeSimulation : Simulation
    @@ -19,7 +19,7 @@ then B and C trade with each other, then C and A etc).

    <init> -TradeSimulation(runAsync: Boolean, latencyInjector: LatencyCalculator?)

    Simulates a never ending series of trades that go pair-wise through the banks (e.g. A and B trade with each other, +TradeSimulation(runAsync: Boolean, latencyInjector: <ERROR CLASS>?)

    Simulates a never ending series of trades that go pair-wise through the banks (e.g. A and B trade with each other, then B and C trade with each other, then C and A etc).

    @@ -90,7 +90,7 @@ in the UI somewhere.

    network -val network: MockNetwork +val network: <ERROR CLASS> @@ -156,20 +156,20 @@ network bringup has been simulated.

    iterate -open fun iterate(): MessageTransfer?

    Iterates the simulation by one step.

    +open fun iterate(): <ERROR CLASS>?

    Iterates the simulation by one step.

    showConsensusFor -fun showConsensusFor(nodes: List<SimulatedNode>): Unit +fun showConsensusFor(nodes: List<SimulatedNode>): Unit showProgressFor -fun showProgressFor(nodes: List<SimulatedNode>): Unit +fun showProgressFor(nodes: List<SimulatedNode>): Unit @@ -181,7 +181,7 @@ network bringup has been simulated.

    startTradingCircle -fun startTradingCircle(tradeBetween: (Int, Int) -> <ERROR CLASS><out <ERROR CLASS>>): Unit

    Given a function that returns a future, iterates that function with arguments like (0, 1), (1, 2), (2, 3) etc +fun startTradingCircle(tradeBetween: (Int, Int) -> <ERROR CLASS><out <ERROR CLASS>>): Unit

    Given a function that returns a future, iterates that function with arguments like (0, 1), (1, 2), (2, 3) etc each time the returned future completes.

    diff --git a/docs/build/html/api/com.r3corda.node.internal.testing/-trade-simulation/start-main-simulation.html b/docs/build/html/api/com.r3corda.simulation/-trade-simulation/start-main-simulation.html similarity index 76% rename from docs/build/html/api/com.r3corda.node.internal.testing/-trade-simulation/start-main-simulation.html rename to docs/build/html/api/com.r3corda.simulation/-trade-simulation/start-main-simulation.html index 36aed7dc13..94de86d84a 100644 --- a/docs/build/html/api/com.r3corda.node.internal.testing/-trade-simulation/start-main-simulation.html +++ b/docs/build/html/api/com.r3corda.simulation/-trade-simulation/start-main-simulation.html @@ -4,10 +4,10 @@ -com.r3corda.node.internal.testing / TradeSimulation / startMainSimulation
    +com.r3corda.simulation / TradeSimulation / startMainSimulation

    startMainSimulation

    - + protected fun startMainSimulation(): <ERROR CLASS><Unit>
    Overrides Simulation.startMainSimulation

    Sub-classes should override this to trigger whatever they want to simulate. This method will be invoked once the diff --git a/docs/build/html/api/com.r3corda.simulation/index.html b/docs/build/html/api/com.r3corda.simulation/index.html new file mode 100644 index 0000000000..70c09dfc1c --- /dev/null +++ b/docs/build/html/api/com.r3corda.simulation/index.html @@ -0,0 +1,38 @@ + + +com.r3corda.simulation - + + + +com.r3corda.simulation
    +
    +

    Package com.r3corda.simulation

    +

    Types

    + + + + + + + + + + + + + + + +
    +IRSSimulation +class IRSSimulation : Simulation

    A simulation in which banks execute interest rate swaps with each other, including the fixing events.

    +
    +Simulation +abstract class Simulation

    Base class for network simulations that are based on the unit test / mock environment.

    +
    +TradeSimulation +class TradeSimulation : Simulation

    Simulates a never ending series of trades that go pair-wise through the banks (e.g. A and B trade with each other, +then B and C trade with each other, then C and A etc).

    +
    + + diff --git a/docs/build/html/api/index-outline.html b/docs/build/html/api/index-outline.html index 2501563588..8cc24a88ba 100644 --- a/docs/build/html/api/index-outline.html +++ b/docs/build/html/api/index-outline.html @@ -53,12 +53,12 @@ -abstract fun buildTransaction(type: ContractDefRef, steps: List<TransactionBuildStep>): SerializedBytes<WireTransaction>
    -abstract fun commitTransaction(tx: SerializedBytes<WireTransaction>, signatures: List<WithKey>): SecureHash
    +abstract fun buildTransaction(type: ContractDefRef, steps: List<TransactionBuildStep>): SerializedBytes<WireTransaction>
    +abstract fun commitTransaction(tx: SerializedBytes<WireTransaction>, signatures: List<WithKey>): SecureHash
    abstract fun fetchProtocolsRequiringAttention(query: StatesQuery): Map<StateRef, ProtocolRequiringAttention>
    abstract fun fetchStates(states: List<StateRef>): Map<StateRef, TransactionState<ContractState>?>
    -abstract fun fetchTransactions(txs: List<SecureHash>): Map<SecureHash, SignedTransaction?>
    -abstract fun generateTransactionSignature(tx: SerializedBytes<WireTransaction>): WithKey
    +abstract fun fetchTransactions(txs: List<SecureHash>): Map<SecureHash, SignedTransaction?>
    +abstract fun generateTransactionSignature(tx: SerializedBytes<WireTransaction>): WithKey
    abstract fun invokeProtocolSync(type: ProtocolRef, args: Map<String, Any?>): Any?
    abstract fun provideProtocolResponse(protocol: ProtocolInstanceRef, choice: SecureHash, args: Map<String, Any?>): Unit
    abstract fun queryStates(query: StatesQuery): List<StateRef>
    @@ -76,12 +76,12 @@ APIServerImpl(node: AbstractNode)
    -fun buildTransaction(type: ContractDefRef, steps: List<TransactionBuildStep>): SerializedBytes<WireTransaction>
    -fun commitTransaction(tx: SerializedBytes<WireTransaction>, signatures: List<WithKey>): SecureHash
    +fun buildTransaction(type: ContractDefRef, steps: List<TransactionBuildStep>): SerializedBytes<WireTransaction>
    +fun commitTransaction(tx: SerializedBytes<WireTransaction>, signatures: List<WithKey>): SecureHash
    fun fetchProtocolsRequiringAttention(query: StatesQuery): Map<StateRef, ProtocolRequiringAttention>
    fun fetchStates(states: List<StateRef>): Map<StateRef, TransactionState<ContractState>?>
    -fun fetchTransactions(txs: List<SecureHash>): Map<SecureHash, SignedTransaction?>
    -fun generateTransactionSignature(tx: SerializedBytes<WireTransaction>): WithKey
    +fun fetchTransactions(txs: List<SecureHash>): Map<SecureHash, SignedTransaction?>
    +fun generateTransactionSignature(tx: SerializedBytes<WireTransaction>): WithKey
    fun invokeProtocolSync(type: ProtocolRef, args: Map<String, Any?>): Any?
    val node: AbstractNode
    fun provideProtocolResponse(protocol: ProtocolInstanceRef, choice: SecureHash, args: Map<String, Any?>): Unit
    @@ -91,7 +91,7 @@ -abstract class AbstractConserveAmount<S : FungibleAsset<T>, C : CommandData, T : Any> : ConcreteClause<S, C, Issued<T>>
    +abstract class AbstractConserveAmount<S : FungibleAsset<T>, C : CommandData, T : Any> : Clause<S, C, Issued<T>>
    -abstract class AbstractIssue<in S : ContractState, C : CommandData, T : Any> : ConcreteClause<S, C, Issued<T>>
    +abstract class AbstractIssue<in S : ContractState, C : CommandData, T : Any> : Clause<S, C, Issued<T>>
      @@ -122,6 +122,87 @@
    +abstract class AbstractJDBCHashMap<K : Any, V : Any, T : JDBCHashedTable> : MutableMap<K, V>, AbstractMap<K, V>
    + +abstract class AbstractJDBCHashSet<K : Any, T : JDBCHashedTable> : MutableSet<K>, AbstractSet<K>
    + +abstract class AbstractNetworkMapService : NetworkMapService, AbstractNodeService
    + abstract class AbstractNode : SingletonSerializeAsToken
    @@ -194,11 +290,14 @@ -AbstractNodeService(net: MessagingService, networkMapCache: NetworkMapCache)
    -protected inline fun <reified Q : ServiceRequestMessage, reified R : Any> addMessageHandler(topic: String, crossinline handler: (Q) -> R, crossinline exceptionConsumer: (Message, Exception) -> Unit): Unit
    -protected inline fun <reified Q : ServiceRequestMessage, reified R : Any> addMessageHandler(topic: String, crossinline handler: (Q) -> R): Unit
    -val net: MessagingService
    -val networkMapCache: NetworkMapCache
    +AbstractNodeService(services: ServiceHubInternal)
    +protected inline fun <reified Q : ServiceRequestMessage, reified R : Any> addMessageHandler(topic: String, crossinline handler: (Q) -> R, crossinline exceptionConsumer: (Message, Exception) -> Unit): MessageHandlerRegistration
    +protected inline fun <reified Q : ServiceRequestMessage, reified R : Any> addMessageHandler(topic: String, crossinline handler: (Q) -> R): MessageHandlerRegistration
    +protected inline fun <reified H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, crossinline protocolFactory: (H) -> ProtocolLogic<R>, crossinline onResultFuture: (<ERROR CLASS><R>, H) -> Unit): Unit
    +protected inline fun <reified H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, crossinline protocolFactory: (H) -> ProtocolLogic<R>): Unit
    +val logger: <ERROR CLASS>
    +val net: MessagingServiceInternal
    +val services: ServiceHubInternal
    @@ -211,7 +310,7 @@ AbstractStateReplacementProtocol()
    -abstract class Acceptor<in T> : ProtocolLogic<Unit>
    +abstract class Acceptor<T> : ProtocolLogic<Unit>
    -data class Handshake : PartyRequestMessage
    +data class Handshake : HandshakeMessage
    @@ -276,7 +374,7 @@ abstract val modification: T
    abstract val stateRef: StateRef
    -abstract val stx: SignedTransaction
    +abstract val stx: SignedTransaction
    @@ -387,6 +485,24 @@ +class AggregatedList<A, E, K : Any> : TransformationList<A, E>
    + class AllComposition<S : ContractState, C : CommandData, K : Any> : CompositeClause<S, C, K>
      @@ -404,20 +520,6 @@
    interface AllPossibleRecipients : MessageRecipients
    -class AlwaysSucceedContract : Contract
    - data class Amount<T> : Comparable<Amount<T>>
      @@ -441,6 +543,34 @@
    +object AmountBindings
    + +class AmountGenerator<T>
    + class AnyComposition<in S : ContractState, C : CommandData, in K : Any> : CompositeClause<S, C, K>
    -class ArtemisMessagingClient : ArtemisMessagingComponent, MessagingServiceInternal
    - abstract class ArtemisMessagingComponent : SingletonSerializeAsToken
    @@ -601,12 +688,8 @@ -ArtemisMessagingServer(directory: Path, config: NodeConfiguration, myHostPort: <ERROR CLASS>, networkMapCache: NetworkMapCache)
    -fun addConnector(hostAndPort: <ERROR CLASS>): <ERROR CLASS>
    -fun bridgeExists(name: <ERROR CLASS>): <ERROR CLASS>
    -fun bridgeToNetworkMapService(networkMapService: NodeInfo?): Unit
    -fun connectorExists(hostAndPort: <ERROR CLASS>): Boolean
    -fun deployBridge(hostAndPort: <ERROR CLASS>, name: <ERROR CLASS>): <ERROR CLASS>
    +ArtemisMessagingServer(config: NodeConfiguration, myHostPort: <ERROR CLASS>, networkMapCache: NetworkMapCache)
    +fun bridgeToNetworkMapService(networkMapService: SingleMessageRecipient?): Unit
    val log: <ERROR CLASS>
    val myHostPort: <ERROR CLASS>
    val networkMapCache: NetworkMapCache
    @@ -642,18 +725,6 @@ -class AttachmentResolutionException : Exception
    - interface AttachmentStorage
    -class Requester : ProtocolLogic<SignedTransaction>
    +class Requester : ProtocolLogic<SignedTransaction>
      @@ -771,7 +843,7 @@
    object RECEIVED : Step
    -fun call(): SignedTransaction
    +fun call(): SignedTransaction
    val dealToBeOffered: DealState
    val progressTracker: ProgressTracker
    protected val topic: String
    @@ -779,7 +851,7 @@ -class Service
    +class Service : AbstractNodeService
    @@ -815,7 +887,6 @@ -object RECEIVED : Step
    fun tracker(): ProgressTracker
    @@ -824,6 +895,27 @@ +abstract class BaseTransaction : NamedByHash
    + data class BilateralNetState<P> : NetState<P>
    -class CashBalanceAsMetricsObserver
    +class CashBalanceAsMetricsObserver
    +class CertificateSigner
    + +interface CertificateSigningService
    + @@ -1085,8 +1209,10 @@ -Checkpoint(serialisedFiber: SerializedBytes<ProtocolStateMachineImpl<*>>, request: FiberRequest?)
    -val request: FiberRequest?
    +Checkpoint(serialisedFiber: SerializedBytes<ProtocolStateMachineImpl<*>>, request: ProtocolIORequest?, receivedPayload: Any?)
    +var fiberCreated: Boolean
    +val receivedPayload: Any?
    +val request: ProtocolIORequest?
    val serialisedFiber: SerializedBytes<ProtocolStateMachineImpl<*>>
    @@ -1105,6 +1231,20 @@ +class ChosenList<E> : ObservableListBase<E>
    + object CityDatabase
      @@ -1117,7 +1257,7 @@
    -interface Clause<in S : ContractState, C : CommandData, in K : Any>
    +abstract class Clause<in S : ContractState, C : CommandData, in K : Any>
    +class UploadRates : CliParams
    + val defaultBaseDirectory: String
    fun legalName(node: IRSDemoNode): String
    fun parse(options: <ERROR CLASS>): CliParams
    @@ -1225,7 +1378,6 @@ val fakeTradeWithIdentityFile: <ERROR CLASS>
    val help: <ERROR CLASS>
    val networkAddressArg: <ERROR CLASS>
    -val networkMapIdentityFile: <ERROR CLASS>
    val networkMapNetAddr: <ERROR CLASS>
    val nonOptions: <ERROR CLASS>
    val parser: <ERROR CLASS>
    @@ -1233,6 +1385,25 @@ +data class ClientRPCRequestMessage
    + sealed class ClientToServiceCommand
      @@ -1321,6 +1492,32 @@
    interface CommandData
    +class CommandDataGenerator
    + +class CommandGenerator
    + class CommercialPaper : Contract
    -class Move : ConcreteClause<State, Commands, Issued<Terms>>
    +class Move : Clause<State, Commands, Issued<Terms>>
      @@ -1379,7 +1576,7 @@
    -class Redeem : ConcreteClause<State, Commands, Issued<Terms>>
    +class Redeem : Clause<State, Commands, Issued<Terms>>
      @@ -1484,9 +1681,9 @@
    -fun generateIssue(issuance: PartyAndReference, faceValue: Amount<Issued<Currency>>, maturityDate: Instant, notary: Party): TransactionBuilder
    -fun generateMove(tx: TransactionBuilder, paper: StateAndRef<State>, newOwner: PublicKey): Unit
    -fun generateRedeem(tx: TransactionBuilder, paper: StateAndRef<State>, wallet: List<StateAndRef<State>>): Unit
    +fun generateIssue(issuance: PartyAndReference, faceValue: Amount<Issued<Currency>>, maturityDate: Instant, notary: Party): TransactionBuilder
    +fun generateMove(tx: TransactionBuilder, paper: StateAndRef<State>, newOwner: PublicKey): Unit
    +fun generateRedeem(tx: TransactionBuilder, paper: StateAndRef<State>, vault: List<StateAndRef<State>>): Unit
    val legalContractReference: SecureHash
    fun verify(tx: TransactionForContract): Unit
    @@ -1573,9 +1770,9 @@ -fun generateIssue(issuance: PartyAndReference, faceValue: Amount<Issued<Currency>>, maturityDate: Instant, notary: Party): TransactionBuilder
    -fun generateMove(tx: TransactionBuilder, paper: StateAndRef<State>, newOwner: PublicKey): Unit
    -fun generateRedeem(tx: TransactionBuilder, paper: StateAndRef<State>, wallet: Wallet): Unit
    +fun generateIssue(issuance: PartyAndReference, faceValue: Amount<Issued<Currency>>, maturityDate: Instant, notary: Party): TransactionBuilder
    +fun generateMove(tx: TransactionBuilder, paper: StateAndRef<State>, newOwner: PublicKey): Unit
    +fun generateRedeem(tx: TransactionBuilder, paper: StateAndRef<State>, vault: Vault): Unit
    val legalContractReference: SecureHash
    fun verify(tx: TransactionForContract): Unit
    @@ -1732,8 +1929,8 @@ fun deriveState(txState: TransactionState<State>, amount: Amount<Issued<Commodity>>, owner: PublicKey): TransactionState<State>
    fun extractCommands(commands: Collection<AuthenticatedObject<CommandData>>): List<AuthenticatedObject<Commands>>
    fun generateExitCommand(amount: Amount<Issued<Commodity>>): Exit
    -fun generateIssue(tx: TransactionBuilder, tokenDef: Issued<Commodity>, pennies: Long, owner: PublicKey, notary: Party): Unit
    -fun generateIssue(tx: TransactionBuilder, amount: Amount<Issued<Commodity>>, owner: PublicKey, notary: Party): Unit
    +fun generateIssue(tx: TransactionBuilder, tokenDef: Issued<Commodity>, pennies: Long, owner: PublicKey, notary: Party): Unit
    +fun generateIssue(tx: TransactionBuilder, amount: Amount<Issued<Commodity>>, owner: PublicKey, notary: Party): Unit
    fun generateIssueCommand(): Issue
    fun generateMoveCommand(): Move
    val legalContractReference: SecureHash
    @@ -1753,21 +1950,6 @@ abstract val clauses: List<Clause<S, C, K>>
    open fun getExecutionPath(commands: List<AuthenticatedObject<C>>): List<Clause<*, *, *>>
    abstract fun matchedClauses(commands: List<AuthenticatedObject<C>>): List<Clause<S, C, K>>
    -open val requiredCommands: Set<Class<out CommandData>>
    - - - -abstract class ConcreteClause<in S : ContractState, C : CommandData, in T : Any> : Clause<S, C, T>
    - @@ -1847,10 +2029,39 @@ abstract val contract: Contract
    +open val encumbrance: Int?
    abstract val participants: List<PublicKey>
    +class ContractStateGenerator
    + +class ContractStateModel
    + abstract class CordaPluginRegistry
      @@ -1867,6 +2078,24 @@
    +class CordaRPCClient : Closeable, ArtemisMessagingComponent
    + +interface CordaRPCOps : RPCOps
    class CubicSplineInterpolator : Interpolator
      @@ -1881,6 +2110,20 @@
    +class CurrencyGenerator
    + class DataUploadServlet
      @@ -1937,8 +2180,7 @@
    val logger: <ERROR CLASS>
    -fun notify(net: MessagingService, myIdentity: Party, recipient: NodeInfo, transaction: SignedTransaction): Unit
    -val services: ServiceHubInternal
    +fun notify(net: MessagingService, myIdentity: Party, recipient: NodeInfo, transaction: SignedTransaction): Unit
    val storage: StorageService
    @@ -2092,7 +2334,7 @@ -abstract fun generateAgreement(notary: Party): TransactionBuilder
    +abstract fun generateAgreement(notary: Party): TransactionBuilder
    abstract val parties: List<Party>
    abstract val ref: String
    abstract fun withPublicKey(before: Party, after: PublicKey): DealState
    @@ -2215,7 +2457,7 @@ State()
    -val clients: LinkedList<ArtemisMessagingClient>
    +val clients: LinkedList<NodeMessagingClient>
    var localServer: ArtemisMessagingServer?
    val registeredProcesses: LinkedList<Process>
    @@ -2231,7 +2473,7 @@ fun registerProcess(process: Process): Unit
    fun shutdown(): Unit
    fun start(): Unit
    -fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<ArtemisMessagingClient>
    +fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<NodeMessagingClient>
    fun startLocalServer(): Future<ArtemisMessagingServer>
    fun startNode(providedName: String?, advertisedServices: Set<ServiceType>): Future<NodeInfo>
    fun waitForAllNodesToFinish(): Unit
    @@ -2247,7 +2489,7 @@ abstract val networkMapCache: NetworkMapCache
    -abstract fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<ArtemisMessagingClient>
    +abstract fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<NodeMessagingClient>
    abstract fun startLocalServer(): Future<ArtemisMessagingServer>
    abstract fun startNode(providedName: String? = null, advertisedServices: Set<ServiceType> = setOf()): Future<NodeInfo>
    abstract fun waitForAllNodesToFinish(): Unit
    @@ -2356,45 +2598,14 @@ -fun generateInitial(owner: PartyAndReference, magicNumber: Int, notary: Party): TransactionBuilder
    +fun generateInitial(owner: PartyAndReference, magicNumber: Int, notary: Party): TransactionBuilder
    val legalContractReference: SecureHash
    -fun move(prior: StateAndRef<SingleOwnerState>, newOwner: PublicKey): TransactionBuilder
    +fun move(prior: StateAndRef<SingleOwnerState>, newOwner: PublicKey): <ERROR CLASS>
    +fun move(priors: List<StateAndRef<SingleOwnerState>>, newOwner: PublicKey): TransactionBuilder
    fun verify(tx: TransactionForContract): Unit
    -class DummyLinearContract : Contract
    - class DummyPublicKey : PublicKey, Comparable<PublicKey>
      @@ -2430,7 +2641,7 @@
    -class DuplicateOutputLabel : Exception
    +class DurationGenerator
    @@ -2508,7 +2720,27 @@ -sealed class EnforceVerifyOrFail
    +data class ErrorOr<out A>
    + open class Event
      @@ -2524,6 +2756,75 @@
    +class EventGenerator
    + +interface ExchangeRate
    + +class ExchangeRateModel
    + +class ExitGenerator
    + object ExitServerProtocol
      @@ -2547,7 +2848,7 @@
    -data class ExitMessage
    +data class ExitMessage : HandshakeMessage
    @@ -2691,7 +2995,7 @@ -data class Request : PartyRequestMessage
    +data class Request : HandshakeMessage
    @@ -2729,7 +3034,7 @@ -class FetchTransactionsProtocol : FetchDataProtocol<SignedTransaction, SignedTransaction>
    +class FetchTransactionsProtocol : FetchDataProtocol<SignedTransaction, SignedTransaction>
    -sealed class FiberRequest
    - class FinalityProtocol : ProtocolLogic<Unit>
    @@ -2882,8 +3140,9 @@ -abstract fun generateFix(ptx: TransactionBuilder, oldState: StateAndRef<*>, fix: Fix): Unit
    +abstract fun generateFix(ptx: TransactionBuilder, oldState: StateAndRef<*>, fix: Fix): Unit
    abstract fun nextFixingOf(): FixOf?
    +abstract val oracleType: ServiceType
    @@ -2938,7 +3197,7 @@ -class Service
    +class Service : AbstractNodeService
      @@ -2953,6 +3212,37 @@
    +class FlattenedList<A> : TransformationList<A, ObservableValue<out A>>
    + open class FloatingRate : Rate
    -abstract class GroupClauseVerifier<S : ContractState, C : CommandData, K : Any> : ConcreteClause<ContractState, C, Unit>
    +interface GatheredTransactionData
    + +class GatheredTransactionDataModel
    + +data class GatheredTransactionDataWritable : GatheredTransactionData
    + +class Generator<out A>
    + +abstract class GroupClauseVerifier<S : ContractState, C : CommandData, K : Any> : Clause<ContractState, C, Unit>
      @@ -3169,6 +3541,36 @@
    +class HTTPCertificateSigningService : CertificateSigningService
    + +interface HandshakeMessage : PartyRequestMessage
    + enum class IRSDemoNode
    -class IRSSimulation : Simulation
    +class IRSSimulation : Simulation
    @@ -3289,126 +3692,6 @@ -class InMemoryMessagingNetwork : SingletonSerializeAsToken
    - open class InMemoryNetworkMapCache : SingletonSerializeAsToken, NetworkMapCache
    -class InMemoryNetworkMapService : NetworkMapService, AbstractNodeService
    +class InMemoryNetworkMapService : AbstractNetworkMapService
    @@ -3474,7 +3749,7 @@ -open class InMemoryWalletService : SingletonSerializeAsToken, WalletService
    +open class InMemoryVaultService : SingletonSerializeAsToken, VaultService
    +class InstantGenerator
    + @@ -3555,7 +3843,7 @@ -abstract class AbstractIRSClause : ConcreteClause<State, Commands, UniqueIdentifier>
    +abstract class AbstractIRSClause : Clause<State, Commands, UniqueIdentifier>
      @@ -3641,7 +3929,7 @@
    -class Timestamped : ConcreteClause<ContractState, Commands, Unit>
    +class Timestamped : Clause<ContractState, Commands, Unit>
      @@ -3820,6 +4108,7 @@
    +object OracleType : ServiceType
    data class State : FixableDealState, SchedulableState
    -fun generateAgreement(floatingLeg: FloatingLeg, fixedLeg: FixedLeg, calculation: Calculation, common: Common, notary: Party): TransactionBuilder
    -fun generateFix(tx: TransactionBuilder, irs: StateAndRef<State>, fixing: Fix): Unit
    +fun generateAgreement(floatingLeg: FloatingLeg, fixedLeg: FixedLeg, calculation: Calculation, common: Common, notary: Party): TransactionBuilder
    +fun generateFix(tx: TransactionBuilder, irs: StateAndRef<State>, fixing: Fix): Unit
    val legalContractReference: <ERROR CLASS>
    fun verify(tx: TransactionForContract): Unit
    @@ -3912,6 +4202,19 @@ +class IssueGenerator
    + data class Issued<out P>
      @@ -3927,6 +4230,91 @@
    +class IssuedGenerator<T>
    + +class JDBCHashMap<K : Any, V : Any> : AbstractJDBCHashMap<K, V, BlobMapTable>
    + +class JDBCHashSet<K : Any> : AbstractJDBCHashSet<K, BlobSetTable>
    + +open class JDBCHashedTable
    + object JsonSupport
      @@ -4101,7 +4489,7 @@
    -class LedgerDSL<out T : TransactionDSLInterpreter, out L : LedgerDSLInterpreter<T>> : LedgerDSLInterpreter<TransactionDSLInterpreter>
    +data class LastAcknowledgeInfo
    -interface LedgerDSLInterpreter<out T : TransactionDSLInterpreter> : Verifies, OutputStateLookup
    +class LedgerTransaction : BaseTransaction
    -data class LedgerTransaction : NamedByHash
    - @@ -4180,7 +4545,7 @@ -class ClauseVerifier<S : LinearState> : ConcreteClause<ContractState, CommandData, Unit>
    +class ClauseVerifier<S : LinearState> : Clause<ContractState, CommandData, Unit>
      @@ -4214,6 +4579,20 @@
    +data class MarshalledObservation
    + interface Message
      @@ -4288,7 +4667,7 @@
    -class MockAttachmentStorage : AttachmentStorage
    +object Models
    -class MockIdentityService : IdentityService, SingletonSerializeAsToken
    - -class MockKeyManagementService : SingletonSerializeAsToken, KeyManagementService
    - -class MockNetwork
    - -class MockNetworkMapCache : InMemoryNetworkMapCache
    - -open class MockServices : ServiceHub
    - -class MockStorageService : SingletonSerializeAsToken, TxWritableStorageService
    - -open class MockTransactionStorage : TransactionStorage
    - @@ -4531,6 +4706,19 @@ +class MoveGenerator
    + data class MultilateralNetState<P> : NetState<P>
      @@ -4571,21 +4759,6 @@
    -class NameServiceConfig
    - interface NamedByHash
      @@ -4598,7 +4771,7 @@
    -open class NetClause<C : CommandData, P> : ConcreteClause<ContractState, C, Unit>
    +open class NetClause<C : CommandData, P> : Clause<ContractState, C, Unit>
    +interface NetCommand : CommandData
    + @@ -4699,7 +4884,7 @@ -abstract fun addMapService(net: MessagingService, service: NodeInfo, subscribe: Boolean, ifChangedSinceVer: Int? = null): <ERROR CLASS><Unit>
    +abstract fun addMapService(net: MessagingService, networkMapAddress: SingleMessageRecipient, subscribe: Boolean, ifChangedSinceVer: Int? = null): <ERROR CLASS><Unit>
    abstract fun addNode(node: NodeInfo): Unit
    abstract val changed: <ERROR CLASS><MapChange>
    abstract fun deregisterForUpdates(net: MessagingService, service: NodeInfo): <ERROR CLASS><Unit>
    @@ -4709,12 +4894,13 @@ abstract fun getNodeByPublicKey(publicKey: PublicKey): NodeInfo?
    abstract fun getRecommended(type: ServiceType, contract: Contract, vararg party: Party): NodeInfo?
    val logger: <ERROR CLASS>
    +abstract val mapServiceRegistered: <ERROR CLASS><Unit>
    abstract val networkMapNodes: List<NodeInfo>
    abstract val notaryNodes: List<NodeInfo>
    abstract val partyNodes: List<NodeInfo>
    -abstract val ratesOracleNodes: List<NodeInfo>
    abstract val regulators: List<NodeInfo>
    abstract fun removeNode(node: NodeInfo): Unit
    +abstract fun runWithoutMapService(): Unit
    @@ -4866,7 +5052,8 @@ -Update(wireReg: WireNodeRegistration, replyTo: MessageRecipients)
    +Update(wireReg: WireNodeRegistration, mapVersion: Int, replyTo: MessageRecipients)
    +val mapVersion: Int
    val replyTo: MessageRecipients
    val wireReg: WireNodeRegistration
    @@ -4880,9 +5067,9 @@ -UpdateAcknowledge(wireRegHash: SecureHash, replyTo: MessageRecipients)
    +UpdateAcknowledge(mapVersion: Int, replyTo: MessageRecipients)
    +val mapVersion: Int
    val replyTo: MessageRecipients
    -val wireRegHash: SecureHash
    @@ -4906,7 +5093,7 @@ -open class NoZeroSizedOutputs<in S : FungibleAsset<T>, C : CommandData, T : Any> : ConcreteClause<S, C, Issued<T>>
    +open class NoZeroSizedOutputs<in S : FungibleAsset<T>, C : CommandData, T : Any> : Clause<S, C, Issued<T>>
    -interface NodeConfiguration
    +interface NodeConfiguration : NodeSSLConfiguration
    @@ -5025,8 +5216,12 @@ NodeConfigurationFromConfig(config: <ERROR CLASS> = ConfigFactory.load())
    +val basedir: Path
    +val certificateSigningService: <ERROR CLASS>
    val config: <ERROR CLASS>
    val dataSourceProperties: Properties
    +val devMode: Boolean
    +val emailAddress: String
    val exportJMXto: String
    val keyStorePassword: String
    val myLegalName: String
    @@ -5051,7 +5246,7 @@ -object NodeInterestRates
    +object NodeInterestRates
    @@ -5206,6 +5401,133 @@ +class NodeMessagingClient : ArtemisMessagingComponent, MessagingServiceInternal
    + +class NodeMonitorClient
    + +class NodeMonitorModel
    + +class NodeMonitorService : AbstractNodeService
    + class NodeRegistration
      @@ -5224,7 +5546,7 @@
    -class NodeRunner
    +data class NodeRegistrationInfo
    -class NodeWalletService : InMemoryWalletService
    +class NodeVaultService : SingletonSerializeAsToken, VaultService
    @@ -5378,7 +5693,6 @@ Service(services: ServiceHubInternal)
    -val services: ServiceHubInternal
    @@ -5401,9 +5715,10 @@ -Acceptor(otherSide: Party, sessionIdForSend: Long, sessionIdForReceive: Long, progressTracker: ProgressTracker = tracker())
    +Acceptor(otherSide: Party, progressTracker: ProgressTracker = tracker())
    val progressTracker: ProgressTracker
    protected val topic: String
    +fun verifyProposal(maybeProposal: UntrustworthyData<Proposal<Party>>): Proposal<Party>
    @@ -5428,10 +5743,10 @@ -Proposal(stateRef: StateRef, modification: Party, stx: SignedTransaction)
    +Proposal(stateRef: StateRef, modification: Party, stx: SignedTransaction)
    val modification: Party
    val stateRef: StateRef
    -val stx: SignedTransaction
    +val stx: SignedTransaction
    @@ -5455,10 +5770,10 @@ -Conflict(tx: WireTransaction, conflict: SignedData<Conflict>)
    +Conflict(tx: WireTransaction, conflict: SignedData<Conflict>)
    val conflict: SignedData<Conflict>
    fun toString(): String
    -val tx: WireTransaction
    +val tx: WireTransaction
    @@ -5470,8 +5785,8 @@ -SignaturesMissing(missingSigners: List<PublicKey>)
    -val missingSigners: List<PublicKey>
    +SignaturesMissing(missingSigners: Set<PublicKey>)
    +val missingSigners: Set<PublicKey>
    @@ -5532,7 +5847,7 @@ -Client(stx: SignedTransaction, progressTracker: ProgressTracker = Client.tracker())
    +Client(stx: SignedTransaction, progressTracker: ProgressTracker = Client.tracker())
    object REQUESTING : Step
    object VALIDATING : Step
    fun call(): LegallyIdentifiable
    @@ -5551,7 +5866,7 @@ -fun create(otherSide: Party, sendSessionID: Long, receiveSessionID: Long, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider): Service
    +fun create(otherSide: Party, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider): Service
    @@ -5563,11 +5878,11 @@ -abstract fun create(otherSide: Party, sendSessionID: Long, receiveSessionID: Long, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider): Service
    +abstract fun create(otherSide: Party, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider): Service
    -data class Handshake : PartyRequestMessage
    +data class Handshake : HandshakeMessage
    @@ -5605,12 +5920,10 @@ -Service(otherSide: Party, sendSessionID: Long, receiveSessionID: Long, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)
    -open fun beforeCommit(stx: SignedTransaction, reqIdentity: Party): Unit
    +Service(otherSide: Party, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)
    +open fun beforeCommit(stx: SignedTransaction, reqIdentity: Party): Unit
    open fun call(): Unit
    val otherSide: Party
    -val receiveSessionID: Long
    -val sendSessionID: Long
    val timestampChecker: TimestampChecker
    protected open val topic: String
    val uniquenessProvider: UniquenessProvider
    @@ -5625,9 +5938,9 @@ -SignRequest(tx: SignedTransaction, callerIdentity: Party)
    +SignRequest(tx: SignedTransaction, callerIdentity: Party)
    val callerIdentity: Party
    -val tx: SignedTransaction
    +val tx: SignedTransaction
    @@ -5643,11 +5956,10 @@ -NotaryService(smm: StateMachineManager, net: MessagingService, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider, networkMapCache: NetworkMapCache)
    +NotaryService(services: ServiceHubInternal, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)
    object Type : ServiceType
    abstract val logger: <ERROR CLASS>
    abstract val protocolFactory: Factory
    -val smm: StateMachineManager
    val timestampChecker: TimestampChecker
    val uniquenessProvider: UniquenessProvider
    @@ -5740,7 +6052,7 @@ -class SetLifecycle<P> : ConcreteClause<State<P>, Commands, Issued<Terms<P>>>
    +class SetLifecycle<P> : Clause<State<P>, Commands, Issued<Terms<P>>>
      @@ -5755,7 +6067,7 @@
    -class Settle<P> : ConcreteClause<State<P>, Commands, Issued<Terms<P>>>
    +class Settle<P> : Clause<State<P>, Commands, Issued<Terms<P>>>
      @@ -5769,7 +6081,7 @@
    -class VerifyLifecycle<S : ContractState, C : CommandData, T : Any, P> : ConcreteClause<S, C, T>
    +class VerifyLifecycle<S : ContractState, C : CommandData, T : Any, P> : Clause<S, C, T>
      @@ -5832,7 +6144,7 @@
    -data class Net : Commands
    +data class Net : NetCommand, Commands
      @@ -5936,12 +6248,12 @@
    -fun generateCloseOutNetting(tx: TransactionBuilder, signer: PublicKey, vararg states: State<P>): Unit
    -fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<Terms<P>>>, assetStates: List<StateAndRef<State<P>>>): PublicKey
    -fun generateIssue(tx: TransactionBuilder, obligor: Party, issuanceDef: Terms<P>, pennies: Long, beneficiary: PublicKey, notary: Party): Unit
    -fun generatePaymentNetting(tx: TransactionBuilder, issued: Issued<Terms<P>>, notary: Party, vararg states: State<P>): Unit
    -fun generateSetLifecycle(tx: TransactionBuilder, statesAndRefs: List<StateAndRef<State<P>>>, lifecycle: Lifecycle, notary: Party): Unit
    -fun generateSettle(tx: TransactionBuilder, statesAndRefs: Iterable<StateAndRef<State<P>>>, assetStatesAndRefs: Iterable<StateAndRef<FungibleAsset<P>>>, moveCommand: MoveCommand, notary: Party): Unit
    +fun generateCloseOutNetting(tx: TransactionBuilder, signer: PublicKey, vararg states: State<P>): Unit
    +fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<Terms<P>>>, assetStates: List<StateAndRef<State<P>>>): PublicKey
    +fun generateIssue(tx: TransactionBuilder, obligor: Party, issuanceDef: Terms<P>, pennies: Long, beneficiary: PublicKey, notary: Party): Unit
    +fun generatePaymentNetting(tx: TransactionBuilder, issued: Issued<Terms<P>>, notary: Party, vararg states: State<P>): Unit
    +fun generateSetLifecycle(tx: TransactionBuilder, statesAndRefs: List<StateAndRef<State<P>>>, lifecycle: Lifecycle, notary: Party): Unit
    +fun generateSettle(tx: TransactionBuilder, statesAndRefs: Iterable<StateAndRef<State<P>>>, assetStatesAndRefs: Iterable<StateAndRef<FungibleAsset<P>>>, moveCommand: MoveCommand, notary: Party): Unit
    val legalContractReference: SecureHash
    fun verify(tx: TransactionForContract): Unit
    @@ -5959,11 +6271,11 @@ abstract val conserveClause: AbstractConserveAmount<S, C, T>
    abstract fun deriveState(txState: TransactionState<S>, amount: Amount<Issued<T>>, owner: PublicKey): TransactionState<S>
    abstract fun extractCommands(commands: Collection<AuthenticatedObject<CommandData>>): Collection<AuthenticatedObject<C>>
    -fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<T>>, assetStates: List<StateAndRef<S>>): PublicKey
    +fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<T>>, assetStates: List<StateAndRef<S>>): PublicKey
    abstract fun generateExitCommand(amount: Amount<Issued<T>>): Exit<T>
    abstract fun generateIssueCommand(): Issue
    abstract fun generateMoveCommand(): Move
    -fun generateSpend(tx: TransactionBuilder, amount: Amount<T>, to: PublicKey, assetsStates: List<StateAndRef<S>>, onlyFromParties: Set<Party>? = null): List<PublicKey>
    +fun generateSpend(tx: TransactionBuilder, amount: Amount<T>, to: PublicKey, assetsStates: List<StateAndRef<S>>, onlyFromParties: Set<Party>? = null): List<PublicKey>
    @@ -5986,7 +6298,7 @@ -interface OutputStateLookup
    +class OptionalConfig<out T>
    @@ -6025,6 +6340,20 @@ +object ParamsSpec
    + data class Party
      @@ -6057,6 +6386,32 @@
    +class PartyAndReferenceGenerator
    + +class PartyGenerator
    + interface PartyRequestMessage : ServiceRequestMessage
    @@ -6142,6 +6497,48 @@ +class PersistentKeyManagementService : SingletonSerializeAsToken, KeyManagementService
    + +class PersistentNetworkMapService : AbstractNetworkMapService
    + +class PersistentUniquenessProvider : UniquenessProvider, SingletonSerializeAsToken
    + data class PhysicalLocation
    @@ -6208,6 +6605,19 @@ +class PrivateKeyGenerator
    + class ProgressTracker
      @@ -6354,6 +6764,19 @@
    +interface ProtocolIORequest
    + data class ProtocolInstanceRef
    +data class ProtocolStatus
    + +class PublicKeyGenerator
    + +abstract class RPCDispatcher
    + +open class RPCException : RuntimeException
    + +interface RPCOps
    + +@Target([AnnotationTarget.FUNCTION]) annotation class RPCReturnsObservables
    + +@Target([AnnotationTarget.FUNCTION]) annotation class RPCSinceVersion
    + open class Rate
    @@ -6623,8 +7154,38 @@ -abstract fun getTransaction(id: SecureHash): SignedTransaction?
    -abstract val updates: <ERROR CLASS><SignedTransaction>
    +abstract fun getTransaction(id: SecureHash): SignedTransaction?
    +abstract val updates: <ERROR CLASS><SignedTransaction>
    + + + +data class ReceiveOnly<T> : ReceiveRequest<T>
    + +interface ReceiveRequest<T> : ProtocolIORequest
    + @@ -6709,7 +7270,7 @@ -class ResolveTransactionsProtocol : ProtocolLogic<List<LedgerTransaction>>
    +class ResolveTransactionsProtocol : ProtocolLogic<List<LedgerTransaction>>
    @@ -6881,11 +7441,73 @@ fun sha256(bits: ByteArray): SHA256
    fun sha256(str: String): <ERROR CLASS>
    fun sha256Twice(bits: ByteArray): SHA256
    -abstract val signatureAlgorithmName: String
    open fun toString(): <ERROR CLASS>
    +class SecureHashGenerator
    + +data class SendAndReceive<T> : SendRequest, ReceiveRequest<T>
    + +data class SendOnly : SendRequest
    + +interface SendRequest : ProtocolIORequest
    + interface SerializationToken
      @@ -6965,6 +7587,19 @@
    +class ServerRPCOps : CordaRPCOps
    + interface ServiceHub
    @@ -7037,6 +7672,7 @@ OutputState(time: Instant, consumed: Set<StateRef>, produced: Set<StateAndRef<ContractState>>)
    val consumed: Set<StateRef>
    val produced: Set<StateAndRef<ContractState>>
    +fun toString(): String
    @@ -7051,6 +7687,7 @@ Progress(time: Instant, fiberId: Long, message: String)
    val fiberId: Long
    val message: String
    +fun toString(): String
    @@ -7066,6 +7703,7 @@ val addOrRemove: AddOrRemove
    val fiberId: Long
    val label: String
    +fun toString(): String
    @@ -7077,8 +7715,9 @@ -Transaction(time: Instant, transaction: SignedTransaction)
    -val transaction: SignedTransaction
    +Transaction(time: Instant, transaction: LedgerTransaction)
    +fun toString(): String
    +val transaction: LedgerTransaction
    @@ -7093,6 +7732,7 @@ TransactionBuild(time: Instant, id: UUID, state: TransactionBuildResult)
    val id: UUID
    val state: TransactionBuildResult
    +fun toString(): String
    @@ -7133,7 +7773,7 @@ -data class SignedTransaction : NamedByHash
    +data class SignedTransaction : NamedByHash
    +class SignedTransactionGenerator
    + @@ -7162,14 +7833,14 @@ -SimpleNotaryService(smm: StateMachineManager, net: MessagingService, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider, networkMapCache: NetworkMapCache)
    +SimpleNotaryService(services: ServiceHubInternal, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)
    object Type : ServiceType
    val logger: <ERROR CLASS>
    val protocolFactory: DefaultFactory
    -abstract class Simulation
    +abstract class Simulation
    @@ -7381,6 +8052,43 @@ +sealed class StateMachineStatus
    + data class StateRef
      @@ -7396,6 +8104,19 @@
    +class StateRefGenerator
    + class StateReplacementException : Exception
    +sealed class StatesModification<out T : ContractState>
    + interface StatesQuery
      @@ -7551,94 +8310,6 @@
    -class TestClock : MutableClock, SerializeAsToken
    - -data class TestLedgerDSLInterpreter : LedgerDSLInterpreter<TestTransactionDSLInterpreter>
    - -data class TestTransactionDSLInterpreter : TransactionDSLInterpreter, OutputStateLookup
    - class ThreadBox<out T>
      @@ -7702,6 +8373,19 @@
    +class TimestampGenerator
    + data class TopicSession
      @@ -7731,7 +8415,7 @@
    -class TradeSimulation : Simulation
    +sealed class TrackedDelegate<M : Any>
    +class TradeSimulation : Simulation
    + @@ -7752,20 +8574,6 @@ -class Complete : TransactionBuildResult
    - class Failed : TransactionBuildResult
    @@ -7787,10 +8596,11 @@ -ProtocolStarted(fiberId: Long, transaction: SignedTransaction?, message: String?)
    +ProtocolStarted(fiberId: Long, transaction: LedgerTransaction?, message: String?)
    val fiberId: Long
    val message: String?
    -val transaction: SignedTransaction?
    +fun toString(): String
    +val transaction: LedgerTransaction?
    @@ -7811,7 +8621,7 @@ -open class TransactionBuilder
    +open class TransactionBuilder
    @@ -7864,14 +8673,14 @@ -TransactionConflictException(conflictRef: StateRef, tx1: LedgerTransaction, tx2: LedgerTransaction)
    +TransactionConflictException(conflictRef: StateRef, tx1: LedgerTransaction, tx2: LedgerTransaction)
    val conflictRef: StateRef
    -val tx1: LedgerTransaction
    -val tx2: LedgerTransaction
    +val tx1: LedgerTransaction
    +val tx2: LedgerTransaction
    -class TransactionDSL<out T : TransactionDSLInterpreter> : TransactionDSLInterpreter
    +sealed class TransactionCreateStatus
    -interface TransactionDSLInterpreter : Verifies, OutputStateLookup
    +class Failed : TransactionCreateStatus
    +class Started : TransactionCreateStatus
    + +val message: String?
    +open fun toString(): String
    @@ -7950,7 +8756,7 @@ -class TransactionGraphSearch : Callable<List<WireTransaction>>
    +class TransactionGraphSearch : Callable<List<WireTransaction>>
    +class TransactionStateGenerator<T : ContractState>
    + interface TransactionStorage : ReadOnlyTransactionStorage
    @@ -8038,7 +8858,7 @@ General()
    -class Builder : TransactionBuilder
    +class Builder : TransactionBuilder
      @@ -8050,8 +8870,8 @@
    -fun getRequiredSigners(tx: LedgerTransaction): <ERROR CLASS>
    -fun verifyTransaction(tx: LedgerTransaction): Unit
    +fun getRequiredSigners(tx: LedgerTransaction): <ERROR CLASS>
    +fun verifyTransaction(tx: LedgerTransaction): Unit
    @@ -8064,7 +8884,7 @@ NotaryChange()
    -class Builder : TransactionBuilder
    +class Builder : TransactionBuilder
      @@ -8077,17 +8897,17 @@
    -fun getRequiredSigners(tx: LedgerTransaction): <ERROR CLASS>
    -fun verifyTransaction(tx: LedgerTransaction): Unit
    +fun getRequiredSigners(tx: LedgerTransaction): <ERROR CLASS>
    +fun verifyTransaction(tx: LedgerTransaction): Unit
    open fun equals(other: Any?): Boolean
    -abstract fun getRequiredSigners(tx: LedgerTransaction): Set<PublicKey>
    +abstract fun getRequiredSigners(tx: LedgerTransaction): Set<PublicKey>
    open fun hashCode(): <ERROR CLASS>
    -fun verify(tx: LedgerTransaction): Unit
    -fun verifySigners(tx: LedgerTransaction): Set<PublicKey>
    -abstract fun verifyTransaction(tx: LedgerTransaction): Unit
    +fun verify(tx: LedgerTransaction): Unit
    +fun verifySigners(tx: LedgerTransaction): Set<PublicKey>
    +abstract fun verifyTransaction(tx: LedgerTransaction): Unit
    @@ -8107,11 +8927,24 @@ -ContractRejection(tx: LedgerTransaction, contract: Contract, cause: Throwable?)
    +ContractRejection(tx: LedgerTransaction, contract: Contract, cause: Throwable?)
    val contract: Contract
    +enum class Direction
    + class InvalidNotaryChange : TransactionVerificationException
    @@ -8132,7 +8965,7 @@ -MoreThanOneNotary(tx: LedgerTransaction)
    +MoreThanOneNotary(tx: LedgerTransaction)
    @@ -8144,7 +8977,7 @@ -NotaryChangeInWrongTransactionType(tx: LedgerTransaction, outputNotary: Party)
    +NotaryChangeInWrongTransactionType(tx: LedgerTransaction, outputNotary: Party)
    val outputNotary: Party
    fun toString(): String
    @@ -8158,13 +8991,28 @@ -SignersMissing(tx: LedgerTransaction, missing: List<PublicKey>)
    +SignersMissing(tx: LedgerTransaction, missing: List<PublicKey>)
    val missing: List<PublicKey>
    fun toString(): String
    -val tx: LedgerTransaction
    +class TransactionMissingEncumbranceException : TransactionVerificationException
    + +val tx: LedgerTransaction
    @@ -8197,13 +9045,12 @@ -Acceptor(otherSide: Party, notary: Party, dealToBuy: T, sessionID: Long, progressTracker: ProgressTracker = Secondary.tracker())
    -protected open fun assembleSharedTX(handshake: Handshake<T>): <ERROR CLASS><TransactionBuilder, List<PublicKey>>
    +Acceptor(otherParty: Party, notary: Party, dealToBuy: T, progressTracker: ProgressTracker = Secondary.tracker())
    +protected open fun assembleSharedTX(handshake: Handshake<T>): <ERROR CLASS><TransactionBuilder, List<PublicKey>>
    val dealToBuy: T
    val notary: Party
    -open val otherSide: Party
    +open val otherParty: Party
    open val progressTracker: ProgressTracker
    -open val sessionID: Long
    protected open fun validateHandshake(handshake: Handshake<T>): Handshake<T>
    @@ -8248,12 +9095,11 @@ -Fixer(initiation: FixingSessionInitiation, progressTracker: ProgressTracker = Secondary.tracker())
    -protected fun assembleSharedTX(handshake: Handshake<StateRef>): <ERROR CLASS><TransactionBuilder, List<PublicKey>>
    -val initiation: FixingSessionInitiation
    -val otherSide: Party
    +Fixer(otherParty: Party, oracleType: ServiceType, progressTracker: ProgressTracker = Secondary.tracker())
    +protected fun assembleSharedTX(handshake: Handshake<StateRef>): <ERROR CLASS><TransactionBuilder, List<PublicKey>>
    +val oracleType: ServiceType
    +val otherParty: Party
    val progressTracker: ProgressTracker
    -val sessionID: Long
    protected fun validateHandshake(handshake: Handshake<StateRef>): Handshake<StateRef>
    @@ -8288,7 +9134,7 @@ -data class FixingSessionInitiation
    +data class FixingSessionInitiation : HandshakeMessage
    @@ -8345,18 +9190,17 @@ -Instigator(otherSide: Party, notary: Party, payload: T, myKeyPair: KeyPair, otherSessionID: Long, progressTracker: ProgressTracker = Primary.tracker())
    +Instigator(otherParty: Party, notary: Party, payload: T, myKeyPair: KeyPair, progressTracker: ProgressTracker = Primary.tracker())
    open val myKeyPair: KeyPair
    val notary: Party
    open val notaryNode: NodeInfo
    -open val otherSessionID: Long
    -open val otherSide: Party
    +open val otherParty: Party
    open val payload: T
    open val progressTracker: ProgressTracker
    -abstract class Primary<out U> : ProtocolLogic<SignedTransaction>
    +abstract class Primary<out U> : ProtocolLogic<SignedTransaction>
    -abstract class Secondary<U> : ProtocolLogic<SignedTransaction>
    +abstract class Secondary<U> : ProtocolLogic<SignedTransaction>
    -class Buyer : ProtocolLogic<SignedTransaction>
    +class Buyer : ProtocolLogic<SignedTransaction>
    -class Seller : ProtocolLogic<SignedTransaction>
    +class Seller : ProtocolLogic<SignedTransaction>
    @@ -8669,7 +9508,8 @@ UntrustworthyData(fromUntrustedWorld: T)
    val data: T
    -inline fun <R> validate(validator: (T) -> R): R
    +inline fun <R> unwrap(validator: (T) -> R): R
    +inline fun <R> validate(validator: (T) -> R): R
    @@ -8725,7 +9565,7 @@ val TOPIC: String
    -data class UpdateBusinessDayMessage
    +data class UpdateBusinessDayMessage : HandshakeMessage
    @@ -8749,8 +9592,8 @@ -ValidatingNotaryProtocol(otherSide: Party, sessionIdForSend: Long, sessionIdForReceive: Long, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)
    -fun beforeCommit(stx: SignedTransaction, reqIdentity: Party): Unit
    +ValidatingNotaryProtocol(otherSide: Party, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)
    +fun beforeCommit(stx: SignedTransaction, reqIdentity: Party): Unit
    @@ -8762,14 +9605,14 @@ -ValidatingNotaryService(smm: StateMachineManager, net: MessagingService, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider, networkMapCache: NetworkMapCache)
    +ValidatingNotaryService(services: ServiceHubInternal, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)
    object Type : ServiceType
    val logger: <ERROR CLASS>
    val protocolFactory: Factory
    -interface Verifies
    +class Vault
    -data class WireTransaction : NamedByHash
    +class WireTransaction : BaseTransaction
    @@ -8982,8 +9760,21 @@ -fun read(kryo: <ERROR CLASS>, input: <ERROR CLASS>, type: Class<WireTransaction>): WireTransaction
    -fun write(kryo: <ERROR CLASS>, output: <ERROR CLASS>, obj: WireTransaction): Unit
    +fun read(kryo: <ERROR CLASS>, input: <ERROR CLASS>, type: Class<WireTransaction>): WireTransaction
    +fun write(kryo: <ERROR CLASS>, output: <ERROR CLASS>, obj: WireTransaction): Unit
    + + + +class WiredTransactionGenerator
    + @@ -9018,33 +9809,40 @@ -CACertAndKey(certificate: X509Certificate, keypair: KeyPair)
    +CACertAndKey(certificate: X509Certificate, keyPair: KeyPair)
    val certificate: X509Certificate
    -val keypair: KeyPair
    +val keyPair: KeyPair
    -val CA_CERT_ALIAS: String
    -val CERT_PRIVATE_KEY_ALIAS: String
    +val CORDA_CLIENT_CA: String
    +val CORDA_CLIENT_CA_PRIVATE_KEY: String
    +val CORDA_INTERMEDIATE_CA: String
    +val CORDA_INTERMEDIATE_CA_PRIVATE_KEY: String
    +val CORDA_ROOT_CA: String
    +val CORDA_ROOT_CA_PRIVATE_KEY: String
    val ECDSA_CURVE: String
    -val INTERMEDIATE_CA_PRIVATE_KEY_ALIAS: String
    val KEYSTORE_TYPE: String
    val KEY_GENERATION_ALGORITHM: String
    -val ROOT_CA_CERT_PRIVATE_KEY_ALIAS: String
    val SIGNATURE_ALGORITHM: String
    +fun KeyStore.addOrReplaceCertificate(alias: String, cert: Certificate): Unit
    +fun KeyStore.addOrReplaceKey(alias: String, key: Key, password: CharArray, chain: Array<Certificate>): Unit
    fun createCAKeyStoreAndTrustStore(keyStoreFilePath: Path, storePassword: String, keyPassword: String, trustStoreFilePath: Path, trustStorePassword: String): KeyStore
    +fun createCertificateSigningRequest(myLegalName: String, nearestCity: String, email: String, keyPair: KeyPair): <ERROR CLASS>
    fun createIntermediateCert(domain: String, certificateAuthority: CACertAndKey): CACertAndKey
    fun createKeystoreForSSL(keyStoreFilePath: Path, storePassword: String, keyPassword: String, caKeyStore: KeyStore, caKeyPassword: String): KeyStore
    -fun createSelfSignedCACert(domain: String): CACertAndKey
    +fun createSelfSignedCACert(myLegalName: String): CACertAndKey
    fun createServerCert(subject: <ERROR CLASS>, publicKey: PublicKey, certificateAuthority: CACertAndKey, subjectAlternativeNameDomains: List<String>, subjectAlternativeNameIps: List<String>): X509Certificate
    fun generateECDSAKeyPairForSSL(): KeyPair
    fun getDevX509Name(domain: String): <ERROR CLASS>
    +fun getX509Name(myLegalName: String, nearestCity: String, email: String): <ERROR CLASS>
    fun loadCertificateAndKey(keyStore: KeyStore, keyPassword: String, alias: String): CACertAndKey
    fun loadCertificateFromKeyStore(keyStoreFilePath: Path, storePassword: String, alias: String): X509Certificate
    fun loadCertificateFromPEMFile(filename: Path): X509Certificate
    fun loadKeyPairFromKeyStore(keyStoreFilePath: Path, storePassword: String, keyPassword: String, alias: String): KeyPair
    fun loadKeyStore(keyStoreFilePath: Path, storePassword: String): KeyStore
    fun loadKeyStore(input: InputStream, storePassword: String): KeyStore
    +fun loadOrCreateKeyPairFromKeyStore(keyStoreFilePath: Path, storePassword: String, keyPassword: String, alias: String, keyGenerator: () -> CACertAndKey): KeyPair
    fun loadOrCreateKeyStore(keyStoreFilePath: Path, storePassword: String): KeyStore
    fun saveCertificateAsPEMFile(x509Certificate: X509Certificate, filename: Path): Unit
    fun saveKeyStore(keyStore: KeyStore, keyStoreFilePath: Path, storePassword: String): Unit
    @@ -9059,6 +9857,7 @@ +operator fun Path.div(other: String): Path
    fun <R> Path.use(block: (InputStream) -> R): R
    @@ -9115,7 +9914,7 @@ -fun Clock.awaitWithDeadline(deadline: Instant, future: Future<*> = SettableFuture<Any>()): Boolean
    +fun Clock.awaitWithDeadline(deadline: Instant, future: Future<*> = GuavaSettableFuture.create<Any>()): Boolean
    @@ -9156,6 +9955,46 @@ +java.util.concurrent.Future
    + +javafx.beans.value.ObservableValue
    + +javafx.collections.ObservableList
    + kotlin.ByteArray
      @@ -9205,6 +10044,54 @@
    +kotlin.Function1
    + +kotlin.Function2
    + +kotlin.Function3
    + +kotlin.Function4
    + kotlin.Int
      @@ -9379,18 +10266,6 @@
    -kotlin.collections.Iterable
    - kotlin.collections.List
      @@ -9406,6 +10281,706 @@
    +package com.r3corda.client
    + +package com.r3corda.client.fxutils
    + +package com.r3corda.client.mock
    + +package com.r3corda.client.model
    + package com.r3corda.contracts
    -class Move : ConcreteClause<State, Commands, Issued<Terms>>
    +class Move : Clause<State, Commands, Issued<Terms>>
      @@ -9474,7 +11049,7 @@
    -class Redeem : ConcreteClause<State, Commands, Issued<Terms>>
    +class Redeem : Clause<State, Commands, Issued<Terms>>
      @@ -9579,9 +11154,9 @@
    -fun generateIssue(issuance: PartyAndReference, faceValue: Amount<Issued<Currency>>, maturityDate: Instant, notary: Party): TransactionBuilder
    -fun generateMove(tx: TransactionBuilder, paper: StateAndRef<State>, newOwner: PublicKey): Unit
    -fun generateRedeem(tx: TransactionBuilder, paper: StateAndRef<State>, wallet: List<StateAndRef<State>>): Unit
    +fun generateIssue(issuance: PartyAndReference, faceValue: Amount<Issued<Currency>>, maturityDate: Instant, notary: Party): TransactionBuilder
    +fun generateMove(tx: TransactionBuilder, paper: StateAndRef<State>, newOwner: PublicKey): Unit
    +fun generateRedeem(tx: TransactionBuilder, paper: StateAndRef<State>, vault: List<StateAndRef<State>>): Unit
    val legalContractReference: SecureHash
    fun verify(tx: TransactionForContract): Unit
    @@ -9668,9 +11243,9 @@ -fun generateIssue(issuance: PartyAndReference, faceValue: Amount<Issued<Currency>>, maturityDate: Instant, notary: Party): TransactionBuilder
    -fun generateMove(tx: TransactionBuilder, paper: StateAndRef<State>, newOwner: PublicKey): Unit
    -fun generateRedeem(tx: TransactionBuilder, paper: StateAndRef<State>, wallet: Wallet): Unit
    +fun generateIssue(issuance: PartyAndReference, faceValue: Amount<Issued<Currency>>, maturityDate: Instant, notary: Party): TransactionBuilder
    +fun generateMove(tx: TransactionBuilder, paper: StateAndRef<State>, newOwner: PublicKey): Unit
    +fun generateRedeem(tx: TransactionBuilder, paper: StateAndRef<State>, vault: Vault): Unit
    val legalContractReference: SecureHash
    fun verify(tx: TransactionForContract): Unit
    @@ -9790,7 +11365,7 @@ -abstract class AbstractIRSClause : ConcreteClause<State, Commands, UniqueIdentifier>
    +abstract class AbstractIRSClause : Clause<State, Commands, UniqueIdentifier>
      @@ -9876,7 +11451,7 @@
    -class Timestamped : ConcreteClause<ContractState, Commands, Unit>
    +class Timestamped : Clause<ContractState, Commands, Unit>
      @@ -10055,6 +11630,7 @@
    +object OracleType : ServiceType
    data class State : FixableDealState, SchedulableState
    -fun generateAgreement(floatingLeg: FloatingLeg, fixedLeg: FixedLeg, calculation: Calculation, common: Common, notary: Party): TransactionBuilder
    -fun generateFix(tx: TransactionBuilder, irs: StateAndRef<State>, fixing: Fix): Unit
    +fun generateAgreement(floatingLeg: FloatingLeg, fixedLeg: FixedLeg, calculation: Calculation, common: Common, notary: Party): TransactionBuilder
    +fun generateFix(tx: TransactionBuilder, irs: StateAndRef<State>, fixing: Fix): Unit
    val legalContractReference: <ERROR CLASS>
    fun verify(tx: TransactionForContract): Unit
    @@ -10367,10 +11944,11 @@ State(deposit: PartyAndReference, amount: Amount<Currency>, owner: PublicKey)
    -State(amount: Amount<Issued<Currency>>, owner: PublicKey)
    +State(amount: Amount<Issued<Currency>>, owner: PublicKey, encumbrance: Int? = null)
    val amount: Amount<Issued<Currency>>
    val contract: Cash
    val deposit: PartyAndReference
    +val encumbrance: Int?
    val exitKeys: <ERROR CLASS>
    val issuanceDef: Issued<Currency>
    fun move(newAmount: Amount<Issued<Currency>>, newOwner: PublicKey): FungibleAsset<Currency>
    @@ -10385,8 +11963,8 @@ fun deriveState(txState: TransactionState<State>, amount: Amount<Issued<Currency>>, owner: PublicKey): TransactionState<State>
    fun extractCommands(commands: Collection<AuthenticatedObject<CommandData>>): List<AuthenticatedObject<Commands>>
    fun generateExitCommand(amount: Amount<Issued<Currency>>): Exit
    -fun generateIssue(tx: TransactionBuilder, tokenDef: Issued<Currency>, pennies: Long, owner: PublicKey, notary: Party): Unit
    -fun generateIssue(tx: TransactionBuilder, amount: Amount<Issued<Currency>>, owner: PublicKey, notary: Party): Unit
    +fun generateIssue(tx: TransactionBuilder, tokenDef: Issued<Currency>, pennies: Long, owner: PublicKey, notary: Party): Unit
    +fun generateIssue(tx: TransactionBuilder, amount: Amount<Issued<Currency>>, owner: PublicKey, notary: Party): Unit
    fun generateIssueCommand(): Issue
    fun generateMoveCommand(): Move
    val legalContractReference: SecureHash
    @@ -10529,8 +12107,8 @@ fun deriveState(txState: TransactionState<State>, amount: Amount<Issued<Commodity>>, owner: PublicKey): TransactionState<State>
    fun extractCommands(commands: Collection<AuthenticatedObject<CommandData>>): List<AuthenticatedObject<Commands>>
    fun generateExitCommand(amount: Amount<Issued<Commodity>>): Exit
    -fun generateIssue(tx: TransactionBuilder, tokenDef: Issued<Commodity>, pennies: Long, owner: PublicKey, notary: Party): Unit
    -fun generateIssue(tx: TransactionBuilder, amount: Amount<Issued<Commodity>>, owner: PublicKey, notary: Party): Unit
    +fun generateIssue(tx: TransactionBuilder, tokenDef: Issued<Commodity>, pennies: Long, owner: PublicKey, notary: Party): Unit
    +fun generateIssue(tx: TransactionBuilder, amount: Amount<Issued<Commodity>>, owner: PublicKey, notary: Party): Unit
    fun generateIssueCommand(): Issue
    fun generateMoveCommand(): Move
    val legalContractReference: SecureHash
    @@ -10540,6 +12118,8 @@ val DUMMY_CASH_ISSUER: <ERROR CLASS>
    val DUMMY_CASH_ISSUER_KEY: <ERROR CLASS>
    +val DUMMY_OBLIGATION_ISSUER: <ERROR CLASS>
    +val DUMMY_OBLIGATION_ISSUER_KEY: <ERROR CLASS>
    interface FungibleAsset<T> : OwnableState
      @@ -10669,7 +12249,7 @@
    -class SetLifecycle<P> : ConcreteClause<State<P>, Commands, Issued<Terms<P>>>
    +class SetLifecycle<P> : Clause<State<P>, Commands, Issued<Terms<P>>>
      @@ -10684,7 +12264,7 @@
    -class Settle<P> : ConcreteClause<State<P>, Commands, Issued<Terms<P>>>
    +class Settle<P> : Clause<State<P>, Commands, Issued<Terms<P>>>
      @@ -10698,7 +12278,7 @@
    -class VerifyLifecycle<S : ContractState, C : CommandData, T : Any, P> : ConcreteClause<S, C, T>
    +class VerifyLifecycle<S : ContractState, C : CommandData, T : Any, P> : Clause<S, C, T>
      @@ -10761,7 +12341,7 @@
    -data class Net : Commands
    +data class Net : NetCommand, Commands
      @@ -10865,12 +12445,12 @@
    -fun generateCloseOutNetting(tx: TransactionBuilder, signer: PublicKey, vararg states: State<P>): Unit
    -fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<Terms<P>>>, assetStates: List<StateAndRef<State<P>>>): PublicKey
    -fun generateIssue(tx: TransactionBuilder, obligor: Party, issuanceDef: Terms<P>, pennies: Long, beneficiary: PublicKey, notary: Party): Unit
    -fun generatePaymentNetting(tx: TransactionBuilder, issued: Issued<Terms<P>>, notary: Party, vararg states: State<P>): Unit
    -fun generateSetLifecycle(tx: TransactionBuilder, statesAndRefs: List<StateAndRef<State<P>>>, lifecycle: Lifecycle, notary: Party): Unit
    -fun generateSettle(tx: TransactionBuilder, statesAndRefs: Iterable<StateAndRef<State<P>>>, assetStatesAndRefs: Iterable<StateAndRef<FungibleAsset<P>>>, moveCommand: MoveCommand, notary: Party): Unit
    +fun generateCloseOutNetting(tx: TransactionBuilder, signer: PublicKey, vararg states: State<P>): Unit
    +fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<Terms<P>>>, assetStates: List<StateAndRef<State<P>>>): PublicKey
    +fun generateIssue(tx: TransactionBuilder, obligor: Party, issuanceDef: Terms<P>, pennies: Long, beneficiary: PublicKey, notary: Party): Unit
    +fun generatePaymentNetting(tx: TransactionBuilder, issued: Issued<Terms<P>>, notary: Party, vararg states: State<P>): Unit
    +fun generateSetLifecycle(tx: TransactionBuilder, statesAndRefs: List<StateAndRef<State<P>>>, lifecycle: Lifecycle, notary: Party): Unit
    +fun generateSettle(tx: TransactionBuilder, statesAndRefs: Iterable<StateAndRef<State<P>>>, assetStatesAndRefs: Iterable<StateAndRef<FungibleAsset<P>>>, moveCommand: MoveCommand, notary: Party): Unit
    val legalContractReference: SecureHash
    fun verify(tx: TransactionForContract): Unit
    @@ -10888,18 +12468,18 @@ abstract val conserveClause: AbstractConserveAmount<S, C, T>
    abstract fun deriveState(txState: TransactionState<S>, amount: Amount<Issued<T>>, owner: PublicKey): TransactionState<S>
    abstract fun extractCommands(commands: Collection<AuthenticatedObject<CommandData>>): Collection<AuthenticatedObject<C>>
    -fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<T>>, assetStates: List<StateAndRef<S>>): PublicKey
    +fun generateExit(tx: TransactionBuilder, amountIssued: Amount<Issued<T>>, assetStates: List<StateAndRef<S>>): PublicKey
    abstract fun generateExitCommand(amount: Amount<Issued<T>>): Exit<T>
    abstract fun generateIssueCommand(): Issue
    abstract fun generateMoveCommand(): Move
    -fun generateSpend(tx: TransactionBuilder, amount: Amount<T>, to: PublicKey, assetsStates: List<StateAndRef<S>>, onlyFromParties: Set<Party>? = null): List<PublicKey>
    +fun generateSpend(tx: TransactionBuilder, amount: Amount<T>, to: PublicKey, assetsStates: List<StateAndRef<S>>, onlyFromParties: Set<Party>? = null): List<PublicKey>
    val Amount<Issued<Currency>>.STATE: State
    infix fun <T> State<T>.at(dueBefore: Instant): State<T>
    infix fun <T> State<T>.between(parties: <ERROR CLASS><Party, PublicKey>): State<T>
    -val Wallet.cashBalances: Map<Currency, Amount<Currency>>
    +val Vault.cashBalances: Map<Currency, Amount<Currency>>
    fun <P> extractAmountsDue(product: Terms<P>, states: Iterable<State<P>>): Map<<ERROR CLASS><PublicKey, PublicKey>, Amount<Terms<P>>>
    infix fun State.issued by(party: Party): State
    infix fun State.issued by(deposit: PartyAndReference): State
    @@ -10949,7 +12529,7 @@ -abstract class AbstractConserveAmount<S : FungibleAsset<T>, C : CommandData, T : Any> : ConcreteClause<S, C, Issued<T>>
    +abstract class AbstractConserveAmount<S : FungibleAsset<T>, C : CommandData, T : Any> : Clause<S, C, Issued<T>>
    -abstract class AbstractIssue<in S : ContractState, C : CommandData, T : Any> : ConcreteClause<S, C, Issued<T>>
    +abstract class AbstractIssue<in S : ContractState, C : CommandData, T : Any> : Clause<S, C, Issued<T>>
      @@ -11007,7 +12587,7 @@
    -open class NetClause<C : CommandData, P> : ConcreteClause<ContractState, C, Unit>
    +open class NetClause<C : CommandData, P> : Clause<ContractState, C, Unit>
    @@ -11034,7 +12614,7 @@ -open class NoZeroSizedOutputs<in S : FungibleAsset<T>, C : CommandData, T : Any> : ConcreteClause<S, C, Issued<T>>
    +open class NoZeroSizedOutputs<in S : FungibleAsset<T>, C : CommandData, T : Any> : Clause<S, C, Issued<T>>
    @@ -11071,6 +12755,27 @@ +data class ErrorOr<out A>
    + abstract class RetryableException : Exception
      @@ -11114,6 +12819,7 @@
    +fun <T> <ERROR CLASS><T>.bufferUntilSubscribed(): <ERROR CLASS><T>
    fun extractZipFile(zipPath: Path, toPath: Path): Unit
    fun <T> <ERROR CLASS><T>.failure(executor: Executor, body: (Throwable) -> Unit): <ERROR CLASS>
    infix fun <T> <ERROR CLASS><T>.failure(body: (Throwable) -> Unit): <ERROR CLASS><T>
    @@ -11125,6 +12831,7 @@ +operator fun Path.div(other: String): Path
    fun <R> Path.use(block: (InputStream) -> R): R
    @@ -11141,6 +12848,18 @@ +java.util.concurrent.Future
    + kotlin.Double
    -fun generateInitial(owner: PartyAndReference, magicNumber: Int, notary: Party): TransactionBuilder
    +fun generateInitial(owner: PartyAndReference, magicNumber: Int, notary: Party): TransactionBuilder
    val legalContractReference: SecureHash
    -fun move(prior: StateAndRef<SingleOwnerState>, newOwner: PublicKey): TransactionBuilder
    +fun move(prior: StateAndRef<SingleOwnerState>, newOwner: PublicKey): <ERROR CLASS>
    +fun move(priors: List<StateAndRef<SingleOwnerState>>, newOwner: PublicKey): TransactionBuilder
    fun verify(tx: TransactionForContract): Unit
    @@ -11823,8 +13544,9 @@ -abstract fun generateFix(ptx: TransactionBuilder, oldState: StateAndRef<*>, fix: Fix): Unit
    +abstract fun generateFix(ptx: TransactionBuilder, oldState: StateAndRef<*>, fix: Fix): Unit
    abstract fun nextFixingOf(): FixOf?
    +abstract val oracleType: ServiceType
    @@ -11954,30 +13676,6 @@ -data class LedgerTransaction : NamedByHash
    - interface LinearState : ContractState
    -class TransactionGraphSearch : Callable<List<WireTransaction>>
    +class TransactionGraphSearch : Callable<List<WireTransaction>>
    @@ -12462,7 +14106,7 @@ NotaryChange()
    -class Builder : TransactionBuilder
    +class Builder : TransactionBuilder
      @@ -12475,17 +14119,17 @@
    -fun getRequiredSigners(tx: LedgerTransaction): <ERROR CLASS>
    -fun verifyTransaction(tx: LedgerTransaction): Unit
    +fun getRequiredSigners(tx: LedgerTransaction): <ERROR CLASS>
    +fun verifyTransaction(tx: LedgerTransaction): Unit
    open fun equals(other: Any?): Boolean
    -abstract fun getRequiredSigners(tx: LedgerTransaction): Set<PublicKey>
    +abstract fun getRequiredSigners(tx: LedgerTransaction): Set<PublicKey>
    open fun hashCode(): <ERROR CLASS>
    -fun verify(tx: LedgerTransaction): Unit
    -fun verifySigners(tx: LedgerTransaction): Set<PublicKey>
    -abstract fun verifyTransaction(tx: LedgerTransaction): Unit
    +fun verify(tx: LedgerTransaction): Unit
    +fun verifySigners(tx: LedgerTransaction): Set<PublicKey>
    +abstract fun verifyTransaction(tx: LedgerTransaction): Unit
    @@ -12505,11 +14149,24 @@ -ContractRejection(tx: LedgerTransaction, contract: Contract, cause: Throwable?)
    +ContractRejection(tx: LedgerTransaction, contract: Contract, cause: Throwable?)
    val contract: Contract
    +enum class Direction
    + class InvalidNotaryChange : TransactionVerificationException
    @@ -12530,7 +14187,7 @@ -MoreThanOneNotary(tx: LedgerTransaction)
    +MoreThanOneNotary(tx: LedgerTransaction)
    @@ -12542,7 +14199,7 @@ -NotaryChangeInWrongTransactionType(tx: LedgerTransaction, outputNotary: Party)
    +NotaryChangeInWrongTransactionType(tx: LedgerTransaction, outputNotary: Party)
    val outputNotary: Party
    fun toString(): String
    @@ -12556,13 +14213,28 @@ -SignersMissing(tx: LedgerTransaction, missing: List<PublicKey>)
    +SignersMissing(tx: LedgerTransaction, missing: List<PublicKey>)
    val missing: List<PublicKey>
    fun toString(): String
    -val tx: LedgerTransaction
    +class TransactionMissingEncumbranceException : TransactionVerificationException
    + +val tx: LedgerTransaction
    @@ -12596,32 +14268,6 @@ -data class WireTransaction : NamedByHash
    - fun calculateDaysBetween(startDate: LocalDate, endDate: LocalDate, dcbYear: DayCountBasisYear, dcbDay: DayCountBasisDay): Int
    fun commodity(code: String): Commodity
    fun currency(code: String): Currency
    @@ -12713,8 +14359,6 @@ inline fun <R> requireThat(body: Requirements.() -> R): R
    -fun WireTransaction.toLedgerTransaction(services: ServiceHub): LedgerTransaction
    -fun SignedTransaction.toLedgerTransaction(services: ServiceHub): LedgerTransaction
    inline fun <reified T : MoveCommand> verifyMoveCommand(inputs: List<OwnableState>, tx: TransactionForContract): MoveCommand
    inline fun <reified T : MoveCommand> verifyMoveCommand(inputs: List<OwnableState>, commands: List<AuthenticatedObject<CommandData>>): MoveCommand
    infix fun <T : ContractState> T.with notary(newNotary: Party): TransactionState<T>
    @@ -12758,13 +14402,12 @@ AnyComposition(vararg rawClauses: Clause<S, C, K>)
    val clauses: List<Clause<S, C, K>>
    fun matchedClauses(commands: List<AuthenticatedObject<C>>): List<Clause<S, C, K>>
    -vararg val rawClauses: Array<out Clause<S, C, K>>
    fun toString(): String
    fun verify(tx: TransactionForContract, inputs: List<S>, outputs: List<S>, commands: List<AuthenticatedObject<C>>, groupingKey: K?): Set<C>
    -interface Clause<in S : ContractState, C : CommandData, in K : Any>
    +abstract class Clause<in S : ContractState, C : CommandData, in K : Any>
    -abstract class ConcreteClause<in S : ContractState, C : CommandData, in T : Any> : Clause<S, C, T>
    - @@ -12827,7 +14456,7 @@ -abstract class GroupClauseVerifier<S : ContractState, C : CommandData, K : Any> : ConcreteClause<ContractState, C, Unit>
    +abstract class GroupClauseVerifier<S : ContractState, C : CommandData, K : Any> : Clause<ContractState, C, Unit>
    @@ -12977,7 +14605,6 @@ fun sha256(bits: ByteArray): SHA256
    fun sha256(str: String): <ERROR CLASS>
    fun sha256Twice(bits: ByteArray): SHA256
    -abstract val signatureAlgorithmName: String
    open fun toString(): <ERROR CLASS>
    @@ -13067,33 +14694,40 @@ -CACertAndKey(certificate: X509Certificate, keypair: KeyPair)
    +CACertAndKey(certificate: X509Certificate, keyPair: KeyPair)
    val certificate: X509Certificate
    -val keypair: KeyPair
    +val keyPair: KeyPair
    -val CA_CERT_ALIAS: String
    -val CERT_PRIVATE_KEY_ALIAS: String
    +val CORDA_CLIENT_CA: String
    +val CORDA_CLIENT_CA_PRIVATE_KEY: String
    +val CORDA_INTERMEDIATE_CA: String
    +val CORDA_INTERMEDIATE_CA_PRIVATE_KEY: String
    +val CORDA_ROOT_CA: String
    +val CORDA_ROOT_CA_PRIVATE_KEY: String
    val ECDSA_CURVE: String
    -val INTERMEDIATE_CA_PRIVATE_KEY_ALIAS: String
    val KEYSTORE_TYPE: String
    val KEY_GENERATION_ALGORITHM: String
    -val ROOT_CA_CERT_PRIVATE_KEY_ALIAS: String
    val SIGNATURE_ALGORITHM: String
    +fun KeyStore.addOrReplaceCertificate(alias: String, cert: Certificate): Unit
    +fun KeyStore.addOrReplaceKey(alias: String, key: Key, password: CharArray, chain: Array<Certificate>): Unit
    fun createCAKeyStoreAndTrustStore(keyStoreFilePath: Path, storePassword: String, keyPassword: String, trustStoreFilePath: Path, trustStorePassword: String): KeyStore
    +fun createCertificateSigningRequest(myLegalName: String, nearestCity: String, email: String, keyPair: KeyPair): <ERROR CLASS>
    fun createIntermediateCert(domain: String, certificateAuthority: CACertAndKey): CACertAndKey
    fun createKeystoreForSSL(keyStoreFilePath: Path, storePassword: String, keyPassword: String, caKeyStore: KeyStore, caKeyPassword: String): KeyStore
    -fun createSelfSignedCACert(domain: String): CACertAndKey
    +fun createSelfSignedCACert(myLegalName: String): CACertAndKey
    fun createServerCert(subject: <ERROR CLASS>, publicKey: PublicKey, certificateAuthority: CACertAndKey, subjectAlternativeNameDomains: List<String>, subjectAlternativeNameIps: List<String>): X509Certificate
    fun generateECDSAKeyPairForSSL(): KeyPair
    fun getDevX509Name(domain: String): <ERROR CLASS>
    +fun getX509Name(myLegalName: String, nearestCity: String, email: String): <ERROR CLASS>
    fun loadCertificateAndKey(keyStore: KeyStore, keyPassword: String, alias: String): CACertAndKey
    fun loadCertificateFromKeyStore(keyStoreFilePath: Path, storePassword: String, alias: String): X509Certificate
    fun loadCertificateFromPEMFile(filename: Path): X509Certificate
    fun loadKeyPairFromKeyStore(keyStoreFilePath: Path, storePassword: String, keyPassword: String, alias: String): KeyPair
    fun loadKeyStore(keyStoreFilePath: Path, storePassword: String): KeyStore
    fun loadKeyStore(input: InputStream, storePassword: String): KeyStore
    +fun loadOrCreateKeyPairFromKeyStore(keyStoreFilePath: Path, storePassword: String, keyPassword: String, alias: String, keyGenerator: () -> CACertAndKey): KeyPair
    fun loadOrCreateKeyStore(keyStoreFilePath: Path, storePassword: String): KeyStore
    fun saveCertificateAsPEMFile(x509Certificate: X509Certificate, filename: Path): Unit
    fun saveKeyStore(keyStore: KeyStore, keyStoreFilePath: Path, storePassword: String): Unit
    @@ -13461,11 +15095,11 @@ open fun loadState(stateRef: StateRef): TransactionState<*>
    abstract val networkMapCache: NetworkMapCache
    abstract val networkService: MessagingService
    -abstract fun recordTransactions(txs: Iterable<SignedTransaction>): Unit
    -open fun recordTransactions(vararg txs: SignedTransaction): <ERROR CLASS>
    +abstract fun recordTransactions(txs: Iterable<SignedTransaction>): Unit
    +open fun recordTransactions(vararg txs: SignedTransaction): <ERROR CLASS>
    abstract val schedulerService: SchedulerService
    abstract val storageService: StorageService
    -abstract val walletService: WalletService
    +abstract val vaultService: VaultService
    @@ -13598,7 +15232,7 @@ -abstract fun addMapService(net: MessagingService, service: NodeInfo, subscribe: Boolean, ifChangedSinceVer: Int? = null): <ERROR CLASS><Unit>
    +abstract fun addMapService(net: MessagingService, networkMapAddress: SingleMessageRecipient, subscribe: Boolean, ifChangedSinceVer: Int? = null): <ERROR CLASS><Unit>
    abstract fun addNode(node: NodeInfo): Unit
    abstract val changed: <ERROR CLASS><MapChange>
    abstract fun deregisterForUpdates(net: MessagingService, service: NodeInfo): <ERROR CLASS><Unit>
    @@ -13608,12 +15242,13 @@ abstract fun getNodeByPublicKey(publicKey: PublicKey): NodeInfo?
    abstract fun getRecommended(type: ServiceType, contract: Contract, vararg party: Party): NodeInfo?
    val logger: <ERROR CLASS>
    +abstract val mapServiceRegistered: <ERROR CLASS><Unit>
    abstract val networkMapNodes: List<NodeInfo>
    abstract val notaryNodes: List<NodeInfo>
    abstract val partyNodes: List<NodeInfo>
    -abstract val ratesOracleNodes: List<NodeInfo>
    abstract val regulators: List<NodeInfo>
    abstract fun removeNode(node: NodeInfo): Unit
    +abstract fun runWithoutMapService(): Unit
    @@ -13625,8 +15260,8 @@ -abstract fun getTransaction(id: SecureHash): SignedTransaction?
    -abstract val updates: <ERROR CLASS><SignedTransaction>
    +abstract fun getTransaction(id: SecureHash): SignedTransaction?
    +abstract val updates: <ERROR CLASS><SignedTransaction>
    @@ -13698,7 +15333,7 @@ -abstract fun addTransaction(transaction: SignedTransaction): Unit
    +abstract fun addTransaction(transaction: SignedTransaction): Unit
    @@ -13767,7 +15402,7 @@ -class Wallet
    +class Vault
    -interface WalletService
    +interface VaultService
    -inline fun <reified T : LinearState> WalletService.linearHeadsOfType(): <ERROR CLASS>
    - - - -package com.r3corda.core.node.services.testing
    - @@ -13979,12 +15503,14 @@ val logger: <ERROR CLASS>
    open val progressTracker: ProgressTracker?
    lateinit var psm: ProtocolStateMachine<*>
    -inline fun <reified T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
    -fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T>
    -fun send(destination: Party, sessionID: Long, payload: Any): Unit
    -inline fun <reified T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T>
    +inline fun <reified T : Any> receive(otherParty: Party): UntrustworthyData<T>
    +fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T>
    +fun registerSession(receivedHandshake: HandshakeMessage): Unit
    +fun send(otherParty: Party, payload: Any): Unit
    +inline fun <reified T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
    +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T>
    val serviceHub: ServiceHub
    -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R
    +fun <R> subProtocol(subLogic: ProtocolLogic<R>, inheritParentSessions: Boolean = false): R
    protected abstract val topic: String
    @@ -14030,10 +15556,10 @@ abstract val logger: <ERROR CLASS>
    abstract val machineId: Long
    -abstract fun <T : Any> receive(topic: String, sessionIDForReceive: Long, recvType: Class<T>): UntrustworthyData<T>
    +abstract fun <T : Any> receive(topic: String, sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T>
    abstract val resultFuture: <ERROR CLASS><R>
    abstract fun send(topic: String, destination: Party, sessionID: Long, payload: Any): Unit
    -abstract fun <T : Any> sendAndReceive(topic: String, destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any, recvType: Class<T>): UntrustworthyData<T>
    +abstract fun <T : Any> sendAndReceive(topic: String, destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any, receiveType: Class<T>): UntrustworthyData<T>
    abstract val serviceHub: ServiceHub
    @@ -14283,15 +15809,15 @@ -fun read(kryo: <ERROR CLASS>, input: <ERROR CLASS>, type: Class<WireTransaction>): WireTransaction
    -fun write(kryo: <ERROR CLASS>, output: <ERROR CLASS>, obj: WireTransaction): Unit
    +fun read(kryo: <ERROR CLASS>, input: <ERROR CLASS>, type: Class<WireTransaction>): WireTransaction
    +fun write(kryo: <ERROR CLASS>, output: <ERROR CLASS>, obj: WireTransaction): Unit
    var <ERROR CLASS>.attachmentStorage: AttachmentStorage?
    fun createKryo(k: <ERROR CLASS> = Kryo()): <ERROR CLASS>
    fun <T : Any> OpaqueBytes.deserialize(kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): T
    -fun SerializedBytes<WireTransaction>.deserialize(kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): WireTransaction
    +fun SerializedBytes<WireTransaction>.deserialize(kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): WireTransaction
    fun <T : Any> SerializedBytes<T>.deserialize(kryo: <ERROR CLASS> = THREAD_LOCAL_KRYO.get()): T
    kotlin.ByteArray
    -class DuplicateOutputLabel : Exception
    +InMemoryVaultService(services: ServiceHub)
    +protected class InnerState
    -sealed class EnforceVerifyOrFail
    -open class InMemoryWalletService : SingletonSerializeAsToken, WalletService
    +open val currentVault: Vault
    +open val linearHeads: Map<UniqueIdentifier, StateAndRef<LinearState>>
    +protected open val log: <ERROR CLASS>
    +protected val mutex: ThreadBox<InnerState>
    +open fun notifyAll(txns: Iterable<WireTransaction>): Vault
    +protected val services: ServiceHub
    +open val updates: <ERROR CLASS><Update>
    + + + +class InstantGenerator
    +class IssuedGenerator<T>
    -open val currentWallet: Wallet
    -open val linearHeads: Map<UniqueIdentifier, StateAndRef<LinearState>>
    -protected open val log: <ERROR CLASS>
    -protected val mutex: ThreadBox<InnerState>
    -open fun notifyAll(txns: Iterable<WireTransaction>): Wallet
    -protected val services: ServiceHub
    -open val updates: <ERROR CLASS><Update>
    - - - -class LedgerDSL<out T : TransactionDSLInterpreter, out L : LedgerDSLInterpreter<T>> : LedgerDSLInterpreter<TransactionDSLInterpreter>
    +class PartyAndReferenceGenerator
    -interface LedgerDSLInterpreter<out T : TransactionDSLInterpreter> : Verifies, OutputStateLookup
    +class PartyGenerator
    -val MEGA_CORP: Party
    -val MEGA_CORP_KEY: KeyPair
    -val MEGA_CORP_PUBKEY: PublicKey
    -val MINI_CORP: Party
    -val MINI_CORP_KEY: KeyPair
    -val MINI_CORP_PUBKEY: PublicKey
    -val MOCK_IDENTITY_SERVICE: MockIdentityService
    -val ORACLE_KEY: KeyPair
    -val ORACLE_PUBKEY: PublicKey
    -interface OutputStateLookup
    +class PrivateKeyGenerator
    -val TEST_TX_TIME: Instant
    -data class TestLedgerDSLInterpreter : LedgerDSLInterpreter<TestTransactionDSLInterpreter>
    +class PublicKeyGenerator
    +class SecureHashGenerator
    -class VerifiesFailed : Exception
    +class StateRefGenerator
    -fun _transaction(transactionLabel: String?, transactionBuilder: TransactionBuilder, dsl: TransactionDSL<TestTransactionDSLInterpreter>.() -> EnforceVerifyOrFail): WireTransaction
    -fun _unverifiedTransaction(transactionLabel: String?, transactionBuilder: TransactionBuilder, dsl: TransactionDSL<TestTransactionDSLInterpreter>.() -> Unit): WireTransaction
    -fun attachment(attachment: InputStream): SecureHash
    -fun outputToLabel(state: ContractState): String?
    -fun <S : ContractState> retrieveOutputStateAndRef(clazz: Class<S>, label: String): StateAndRef<S>
    -val services: ServiceHub
    -fun transactionName(transactionHash: SecureHash): String?
    -val transactionsToVerify: List<WireTransaction>
    -val transactionsUnverified: List<WireTransaction>
    -fun tweak(dsl: LedgerDSL<TestTransactionDSLInterpreter, LedgerDSLInterpreter<TestTransactionDSLInterpreter>>.() -> Unit): Unit
    -fun verifies(): EnforceVerifyOrFail
    -val wireTransactions: List<WireTransaction>
    - - - -data class TestTransactionDSLInterpreter : TransactionDSLInterpreter, OutputStateLookup
    +class TimestampGenerator
    -class TransactionDSL<out T : TransactionDSLInterpreter> : TransactionDSLInterpreter
    +class TransactionStateGenerator<T : ContractState>
    -interface TransactionDSLInterpreter : Verifies, OutputStateLookup
    +fun <A> <ERROR CLASS><A>.generateList(random: <ERROR CLASS>, status: <ERROR CLASS>): List<A>
    + + + +package com.r3corda.core.transactions
    -interface Verifies
    +abstract class BaseTransaction : NamedByHash
    +class LedgerTransaction : BaseTransaction
    + +data class SignedTransaction : NamedByHash
    + +open class TransactionBuilder
    + +class WireTransaction : BaseTransaction
    + -fun freeLocalHostAndPort(): <ERROR CLASS>
    -fun generateStateRef(): StateRef
    -fun ledger(services: ServiceHub = MockServices(), dsl: LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.() -> Unit): LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>
    -fun TransactionDSLInterpreter.ledger(dsl: LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.() -> Unit): Unit
    -fun LedgerDSLInterpreter<TransactionDSLInterpreter>.ledger(dsl: LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.() -> Unit): Unit
    -inline fun <R> rootCauseExceptions(body: () -> R): R
    -fun signAll(transactionsToSign: List<WireTransaction>, extraKeys: List<KeyPair>): <ERROR CLASS>
    -fun LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>.signAll(vararg extraKeys: KeyPair): <ERROR CLASS>
    -fun transaction(transactionLabel: String? = null, transactionBuilder: TransactionBuilder = TransactionBuilder(notary = DUMMY_NOTARY), dsl: TransactionDSL<TransactionDSLInterpreter>.() -> EnforceVerifyOrFail): LedgerDSL<TestTransactionDSLInterpreter, TestLedgerDSLInterpreter>
    -fun TransactionDSLInterpreter.transaction(dsl: TransactionDSL<TransactionDSLInterpreter>.() -> EnforceVerifyOrFail): Unit
    @@ -14642,6 +16225,12 @@ +val DUMMY_KEY_1: KeyPair
    +val DUMMY_KEY_2: KeyPair
    +val DUMMY_NOTARY: Party
    +val DUMMY_NOTARY_KEY: KeyPair
    +val DUMMY_PUBKEY_1: PublicKey
    +val DUMMY_PUBKEY_2: PublicKey
    object Emoji
      @@ -14871,6 +16460,7 @@
    +val TEST_TX_TIME: Instant
    data class TimeWindow
    +inline fun <ERROR CLASS>.debug(msg: () -> String): Unit
    inline fun <reified T : Any> loggerFor(): <ERROR CLASS>
    fun <T> nonEmptySetOf(initial: T, vararg elements: T): NonEmptySet<T>
    fun suggestInterestRateAnnouncementTimeWindow(index: String, source: String, date: LocalDate): TimeWindow
    @@ -14946,12 +16538,11 @@ -RunNode(node: IRSDemoNode, dir: Path, networkAddress: <ERROR CLASS>, apiAddress: <ERROR CLASS>, mapAddress: String, identityFile: Path, tradeWithIdentities: List<Path>, uploadRates: Boolean, defaultLegalName: String, autoSetup: Boolean)
    +RunNode(node: IRSDemoNode, dir: Path, networkAddress: <ERROR CLASS>, apiAddress: <ERROR CLASS>, mapAddress: String, tradeWithIdentities: List<Path>, uploadRates: Boolean, defaultLegalName: String, autoSetup: Boolean)
    val apiAddress: <ERROR CLASS>
    val autoSetup: Boolean
    val defaultLegalName: String
    val dir: Path
    -val identityFile: Path
    val mapAddress: String
    val networkAddress: <ERROR CLASS>
    val node: IRSDemoNode
    @@ -14989,6 +16580,19 @@ +class UploadRates : CliParams
    + val defaultBaseDirectory: String
    fun legalName(node: IRSDemoNode): String
    fun parse(options: <ERROR CLASS>): CliParams
    @@ -15008,7 +16612,6 @@ val fakeTradeWithIdentityFile: <ERROR CLASS>
    val help: <ERROR CLASS>
    val networkAddressArg: <ERROR CLASS>
    -val networkMapIdentityFile: <ERROR CLASS>
    val networkMapNetAddr: <ERROR CLASS>
    val nonOptions: <ERROR CLASS>
    val parser: <ERROR CLASS>
    @@ -15074,6 +16677,7 @@ Date
    NodeA
    NodeB
    +Rates
    SetupNodeA
    SetupNodeB
    Trade
    @@ -15097,6 +16701,7 @@ fun main(args: Array<String>): Unit
    fun main(args: Array<String>): Unit
    fun runIRSDemo(args: Array<String>): Int
    +fun runUploadRates(cliParams: UploadRates): <ERROR CLASS>
    @@ -15127,6 +16732,114 @@ +object NodeInterestRates
    + @@ -15146,7 +16859,7 @@ -data class AutoOfferMessage
    +data class AutoOfferMessage : HandshakeMessage
    @@ -15175,7 +16889,7 @@ -class Requester : ProtocolLogic<SignedTransaction>
    +class Requester : ProtocolLogic<SignedTransaction>
      @@ -15198,7 +16912,7 @@
    object RECEIVED : Step
    -fun call(): SignedTransaction
    +fun call(): SignedTransaction
    val dealToBeOffered: DealState
    val progressTracker: ProgressTracker
    protected val topic: String
    @@ -15206,7 +16920,7 @@ -class Service
    +class Service : AbstractNodeService
    @@ -15242,7 +16956,6 @@ -object RECEIVED : Step
    fun tracker(): ProgressTracker
    @@ -15274,7 +16987,7 @@ -data class ExitMessage
    +data class ExitMessage : HandshakeMessage
    @@ -15368,7 +17084,7 @@ val TOPIC: String
    -data class UpdateBusinessDayMessage
    +data class UpdateBusinessDayMessage : HandshakeMessage
    @@ -15423,7 +17142,6 @@ -val log: <ERROR CLASS>
    fun main(args: Array<String>): Unit
    @@ -15444,12 +17162,12 @@ -abstract fun buildTransaction(type: ContractDefRef, steps: List<TransactionBuildStep>): SerializedBytes<WireTransaction>
    -abstract fun commitTransaction(tx: SerializedBytes<WireTransaction>, signatures: List<WithKey>): SecureHash
    +abstract fun buildTransaction(type: ContractDefRef, steps: List<TransactionBuildStep>): SerializedBytes<WireTransaction>
    +abstract fun commitTransaction(tx: SerializedBytes<WireTransaction>, signatures: List<WithKey>): SecureHash
    abstract fun fetchProtocolsRequiringAttention(query: StatesQuery): Map<StateRef, ProtocolRequiringAttention>
    abstract fun fetchStates(states: List<StateRef>): Map<StateRef, TransactionState<ContractState>?>
    -abstract fun fetchTransactions(txs: List<SecureHash>): Map<SecureHash, SignedTransaction?>
    -abstract fun generateTransactionSignature(tx: SerializedBytes<WireTransaction>): WithKey
    +abstract fun fetchTransactions(txs: List<SecureHash>): Map<SecureHash, SignedTransaction?>
    +abstract fun generateTransactionSignature(tx: SerializedBytes<WireTransaction>): WithKey
    abstract fun invokeProtocolSync(type: ProtocolRef, args: Map<String, Any?>): Any?
    abstract fun provideProtocolResponse(protocol: ProtocolInstanceRef, choice: SecureHash, args: Map<String, Any?>): Unit
    abstract fun queryStates(query: StatesQuery): List<StateRef>
    @@ -15623,7 +17341,7 @@ State()
    -val clients: LinkedList<ArtemisMessagingClient>
    +val clients: LinkedList<NodeMessagingClient>
    var localServer: ArtemisMessagingServer?
    val registeredProcesses: LinkedList<Process>
    @@ -15639,7 +17357,7 @@ fun registerProcess(process: Process): Unit
    fun shutdown(): Unit
    fun start(): Unit
    -fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<ArtemisMessagingClient>
    +fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<NodeMessagingClient>
    fun startLocalServer(): Future<ArtemisMessagingServer>
    fun startNode(providedName: String?, advertisedServices: Set<ServiceType>): Future<NodeInfo>
    fun waitForAllNodesToFinish(): Unit
    @@ -15655,7 +17373,7 @@ abstract val networkMapCache: NetworkMapCache
    -abstract fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<ArtemisMessagingClient>
    +abstract fun startClient(providedName: String, serverAddress: <ERROR CLASS>): Future<NodeMessagingClient>
    abstract fun startLocalServer(): Future<ArtemisMessagingServer>
    abstract fun startNode(providedName: String? = null, advertisedServices: Set<ServiceType> = setOf()): Future<NodeInfo>
    abstract fun waitForAllNodesToFinish(): Unit
    @@ -15675,48 +17393,6 @@ -class NodeRunner
    - sealed class PortAllocation
    @@ -15758,13 +17434,12 @@ fun addressMustBeBound(hostAndPort: <ERROR CLASS>): Unit
    fun addressMustNotBeBound(hostAndPort: <ERROR CLASS>): Unit
    -fun createNodeRunDirectory(directory: Path): Boolean
    fun <A> driver(baseDirectory: String = "build/${getTimestampAsDirectoryName()}", portAllocation: PortAllocation = PortAllocation.Incremental(10000), debugPortAllocation: PortAllocation = PortAllocation.Incremental(5005), isDebug: Boolean = false, dsl: DriverDSLExposedInterface.() -> A): A
    fun <DI : DriverDSLExposedInterface, D : DriverDSLInternalInterface, A> genericDriver(driverDsl: D, coerce: (D) -> DI, dsl: DI.() -> A): A
    fun <A> poll(pollName: String, pollIntervalMs: Long = 500, warnCount: Int = 120, f: () -> A?): A
    -fun DriverDSLExposedInterface.startClient(localServer: ArtemisMessagingServer): Future<ArtemisMessagingClient>
    -fun DriverDSLExposedInterface.startClient(remoteNodeInfo: NodeInfo, providedName: String? = null): Future<ArtemisMessagingClient>
    -fun writeConfig(path: String, filename: String, config: <ERROR CLASS>): Unit
    +fun DriverDSLExposedInterface.startClient(localServer: ArtemisMessagingServer): Future<NodeMessagingClient>
    +fun DriverDSLExposedInterface.startClient(remoteNodeInfo: NodeInfo, providedName: String? = null): Future<NodeMessagingClient>
    +fun writeConfig(path: Path, filename: String, config: <ERROR CLASS>): Unit
    @@ -15785,12 +17460,12 @@ APIServerImpl(node: AbstractNode)
    -fun buildTransaction(type: ContractDefRef, steps: List<TransactionBuildStep>): SerializedBytes<WireTransaction>
    -fun commitTransaction(tx: SerializedBytes<WireTransaction>, signatures: List<WithKey>): SecureHash
    +fun buildTransaction(type: ContractDefRef, steps: List<TransactionBuildStep>): SerializedBytes<WireTransaction>
    +fun commitTransaction(tx: SerializedBytes<WireTransaction>, signatures: List<WithKey>): SecureHash
    fun fetchProtocolsRequiringAttention(query: StatesQuery): Map<StateRef, ProtocolRequiringAttention>
    fun fetchStates(states: List<StateRef>): Map<StateRef, TransactionState<ContractState>?>
    -fun fetchTransactions(txs: List<SecureHash>): Map<SecureHash, SignedTransaction?>
    -fun generateTransactionSignature(tx: SerializedBytes<WireTransaction>): WithKey
    +fun fetchTransactions(txs: List<SecureHash>): Map<SecureHash, SignedTransaction?>
    +fun generateTransactionSignature(tx: SerializedBytes<WireTransaction>): WithKey
    fun invokeProtocolSync(type: ProtocolRef, args: Map<String, Any?>): Any?
    val node: AbstractNode
    fun provideProtocolResponse(protocol: ProtocolInstanceRef, choice: SecureHash, args: Map<String, Any?>): Unit
    @@ -15808,47 +17483,61 @@ -AbstractNode(dir: Path, configuration: NodeConfiguration, networkMapService: NodeInfo?, advertisedServices: Set<ServiceType>, platformClock: Clock)
    +AbstractNode(configuration: NodeConfiguration, networkMapService: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, platformClock: Clock)
    +class DatabaseConfigurationException : Exception
    + val PRIVATE_KEY_FILE_NAME: String
    val PUBLIC_IDENTITY_FILE_NAME: String
    protected val _servicesThatAcceptUploads: ArrayList<AcceptsFileUpload>
    val advertisedServices: Set<ServiceType>
    lateinit var api: APIServer
    lateinit var checkpointStorage: CheckpointStorage
    -protected val closeOnStop: ArrayList<Closeable>
    val configuration: NodeConfiguration
    -protected open fun constructStorageService(attachments: NodeAttachmentService, transactionStorage: TransactionStorage, keypair: KeyPair, identity: Party): StorageServiceImpl
    +protected open fun constructStorageService(attachments: NodeAttachmentService, transactionStorage: TransactionStorage, keyPair: KeyPair, identity: Party): StorageServiceImpl
    protected fun createNodeDir(): Unit
    val customServices: ArrayList<Any>
    -val dir: Path
    open fun findMyLocation(): PhysicalLocation?
    inline fun <reified T : Any> findService(): <ERROR CLASS>
    protected open fun generateKeyPair(): KeyPair
    lateinit var identity: IdentityService
    +var inNodeMonitorService: NodeMonitorService?
    var inNodeNetworkMapService: NetworkMapService?
    var inNodeNotaryService: NotaryService?
    -var inNodeWalletMonitorService: WalletMonitorService?
    val info: NodeInfo
    +protected open fun initialiseDatabasePersistence(insideTransaction: () -> Unit): Unit
    protected open fun initialiseStorageService(dir: Path): <ERROR CLASS><TxWritableStorageService, CheckpointStorage>
    var isPreviousCheckpointsPresent: Boolean
    -lateinit var keyManagement: E2ETestKeyManagementService
    +lateinit var keyManagement: KeyManagementService
    protected abstract val log: <ERROR CLASS>
    protected fun makeAttachmentStorage(dir: Path): NodeAttachmentService
    protected open fun makeIdentityService(): IdentityService
    +protected open fun makeKeyManagementService(): KeyManagementService
    protected abstract fun makeMessagingService(): MessagingServiceInternal
    +protected open fun makeMonitorService(): NodeMonitorService
    protected open fun makeNetworkMapService(): Unit
    protected open fun makeNotaryService(type: ServiceType): NotaryService
    -protected open fun makeWalletMonitorService(): WalletMonitorService
    -protected open fun makeWalletService(): WalletService
    +protected abstract fun makeUniquenessProvider(): UniquenessProvider
    +protected open fun makeVaultService(): VaultService
    lateinit var net: MessagingServiceInternal
    lateinit var netMapCache: NetworkMapCache
    val networkMapRegistrationFuture: <ERROR CLASS><Unit>
    var networkMapSeq: Long
    -val networkMapService: NodeInfo?
    +val networkMapService: SingleMessageRecipient?
    protected open fun noNetworkMapConfigured(): <ERROR CLASS><Unit>
    val platformClock: Clock
    protected val pluginRegistries: List<CordaPluginRegistry>
    lateinit var protocolLogicFactory: ProtocolLogicRefFactory
    +protected val runOnStop: ArrayList<Runnable>
    lateinit var scheduler: SchedulerService
    protected abstract val serverThread: AffinityExecutor
    val services: ServiceHubInternal
    @@ -15860,7 +17549,8 @@ var started: Boolean
    open fun stop(): Unit
    lateinit var storage: TxWritableStorageService
    -lateinit var wallet: WalletService
    +var uniquenessProvider: UniquenessProvider?
    +lateinit var vault: VaultService
    @@ -15884,10 +17574,11 @@ -Node(dir: Path, p2pAddr: <ERROR CLASS>, webServerAddr: <ERROR CLASS>, configuration: NodeConfiguration, networkMapAddress: NodeInfo?, advertisedServices: Set<ServiceType>, clock: Clock = NodeClock(), messagingServerAddr: <ERROR CLASS>? = null)
    +Node(p2pAddr: <ERROR CLASS>, webServerAddr: <ERROR CLASS>, configuration: NodeConfiguration, networkMapAddress: SingleMessageRecipient?, advertisedServices: Set<ServiceType>, clock: Clock = NodeClock(), messagingServerAddr: <ERROR CLASS>? = null)
    val DEFAULT_PORT: Int
    protected val log: <ERROR CLASS>
    protected fun makeMessagingService(): MessagingServiceInternal
    +protected fun makeUniquenessProvider(): PersistentUniquenessProvider
    var messageBroker: ArtemisMessagingServer?
    val messagingServerAddr: <ERROR CLASS>?
    val p2pAddr: <ERROR CLASS>
    @@ -15902,10 +17593,7 @@ - - - -package com.r3corda.node.internal.testing
    +class ServerRPCOps : CordaRPCOps
    @@ -16267,11 +17699,14 @@ -AbstractNodeService(net: MessagingService, networkMapCache: NetworkMapCache)
    -protected inline fun <reified Q : ServiceRequestMessage, reified R : Any> addMessageHandler(topic: String, crossinline handler: (Q) -> R, crossinline exceptionConsumer: (Message, Exception) -> Unit): Unit
    -protected inline fun <reified Q : ServiceRequestMessage, reified R : Any> addMessageHandler(topic: String, crossinline handler: (Q) -> R): Unit
    -val net: MessagingService
    -val networkMapCache: NetworkMapCache
    +AbstractNodeService(services: ServiceHubInternal)
    +protected inline fun <reified Q : ServiceRequestMessage, reified R : Any> addMessageHandler(topic: String, crossinline handler: (Q) -> R, crossinline exceptionConsumer: (Message, Exception) -> Unit): MessageHandlerRegistration
    +protected inline fun <reified Q : ServiceRequestMessage, reified R : Any> addMessageHandler(topic: String, crossinline handler: (Q) -> R): MessageHandlerRegistration
    +protected inline fun <reified H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, crossinline protocolFactory: (H) -> ProtocolLogic<R>, crossinline onResultFuture: (<ERROR CLASS><R>, H) -> Unit): Unit
    +protected inline fun <reified H : HandshakeMessage, R : Any> addProtocolHandler(topic: String, loggerName: String, crossinline protocolFactory: (H) -> ProtocolLogic<R>): Unit
    +val logger: <ERROR CLASS>
    +val net: MessagingServiceInternal
    +val services: ServiceHubInternal
    @@ -16297,8 +17732,10 @@ -Checkpoint(serialisedFiber: SerializedBytes<ProtocolStateMachineImpl<*>>, request: FiberRequest?)
    -val request: FiberRequest?
    +Checkpoint(serialisedFiber: SerializedBytes<ProtocolStateMachineImpl<*>>, request: ProtocolIORequest?, receivedPayload: Any?)
    +var fiberCreated: Boolean
    +val receivedPayload: Any?
    +val request: ProtocolIORequest?
    val serialisedFiber: SerializedBytes<ProtocolStateMachineImpl<*>>
    @@ -16415,7 +17852,7 @@ -class Service
    +class Service : AbstractNodeService
      @@ -16430,114 +17867,6 @@
    -object NodeInterestRates
    - @@ -16560,39 +17889,27 @@ FullNodeConfiguration(conf: <ERROR CLASS>)
    val artemisAddress: <ERROR CLASS>
    val basedir: Path
    +val certificateSigningService: <ERROR CLASS>
    val clock: Clock
    fun createNode(): Node
    val dataSourceProperties: Properties
    +val devMode: Boolean
    +val emailAddress: String
    val exportJMXto: String
    val extraAdvertisedServiceIds: String
    val hostNotaryServiceLocally: Boolean
    val keyStorePassword: String
    -val mapService: NameServiceConfig
    val messagingServerAddress: <ERROR CLASS>?
    val myLegalName: String
    val nearestCity: String
    +val networkMapAddress: <ERROR CLASS>?
    val trustStorePassword: String
    val useHTTPS: Boolean
    val webAddress: <ERROR CLASS>
    -class NameServiceConfig
    - -interface NodeConfiguration
    +interface NodeConfiguration : NodeSSLConfiguration
    @@ -16620,8 +17940,12 @@ NodeConfigurationFromConfig(config: <ERROR CLASS> = ConfigFactory.load())
    +val basedir: Path
    +val certificateSigningService: <ERROR CLASS>
    val config: <ERROR CLASS>
    val dataSourceProperties: Properties
    +val devMode: Boolean
    +val emailAddress: String
    val exportJMXto: String
    val keyStorePassword: String
    val myLegalName: String
    @@ -16630,6 +17954,38 @@ +interface NodeSSLConfiguration
    + +class OptionalConfig<out T>
    + +fun <T> <ERROR CLASS>.getOrElse(lambda: () -> T): OptionalConfig<T>
    fun <ERROR CLASS>.getProperties(path: String): Properties
    operator fun <T> <ERROR CLASS>.getValue(receiver: Any, metadata: KProperty<*>): T
    @@ -16721,6 +18077,20 @@ +class PersistentKeyManagementService : SingletonSerializeAsToken, KeyManagementService
    + @@ -16732,51 +18102,6 @@ -class ArtemisMessagingClient : ArtemisMessagingComponent, MessagingServiceInternal
    - abstract class ArtemisMessagingComponent : SingletonSerializeAsToken
    @@ -16861,12 +18189,8 @@ -ArtemisMessagingServer(directory: Path, config: NodeConfiguration, myHostPort: <ERROR CLASS>, networkMapCache: NetworkMapCache)
    -fun addConnector(hostAndPort: <ERROR CLASS>): <ERROR CLASS>
    -fun bridgeExists(name: <ERROR CLASS>): <ERROR CLASS>
    -fun bridgeToNetworkMapService(networkMapService: NodeInfo?): Unit
    -fun connectorExists(hostAndPort: <ERROR CLASS>): Boolean
    -fun deployBridge(hostAndPort: <ERROR CLASS>, name: <ERROR CLASS>): <ERROR CLASS>
    +ArtemisMessagingServer(config: NodeConfiguration, myHostPort: <ERROR CLASS>, networkMapCache: NetworkMapCache)
    +fun bridgeToNetworkMapService(networkMapService: SingleMessageRecipient?): Unit
    val log: <ERROR CLASS>
    val myHostPort: <ERROR CLASS>
    val networkMapCache: NetworkMapCache
    @@ -16875,6 +18199,166 @@ +data class ClientRPCRequestMessage
    + +interface CordaRPCOps : RPCOps
    +data class MarshalledObservation
    + +class NodeMessagingClient : ArtemisMessagingComponent, MessagingServiceInternal
    + +abstract class RPCDispatcher
    + +open class RPCException : RuntimeException
    + +interface RPCOps
    + +@Target([AnnotationTarget.FUNCTION]) annotation class RPCReturnsObservables
    + +@Target([AnnotationTarget.FUNCTION]) annotation class RPCSinceVersion
    + +fun createRPCKryo(observableSerializer: <ERROR CLASS><<ERROR CLASS><Any>>? = null): <ERROR CLASS>
    +val rpcLog: <ERROR CLASS>
    +fun <ERROR CLASS>.toRPCRequestMessage(): ClientRPCRequestMessage
    @@ -16928,6 +18412,54 @@ +class NodeMonitorService : AbstractNodeService
    + data class RegisterRequest : DirectRequestMessage
    @@ -16988,6 +18521,7 @@ Progress(time: Instant, fiberId: Long, message: String)
    val fiberId: Long
    val message: String
    +fun toString(): String
    @@ -17003,6 +18537,7 @@ val addOrRemove: AddOrRemove
    val fiberId: Long
    val label: String
    +fun toString(): String
    @@ -17014,8 +18549,9 @@ -Transaction(time: Instant, transaction: SignedTransaction)
    -val transaction: SignedTransaction
    +Transaction(time: Instant, transaction: LedgerTransaction)
    +fun toString(): String
    +val transaction: LedgerTransaction
    @@ -17030,6 +18566,7 @@ TransactionBuild(time: Instant, id: UUID, state: TransactionBuildResult)
    val id: UUID
    val state: TransactionBuildResult
    +fun toString(): String
    @@ -17045,8 +18582,8 @@ -StateSnapshotMessage(contractStates: Collection<ContractState>, protocolStates: Collection<String>)
    -val contractStates: Collection<ContractState>
    +StateSnapshotMessage(contractStates: Collection<StateAndRef<ContractState>>, protocolStates: Collection<String>)
    +val contractStates: Collection<StateAndRef<ContractState>>
    val protocolStates: Collection<String>
    @@ -17059,20 +18596,6 @@ -class Complete : TransactionBuildResult
    - class Failed : TransactionBuildResult
    @@ -17094,65 +18618,17 @@ -ProtocolStarted(fiberId: Long, transaction: SignedTransaction?, message: String?)
    +ProtocolStarted(fiberId: Long, transaction: LedgerTransaction?, message: String?)
    val fiberId: Long
    val message: String?
    -val transaction: SignedTransaction?
    +fun toString(): String
    +val transaction: LedgerTransaction?
    -class WalletMonitorService : AbstractNodeService
    - @@ -17164,7 +18640,7 @@ -class InMemoryMessagingNetwork : SingletonSerializeAsToken
    +abstract class AbstractNetworkMapService : NetworkMapService, AbstractNodeService
    @@ -17293,7 +18677,7 @@ InMemoryNetworkMapCache()
    -open fun addMapService(net: MessagingService, service: NodeInfo, subscribe: Boolean, ifChangedSinceVer: Int?): <ERROR CLASS><Unit>
    +open fun addMapService(net: MessagingService, networkMapAddress: SingleMessageRecipient, subscribe: Boolean, ifChangedSinceVer: Int?): <ERROR CLASS><Unit>
    open fun addNode(node: NodeInfo): Unit
    open val changed: <ERROR CLASS><MapChange>
    open fun deregisterForUpdates(net: MessagingService, service: NodeInfo): <ERROR CLASS><Unit>
    @@ -17302,18 +18686,19 @@ open fun getNodeByLegalName(name: String): <ERROR CLASS>
    open fun getNodeByPublicKey(publicKey: PublicKey): <ERROR CLASS>
    open fun getRecommended(type: ServiceType, contract: Contract, vararg party: Party): NodeInfo?
    +open val mapServiceRegistered: <ERROR CLASS><Unit>
    open val networkMapNodes: List<NodeInfo>
    open val notaryNodes: List<NodeInfo>
    open val partyNodes: List<NodeInfo>
    fun processUpdatePush(req: Update): Unit
    -open val ratesOracleNodes: List<NodeInfo>
    protected var registeredNodes: MutableMap<Party, NodeInfo>
    open val regulators: List<NodeInfo>
    open fun removeNode(node: NodeInfo): Unit
    +open fun runWithoutMapService(): Unit
    -class InMemoryNetworkMapService : NetworkMapService, AbstractNodeService
    +class InMemoryNetworkMapService : AbstractNetworkMapService
    -class MockNetworkMapCache : InMemoryNetworkMapCache
    +data class LastAcknowledgeInfo
    @@ -17512,7 +18873,8 @@ -Update(wireReg: WireNodeRegistration, replyTo: MessageRecipients)
    +Update(wireReg: WireNodeRegistration, mapVersion: Int, replyTo: MessageRecipients)
    +val mapVersion: Int
    val replyTo: MessageRecipients
    val wireReg: WireNodeRegistration
    @@ -17526,9 +18888,9 @@ -UpdateAcknowledge(wireRegHash: SecureHash, replyTo: MessageRecipients)
    +UpdateAcknowledge(mapVersion: Int, replyTo: MessageRecipients)
    +val mapVersion: Int
    val replyTo: MessageRecipients
    -val wireRegHash: SecureHash
    @@ -17602,6 +18964,34 @@ +data class NodeRegistrationInfo
    + +class PersistentNetworkMapService : AbstractNetworkMapService
    + class WireNodeRegistration : SignedData<NodeRegistration>
      @@ -17669,8 +19059,7 @@
    val logger: <ERROR CLASS>
    -fun notify(net: MessagingService, myIdentity: Party, recipient: NodeInfo, transaction: SignedTransaction): Unit
    -val services: ServiceHubInternal
    +fun notify(net: MessagingService, myIdentity: Party, recipient: NodeInfo, transaction: SignedTransaction): Unit
    val storage: StorageService
    @@ -17738,11 +19127,11 @@ PerFileTransactionStorage(storeDir: Path)
    -fun addTransaction(transaction: SignedTransaction): Unit
    -fun getTransaction(id: SecureHash): SignedTransaction?
    +fun addTransaction(transaction: SignedTransaction): Unit
    +fun getTransaction(id: SecureHash): SignedTransaction?
    val storeDir: Path
    -val transactions: Iterable<SignedTransaction>
    -val updates: <ERROR CLASS><SignedTransaction>
    +val transactions: Iterable<SignedTransaction>
    +val updates: <ERROR CLASS><SignedTransaction>
    @@ -17773,7 +19162,7 @@ -sealed class FiberRequest
    +interface ProtocolIORequest
    @@ -17832,15 +19187,95 @@ val logger: <ERROR CLASS>
    val logic: ProtocolLogic<R>
    val machineId: Long
    -fun <T : Any> receive(topic: String, sessionIDForReceive: Long, recvType: Class<T>): UntrustworthyData<T>
    +fun <T : Any> receive(topic: String, sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T>
    val resultFuture: <ERROR CLASS><R>
    fun run(): R
    fun send(topic: String, destination: Party, sessionID: Long, payload: Any): Unit
    -fun <T : Any> sendAndReceive(topic: String, destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any, recvType: Class<T>): UntrustworthyData<T>
    +fun <T : Any> sendAndReceive(topic: String, destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any, receiveType: Class<T>): UntrustworthyData<T>
    lateinit var serviceHub: ServiceHubInternal
    +data class ReceiveOnly<T> : ReceiveRequest<T>
    + +interface ReceiveRequest<T> : ProtocolIORequest
    + +data class SendAndReceive<T> : SendRequest, ReceiveRequest<T>
    + +data class SendOnly : SendRequest
    + +interface SendRequest : ProtocolIORequest
    + class StackSnapshot : Throwable
    +class PersistentUniquenessProvider : UniquenessProvider, SingletonSerializeAsToken
    + class SimpleNotaryService : NotaryService
    -package com.r3corda.node.services.wallet
    +package com.r3corda.node.services.vault
    +abstract class AbstractJDBCHashMap<K : Any, V : Any, T : JDBCHashedTable> : MutableMap<K, V>, AbstractMap<K, V>
    + +abstract class AbstractJDBCHashSet<K : Any, T : JDBCHashedTable> : MutableSet<K>, AbstractSet<K>
    + enum class AddOrRemove
      @@ -18172,6 +19678,77 @@
    +class JDBCHashMap<K : Any, V : Any> : AbstractJDBCHashMap<K, V, BlobMapTable>
    + +class JDBCHashSet<K : Any> : AbstractJDBCHashSet<K, BlobSetTable>
    + +open class JDBCHashedTable
    + object JsonSupport
      @@ -18335,6 +19912,7 @@
    fun configureDatabase(props: Properties): <ERROR CLASS><Closeable, <ERROR CLASS>>
    fun <T> databaseTransaction(statement: <ERROR CLASS>.() -> T): T
    +fun <T : Any> deserializeFromBlob(blob: Blob): T
    java.time.Clock
      @@ -18343,10 +19921,83 @@ -fun Clock.awaitWithDeadline(deadline: Instant, future: Future<*> = SettableFuture<Any>()): Boolean
      +fun Clock.awaitWithDeadline(deadline: Instant, future: Future<*> = GuavaSettableFuture.create<Any>()): Boolean
    +fun <T : Any> serializeToBlob(value: T, finalizables: MutableList<() -> Unit>): Blob
    + + + +package com.r3corda.node.utilities.certsigning
    + @@ -18367,7 +20018,7 @@ AbstractStateReplacementProtocol()
    -abstract class Acceptor<in T> : ProtocolLogic<Unit>
    +abstract class Acceptor<T> : ProtocolLogic<Unit>
    -data class Handshake : PartyRequestMessage
    +data class Handshake : HandshakeMessage
    @@ -18432,7 +20082,7 @@ abstract val modification: T
    abstract val stateRef: StateRef
    -abstract val stx: SignedTransaction
    +abstract val stx: SignedTransaction
    @@ -18462,8 +20112,8 @@ -BroadcastTransactionProtocol(notarisedTransaction: SignedTransaction, events: Set<ClientToServiceCommand>, participants: Set<Party>)
    -data class NotifyTxRequestMessage : PartyRequestMessage
    +BroadcastTransactionProtocol(notarisedTransaction: SignedTransaction, events: Set<ClientToServiceCommand>, participants: Set<Party>)
    +data class NotifyTxRequestMessage : HandshakeMessage
    val TOPIC: String
    fun call(): Unit
    val events: Set<ClientToServiceCommand>
    -val notarisedTransaction: SignedTransaction
    +val notarisedTransaction: SignedTransaction
    val participants: Set<Party>
    protected val topic: String
    @@ -18566,7 +20217,7 @@ -data class Request : PartyRequestMessage
    +data class Request : HandshakeMessage
    @@ -18604,7 +20256,7 @@ -class FetchTransactionsProtocol : FetchDataProtocol<SignedTransaction, SignedTransaction>
    +class FetchTransactionsProtocol : FetchDataProtocol<SignedTransaction, SignedTransaction>
    +interface HandshakeMessage : PartyRequestMessage
    + @@ -18656,9 +20322,10 @@ -Acceptor(otherSide: Party, sessionIdForSend: Long, sessionIdForReceive: Long, progressTracker: ProgressTracker = tracker())
    +Acceptor(otherSide: Party, progressTracker: ProgressTracker = tracker())
    val progressTracker: ProgressTracker
    protected val topic: String
    +fun verifyProposal(maybeProposal: UntrustworthyData<Proposal<Party>>): Proposal<Party>
    @@ -18683,10 +20350,10 @@ -Proposal(stateRef: StateRef, modification: Party, stx: SignedTransaction)
    +Proposal(stateRef: StateRef, modification: Party, stx: SignedTransaction)
    val modification: Party
    val stateRef: StateRef
    -val stx: SignedTransaction
    +val stx: SignedTransaction
    @@ -18710,10 +20377,10 @@ -Conflict(tx: WireTransaction, conflict: SignedData<Conflict>)
    +Conflict(tx: WireTransaction, conflict: SignedData<Conflict>)
    val conflict: SignedData<Conflict>
    fun toString(): String
    -val tx: WireTransaction
    +val tx: WireTransaction
    @@ -18725,8 +20392,8 @@ -SignaturesMissing(missingSigners: List<PublicKey>)
    -val missingSigners: List<PublicKey>
    +SignaturesMissing(missingSigners: Set<PublicKey>)
    +val missingSigners: Set<PublicKey>
    @@ -18787,7 +20454,7 @@ -Client(stx: SignedTransaction, progressTracker: ProgressTracker = Client.tracker())
    +Client(stx: SignedTransaction, progressTracker: ProgressTracker = Client.tracker())
    object REQUESTING : Step
    object VALIDATING : Step
    fun call(): LegallyIdentifiable
    @@ -18806,7 +20473,7 @@ -fun create(otherSide: Party, sendSessionID: Long, receiveSessionID: Long, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider): Service
    +fun create(otherSide: Party, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider): Service
    @@ -18818,11 +20485,11 @@ -abstract fun create(otherSide: Party, sendSessionID: Long, receiveSessionID: Long, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider): Service
    +abstract fun create(otherSide: Party, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider): Service
    -data class Handshake : PartyRequestMessage
    +data class Handshake : HandshakeMessage
    @@ -18860,12 +20527,10 @@ -Service(otherSide: Party, sendSessionID: Long, receiveSessionID: Long, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)
    -open fun beforeCommit(stx: SignedTransaction, reqIdentity: Party): Unit
    +Service(otherSide: Party, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)
    +open fun beforeCommit(stx: SignedTransaction, reqIdentity: Party): Unit
    open fun call(): Unit
    val otherSide: Party
    -val receiveSessionID: Long
    -val sendSessionID: Long
    val timestampChecker: TimestampChecker
    protected open val topic: String
    val uniquenessProvider: UniquenessProvider
    @@ -18880,9 +20545,9 @@ -SignRequest(tx: SignedTransaction, callerIdentity: Party)
    +SignRequest(tx: SignedTransaction, callerIdentity: Party)
    val callerIdentity: Party
    -val tx: SignedTransaction
    +val tx: SignedTransaction
    @@ -18911,7 +20576,7 @@ -RatesFixProtocol(tx: TransactionBuilder, oracle: Party, fixOf: FixOf, expectedRate: BigDecimal, rateTolerance: BigDecimal, progressTracker: ProgressTracker = RatesFixProtocol.tracker(fixOf.name))
    +RatesFixProtocol(tx: TransactionBuilder, oracle: Party, fixOf: FixOf, expectedRate: BigDecimal, rateTolerance: BigDecimal, progressTracker: ProgressTracker = RatesFixProtocol.tracker(fixOf.name))
    class FixOutOfRange : Exception
      @@ -18938,7 +20603,7 @@
    -data class QueryRequest : PartyRequestMessage
    +data class QueryRequest : HandshakeMessage
    object SIGNING : Step
    -data class SignRequest : PartyRequestMessage
    +data class SignRequest : HandshakeMessage
    @@ -18977,11 +20644,11 @@ open val progressTracker: ProgressTracker
    protected open val topic: String
    fun tracker(fixName: String): ProgressTracker
    -protected val tx: TransactionBuilder
    +protected val tx: TransactionBuilder
    -class ResolveTransactionsProtocol : ProtocolLogic<List<LedgerTransaction>>
    +class ResolveTransactionsProtocol : ProtocolLogic<List<LedgerTransaction>>
    -data class FixingSessionInitiation
    +data class FixingSessionInitiation : HandshakeMessage
    @@ -19216,18 +20880,17 @@ -Instigator(otherSide: Party, notary: Party, payload: T, myKeyPair: KeyPair, otherSessionID: Long, progressTracker: ProgressTracker = Primary.tracker())
    +Instigator(otherParty: Party, notary: Party, payload: T, myKeyPair: KeyPair, progressTracker: ProgressTracker = Primary.tracker())
    open val myKeyPair: KeyPair
    val notary: Party
    open val notaryNode: NodeInfo
    -open val otherSessionID: Long
    -open val otherSide: Party
    +open val otherParty: Party
    open val payload: T
    open val progressTracker: ProgressTracker
    -abstract class Primary<out U> : ProtocolLogic<SignedTransaction>
    +abstract class Primary<out U> : ProtocolLogic<SignedTransaction>
    -abstract class Secondary<U> : ProtocolLogic<SignedTransaction>
    +abstract class Secondary<U> : ProtocolLogic<SignedTransaction>
    -class Buyer : ProtocolLogic<SignedTransaction>
    +class Buyer : ProtocolLogic<SignedTransaction>
    -class Seller : ProtocolLogic<SignedTransaction>
    +class Seller : ProtocolLogic<SignedTransaction>
    @@ -19430,8 +21088,159 @@ -ValidatingNotaryProtocol(otherSide: Party, sessionIdForSend: Long, sessionIdForReceive: Long, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)
    -fun beforeCommit(stx: SignedTransaction, reqIdentity: Party): Unit
    +ValidatingNotaryProtocol(otherSide: Party, timestampChecker: TimestampChecker, uniquenessProvider: UniquenessProvider)
    +fun beforeCommit(stx: SignedTransaction, reqIdentity: Party): Unit
    + + + + + + +package com.r3corda.simulation
    +
      + + +Module Contents + + + +class IRSSimulation : Simulation
      + +abstract class Simulation
      + +class TradeSimulation : Simulation
      + diff --git a/docs/build/html/api/index.html b/docs/build/html/api/index.html index c3243f116c..ad0177de7a 100644 --- a/docs/build/html/api/index.html +++ b/docs/build/html/api/index.html @@ -11,6 +11,30 @@ +com.r3corda.client + + + + + +com.r3corda.client.fxutils + + + + + +com.r3corda.client.mock + + + + + +com.r3corda.client.model + + + + + com.r3corda.contracts @@ -83,12 +107,6 @@ -com.r3corda.core.node.services.testing - - - - - com.r3corda.core.protocols @@ -107,6 +125,12 @@ +com.r3corda.core.transactions + + + + + com.r3corda.core.utilities @@ -161,12 +185,6 @@ -com.r3corda.node.internal.testing - - - - - com.r3corda.node.serialization @@ -251,7 +269,7 @@ -com.r3corda.node.services.wallet +com.r3corda.node.services.vault @@ -269,10 +287,22 @@ +com.r3corda.node.utilities.certsigning + + + + + com.r3corda.protocols + + +com.r3corda.simulation + + +

      Index

      diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/-a-p-p-r-o-v-i-n-g.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/-a-p-p-r-o-v-i-n-g.html deleted file mode 100644 index 8ad48ddddf..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/-a-p-p-r-o-v-i-n-g.html +++ /dev/null @@ -1,42 +0,0 @@ - - -AbstractStateReplacementProtocol.Acceptor.APPROVING - - - - -protocols / AbstractStateReplacementProtocol / Acceptor / APPROVING
      -
      -

      APPROVING

      -object APPROVING : Step
      -
      -
      -

      Inherited Properties

      - - - - - - - - - - - -
      -changes -open val changes: <ERROR CLASS><Change>
      -label -open val label: String
      -

      Inherited Functions

      - - - - - - - -
      -childProgressTracker -open fun childProgressTracker(): ProgressTracker?
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/-init-.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/-init-.html deleted file mode 100644 index c31c8dce5b..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -AbstractStateReplacementProtocol.Acceptor.<init> - - - - -protocols / AbstractStateReplacementProtocol / Acceptor / <init>
      -
      -

      <init>

      -Acceptor(otherSide: Party, sessionIdForSend: Long, sessionIdForReceive: Long, progressTracker: ProgressTracker = tracker())
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/-r-e-j-e-c-t-i-n-g.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/-r-e-j-e-c-t-i-n-g.html deleted file mode 100644 index dbe5439a2e..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/-r-e-j-e-c-t-i-n-g.html +++ /dev/null @@ -1,42 +0,0 @@ - - -AbstractStateReplacementProtocol.Acceptor.REJECTING - - - - -protocols / AbstractStateReplacementProtocol / Acceptor / REJECTING
      -
      -

      REJECTING

      -object REJECTING : Step
      -
      -
      -

      Inherited Properties

      - - - - - - - - - - - -
      -changes -open val changes: <ERROR CLASS><Change>
      -label -open val label: String
      -

      Inherited Functions

      - - - - - - - -
      -childProgressTracker -open fun childProgressTracker(): ProgressTracker?
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/-v-e-r-i-f-y-i-n-g.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/-v-e-r-i-f-y-i-n-g.html deleted file mode 100644 index 1449acfb2a..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/-v-e-r-i-f-y-i-n-g.html +++ /dev/null @@ -1,42 +0,0 @@ - - -AbstractStateReplacementProtocol.Acceptor.VERIFYING - - - - -protocols / AbstractStateReplacementProtocol / Acceptor / VERIFYING
      -
      -

      VERIFYING

      -object VERIFYING : Step
      -
      -
      -

      Inherited Properties

      - - - - - - - - - - - -
      -changes -open val changes: <ERROR CLASS><Change>
      -label -open val label: String
      -

      Inherited Functions

      - - - - - - - -
      -childProgressTracker -open fun childProgressTracker(): ProgressTracker?
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/call.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/call.html deleted file mode 100644 index a3d1d47f1d..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/call.html +++ /dev/null @@ -1,17 +0,0 @@ - - -AbstractStateReplacementProtocol.Acceptor.call - - - - -protocols / AbstractStateReplacementProtocol / Acceptor / call
      -
      -

      call

      - -open fun call(): Unit
      -Overrides ProtocolLogic.call
      -

      This is where you fill out your business logic.

      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/index.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/index.html deleted file mode 100644 index fa3c347cbb..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/index.html +++ /dev/null @@ -1,183 +0,0 @@ - - -AbstractStateReplacementProtocol.Acceptor - - - - -protocols / AbstractStateReplacementProtocol / Acceptor
      -
      -

      Acceptor

      -abstract class Acceptor<T> : ProtocolLogic<Unit>
      -
      -
      -

      Types

      - - - - - - - - - - - - - - - -
      -APPROVING -object APPROVING : Step
      -REJECTING -object REJECTING : Step
      -VERIFYING -object VERIFYING : Step
      -

      Constructors

      - - - - - - - -
      -<init> -Acceptor(otherSide: Party, sessionIdForSend: Long, sessionIdForReceive: Long, progressTracker: ProgressTracker = tracker())
      -

      Properties

      - - - - - - - - - - - - - - - - - - - -
      -otherSide -val otherSide: Party
      -progressTracker -open val progressTracker: ProgressTracker

      Override this to provide a ProgressTracker. If one is provided and stepped, the framework will do something -helpful with the progress reports. If this protocol is invoked as a sub-protocol of another, then the -tracker will be made a child of the current step in the parent. If its null, this protocol doesnt track -progress.

      -
      -sessionIdForReceive -val sessionIdForReceive: Long
      -sessionIdForSend -val sessionIdForSend: Long
      -

      Inherited Properties

      - - - - - - - - - - - - - - - - - - - -
      -logger -val logger: <ERROR CLASS>

      This is where you should log things to.

      -
      -psm -lateinit var psm: ProtocolStateMachine<*>

      Reference to the Fiber instance that is the top level controller for the entire flow.

      -
      -serviceHub -val serviceHub: ServiceHub

      Provides access to big, heavy classes that may be reconstructed from time to time, e.g. across restarts. It is -only available once the protocol has started, which means it cannnot be accessed in the constructor. Either -access this lazily or from inside call.

      -
      -topic -abstract val topic: String

      The topic to use when communicating with other parties. If more than one topic is required then use sub-protocols. -Note that this is temporary until protocol sessions are properly implemented.

      -
      -

      Functions

      - - - - - - - -
      -call -open fun call(): Unit

      This is where you fill out your business logic.

      -
      -

      Inherited Functions

      - - - - - - - - - - - - - - - - - - - -
      -receive -fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T>
      -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
      -send -fun send(destination: Party, sessionID: Long, payload: Any): Unit
      -sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T>
      -subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

      Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the -ProtocolStateMachine and then calling the call method.

      -
      -

      Companion Object Functions

      - - - - - - - -
      -tracker -fun tracker(): ProgressTracker
      -

      Inheritors

      - - - - - - - -
      -Acceptor -class Acceptor : Acceptor<Party>
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/other-side.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/other-side.html deleted file mode 100644 index df32738e21..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/other-side.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Acceptor.otherSide - - - - -protocols / AbstractStateReplacementProtocol / Acceptor / otherSide
      -
      -

      otherSide

      - -val otherSide: Party
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/progress-tracker.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/progress-tracker.html deleted file mode 100644 index 03ebffb4a1..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/progress-tracker.html +++ /dev/null @@ -1,24 +0,0 @@ - - -AbstractStateReplacementProtocol.Acceptor.progressTracker - - - - -protocols / AbstractStateReplacementProtocol / Acceptor / progressTracker
      -
      -

      progressTracker

      - -open val progressTracker: ProgressTracker
      -Overrides ProtocolLogic.progressTracker
      -

      Override this to provide a ProgressTracker. If one is provided and stepped, the framework will do something -helpful with the progress reports. If this protocol is invoked as a sub-protocol of another, then the -tracker will be made a child of the current step in the parent. If its null, this protocol doesnt track -progress.

      -

      Note that this has to return a tracker before the protocol is invoked. You cant change your mind half way -through.

      -
      -
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/session-id-for-receive.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/session-id-for-receive.html deleted file mode 100644 index d226ee0006..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/session-id-for-receive.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Acceptor.sessionIdForReceive - - - - -protocols / AbstractStateReplacementProtocol / Acceptor / sessionIdForReceive
      -
      -

      sessionIdForReceive

      - -val sessionIdForReceive: Long
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/session-id-for-send.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/session-id-for-send.html deleted file mode 100644 index e0acb9df94..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/session-id-for-send.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Acceptor.sessionIdForSend - - - - -protocols / AbstractStateReplacementProtocol / Acceptor / sessionIdForSend
      -
      -

      sessionIdForSend

      - -val sessionIdForSend: Long
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/tracker.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/tracker.html deleted file mode 100644 index 6f7226bd5d..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-acceptor/tracker.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Acceptor.tracker - - - - -protocols / AbstractStateReplacementProtocol / Acceptor / tracker
      -
      -

      tracker

      - -fun tracker(): ProgressTracker
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/-init-.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/-init-.html deleted file mode 100644 index 7860bd715a..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -AbstractStateReplacementProtocol.Handshake.<init> - - - - -protocols / AbstractStateReplacementProtocol / Handshake / <init>
      -
      -

      <init>

      -Handshake(sessionIdForSend: Long, replyToParty: Party, sessionID: Long)
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/index.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/index.html deleted file mode 100644 index dd0b2359f0..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/index.html +++ /dev/null @@ -1,59 +0,0 @@ - - -AbstractStateReplacementProtocol.Handshake - - - - -protocols / AbstractStateReplacementProtocol / Handshake
      -
      -

      Handshake

      -data class Handshake : PartyRequestMessage
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -Handshake(sessionIdForSend: Long, replyToParty: Party, sessionID: Long)
      -

      Properties

      - - - - - - - - - - - - - - - -
      -replyToParty -val replyToParty: Party
      -sessionID -val sessionID: Long
      -sessionIdForSend -val sessionIdForSend: Long
      -

      Inherited Functions

      - - - - - - - -
      -getReplyTo -open fun getReplyTo(networkMapCache: NetworkMapCache): MessageRecipients
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/session-i-d.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/session-i-d.html deleted file mode 100644 index 5562ba3381..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/session-i-d.html +++ /dev/null @@ -1,16 +0,0 @@ - - -AbstractStateReplacementProtocol.Handshake.sessionID - - - - -protocols / AbstractStateReplacementProtocol / Handshake / sessionID
      -
      -

      sessionID

      - -val sessionID: Long
      -Overrides ServiceRequestMessage.sessionID
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/session-id-for-send.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/session-id-for-send.html deleted file mode 100644 index 00903d6f7f..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-handshake/session-id-for-send.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Handshake.sessionIdForSend - - - - -protocols / AbstractStateReplacementProtocol / Handshake / sessionIdForSend
      -
      -

      sessionIdForSend

      - -val sessionIdForSend: Long
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-init-.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-init-.html deleted file mode 100644 index 3c1d4ac94d..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-init-.html +++ /dev/null @@ -1,23 +0,0 @@ - - -AbstractStateReplacementProtocol.<init> - - - - -protocols / AbstractStateReplacementProtocol / <init>
      -
      -

      <init>

      -AbstractStateReplacementProtocol()
      -

      Abstract protocol 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 -protocols.

      -

      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.

      -
      -
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/-init-.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/-init-.html deleted file mode 100644 index 4e44255124..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -AbstractStateReplacementProtocol.Instigator.<init> - - - - -protocols / AbstractStateReplacementProtocol / Instigator / <init>
      -
      -

      <init>

      -Instigator(originalState: StateAndRef<S>, modification: T, progressTracker: ProgressTracker = tracker())
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/-n-o-t-a-r-y.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/-n-o-t-a-r-y.html deleted file mode 100644 index 156fb15244..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/-n-o-t-a-r-y.html +++ /dev/null @@ -1,42 +0,0 @@ - - -AbstractStateReplacementProtocol.Instigator.NOTARY - - - - -protocols / AbstractStateReplacementProtocol / Instigator / NOTARY
      -
      -

      NOTARY

      -object NOTARY : Step
      -
      -
      -

      Inherited Properties

      - - - - - - - - - - - -
      -changes -open val changes: <ERROR CLASS><Change>
      -label -open val label: String
      -

      Inherited Functions

      - - - - - - - -
      -childProgressTracker -open fun childProgressTracker(): ProgressTracker?
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/-s-i-g-n-i-n-g.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/-s-i-g-n-i-n-g.html deleted file mode 100644 index 03ef9a7d34..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/-s-i-g-n-i-n-g.html +++ /dev/null @@ -1,42 +0,0 @@ - - -AbstractStateReplacementProtocol.Instigator.SIGNING - - - - -protocols / AbstractStateReplacementProtocol / Instigator / SIGNING
      -
      -

      SIGNING

      -object SIGNING : Step
      -
      -
      -

      Inherited Properties

      - - - - - - - - - - - -
      -changes -open val changes: <ERROR CLASS><Change>
      -label -open val label: String
      -

      Inherited Functions

      - - - - - - - -
      -childProgressTracker -open fun childProgressTracker(): ProgressTracker?
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/call.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/call.html deleted file mode 100644 index 1a592d2eff..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/call.html +++ /dev/null @@ -1,17 +0,0 @@ - - -AbstractStateReplacementProtocol.Instigator.call - - - - -protocols / AbstractStateReplacementProtocol / Instigator / call
      -
      -

      call

      - -open fun call(): StateAndRef<S>
      -Overrides ProtocolLogic.call
      -

      This is where you fill out your business logic.

      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/index.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/index.html deleted file mode 100644 index 4f7bd556f1..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/index.html +++ /dev/null @@ -1,171 +0,0 @@ - - -AbstractStateReplacementProtocol.Instigator - - - - -protocols / AbstractStateReplacementProtocol / Instigator
      -
      -

      Instigator

      -abstract class Instigator<S : ContractState, T> : ProtocolLogic<StateAndRef<S>>
      -
      -
      -

      Types

      - - - - - - - - - - - -
      -NOTARY -object NOTARY : Step
      -SIGNING -object SIGNING : Step
      -

      Constructors

      - - - - - - - -
      -<init> -Instigator(originalState: StateAndRef<S>, modification: T, progressTracker: ProgressTracker = tracker())
      -

      Properties

      - - - - - - - - - - - - - - - -
      -modification -val modification: T
      -originalState -val originalState: StateAndRef<S>
      -progressTracker -open val progressTracker: ProgressTracker

      Override this to provide a ProgressTracker. If one is provided and stepped, the framework will do something -helpful with the progress reports. If this protocol is invoked as a sub-protocol of another, then the -tracker will be made a child of the current step in the parent. If its null, this protocol doesnt track -progress.

      -
      -

      Inherited Properties

      - - - - - - - - - - - - - - - - - - - -
      -logger -val logger: <ERROR CLASS>

      This is where you should log things to.

      -
      -psm -lateinit var psm: ProtocolStateMachine<*>

      Reference to the Fiber instance that is the top level controller for the entire flow.

      -
      -serviceHub -val serviceHub: ServiceHub

      Provides access to big, heavy classes that may be reconstructed from time to time, e.g. across restarts. It is -only available once the protocol has started, which means it cannnot be accessed in the constructor. Either -access this lazily or from inside call.

      -
      -topic -abstract val topic: String

      The topic to use when communicating with other parties. If more than one topic is required then use sub-protocols. -Note that this is temporary until protocol sessions are properly implemented.

      -
      -

      Functions

      - - - - - - - -
      -call -open fun call(): StateAndRef<S>

      This is where you fill out your business logic.

      -
      -

      Inherited Functions

      - - - - - - - - - - - - - - - - - - - -
      -receive -fun <T : Any> receive(sessionIDForReceive: Long): UntrustworthyData<T>
      -fun <T : Any> receive(sessionIDForReceive: Long, receiveType: Class<T>): UntrustworthyData<T>
      -send -fun send(destination: Party, sessionID: Long, payload: Any): Unit
      -sendAndReceive -fun <T : Any> sendAndReceive(destination: Party, sessionIDForSend: Long, sessionIDForReceive: Long, payload: Any): UntrustworthyData<T>
      -subProtocol -fun <R> subProtocol(subLogic: ProtocolLogic<R>): R

      Invokes the given subprotocol by simply passing through this ProtocolLogics reference to the -ProtocolStateMachine and then calling the call method.

      -
      -

      Companion Object Functions

      - - - - - - - -
      -tracker -fun tracker(): ProgressTracker
      -

      Inheritors

      - - - - - - - -
      -Instigator -class Instigator<T : ContractState> : Instigator<T, Party>
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/modification.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/modification.html deleted file mode 100644 index 43a88f397c..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/modification.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Instigator.modification - - - - -protocols / AbstractStateReplacementProtocol / Instigator / modification
      -
      -

      modification

      - -val modification: T
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/original-state.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/original-state.html deleted file mode 100644 index 1fdc2258a1..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/original-state.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Instigator.originalState - - - - -protocols / AbstractStateReplacementProtocol / Instigator / originalState
      -
      -

      originalState

      - -val originalState: StateAndRef<S>
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/progress-tracker.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/progress-tracker.html deleted file mode 100644 index ebf7ba287d..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/progress-tracker.html +++ /dev/null @@ -1,24 +0,0 @@ - - -AbstractStateReplacementProtocol.Instigator.progressTracker - - - - -protocols / AbstractStateReplacementProtocol / Instigator / progressTracker
      -
      -

      progressTracker

      - -open val progressTracker: ProgressTracker
      -Overrides ProtocolLogic.progressTracker
      -

      Override this to provide a ProgressTracker. If one is provided and stepped, the framework will do something -helpful with the progress reports. If this protocol is invoked as a sub-protocol of another, then the -tracker will be made a child of the current step in the parent. If its null, this protocol doesnt track -progress.

      -

      Note that this has to return a tracker before the protocol is invoked. You cant change your mind half way -through.

      -
      -
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/tracker.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/tracker.html deleted file mode 100644 index df3e81ee67..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-instigator/tracker.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Instigator.tracker - - - - -protocols / AbstractStateReplacementProtocol / Instigator / tracker
      -
      -

      tracker

      - -fun tracker(): ProgressTracker
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-proposal/index.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-proposal/index.html deleted file mode 100644 index ba149aad7d..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-proposal/index.html +++ /dev/null @@ -1,48 +0,0 @@ - - -AbstractStateReplacementProtocol.Proposal - - - - -protocols / AbstractStateReplacementProtocol / Proposal
      -
      -

      Proposal

      -interface Proposal<out T>
      -
      -
      -

      Properties

      - - - - - - - - - - - - - - - -
      -modification -abstract val modification: T
      -stateRef -abstract val stateRef: StateRef
      -stx -abstract val stx: SignedTransaction
      -

      Inheritors

      - - - - - - - -
      -Proposal -data class Proposal : Proposal<Party>
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-proposal/modification.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-proposal/modification.html deleted file mode 100644 index cd6b3b51eb..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-proposal/modification.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Proposal.modification - - - - -protocols / AbstractStateReplacementProtocol / Proposal / modification
      -
      -

      modification

      - -abstract val modification: T
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-proposal/state-ref.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-proposal/state-ref.html deleted file mode 100644 index 06d89d95b5..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-proposal/state-ref.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Proposal.stateRef - - - - -protocols / AbstractStateReplacementProtocol / Proposal / stateRef
      -
      -

      stateRef

      - -abstract val stateRef: StateRef
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-proposal/stx.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-proposal/stx.html deleted file mode 100644 index 6288eece27..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-proposal/stx.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Proposal.stx - - - - -protocols / AbstractStateReplacementProtocol / Proposal / stx
      -
      -

      stx

      - -abstract val stx: SignedTransaction
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/error.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/error.html deleted file mode 100644 index 9f7df323a0..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/error.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Result.error - - - - -protocols / AbstractStateReplacementProtocol / Result / error
      -
      -

      error

      - -val error: StateReplacementRefused?
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/index.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/index.html deleted file mode 100644 index de49d73a84..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/index.html +++ /dev/null @@ -1,48 +0,0 @@ - - -AbstractStateReplacementProtocol.Result - - - - -protocols / AbstractStateReplacementProtocol / 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/protocols/-abstract-state-replacement-protocol/-result/no-error.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/no-error.html deleted file mode 100644 index 48aa0b8412..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/no-error.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Result.noError - - - - -protocols / AbstractStateReplacementProtocol / Result / noError
      -
      -

      noError

      - -fun noError(sig: WithKey): Result
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/sig.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/sig.html deleted file mode 100644 index 3565005869..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/sig.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Result.sig - - - - -protocols / AbstractStateReplacementProtocol / Result / sig
      -
      -

      sig

      - -val sig: WithKey?
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/with-error.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/with-error.html deleted file mode 100644 index c32249c9cd..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/-result/with-error.html +++ /dev/null @@ -1,15 +0,0 @@ - - -AbstractStateReplacementProtocol.Result.withError - - - - -protocols / AbstractStateReplacementProtocol / Result / withError
      -
      -

      withError

      - -fun withError(error: StateReplacementRefused): Result
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/index.html b/docs/build/html/api/protocols/-abstract-state-replacement-protocol/index.html deleted file mode 100644 index 6b9b657366..0000000000 --- a/docs/build/html/api/protocols/-abstract-state-replacement-protocol/index.html +++ /dev/null @@ -1,85 +0,0 @@ - - -AbstractStateReplacementProtocol - - - - -protocols / AbstractStateReplacementProtocol
      -
      -

      AbstractStateReplacementProtocol

      -abstract class AbstractStateReplacementProtocol<T>
      -

      Abstract protocol 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 -protocols.

      -

      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.

      -
      -
      -
      -
      -

      Types

      - - - - - - - - - - - - - - - - - - - - - - - -
      -Acceptor -abstract class Acceptor<T> : ProtocolLogic<Unit>
      -Handshake -data class Handshake : PartyRequestMessage
      -Instigator -abstract class Instigator<S : ContractState, T> : ProtocolLogic<StateAndRef<S>>
      -Proposal -interface Proposal<out T>
      -Result -data class Result
      -

      Constructors

      - - - - - - - -
      -<init> -AbstractStateReplacementProtocol()

      Abstract protocol 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 -protocols.

      -
      -

      Inheritors

      - - - - - - - -
      -NotaryChangeProtocol -object NotaryChangeProtocol : AbstractStateReplacementProtocol<Party>

      A protocol to be used for changing a states Notary. This is required since all input states to a transaction -must point to the same notary.

      -
      - - diff --git a/docs/build/html/api/protocols/-notary-change-protocol/-acceptor/-init-.html b/docs/build/html/api/protocols/-notary-change-protocol/-acceptor/-init-.html deleted file mode 100644 index 7db93d79cf..0000000000 --- a/docs/build/html/api/protocols/-notary-change-protocol/-acceptor/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -NotaryChangeProtocol.Acceptor.<init> - - - - -protocols / NotaryChangeProtocol / Acceptor / <init>
      -
      -

      <init>

      -Acceptor(otherSide: Party, sessionIdForSend: Long, sessionIdForReceive: Long, progressTracker: ProgressTracker = tracker())
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-notary-change-protocol/-acceptor/index.html b/docs/build/html/api/protocols/-notary-change-protocol/-acceptor/index.html deleted file mode 100644 index 5f50e019b3..0000000000 --- a/docs/build/html/api/protocols/-notary-change-protocol/-acceptor/index.html +++ /dev/null @@ -1,83 +0,0 @@ - - -NotaryChangeProtocol.Acceptor - - - - -protocols / NotaryChangeProtocol / Acceptor
      -
      -

      Acceptor

      -class Acceptor : Acceptor<Party>
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -Acceptor(otherSide: Party, sessionIdForSend: Long, sessionIdForReceive: Long, progressTracker: ProgressTracker = tracker())
      -

      Properties

      - - - - - - - - - - - -
      -progressTracker -val progressTracker: ProgressTracker

      Override this to provide a ProgressTracker. If one is provided and stepped, the framework will do something -helpful with the progress reports. If this protocol is invoked as a sub-protocol of another, then the -tracker will be made a child of the current step in the parent. If its null, this protocol doesnt track -progress.

      -
      -topic -val topic: String

      The topic to use when communicating with other parties. If more than one topic is required then use sub-protocols. -Note that this is temporary until protocol sessions are properly implemented.

      -
      -

      Inherited Properties

      - - - - - - - - - - - - - - - -
      -otherSide -val otherSide: Party
      -sessionIdForReceive -val sessionIdForReceive: Long
      -sessionIdForSend -val sessionIdForSend: Long
      -

      Inherited Functions

      - - - - - - - -
      -call -open fun call(): Unit

      This is where you fill out your business logic.

      -
      - - diff --git a/docs/build/html/api/protocols/-notary-change-protocol/-acceptor/progress-tracker.html b/docs/build/html/api/protocols/-notary-change-protocol/-acceptor/progress-tracker.html deleted file mode 100644 index e47486f61f..0000000000 --- a/docs/build/html/api/protocols/-notary-change-protocol/-acceptor/progress-tracker.html +++ /dev/null @@ -1,24 +0,0 @@ - - -NotaryChangeProtocol.Acceptor.progressTracker - - - - -protocols / NotaryChangeProtocol / Acceptor / progressTracker
      -
      -

      progressTracker

      - -val progressTracker: ProgressTracker
      -Overrides Acceptor.progressTracker
      -

      Override this to provide a ProgressTracker. If one is provided and stepped, the framework will do something -helpful with the progress reports. If this protocol is invoked as a sub-protocol of another, then the -tracker will be made a child of the current step in the parent. If its null, this protocol doesnt track -progress.

      -

      Note that this has to return a tracker before the protocol is invoked. You cant change your mind half way -through.

      -
      -
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-notary-change-protocol/-acceptor/topic.html b/docs/build/html/api/protocols/-notary-change-protocol/-acceptor/topic.html deleted file mode 100644 index 6e80caef6b..0000000000 --- a/docs/build/html/api/protocols/-notary-change-protocol/-acceptor/topic.html +++ /dev/null @@ -1,22 +0,0 @@ - - -NotaryChangeProtocol.Acceptor.topic - - - - -protocols / NotaryChangeProtocol / Acceptor / topic
      -
      -

      topic

      - -protected val topic: String
      -Overrides ProtocolLogic.topic
      -

      The topic to use when communicating with other parties. If more than one topic is required then use sub-protocols. -Note that this is temporary until protocol sessions are properly implemented.

      -Getter
      -

      The topic to use when communicating with other parties. If more than one topic is required then use sub-protocols. -Note that this is temporary until protocol sessions are properly implemented.

      -
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-notary-change-protocol/-instigator/-init-.html b/docs/build/html/api/protocols/-notary-change-protocol/-instigator/-init-.html deleted file mode 100644 index b1481fc359..0000000000 --- a/docs/build/html/api/protocols/-notary-change-protocol/-instigator/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -NotaryChangeProtocol.Instigator.<init> - - - - -protocols / NotaryChangeProtocol / Instigator / <init>
      -
      -

      <init>

      -Instigator(originalState: StateAndRef<T>, newNotary: Party, progressTracker: ProgressTracker = tracker())
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-notary-change-protocol/-instigator/index.html b/docs/build/html/api/protocols/-notary-change-protocol/-instigator/index.html deleted file mode 100644 index 430d6e6c32..0000000000 --- a/docs/build/html/api/protocols/-notary-change-protocol/-instigator/index.html +++ /dev/null @@ -1,77 +0,0 @@ - - -NotaryChangeProtocol.Instigator - - - - -protocols / NotaryChangeProtocol / Instigator
      -
      -

      Instigator

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

      Constructors

      - - - - - - - -
      -<init> -Instigator(originalState: StateAndRef<T>, newNotary: Party, progressTracker: ProgressTracker = tracker())
      -

      Properties

      - - - - - - - -
      -topic -val topic: String

      The topic to use when communicating with other parties. If more than one topic is required then use sub-protocols. -Note that this is temporary until protocol sessions are properly implemented.

      -
      -

      Inherited Properties

      - - - - - - - - - - - - - - - -
      -modification -val modification: T
      -originalState -val originalState: StateAndRef<S>
      -progressTracker -open val progressTracker: ProgressTracker

      Override this to provide a ProgressTracker. If one is provided and stepped, the framework will do something -helpful with the progress reports. If this protocol is invoked as a sub-protocol of another, then the -tracker will be made a child of the current step in the parent. If its null, this protocol doesnt track -progress.

      -
      -

      Inherited Functions

      - - - - - - - -
      -call -open fun call(): StateAndRef<S>

      This is where you fill out your business logic.

      -
      - - diff --git a/docs/build/html/api/protocols/-notary-change-protocol/-instigator/topic.html b/docs/build/html/api/protocols/-notary-change-protocol/-instigator/topic.html deleted file mode 100644 index 3fc1eddaa3..0000000000 --- a/docs/build/html/api/protocols/-notary-change-protocol/-instigator/topic.html +++ /dev/null @@ -1,22 +0,0 @@ - - -NotaryChangeProtocol.Instigator.topic - - - - -protocols / NotaryChangeProtocol / Instigator / topic
      -
      -

      topic

      - -protected val topic: String
      -Overrides ProtocolLogic.topic
      -

      The topic to use when communicating with other parties. If more than one topic is required then use sub-protocols. -Note that this is temporary until protocol sessions are properly implemented.

      -Getter
      -

      The topic to use when communicating with other parties. If more than one topic is required then use sub-protocols. -Note that this is temporary until protocol sessions are properly implemented.

      -
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-notary-change-protocol/-proposal/-init-.html b/docs/build/html/api/protocols/-notary-change-protocol/-proposal/-init-.html deleted file mode 100644 index 864c7a3abc..0000000000 --- a/docs/build/html/api/protocols/-notary-change-protocol/-proposal/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -NotaryChangeProtocol.Proposal.<init> - - - - -protocols / NotaryChangeProtocol / Proposal / <init>
      -
      -

      <init>

      -Proposal(stateRef: StateRef, modification: Party, stx: SignedTransaction)
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-notary-change-protocol/-proposal/index.html b/docs/build/html/api/protocols/-notary-change-protocol/-proposal/index.html deleted file mode 100644 index da2c656f97..0000000000 --- a/docs/build/html/api/protocols/-notary-change-protocol/-proposal/index.html +++ /dev/null @@ -1,48 +0,0 @@ - - -NotaryChangeProtocol.Proposal - - - - -protocols / NotaryChangeProtocol / Proposal
      -
      -

      Proposal

      -data class Proposal : Proposal<Party>
      -
      -
      -

      Constructors

      - - - - - - - -
      -<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/protocols/-notary-change-protocol/-proposal/modification.html b/docs/build/html/api/protocols/-notary-change-protocol/-proposal/modification.html deleted file mode 100644 index 0aba201dd3..0000000000 --- a/docs/build/html/api/protocols/-notary-change-protocol/-proposal/modification.html +++ /dev/null @@ -1,16 +0,0 @@ - - -NotaryChangeProtocol.Proposal.modification - - - - -protocols / NotaryChangeProtocol / Proposal / modification
      -
      -

      modification

      - -val modification: Party
      -Overrides Proposal.modification
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-notary-change-protocol/-proposal/state-ref.html b/docs/build/html/api/protocols/-notary-change-protocol/-proposal/state-ref.html deleted file mode 100644 index 937188b054..0000000000 --- a/docs/build/html/api/protocols/-notary-change-protocol/-proposal/state-ref.html +++ /dev/null @@ -1,16 +0,0 @@ - - -NotaryChangeProtocol.Proposal.stateRef - - - - -protocols / NotaryChangeProtocol / Proposal / stateRef
      -
      -

      stateRef

      - -val stateRef: StateRef
      -Overrides Proposal.stateRef
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-notary-change-protocol/-proposal/stx.html b/docs/build/html/api/protocols/-notary-change-protocol/-proposal/stx.html deleted file mode 100644 index 78c8426e42..0000000000 --- a/docs/build/html/api/protocols/-notary-change-protocol/-proposal/stx.html +++ /dev/null @@ -1,16 +0,0 @@ - - -NotaryChangeProtocol.Proposal.stx - - - - -protocols / NotaryChangeProtocol / Proposal / stx
      -
      -

      stx

      - -val stx: SignedTransaction
      -Overrides Proposal.stx
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-notary-change-protocol/-t-o-p-i-c.html b/docs/build/html/api/protocols/-notary-change-protocol/-t-o-p-i-c.html deleted file mode 100644 index 8f5b2a67b6..0000000000 --- a/docs/build/html/api/protocols/-notary-change-protocol/-t-o-p-i-c.html +++ /dev/null @@ -1,15 +0,0 @@ - - -NotaryChangeProtocol.TOPIC - - - - -protocols / NotaryChangeProtocol / TOPIC
      -
      -

      TOPIC

      - -val TOPIC: String
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-notary-change-protocol/index.html b/docs/build/html/api/protocols/-notary-change-protocol/index.html deleted file mode 100644 index cea51f58a8..0000000000 --- a/docs/build/html/api/protocols/-notary-change-protocol/index.html +++ /dev/null @@ -1,56 +0,0 @@ - - -NotaryChangeProtocol - - - - -protocols / NotaryChangeProtocol
      -
      -

      NotaryChangeProtocol

      -object NotaryChangeProtocol : AbstractStateReplacementProtocol<Party>
      -

      A protocol to be used for changing a states 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 -(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.

      -
      -
      -
      -
      -

      Types

      - - - - - - - - - - - - - - - -
      -Acceptor -class Acceptor : Acceptor<Party>
      -Instigator -class Instigator<T : ContractState> : Instigator<T, Party>
      -Proposal -data class Proposal : Proposal<Party>
      -

      Properties

      - - - - - - - -
      -TOPIC -val TOPIC: String
      - - diff --git a/docs/build/html/api/protocols/-state-replacement-exception/-init-.html b/docs/build/html/api/protocols/-state-replacement-exception/-init-.html deleted file mode 100644 index 57ccd3b864..0000000000 --- a/docs/build/html/api/protocols/-state-replacement-exception/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - -StateReplacementException.<init> - - - - -protocols / StateReplacementException / <init>
      -
      -

      <init>

      -StateReplacementException(error: StateReplacementRefused)
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-state-replacement-exception/error.html b/docs/build/html/api/protocols/-state-replacement-exception/error.html deleted file mode 100644 index c05da6c0e1..0000000000 --- a/docs/build/html/api/protocols/-state-replacement-exception/error.html +++ /dev/null @@ -1,15 +0,0 @@ - - -StateReplacementException.error - - - - -protocols / StateReplacementException / error
      -
      -

      error

      - -val error: StateReplacementRefused
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-state-replacement-exception/index.html b/docs/build/html/api/protocols/-state-replacement-exception/index.html deleted file mode 100644 index 7f51731f0c..0000000000 --- a/docs/build/html/api/protocols/-state-replacement-exception/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - -StateReplacementException - - - - -protocols / StateReplacementException
      -
      -

      StateReplacementException

      -class StateReplacementException : Exception
      -
      -
      -

      Constructors

      - - - - - - - -
      -<init> -StateReplacementException(error: StateReplacementRefused)
      -

      Properties

      - - - - - - - -
      -error -val error: StateReplacementRefused
      - - diff --git a/docs/build/html/api/protocols/-state-replacement-refused/-init-.html b/docs/build/html/api/protocols/-state-replacement-refused/-init-.html deleted file mode 100644 index f9451cb809..0000000000 --- a/docs/build/html/api/protocols/-state-replacement-refused/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - -StateReplacementRefused.<init> - - - - -protocols / StateReplacementRefused / <init>
      -
      -

      <init>

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

      Thrown when a participant refuses proposed the state replacement

      -
      -
      - - diff --git a/docs/build/html/api/protocols/-state-replacement-refused/detail.html b/docs/build/html/api/protocols/-state-replacement-refused/detail.html deleted file mode 100644 index 8d7304e88c..0000000000 --- a/docs/build/html/api/protocols/-state-replacement-refused/detail.html +++ /dev/null @@ -1,15 +0,0 @@ - - -StateReplacementRefused.detail - - - - -protocols / StateReplacementRefused / detail
      -
      -

      detail

      - -val detail: String?
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-state-replacement-refused/identity.html b/docs/build/html/api/protocols/-state-replacement-refused/identity.html deleted file mode 100644 index 50be129ce5..0000000000 --- a/docs/build/html/api/protocols/-state-replacement-refused/identity.html +++ /dev/null @@ -1,15 +0,0 @@ - - -StateReplacementRefused.identity - - - - -protocols / StateReplacementRefused / identity
      -
      -

      identity

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

      StateReplacementRefused

      -class StateReplacementRefused
      -

      Thrown when a participant refuses proposed the state replacement

      -
      -
      -

      Constructors

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

      Thrown when a participant refuses proposed the 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/protocols/-state-replacement-refused/state.html b/docs/build/html/api/protocols/-state-replacement-refused/state.html deleted file mode 100644 index c0e3915d45..0000000000 --- a/docs/build/html/api/protocols/-state-replacement-refused/state.html +++ /dev/null @@ -1,15 +0,0 @@ - - -StateReplacementRefused.state - - - - -protocols / StateReplacementRefused / state
      -
      -

      state

      - -val state: StateRef
      -
      -
      - - diff --git a/docs/build/html/api/protocols/-state-replacement-refused/to-string.html b/docs/build/html/api/protocols/-state-replacement-refused/to-string.html deleted file mode 100644 index 928400ff58..0000000000 --- a/docs/build/html/api/protocols/-state-replacement-refused/to-string.html +++ /dev/null @@ -1,15 +0,0 @@ - - -StateReplacementRefused.toString - - - - -protocols / StateReplacementRefused / toString
      -
      -

      toString

      - -fun toString(): String
      -
      -
      - - diff --git a/docs/build/html/api/protocols/index.html b/docs/build/html/api/protocols/index.html deleted file mode 100644 index b4414f9f07..0000000000 --- a/docs/build/html/api/protocols/index.html +++ /dev/null @@ -1,51 +0,0 @@ - - -protocols - - - - -protocols
      -
      -

      Package protocols

      -

      Types

      - - - - - - - - - - - - - - - -
      -AbstractStateReplacementProtocol -abstract class AbstractStateReplacementProtocol<T>

      Abstract protocol 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 -protocols.

      -
      -NotaryChangeProtocol -object NotaryChangeProtocol : AbstractStateReplacementProtocol<Party>

      A protocol to be used for changing a states Notary. This is required since all input states to a transaction -must point to the same notary.

      -
      -StateReplacementRefused -class StateReplacementRefused

      Thrown when a participant refuses proposed the state replacement

      -
      -

      Exceptions

      - - - - - - - -
      -StateReplacementException -class StateReplacementException : Exception
      - - diff --git a/docs/build/html/building-the-docs.html b/docs/build/html/building-the-docs.html index 897ffd6a19..446a7be7f3 100644 --- a/docs/build/html/building-the-docs.html +++ b/docs/build/html/building-the-docs.html @@ -92,13 +92,10 @@
    • Data types
    • Consensus model
    • Networking and messaging
    • +
    • Creating a Cordapp
    • Running the demos
    • Node administration
    • -
    -

    Contracts

    -

    Tutorials

    +

    Contracts

    + +

    Node API

    +

    Appendix

  5. -

    Contracts

    -

    Tutorials

    +

    Contracts

    + +

    Node API

    +

    Appendix

    @@ -205,11 +212,7 @@ artemisAddress : "localhost:31337" webAddress : "localhost:31339" hostNotaryServiceLocally: false extraAdvertisedServiceIds: "corda.interest_rates" -mapService : { - hostServiceLocally : false - address : "localhost:12345" - identity : "Notary Service" -} +networkMapAddress : "localhost:12345" useHTTPS : false @@ -223,11 +226,6 @@ artemisAddress : "localhost:12345" webAddress : "localhost:12346" hostNotaryServiceLocally: true extraAdvertisedServiceIds: "" -mapService : { - hostServiceLocally : true - address : ${artemisAddress} - identity : ${myLegalName} -} useHTTPS : false @@ -244,7 +242,7 @@ useHTTPS : false myLegalName:

    The legal identity of the node acts as a human readable alias to the node’s public key and several demos use this to lookup the NodeInfo.

    -nearestCity:

    The location of the node as used to locate coordinates on the world map when running the network visualiser demo. See Using the visualiser.

    +nearestCity:

    The location of the node as used to locate coordinates on the world map when running the network simulator demo. See Network Simulator.

    keyStorePassword: @@ -286,16 +284,8 @@ useHTTPS : false  

    A list of ServiceType id strings to be advertised to the NetworkMapService and thus be available when other nodes query the NetworkMapCache for supporting nodes. This can also include plugin services loaded from .jar files in the

    -mapService.hostServiceLocally: - 

    If true the node is declaring itself as the NetworkMapService host. Otherwise the configuration below is the remote connection details for the node to connect to the NetworkMapService.

    - - -mapService.address: - 

    If the node is hosting the NetworkMapService this should be exactly equal to the artemisAddress (hence $ substitution above). Otherwise this value is the remote HostAndPort string for the ArtemisMQ service on the hosting node.

    - - -mapService.identity: - 

    If the node is hosting the NetworkMapService this should be exactly equal to the myLegalName (hence $ substitution above). Otherwise this value must match the myLegalName of the hosting node.

    +networkMapAddress: + 

    If null, or missing the node is declaring itself as the NetworkMapService host. Otherwise the configuration value is the remote HostAndPort string for the ArtemisMQ service on the hosting node.

    useHTTPS:

    If false the node’s web server will be plain HTTP. If true the node will use the same certificate and private key from the <workspace>/certificates/sslkeystore.jks file as the ArtemisMQ port for HTTPS. If HTTPS is enabled then unencrypted HTTP traffic to the node’s webAddress port is not supported.

    @@ -313,7 +303,7 @@ useHTTPS : false

    Services

    -

    Services are classes which are constructed after the node has started. It is provided a ServiceHubInternal which +

    Services are classes which are constructed after the node has started. It is provided a ServiceHubInternal which allows a richer API than the ServiceHub exposed to contracts. It enables adding protocols, registering message handlers and more. The service does not run in a separate thread, so the only entry point to the service is during construction, where message handlers should be registered and threads started.

    diff --git a/docs/build/html/data-model.html b/docs/build/html/data-model.html index 0fe9086620..e3adfdad6e 100644 --- a/docs/build/html/data-model.html +++ b/docs/build/html/data-model.html @@ -105,11 +105,7 @@
  6. Creating a Cordapp
  7. Running the demos
  8. Node administration
  9. - -

    Contracts

    -

    Tutorials

    +

    Contracts

    + +

    Node API

    +

    Appendix

    diff --git a/docs/build/html/event-scheduling.html b/docs/build/html/event-scheduling.html index e70ba56646..48e006728f 100644 --- a/docs/build/html/event-scheduling.html +++ b/docs/build/html/event-scheduling.html @@ -31,7 +31,7 @@ - + @@ -96,11 +96,7 @@
  10. Creating a Cordapp
  11. Running the demos
  12. Node administration
  13. - -

    Contracts

    -

    Tutorials

    +
  14. Secure coding guidelines
  15. +
  16. Protocols
  17. +
  18. Contracts
  19. + +

    Contracts

    + +

    Node API

    +

    Appendix

    @@ -268,7 +276,7 @@ the handler needs to be manually installed in the node.

    - + +
    @@ -353,13 +377,17 @@ following hypothesis:

  20. Release process
  21. Steps to cut a release
  22. Release notes
  23. -
  24. Using the visualiser
  25. +
  26. Network Simulator +
  27. Code style guide -

    Contracts

    -

    Tutorials

    +

    Contracts

    + +

    Node API

    +

    Appendix

    diff --git a/docs/build/html/messaging.html b/docs/build/html/messaging.html index ac2122b265..85cda040e9 100644 --- a/docs/build/html/messaging.html +++ b/docs/build/html/messaging.html @@ -100,11 +100,7 @@
  28. Creating a Cordapp
  29. Running the demos
  30. Node administration
  31. - -

    Contracts

    -

    Tutorials

    +

    Contracts

    + +

    Node API

    +

    Appendix

    diff --git a/docs/build/html/visualiser.html b/docs/build/html/network-simulator.html similarity index 63% rename from docs/build/html/visualiser.html rename to docs/build/html/network-simulator.html index 4bc9586291..1ee003405d 100644 --- a/docs/build/html/visualiser.html +++ b/docs/build/html/network-simulator.html @@ -8,7 +8,7 @@ - Using the visualiser — R3 Corda latest documentation + Network Simulator — R3 Corda latest documentation @@ -93,13 +93,10 @@
  32. Data types
  33. Consensus model
  34. Networking and messaging
  35. +
  36. Creating a Cordapp
  37. Running the demos
  38. Node administration
  39. - -

    Contracts

    -

    Tutorials

    +

    Contracts

    + +

    Node API

    +

    Appendix

    @@ -149,11 +161,11 @@
    • Docs »
    • -
    • Using the visualiser
    • +
    • Network Simulator
    • - View page source + View page source
    • @@ -163,71 +175,42 @@
      - -
      -

      Using the visualiser

      -

      In order to assist with understanding of the state model, the repository includes a simple graph visualiser. The -visualiser is integrated with the unit test framework and the same domain specific language. It is currently very -early and the diagrams it produces are not especially beautiful. The intention is to improve it in future releases.

      -_images/visualiser.png -

      An example of how to use it can be seen in src/test/kotlin/contracts/CommercialPaperTests.kt.

      -

      Briefly, define a set of transactions in a group using the same DSL that is used in the unit tests. Here’s an example -of a trade lifecycle using the commercial paper contract

      -
      -
      val group: TransactionGroupDSL<ContractState> = transactionGroupFor() {
      -      roots {
      -          transaction(900.DOLLARS.CASH `owned by` ALICE label "alice's $900")
      -          transaction(someProfits.CASH `owned by` MEGA_CORP_PUBKEY label "some profits")
      -      }
      -
      -      // Some CP is issued onto the ledger by MegaCorp.
      -      transaction("Issuance") {
      -          output("paper") { PAPER_1 }
      -          arg(MEGA_CORP_PUBKEY) { CommercialPaper.Commands.Issue() }
      -      }
      -
      -      // The CP is sold to alice for her $900, $100 less than the face value. At 10% interest after only 7 days,
      -      // that sounds a bit too good to be true!
      -      transaction("Trade") {
      -          input("paper")
      -          input("alice's $900")
      -          output("borrowed $900") { 900.DOLLARS.CASH `owned by` MEGA_CORP_PUBKEY }
      -          output("alice's paper") { "paper".output `owned by` ALICE }
      -          arg(ALICE) { Cash.Commands.Move() }
      -          arg(MEGA_CORP_PUBKEY) { CommercialPaper.Commands.Move() }
      -      }
      -
      -      // Time passes, and Alice redeem's her CP for $1000, netting a $100 profit. MegaCorp has received $1200
      -      // as a single payment from somewhere and uses it to pay Alice off, keeping the remaining $200 as change.
      -      transaction("Redemption", redemptionTime) {
      -          input("alice's paper")
      -          input("some profits")
      -
      -          output("Alice's profit") { aliceGetsBack.CASH `owned by` ALICE }
      -          output("Change") { (someProfits - aliceGetsBack).CASH `owned by` MEGA_CORP_PUBKEY }
      -          if (!destroyPaperAtRedemption)
      -              output { "paper".output }
      -
      -          arg(MEGA_CORP_PUBKEY) { Cash.Commands.Move() }
      -          arg(ALICE) { CommercialPaper.Commands.Redeem() }
      -      }
      -  }
      +  
      +

      Network Simulator

      +

      A network simulator is provided which shows traffic between nodes through the lifecycle of an interest rate swap +contract. It can optionally also show network setup, during which nodes register themselves with the network +map service and are notified of the changes to the map. The network simulator is run from the command line via Gradle:

      +

      Windows:

      +
      gradlew.bat network-simulator:run
       
      -
      -

      Now you can define a main method in your unit test class that takes the TransactionGroupDSL object and uses it:

      -
      -
      CommercialPaperTests().trade().visualise()
      +

      Other:

      +
      ./gradlew network-simulator:run
       
      +
      +

      Interface

      +_images/network-simulator.png +

      The network simulator can be run automatically, or stepped manually through each step of the interest rate swap. The +options on the simulator window are:

      +
      +
      Simulate initialisation
      +
      If checked, the nodes registering with the network map is shown. Normally this setup step +is not shown, but may be of interest to understand the details of node discovery.
      +
      Run
      +
      Runs the network simulation in automatic mode, in which it progresses each step on a timed basis. Once running, +the simulation can be paused in order to manually progress it, or reset.
      +
      Next
      +
      Manually progress the simulation to the next step.
      +
      Reset
      +
      Reset the simulation (only available when paused).
      +
      Map/Circle
      +
      How the nodes are shown, by default nodes are rendered on a world map, but alternatively they can rendered +in a circle layout.
      +
      +

      While the simulation runs, details of the steps currently being executed are shown in a sidebar on the left hand side +of the window.

      -

      This will open up a window with the following features:

      -
        -
      • The nodes can be dragged around to try and obtain a better layout (an improved layout algorithm will be a future -feature).
      • -
      • States are rendered as circles. Transactions are small blue squares. Commands are small diamonds.
      • -
      • Clicking a state will open up a window that shows its fields.
      • -
      diff --git a/docs/build/html/node-administration.html b/docs/build/html/node-administration.html index 710baf092c..222a286561 100644 --- a/docs/build/html/node-administration.html +++ b/docs/build/html/node-administration.html @@ -31,7 +31,7 @@ - + @@ -101,11 +101,7 @@
    • Uploading interest rate fixes
    - -

    Contracts

    -

    Tutorials

    +

    Contracts

    + +

    Node API

    +

    Appendix

    @@ -254,7 +262,7 @@ EURIBOR 2016-03-15 2M = 0.111