关于提升Corda合同代码的指南

时间:2018-01-14 00:27:29

标签: corda

上下文:我们最近在同一个CorDapp中对合同代码进行了更改,然后我们才意识到,如果在transactionstate上放置附件约束,您不能仅使用新的CorDapp插件来淘汰旧的CorDapp。因为这样的旧状态对象引用了旧的附件哈希,当新的CorDapp JAR放入旧的时,会抛出''ContractConstraintRejection''的错误。

解决方案:按以下步骤升级合同 -

  1. 修改原始州/合同以反映新的理想实施
  2. 测试新州和合同
  3. 停止业务网络上的所有节点
  4. 制作JAR文件并将其分发给所有必需的参与方
  5. 启动网络上的所有节点
  6. 所有节点都应为每个需要更新的状态运行合同升级授权流程
  7. 对于每个州,一个节点应运行合同升级启动流程
  8. 需要指导:

    • 在第4步,我们如何只生成一个仅包含更新的新合同的JAR文件?我克隆了一个模板,只添加了一个合同代码+ api调用来进行升级,编译代码并添加到节点中。当我重新启动节点时,我似乎无法访问新JAR中的那些api来进行升级。
    • 在第6步& 7,我尝试编写一个Web API来调用所有节点中的授权,然后再调用“升级流程”。我一直撞墙。如果我只是做RPC调用,那么在IDE中运行脚本是否更好(https://github.com/ragmondo/corda-nodeinfo)。有没有我可以参考授权+调用升级流程的例子。 docsite上的教程并不完全清楚(https://docs.corda.net/contract-upgrade.html)。

1 个答案:

答案 0 :(得分:1)

以下是您如何升级州合同的示例:

Private Sub cmdSubmit_Click()
    Dim ws As Worksheet
    Dim addme As Long
    Set ws = Sheet1
    addme = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

    With ws
        ws.Cells(addme, 1).Value = Me.txtNeedsAnalysSum 'the number 1 here represents the Column A
        ws.Cells(addme, 2).Value = Me.txtSummaryOfTask 'the number 2 represents Column B
        ws.Cells(addme, 3).Value = Me.txtIntroduction
        ws.Cells(addme, 4).Value = Me.chkInRes
        ws.Cells(addme, 5).Value = Me.chkOnline
        ws.Cells(addme, 6).Value = Me.chk24Hr
        ws.Cells(addme, 7).Value = Me.chk3days
        ws.Cells(addme, 8).Value = Me.chkDurOther
        ws.Cells(addme, 9).Value = Me.cmbPrereqReq
        ws.Cells(addme, 10).Value = Me.cmbPrereqRec
    End With
        Me.txtNeedsAnalysSum = vbNullString 're-set your textboxes
        Me.txtSummaryOfTask = vbNullString
        Me.txtIntroduction = vbNullString
        Me.chkInRes = False
        Me.chkOnline = False
        Me.chk24Hr = False
        Me.chk3days = False
        Me.chkDurOther = False
        Me.cmbPrereqReq = ""
        Me.cmbPrereqRec = ""
End Sub

有关完整示例,请参阅合同升级示例here