Corda-商业开源区块链

Corda是一种分布式分类帐,用于存储,管理和同步各个金融机构之间的金融义务。

Corda的视频讲座非常不错,可在此处找到。 我将尝试简要描述Corda是如何构建的。

考虑Corda的主要特征及其在其他区块链中的独特性:

  • Corda没有自己的加密货币。
  • Corda不使用采矿概念和工作量证明系统。
  • 数据传输仅在交易/合同的参与者之间发生。 没有对所有网络节点的全局广播。
  • 没有中央控制器来管理所有事务。
  • Corda支持各种共识机制。
  • 参与者之间的共识是在单独的协议/合同级别上,而不是在整个系统级别上。
  • 交易仅由与其相关的参与者确认。
  • Corda提供正式的人类法律语言与智能合约代码之间的直接链接。

分类帐


Corda中的分类帐概念是主观的。 没有单个中央数据仓库。 相反,每个节点都维护一个单独的已知事实数据库。

例如,假设有一个5个节点的网络,其中圆圈是该节点已知的事实。



我们可以看到,埃德,卡尔和黛咪都知道事实3,而爱丽丝和鲍勃甚至都不怀疑他。 Corda保证在每个节点的数据库中保留一般事实,并且数据将是相同的。


状态是一个不变的对象,这是一个或多个网络节点在特定时间点已知的事实。

国家可以存储任意数据,例如股票,债券,贷款,身份信息。

例如,以下状态是IOU-爱丽丝欠鲍勃X的协议:


事实随时间的生命周期由状态序列表示。 当需要更新当前状态时,我们创建一个新状态,并将当前状态标记为历史状态。



交易次数


交易是更新分类帐的建议。 它们不会广播给所有分类帐参与者,仅对那些具有查看和管理它们的合法权利的网络成员可用。

符合以下条件的交易将被添加到分类帐中:

  • 合同有效
  • 由所有必要参与者签名
  • 不含双重浪费(可支配)

Corda使用UTXO(未用交易输出)模型,其中每个分类帐状态都是不可变的。

创建事务时,先前事务的输入状态(通过哈希和索引)将传输到输入。


交易生命周期:

  • 创建(目前,该交易仅是升级分类帐a的建议)
  • 签名集合(交易中的必需参与者通过向交易中添加签名来批准更新建议)
  • 在分类帐中传输提交

将事务添加到分类账后,输入状态被标记为历史状态,不能在以后的事务中使用。


除输入和输出状态外,事务可能还包含:

  • 命令(指示交易目的的交易参数)
  • 附件(节日日历,货币换算器)
  • 临时窗口(有效期)
  • 公证人(公证人,特殊网络成员,验证交易)


合约


当我们谈论交易有效性时,我们不仅指必要签名的可用性,而且还指合同有效性。 每个交易都与接受它并验证输入和输出状态的合同相关联。 仅当交易的所有状态均有效时,该交易才被视为有效。

Corda中的合同以任何JVM语言(例如Java,Kotlin)编写。

class CommercialPaper : Contract { override fun verify(tx: LedgerTransaction) { TODO() } } 

您必须从Contract类继承并重写verify方法。 如果验证无效,则会引发异常。

交易的确认必须是确定性的,即 合同必须始终接受或拒绝交易。 与此相关,交易的有效性不能取决于时间,随机数,主机文件等。

在Corda,合同在所谓的沙箱中执行,沙盒是经过稍微修改的JVM,可确保确定性地执行合同。


为了自动进行主机通信,添加了线程。

流是告诉节点如何执行特定分类账更新的一系列步骤,在这一点上,必须对交易进行签名和验证。



有时,需要花费数小时,数天的时间才能由各方签署交易并最终进入分类帐。 如果断开事务中涉及的节点,会发生什么? 流具有断点,流的状态将断点写入节点数据库。 还原网络中的节点时,它将从停止位置继续。

共识


要进入分类帐,交易必须达成两个共识:有效性和唯一性。

交易有效性的决定仅由直接相关的各方做出。

经过公证的节点会验证交易的唯一性,防止重复支出。

假设鲍勃有100美元,他想使用相同的输入状态将80美元转给查理,将70美元转给丹。



科达这样的把戏是不允许曲柄的。 尽管该事务将通过验证检查,但唯一性检查将失败。

结论


由R3区块链财团开发的Corda平台并非纯粹使用区块链技术的例子。 Corda是面向金融机构的高度专业化的工具。

Source: https://habr.com/ru/post/zh-CN452258/


All Articles