Corda - SignTransactionFlow 和 sendAndReceive
Posted
技术标签:
【中文标题】Corda - SignTransactionFlow 和 sendAndReceive【英文标题】:Corda - SignTransactionFlow and sendAndReceive 【发布时间】:2022-01-15 01:22:18 【问题描述】:我有两方(A 和 B)。 A 使用 SignTransactionFlow 向 B 发送 Corda 状态,因此也获得了该交易的交易对手签名。
是否可以在不使用 SignTransactionFlow 而是使用 sendAndReceive 调用的情况下共享 Corda 状态? 如果是这样,通过 sendAndReceive 接收 Corda 状态的交易对手是否能够消费该状态?
【问题讨论】:
【参考方案1】:是的,可以使用send()
和receive()
发送状态。这是我测试过的代码示例,看看它是否有效:
class TestContract : Contract
companion object
@JvmStatic
val ID = "package net.corda.sample.TestContract"
override fun verify(tx: LedgerTransaction)
@BelongsToContract(TestContract::class)
class TestState(val owner : Party, val value : String) : ContractState
override val participants: List<AbstractParty>
get() = listOf(owner)
@InitiatingFlow
@StartableByRPC
class receiveStateFlow(private val counterparty: Party) : FlowLogic<Unit>()
override val progressTracker = ProgressTracker()
val log = loggerFor<receiveStateFlow>()
@Suspendable
override fun call()
val counterpartySession = initiateFlow(counterparty)
val counterpartyData = counterpartySession.sendAndReceive<TestState>("hello")
counterpartyData.unwrap msg ->
log.warn(msg.value)
assert((msg.participants.first()) == counterparty)
@InitiatedBy(receiveStateFlow::class)
class sendStateFlow(private val counterpartySession: FlowSession) : FlowLogic<Unit>()
@Suspendable
override fun call()
val counterpartyData = counterpartySession.receive<String>()
counterpartyData.unwrap msg ->
assert(msg == "hello")
val newState = TestState(serviceHub.myInfo.legalIdentities.first(), "someValue")
counterpartySession.send(newState)
但是,此方法不会消耗任何状态。仅当您将这些状态用作Transaction
的输出时,才会发生这种情况。因此,接收状态的一方应使用这些确切状态作为同一 Flow 中 TransactionBuilder
的输出,并继续签署和完成交易。
【讨论】:
以上是关于Corda - SignTransactionFlow 和 sendAndReceive的主要内容,如果未能解决你的问题,请参考以下文章