考虑以下情况: 节点A构建并签署TX,发送给B进行签名。
class FlowA(val otherParty: Party) : FlowLogic<SignedTransaction>() {
@Suspendable
override fun call(): SignedTransaction {
val notary = serviceHub.networkMapCache.getNotary()
val builder = TransactionBuilder(notary)
// ... add some commands and states
val stx = serviceHub.signInitialTransaction(builder)
val session = initiateFlow(otherParty)
subFlow(SendTransactionFlow(session, stx))
return session.sendAndReceive<SignedTransaction>(stx).unwrap {
it.id == stx.id // is it enough?
it
}
}
}
class FlowB(val session: FlowSession) : FlowLogic<Unit>() {
@Suspendable
override fun call() {
subFlow(ReceiveTransactionFlow(session, false))
val stx = session.receive<SignedTransaction>().unwrap {
val ledgerTx = it.toLedgerTransaction(serviceHub, false)
ledgerTx.commandsOfType<SomeContract.Commands.SomeCommand>().single()
ledgerTx.verify() // is it enough?
}
}
}
收到完整签名的交易后,仅检查发件人方的交易ID是否安全?
我在文档中读到id是使用事务组件构建的根Merkle树,所以如果otherParty
改变了id会不同的东西,那么正确吗?
从接收方那边,检查事务中存在哪些命令是否安全,以便我们确定通过验证运行与该命令相关的合同?
答案 0 :(得分:0)
收到交易后,您将能够查询所有输入,输出和命令。 通常,审讯会在合同验证方法中发生。
是的,如果要更改任何内容,则根ID确实会发生变化。请注意,一旦签署了交易,就无法更改任何内容。
您可以查找的其他事项是正在进行公证的交易。
这取决于您的合同需要做什么,但是,您可以检查交易中存在哪些命令,例如在发布安全性时,您可能会检查是否只存在一个问题命令。
您还可以检查命令是否已收到所需的对方签名。
如果您想亲自讨论,请随时参加一个办公时间会议 - https://www.corda.net/support/technical-office-hours/