В Corda, в каком случае мы должны подписывать транзакцию ключом учетной записи, а не ключом узла? - PullRequest
0 голосов
/ 24 января 2020

Я изучаю концепцию аккаунта, выпущенную в Corda 4.3. Концепция также позволяет узлу подписывать транзакцию, используя ключ учетной записи, а не ключ узла. Я изучаю несколько аспектов и у меня все еще остаются вопросы:

  • В каком случае мы должны подписывать транзакцию с ключом счета, а не с ключом узла?
  • Что было бы важным преимуществом для использования учетной записи подписывание ключа через ключ узла?
  • Каркас позволяет подписывать транзакции между учетными записями в одном узле с помощью ключа учетной записи. Зачем нам это делать?

Заранее спасибо.

1 Ответ

0 голосов
/ 24 января 2020

Дело не в том, что является ключевым преимуществом подписания с помощью ключа учетной записи вместо ключа узла, а в том, что предписывает ваш государственный контракт.
Например, если вы посмотрите на пример gold-trading:

  1. Состояние имеет атрибут owningAccount:
data class LoanBook(val dealId: UUID, val valueInUSD: Long, 
                    val owningAccount: PublicKey? = null) : ContractState
В контракте указывается, что owningAccount является обязательным подписывающим лицом для команды TRANSFER:
inputGold.owningAccount?.let {
    require(inputGold.owningAccount in command.signers) { 
    "The account sending the loan must be a required signer" }
}
Обратите внимание, как поток подписывает транзакцию с помощью ключа узла (потому что инициатор потока является обязательным подписывающим лицом) и ключа owningAccount (потому что контракт диктует это):
val locallySignedTx = serviceHub.signInitialTransaction(transactionBuilder, 
                        listOfNotNull(loanBook.state.data.owningAccount, 
                        ourIdentity.owningKey))
...