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是面向金融机构的高度专业化的工具。