iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 24
0
Blockchain

區塊鏈開發(Blockchain/DLT Application Development)系列 第 24

R3 Corda:交易(Transactions)

  • 分享至 

  • xImage
  •  

Workflow

Corda 交易有其特有的流程限制,收集所有參與者的簽章,則達成交易共識寫入賬本。

https://ithelp.ithome.com.tw/upload/images/20181108/20103635m85MAUVnYw.png

交易依據狀態分為 2 種:

  • WireTransaction:未完成收集所有參與者簽章
    fun toWireTransaction(): WireTransaction
    
  • SignedTransaction:已完成收集所有參與者簽章
    verifySignatures()
    

兩者差異為是否成功完成以下函式。

fun toSignedTransaction(checkSufficientSignatures: Boolean = true): SignedTransaction
checkSufficientSignatures

verifySignatures()

TransactionBuilder

用以建立交易的實體物件,將所需物件參數傳入後,回傳交易物件以供傳送執行。

完整交易包含了幾個物件:

  • Transaction
    • TransactionType:交易類型
      • General:一般類型
      • NotaryChange:用以與公證人節點(Notary)交易
    • Input State:輸入
    • Output States:輸出
    • Commands:交易中的執行規則
      • Signers:指令執行的參與者,以指令為範圍,可能會有多個
    • Timestamp:時間戳記
    • Attachment Hash:附件的哈希值,以取得附件內容
    • Signing:簽章,以命令為範圍,保存需求節點驗證完成後回傳的簽章
    • Notary:對應的公證人(Notary)節點

物件定義:

val type: TransactionType = TransactionType.General()

val inputs: MutableList<StateRef> 
val outputs: MutableList<TransactionState<ContractState>> 
val commands: MutableList<Command>
val signers: MutableSet<CompositeKey>

var timestamp:Timestamp? 
val attachments:MutableList<SecureHash>

val currentSigs:MutableList<DigitalSignature.WithKey>

var notary: Party?

TransactionBuilder 提供的函式,用以取得物件、設定時間戳記、設定簽章:

fun withItems(var arg items: Any): TransactionBuilder
fun setTime(newTimestamp: Timestamp)
fun signWith(key: KeyPair): TransactionBuilder

https://ithelp.ithome.com.tw/upload/images/20181108/20103635PrLFNldsKD.png

程式碼範例:

val txBuilder = TransactionType.General.Builder(notary = null)

val notaryRef = serviceHub.networkMapCache.notaryNodes.single().notaryIdentity

val state = TransactionState(Cash.State(amount, owner), notaryRef))
val command = Command(Cash.Commands.Issue(), state.participants)

val unsignedTx = txBuilder.withItems(state, command)

上一篇
R3 Corda:狀態(States)
下一篇
R3 Corda:合約(Contract)
系列文
區塊鏈開發(Blockchain/DLT Application Development)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言