com.r3corda.contracts.asset / Cash

Cash

class Cash : FungibleAsset<Currency>

A cash transaction may split and merge money 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.

The goal of this design is to ensure that money can be withdrawn from the ledger easily: if you receive some money via this contract, you always know where to go in order to extract it from the R3 ledger, no matter how many hands it has passed through in the intervening time.

At the same time, other contracts that just want money and dont care much who is currently holding it in their vaults can ignore the issuer/depositRefs and just examine the amount fields.





Types

Commands interface Commands : CommandData
State data class State : State<Currency>

A state representing a cash claim against some party

Constructors

<init> Cash()

A cash transaction may split and merge money 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.

Properties

legalContractReference val legalContractReference: SecureHash

TODO:

Functions

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.

generateSpend fun generateSpend(tx: TransactionBuilder, amount: Amount<Issued<Currency>>, to: PublicKey, cashStates: List<StateAndRef<State>>): List<PublicKey>
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.

Inherited Functions

verify open fun verify(tx: TransactionForContract): Unit

This is the function EVERYONE runs