在Corda中,我们应该使用帐户密钥而不是节点密钥来签署交易吗?

时间:2020-01-24 12:17:03

标签: corda

我正在学习Corda 4.3中发布的Account概念。该概念还允许节点通过使用帐户密钥而不是节点密钥来签署交易。我研究了几个方面,仍然有疑问:

  • 在这种情况下,我们应该使用帐户密钥而不是节点密钥来签署交易?
  • 使用帐户密钥签名而不是节点密钥的关键好处是什么?
  • 该框架允许使用节点密钥对同一节点中的帐户之间的交易进行签名。我们为什么要这样做?

谢谢。

1 个答案:

答案 0 :(得分:0)

这不是关于使用帐户密钥而不是节点密钥进行签名的关键好处,而是国家合同规定的内容。
例如,如果您查看gold-trading示例:

  1. 状态具有属性owningAccount
data class LoanBook(val dealId: UUID, val valueInUSD: Long, 
                    val owningAccount: PublicKey? = null) : ContractState
  1. 合同规定owningAccountTRANSFER命令的必需签名者:
inputGold.owningAccount?.let {
    require(inputGold.owningAccount in command.signers) { 
    "The account sending the loan must be a required signer" }
}
  1. 请注意,流程如何使用节点的密钥(因为流程的发起者是必需的签名者)和owningAccount的密钥(因为合同规定)来签署事务:
val locallySignedTx = serviceHub.signInitialTransaction(transactionBuilder, 
                        listOfNotNull(loanBook.state.data.owningAccount, 
                        ourIdentity.owningKey))