首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有办法在收到的交易中增加支出?

是否有办法在收到的交易中增加支出?
EN

Stack Overflow用户
提问于 2018-02-07 12:56:44
回答 1查看 74关注 0票数 0

我想在单笔交易中代表两笔付款,一笔来自甲方(第一笔用于创建交易),另一笔来自乙方(应该接收交易)。我已经尝试过通过A和B之间的会话传递TransactionBuilder对象,但是该对象是不可序列化的。我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2018-02-07 16:48:43

选项1-将标记为可序列化的

默认情况下,作为流的一部分可以在节点之间发送的唯一对象是DefaultWhitelist (https://github.com/corda/corda/blob/release-V2/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/DefaultWhitelist.kt)中列出的类的实例。

您可以将其他类型白名单,以便作为流的一部分在节点之间发送,如下所示:

  • 创建自己的序列化白名单,它将TransactionBuilder添加到白名单中: 类TemplateSerializationWhitelist : SerializationWhitelist {SerializationWhitelist= listOf(TransactionBuilder::class.java) }
  • 通过将完全限定的类名添加到src/main/resources/META-INF/services/net.corda.core.serialization.SerializationWhitelist文件中,在节点上注册附加的白名单。

注:对于您自己定义的类,您可以通过将它们注释为@CordaSerializable来实现相同的目标。

选项2-将所有事务组件发送给单个协调方

假设您希望Alice是协调事务构建的一方。您可以编写以下流对:

代码语言:javascript
复制
@InitiatingFlow
@StartableByRPC
class AliceFlow(val bob: Party) : FlowLogic<Unit>() {
    @Suspendable
    override fun call() {
        val alicesOutputState = MyState()

        val sessionWithBob = initiateFlow(bob)
        val dataFromBob = sessionWithBob.receive<MyState>()
        val bobsOutputState = dataFromBob.unwrap { it -> it }

        val txBuilder = TransactionBuilder(serviceHub.networkMapCache.notaryIdentities.first())
        txBuilder.addOutputState(alicesOutputState, MyContract.ID)
        txBuilder.addOutputState(bobsOutputState, MyContract.ID)

        ...
    }
}

和:

代码语言:javascript
复制
@InitiatedBy(AliceFlow::class)
class BobFlow(val sessionWithAlice: FlowSession) : FlowLogic<Unit>() {
    @Suspendable
    override fun call() {
        val bobsOutputState = MyState()
        sessionWithAlice.send(bobsOutputState)

        ...
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48664408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档