在收集交易签名时我们需要考虑哪些安全程序?

时间:2018-03-27 11:32:29

标签: corda

考虑以下情况: 节点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会不同的东西,那么正确吗?

从接收方那边,检查事务中存在哪些命令是否安全,以便我们确定通过验证运行与该命令相关的合同?

1 个答案:

答案 0 :(得分:0)

收到交易后,您将能够查询所有输入,输出和命令。 通常,审讯会在合同验证方法中发生。

是的,如果要更改任何内容,则根ID确实会发生变化。请注意,一旦签署了交易,就无法更改任何内容。

您可以查找的其他事项是正在进行公证的交易。

这取决于您的合同需要做什么,但是,您可以检查交易中存在哪些命令,例如在发布安全性时,您可能会检查是否只存在一个问题命令。

您还可以检查命令是否已收到所需的对方签名。

如果您想亲自讨论,请随时参加一个办公时间会议 - https://www.corda.net/support/technical-office-hours/