- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们目前正致力于在我们的 Cordapp 中集成 Ledger Sync Service:https://github.com/corda/corda-solutions/tree/master/bn-apps/ledger-sync
在我们自己的测试中,我们体验到在某些情况下,账本在崩溃后没有成功同步/修复。
我们的测试执行以下操作:
A
和 B
相互交易,创建状态 S
. B
崩溃并恢复到它不知道的状态 S
. A
创建一个使用状态 S
的新事务B
使用账本同步服务恢复所有状态。 A
创建使用状态
S
的 Tx , 节点
B
还将收到创建状态
S
的旧 Tx作为依赖。从那时起,Tx 记录在节点
B
的数据库中。并且可以通过调用
serviceHub.validatedTransactions.getTransaction(txId)
来检索.
CONSUMED
或
ALL
states 不会返回旧状态
S
.运行账本同步会报告节点不同步,说创建状态的事务
S
不见了。
RequestLedgersSyncFlow
将继续报告丢失的交易。
最佳答案
我已经重新创建了四个节点运行从 master 构建的 Ledger Sync Service 的场景(最近的提交 839dfb8772c3b08447183a84e336a527a0f3975b
)。我修改了BogusFlow
以下列方式允许消耗输入状态:
/**
* A trivial flow that is merely used to illustrate synchronisation by persisting meaningless transactions in
* participant's vaults
*/
@InitiatingFlow
@StartableByRPC
class BogusFlow(
private val them: Party,
private val precursor: UniqueIdentifier? = null
) : FlowLogic<SignedTransaction>() {
@Suspendable
override fun call(): SignedTransaction {
val notary = serviceHub.networkMapCache.notaryIdentities.first()
val cmd = Command(BogusContract.Commands.Bogus(), listOf(them.owningKey))
val builder = TransactionBuilder(notary)
precursor?.let {
val result = serviceHub.vaultService.queryBy(BogusState::class.java, LinearStateQueryCriteria(linearId = listOf(it)))
val inputState = result.states.single()
builder.addInputState(inputState)
}
builder.addOutputState(BogusState(ourIdentity, them), BOGUS_CONTRACT_ID)
.addCommand(cmd).apply {
verify(serviceHub)
}
val partiallySigned = serviceHub.signInitialTransaction(builder)
val session = initiateFlow(them)
val fullySigned = subFlow(CollectSignaturesFlow(partiallySigned, setOf(session)))
return subFlow(FinalityFlow(fullySigned))
}
}
A
,Bob
B
,Charlie
C
)。使用了非验证公证人 (
N
)。
A
, B
, C
和 N
使用 H2 作为数据库 A
, 调用 net.corda.businessnetworks.ledgersync.BogusFlow
, 定位 O=Bob Ltd., L=London, C=GB
A
并销毁数据库,即 rm persistence.mv.db
B
,为 contractStateType net.corda.businessnetworks.ledgersync.BogusState
运行 vaultQuery验证 B
知道 2 之后的未使用状态。输出应包含 linearId
.记下这个 ID。 B
, 用 C
开始一个流程, 利用 linearId
在 4 中获得作为前体。 IE。 flow start net.corda.businessnetworks.ledgersync.BogusFlow them: "O=Charlie SARL, L=Paris, C=FR", precursor: "2429c289-0ccb-4adb-9714-32ee3d0d7f12"
.请注意,在生产用例中,您的合约代码可能会首先禁止执行此交易,因为 A
还没有签名。 B
, 运行 vaultQuery contractStateType: net.corda.businessnetworks.ledgersync.BogusState
并验证参与者是否处于未消费状态 B
和 C
(即 "participants" : [ "O=Bob Ltd., L=London, C=GB", "O=Charlie SARL, L=Paris, C=FR" ]
)。 A
,让节点备份,创建一个新的 H2 数据库。 A
, 开始 EvaluateLedgerConsistencyFlow
(即 connection.proxy.startFlow(::EvaluateLedgerConsistencyFlow, listOf(alice, bob, charlie))
)。这应该返回 {O=Bob Ltd., L=London, C=GB=false, O=Charlie SARL, L=Paris, C=FR=true}
表示A
与 B
不同步. A
, 运行 RequestLedgersSyncFlow
(即 connection.proxy.startFlow(::RequestLedgersSyncFlow, listOf(alice, bob, charlie))
)。这将返回丢失交易的摘要(例如 {O=Bob Ltd., L=London, C=GB=LedgerSyncFindings(missingAtRequester=[BAA58E9E9E2025181F00459FCE8B0D035705A38D1068A0F4C4BAB53F3F56FB40], missingAtRequestee=[]), O=Charlie SARL, L=Paris, C=FR=LedgerSyncFindings(missingAtRequester=[], missingAtRequestee=[])}
)。 A
, 运行 TransactionRecoveryFlow
, 传入 9 的结果.例如。 connection.proxy.startFlow(::TransactionRecoveryFlow, report)
在哪里 report
是上一步的结果。 A
, 验证重新运行 EvaluateLedgerConsistencyFlow
这将返回结果 {O=Bob Ltd., L=London, C=GB=true, O=Charlie SARL, L=Paris, C=FR=true}
,表示差异已解决。 A
,运行保险库查询(即 VaultQueryCriteria(status = ALL), PageSpecification(), Sort(emptyList()), BogusState::class.java
)以检索内容并验证已重新创建状态。 关于Corda 的 Ledger Sync 在某些情况下不同步保管库状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54231839/
我正在通读 Windows Phone 7.5 Unleashed,有很多代码看起来像这样(在页面的代码隐藏中): bool loaded; protected override void OnNav
在cgi服务器中,我这样返回 print ('Status: 201 Created') print ('Content-Type: text/html') print ('Location: htt
我正在查看 esh(easy shell)的实现,无法理解在这种情况下什么是 22 和 9 信号。理想情况下,有一个更具描述性的常量,但我找不到列表。 最佳答案 信号列表及其编号(包括您看到的这两个)
我的Oozie Hive Action 永远处于运行模式。 oozie.log文件中没有显示错误。
我正在编写一个使用 RFCOMM 通过蓝牙连接到设备的 Android 应用程序。我使用 BluetoothChat 示例作为建立连接的基础,大部分时间一切正常。 但是,有时由于出现套接字已打开的消息
我有一个云调度程序作业,它应该每小时访问我的 API 以更新一些价格。这些作业大约需要 80 秒才能运行。 这是它的作用: POST https://www.example.com/api/jobs/
我正在 Tomcat 上访问一个简单的 JSP 页面: 但是当我使用 curl 测试此页面时,我得到了 200 响应代码而不是预期的 202: $ curl -i "http://localhos
有时 JAR-RS 客户端会发送错误的语法请求正文。服务器应响应 HTTP status 400 (Bad Request) , 但它以 HTTP status 500 (Internal Serve
我正在尝试通过 response.send() 发送一个整数,但我不断收到此错误 express deprecated res.send(status): Use res.sendStatus(sta
我已经用 Excel 和 Java 做过很多次了……这次我需要用 Stata 来做,因为保存变量更方便'labels .如何将 dataset_1 重组为下面的 dataset_2? 我需要转换以下
我正在创建一个应用程序,其中的对象具有状态查找功能。为了提供一些上下文,让我们使用以下示例。 帮助台应用程序,其中创建作业并通过以下工作流程移动: 新 - 工作已创建但未分配 进行中 - 分配给工作人
我想在 Keras 中运行 LSTM 并获得输出和状态。在 TF 中有这样的事情 with tf.variable_scope("RNN"): for time_step in range
有谁知道 Scala-GWT 的当前状态 项目? 那里的主要作者 Grzegorz Kossakowski 似乎退出了这个项目,在 Spring 中从事 scalac 的工作。 但是,在 interv
我正在尝试编写一个 super 简单的 applescript 来启动 OneDrive App , 或确保打开,当机器的电源设置为插入时,将退出,或确保关闭,当电源设置为电池时。 我无法找到如何访问
目前我正在做这样的事情 link.on('click', function () { if (link.attr('href') !== $route.current.originalPath
是否可以仅通过查看用户代理来检测浏览器上是否启用/禁用 Javascript。 如果是,我应该寻找什么。如果否,检测用户浏览器是否启用/禁用 JavaScript 的最佳方法是什么 最佳答案 不,没有
Spring 和 OSGi 目前的开发状况如何? 最近好像有点安静了。 文档的最新版本 ( http://docs.spring.io/osgi/ ) 来自 2009 年。 我看到一些声明 Sprin
我正在从主函数为此类创建一个线程,但即使使用 Thread.currentThread().interrupt() 中断它,输出仍然包含“Still Here”行。 public class Writ
为了满足并发要求,我想知道如何在 Godog 中的多个步骤之间传递参数或状态。 func FeatureContext(s *godog.Suite) { // This step is ca
我有一个UIButton子类,它不使用UIImage背景,仅使用背景色。我注意到的一件事是,当您设置按钮的背景图像时,有一个默认的突出显示状态,当按下按钮时,该按钮会稍微变暗。 这是我当前的代码。
我是一名优秀的程序员,十分优秀!