在 Corda 中提供了很多类型的合约,既包括核心功能(比如现金和账本),也提供了应该如何构建复杂合约的例子(日股汇率交换)。还包括 Dummy
合约。然而这里并没有提供任何有意义的功能,所以这纯是为了测试的目的。
现金 Cash
Cash
合约的 states 对象代表了一些发行的货币和谁拥有这些货币。然和节点都可以发行任何的货币,所以这个取决于接收方来决定他们是否新人货币的发行方。总体来说,节点是应该具有一些审核条件(就像是白名单),货币发行方必须要满足这些条件他们发行的货币才会被接受。
现金的 state 对象实现了 FungibleAsset
接口,并且可以被商业票据(commercial paper)和债券(obligation)合约作为一个借款清算的一部分被使用。合约的校验方法要求,作为清算 transaction 的一部分,具有正确价值的现金 state 对象被收款人接收到了。
现金合约支持发行(issuing),转移(moving)和销毁(exiting)states。注意,发行的操作不能够跟其他现金命令放在同一个 transaction 中,以最小化余额验证的难度。
现金合约同商品合约共享了一个通用的 superclass OnLedgerAsset
。它实现了在区块链上可以被发行、转移和销毁的资产(assets)的常见行为,它的子类会处理特定资产数据类型和行为。
Corda 支持通过实现
CashSelection
接口的方式来支持可插拔(pluggable)的现金选择算法。默认的实现是使用一个特定的 H2 查询,这个查询对于不同的数据库提供商(database provider)都可以被重写。请查看META-INF\services\net.corda.finance.contracts.asset.CashSelection
路径下的CashSelectionH2Impl
和相关的声明。
商品 Commodity
Cmmodity
合约是一个非货币合约的早期阶段的例子,它的 states 实现了 FungibleAsset
接口。这个被用来作为对于非现金的债务的一个概念验证(proof of concept)。
商业票据 Commercial paper
CommercialPaper
是在将来支付一定现金的一个很简单的债务,也是在教程中被使用的一个简化的合约。商业票据支持发行、转移和履约(结算) states。跟完全的债务合约不同,他不支持将 state 锁住,所以如果债务人拒绝支付或者 netting of state objects,它是不会被清算的。每个商业票据的命令都是独有的。使用 Obligation
合约来做一些更高级的功能。
利率交换 Interest rate swap
利率交换合约是一个双边的合约,实现一个 vanilla 固定 / 浮动相同的货币利率交换。大体上说,一个 IRS 允许了交易双方从对底层利率的改的东来改变他们的 exposure。 他们经常被用来作为套期工具(hedging instrument),将一个固定利率的贷款转换为一个浮动利率的贷款,或者做一个相反的操作。
债务 Obligation
债务合约的 state 对象代表了一个需要提供某些资产的债务,通常会是一个现金 state 对象,但是也可以是任何满足 FungibleAsset
接口的合约 state 对象,包括其他类型的债务。债务合约使用的对象是作为条款(Terms
)来将命令(commands)和 state 对象组合在一起。条款是一个债务 state 对象的子集,包括了什么需要被支付,什么时间以及由谁来支付的详细信息。
债务 state 对象想其他任何的 fungible asset 一样可以被发行、转移和清除。合约还支持 state 对象 netting 和生命周期变动(marking the obligation that a state object represents as having defaulted, or reverting it to the normal state after marking as having defaulted)。Net
命令不能和其他任何债务命令一同包含在同一个 transaction 中,因为它会被应用到不同受益人的 state 对象中,还因为这个会应用到不同的条款中。