在 Corda 中提供了很多類型的合約,既包括核心功能(比如現(xiàn)金和賬本),也提供了應(yīng)該如何構(gòu)建復(fù)雜合約的例子(日股匯率交換)。還包括 Dummy 合約。然而這里并沒有提供任何有意義的功能,所以這純是為了測試的目的。
現(xiàn)金 Cash
Cash 合約的 states 對象代表了一些發(fā)行的貨幣和誰擁有這些貨幣。然和節(jié)點都可以發(fā)行任何的貨幣,所以這個取決于接收方來決定他們是否新人貨幣的發(fā)行方??傮w來說,節(jié)點是應(yīng)該具有一些審核條件(就像是白名單),貨幣發(fā)行方必須要滿足這些條件他們發(fā)行的貨幣才會被接受。
現(xiàn)金的 state 對象實現(xiàn)了 FungibleAsset 接口,并且可以被商業(yè)票據(jù)(commercial paper)和債券(obligation)合約作為一個借款清算的一部分被使用。合約的校驗方法要求,作為清算 transaction 的一部分,具有正確價值的現(xiàn)金 state 對象被收款人接收到了。
現(xiàn)金合約支持發(fā)行(issuing),轉(zhuǎn)移(moving)和銷毀(exiting)states。注意,發(fā)行的操作不能夠跟其他現(xiàn)金命令放在同一個 transaction 中,以最小化余額驗證的難度。
現(xiàn)金合約同商品合約共享了一個通用的 superclass OnLedgerAsset。它實現(xiàn)了在區(qū)塊鏈上可以被發(fā)行、轉(zhuǎn)移和銷毀的資產(chǎn)(assets)的常見行為,它的子類會處理特定資產(chǎn)數(shù)據(jù)類型和行為。
Corda 支持通過實現(xiàn)
CashSelection接口的方式來支持可插拔(pluggable)的現(xiàn)金選擇算法。默認的實現(xiàn)是使用一個特定的 H2 查詢,這個查詢對于不同的數(shù)據(jù)庫提供商(database provider)都可以被重寫。請查看META-INF\services\net.corda.finance.contracts.asset.CashSelection路徑下的CashSelectionH2Impl和相關(guān)的聲明。
商品 Commodity
Cmmodity 合約是一個非貨幣合約的早期階段的例子,它的 states 實現(xiàn)了 FungibleAsset 接口。這個被用來作為對于非現(xiàn)金的債務(wù)的一個概念驗證(proof of concept)。
商業(yè)票據(jù) Commercial paper
CommercialPaper 是在將來支付一定現(xiàn)金的一個很簡單的債務(wù),也是在教程中被使用的一個簡化的合約。商業(yè)票據(jù)支持發(fā)行、轉(zhuǎn)移和履約(結(jié)算) states。跟完全的債務(wù)合約不同,他不支持將 state 鎖住,所以如果債務(wù)人拒絕支付或者 netting of state objects,它是不會被清算的。每個商業(yè)票據(jù)的命令都是獨有的。使用 Obligation 合約來做一些更高級的功能。
利率交換 Interest rate swap
利率交換合約是一個雙邊的合約,實現(xiàn)一個 vanilla 固定 / 浮動相同的貨幣利率交換。大體上說,一個 IRS 允許了交易雙方從對底層利率的改的東來改變他們的 exposure。 他們經(jīng)常被用來作為套期工具(hedging instrument),將一個固定利率的貸款轉(zhuǎn)換為一個浮動利率的貸款,或者做一個相反的操作。
債務(wù) Obligation
債務(wù)合約的 state 對象代表了一個需要提供某些資產(chǎn)的債務(wù),通常會是一個現(xiàn)金 state 對象,但是也可以是任何滿足 FungibleAsset 接口的合約 state 對象,包括其他類型的債務(wù)。債務(wù)合約使用的對象是作為條款(Terms)來將命令(commands)和 state 對象組合在一起。條款是一個債務(wù) state 對象的子集,包括了什么需要被支付,什么時間以及由誰來支付的詳細信息。
債務(wù) state 對象想其他任何的 fungible asset 一樣可以被發(fā)行、轉(zhuǎn)移和清除。合約還支持 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 命令不能和其他任何債務(wù)命令一同包含在同一個 transaction 中,因為它會被應(yīng)用到不同受益人的 state 對象中,還因為這個會應(yīng)用到不同的條款中。