CashIssueAndPaymentFlow

class CashIssueAndPaymentFlow(val amount: Amount<Currency>, val issueRef: OpaqueBytes, val recipient: Party, val anonymous: Boolean, val notary: Party, progressTracker: ProgressTracker) : AbstractCashFlow<AbstractCashFlow.Result>

Initiates a flow that self-issues cash and then send this to a recipient.

We issue cash only to ourselves so that all KYC/AML checks on payments are enforced consistently, rather than risk checks for issuance and payments differing. Outside of test scenarios it would be extremely unusual to issue cash and immediately transfer it, so impact of this limitation is considered minimal.

Parameters

amount

the amount of currency to issue.

issueRef

a reference to put on the issued currency.

recipient

the recipient of the currency

anonymous

if true, the recipient of the cash will be anonymous. Should be true for normal usage

notary

the notary to set on the output states.

Constructors

Link copied to clipboard
constructor(amount: Amount<Currency>, issueRef: OpaqueBytes, recipient: Party, anonymous: Boolean, notary: Party)
constructor(amount: Amount<Currency>, issueRef: OpaqueBytes, recipient: Party, anonymous: Boolean, notary: Party, progressTracker: ProgressTracker)

Types

Link copied to clipboard
object Companion
Link copied to clipboard
class IssueAndPaymentRequest(val amount: Amount<Currency>, val issueRef: OpaqueBytes, val recipient: Party, val notary: Party, val anonymous: Boolean) : AbstractCashFlow.AbstractRequest

Properties

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

Returns true when the current FlowLogic has been killed (has received a command to halt its progress and terminate).

Link copied to clipboard
Link copied to clipboard
val logger: <Error class: unknown class>

This is where you should log things to.

Link copied to clipboard
Link copied to clipboard

Specifies the identity to use for this flow. This will be one of the multiple identities that belong to this node. This is the same as calling ourIdentityAndCert.party.

Link copied to clipboard

Specifies the identity, with certificate, to use for this flow. This will be one of the multiple identities that belong to this node.

Link copied to clipboard
open override 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 e.g record to the audit service. If this flow is invoked as a subflow of another, then the tracker will be made a child of the current step in the parent. If it's null, this flow doesn't track progress.

Link copied to clipboard
Link copied to clipboard

Returns a wrapped java.util.UUID object that identifies this state machine run (i.e. subflows have the same identifier as their parents).

Link copied to clipboard

Provides access to big, heavy classes that may be reconstructed from time to time, e.g. across restarts. It is only available once the flow has started, which means it cannot be accessed in the constructor. Either access this lazily or from inside call.

Functions

Link copied to clipboard
fun <R : Any> await(operation: FlowExternalAsyncOperation<R>): R
fun <R : Any> await(operation: FlowExternalOperation<R>): R

Executes the specified operation and suspends until operation completion.

Link copied to clipboard
open override fun call(): AbstractCashFlow.Result

This is where you fill out your business logic.

Link copied to clipboard

Helper function that throws a KilledFlowException if the current FlowLogic has been killed.

fun checkFlowIsNotKilled(lazyMessage: () -> Any)

Helper function that throws a KilledFlowException if the current FlowLogic has been killed. The provided message is added to the thrown KilledFlowException.

Link copied to clipboard
fun checkFlowPermission(permissionName: String, extraAuditData: Map<String, String>)

Flows can call this method to ensure that the active FlowInitiator is authorised for a particular action. This provides fine grained control over application level permissions, when RPC control over starting the flow is insufficient, or the permission is runtime dependent upon the choices made inside long lived flow code. For example some users may have restricted limits on how much cash they can transfer, or whether they can change certain fields. An audit event is always recorded whenever this method is used. If the permission is not granted for the FlowInitiator a FlowException is thrown.

Link copied to clipboard
fun FlowLogic<*>.checkParameterHash(networkParametersHash: SecureHash?)

Check that network parameters hash on this transaction is the current hash for the network.

Link copied to clipboard
fun close(sessions: NonEmptySet<FlowSession>)

Closes the provided sessions and performs cleanup of any resources tied to these sessions.

Link copied to clipboard
fun <T, R : Any> FlowLogic<T>.executeAsync(operation: FlowAsyncOperation<R>, maySkipCheckpoint: Boolean = false): R

Executes the specified operation and suspends until operation completion.

Link copied to clipboard

Returns a shallow copy of the Quasar stack frames at the time of call to flowStackSnapshot. Use this to inspect what objects would be serialised at the time of call to a suspending action (e.g. send/receive). Note: This logic is only available during tests and is not meant to be used during the production deployment. Therefore the default implementation does nothing.

Link copied to clipboard
fun getFlowInfo(otherParty: Party): FlowInfo

Returns a FlowInfo object describing the flow otherParty is using. With FlowInfo.flowVersion it provides the necessary information needed for the evolution of flows and enabling backwards compatibility.

Link copied to clipboard

Creates a communication session with destination. Subsequently you may send/receive using this session object. How the messaging is routed depends on the Destination type, including whether this call does any initial communication.

Creates a communication session with party. Subsequently you may send/receive using this session object. Note that this function does not communicate in itself, the counter-flow will be kicked off by the first send/receive.

Link copied to clipboard

Persists a shallow copy of the Quasar stack frames at the time of call to persistFlowStackSnapshot. Use this to track the monitor evolution of the quasar stack values during the flow execution. The flow stack snapshot is stored in a file located in {baseDir}/flowStackSnapshots/YYYY-MM-DD/{flowId}/ where baseDir is the node running directory and flowId is the flow unique identifier generated by the platform.

Link copied to clipboard
inline fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

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

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

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

Link copied to clipboard
open fun <R : Any> receiveAll(receiveType: Class<R>, sessions: List<FlowSession>, maySkipCheckpoint: Boolean = false): List<UntrustworthyData<R>>

Suspends until a message has been received for each session in the specified sessions.

Link copied to clipboard
fun FlowLogic<*>.receiveAll(session: <Error class: unknown class><FlowSession, Class<out Any>>, vararg sessions: <Error class: unknown class><FlowSession, Class<out Any>>): Map<FlowSession, UntrustworthyData<Any>>
inline fun <R : Any> FlowLogic<*>.receiveAll(session: FlowSession, vararg sessions: FlowSession): List<UntrustworthyData<R>>
fun <R : Any> FlowLogic<*>.receiveAll(receiveType: Class<R>, session: FlowSession, vararg sessions: FlowSession): List<UntrustworthyData<R>>

Suspends until a message has been received for each session in the specified sessions.

Link copied to clipboard
open fun receiveAllMap(sessions: Map<FlowSession, Class<out Any>>, maySkipCheckpoint: Boolean = false): Map<FlowSession, UntrustworthyData<Any>>

Suspends until a message has been received for each session in the specified sessions.

Link copied to clipboard
fun recordAuditEvent(eventType: String, comment: String, extraAuditData: Map<String, String>)

Flows can call this method to record application level flow audit events

Link copied to clipboard
open fun send(otherParty: Party, payload: Any)

Queues the given payload for sending to the otherParty and continues without suspending.

Link copied to clipboard
fun sendAll(payload: Any, sessions: Set<FlowSession>, maySkipCheckpoint: Boolean = false)

Queues the given payload for sending to the provided sessions and continues without suspending.

Link copied to clipboard
fun sendAllMap(payloadsPerSession: Map<FlowSession, Any>, maySkipCheckpoint: Boolean = false)

Queues the given payloads for sending to the provided sessions and continues without suspending.

Link copied to clipboard
inline fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

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

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

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

Link copied to clipboard
open fun <R> subFlow(subLogic: FlowLogic<R>): R

Invokes the given subflow. This function returns once the subflow completes successfully with the result returned by that subflow's call method. If the subflow has a progress tracker, it is attached to the current step in this flow's progress tracker.

Link copied to clipboard

Returns a pair of the current progress step, as a string, and an observable of stringified changes to the progressTracker.

Link copied to clipboard
fun trackStepsTree(): DataFeed<List<<Error class: unknown class><Int, String>>, List<<Error class: unknown class><Int, String>>>?

Returns a pair of the current steps tree of current progressTracker as pairs of zero-based depth and stringified step label and observable of upcoming changes to the structure.

Link copied to clipboard

Returns a pair of the current progress step index (as integer) in steps tree of current progressTracker, and an observable of its upcoming changes.

Link copied to clipboard
fun waitForLedgerCommit(hash: SecureHash, maySkipCheckpoint: Boolean = false): SignedTransaction

Suspends the flow until the transaction with the specified ID is received, successfully verified and sent to the vault for processing. Note that this call suspends until the transaction is considered valid by the local node, but that doesn't imply the vault will consider it relevant.

Link copied to clipboard

Suspends the current flow until all the provided StateRefs have been consumed.