我们在收集交易签名时需要考虑哪些安全程序?
Which are the security procedures which we need to consider when we collect transaction signatures?
考虑以下情况:
节点 A 构建并签署发送给 B 进行签名的 TX。
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 会有所不同,对吗?
从接收方来看,检查交易中存在哪些命令是否安全,因此我们可以通过验证确定与该命令相关的合约是 运行?
收到交易后,您将能够查询所有输入、输出和命令。
通常,询问会在合同验证方法内发生。
是的,如果要更改任何内容,root ID 确实会更改。请注意,交易一旦签署就无法更改任何内容。
您可以寻找的其他事项是交易是否经过公证。
这取决于你的合同需要做什么,但是是的,你会检查交易中存在哪些命令,例如在发行证券时,您可能会检查是否只有一个发行命令存在。
您还可以检查命令是否已收到所需的交易对手签名。
如果您想亲自讨论,请随时参加其中一个办公时间会议 - https://www.corda.net/support/technical-office-hours/
考虑以下情况: 节点 A 构建并签署发送给 B 进行签名的 TX。
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 会有所不同,对吗?
从接收方来看,检查交易中存在哪些命令是否安全,因此我们可以通过验证确定与该命令相关的合约是 运行?
收到交易后,您将能够查询所有输入、输出和命令。 通常,询问会在合同验证方法内发生。
是的,如果要更改任何内容,root ID 确实会更改。请注意,交易一旦签署就无法更改任何内容。
您可以寻找的其他事项是交易是否经过公证。
这取决于你的合同需要做什么,但是是的,你会检查交易中存在哪些命令,例如在发行证券时,您可能会检查是否只有一个发行命令存在。
您还可以检查命令是否已收到所需的交易对手签名。
如果您想亲自讨论,请随时参加其中一个办公时间会议 - https://www.corda.net/support/technical-office-hours/