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的主要内容,如果未能解决你的问题,请参考以下文章

具有 HCS 可插拔共识的 Corda

corda理解

corda理解

corda理解

corda理解

在 Corda 中使用 TestContainers 进行 API 测试