【发布时间】:2021-12-19 00:27:33
【问题描述】:
设置:
- Corda 4.6
- 使用 MockNode 进行测试
场景:
我正在构建原子交换,我将指向 EvolvableTokenType 的 FungibleToken 交换为代表 USD 的 FungibleToken。 过去我一直这样使用 SendTransactionFlow()/ReceiveTransactionFlow():
SignedTransaction stx = subFlow(new ReceiveTransactionFlow(otherSideSession, true, StatesToRecord.ALL_VISIBLE));
效果很好,因为它将所有状态保存到接收方节点上的保险库中——包括参考状态(即 FungibleToken 指向的 EvolvableTokenType)。然而在thisstackoverflow 的回答中,Mike Hearn 提到:
“您也可以使用 SendStateAndRefFlow,这将减少 支持新交所账本加密的迁移工作 未来。”
所以我正在尝试切换到 SendStateAndRefFlow()/ReceiveStateAndRefFlow()。
问题:
我无法使用 ReceiveStateAndRefFlow() 强制将状态保存在保管库中。交易存储中只存储交易链。
当我尝试将指向 EvolvableTokenType 的 FungibleToken 添加到接收方节点(构建交换的节点)上的 TransactionBuilder 时:
List<StateAndRef<FungibleToken>> inputs = subFlow(new ReceiveStateAndRefFlow<>(otherSideSession));
txBuilder.addInputState(inputs.get(0));
…我会得到一个错误:
java.lang.IllegalStateException: The LinearState with ID 598e1d3e-3b89-428c-b343-21c54a066856 is unknown to this node or it has been exited from the ledger.
错误所指的 UUID 是 FungibleToken 指向的 EvolvableTokenType 的 LinearId。
问题:
-
Mike 的 cmets 还有效吗?我是否应该避免使用 SendTransactionFlow/ReceiveTransactionFlow,因为 SGX 会破坏其功能?
-
我如何发送和保存 EvolvableTokenType FungibleToken 的点,以便 TransactionBuilder 可以使用状态?
【问题讨论】:
标签: corda