corda 发布版本: Corda V3.0

3.0版

Corda 3.0在这里,并带来了一个稳定的平台,合同和节点升级路径以及其他令人兴奋的功能。其目的是增强开发人员和用户体验,同时提供部署的Corda实例的长期可用性。此发行版将提供功能,以确保希望转移到预期版本的R3 Corda的用户可以无缝地执行此操作,并确保有状态的数据持久保存在保险库中,这些数据在新旧节点之间仍然可以理解。

特别感谢

与往常一样,我们非常感谢已经成长为围绕Corda的热情用户和开发人员社区。 作为一个开放的项目,我们总是感激从他们感受到的个人用户那里获得代码贡献 可以添加对他们自己和更广泛的社区有用的功能。

因此,我们要特别感谢

3.0中的重大变化

电线稳定性

电线的稳定性为开发人员提供了API稳定性为其代码所做的数据承诺。从这一点来看,由Corda系统生成的任何状态总是可检索的,可以理解的,并且在任何随后发布的版本(版本3.0及以上版本)中都可视为有效。

因此,系统可以安全部署,因为通过升级和更改可以随时访问有价值的重要信息。实际上,这意味着从这一点开始升级Corda网络的全部或部分升级将不需要重新播放数据; “它会工作”。

从Kryo转换到Corda自己的基于AMQP的序列化框架(这是一个旨在与有状态信息进行互操作的框架,随着开发人员对核心Corda平台上编写的系统的改进和改进)随着时间的推移,

AMQP序列化

AMQP序列化现在可用于对等通信以及将状态写入保管库。这种改变带来了序列化格式,可以使我们提高安全性和电线稳定性。这是使不同Corda节点版本在同一网络上共存并实现更轻松升级的关键先决条件。

有关AMQP序列化框架的详细信息,请参阅文档。这提供了框架的介绍和概述,而在文档中可以找到与序列化有关的更多关于对象演化的具体细节

此版本提供了我们从Kryo序列化到AMQP序列化的大部分过渡。这意味着Corda以前版本中记录的许多限制现在都已实施。

尤其建议您查看标题为“自定义类型”的部分。为了帮助转换,我们在本发行版中包含了对默认构建和实例化具有无法访问的私有字段的对象的支持,但不保证此支持将会延续到未来的版本中;上述链接中记录的限制是规范来源。

虽然这是Corda的重要一步,但这绝不是序列化故事的结束。我们为未来版本计划了许多新功能和工具,但认为尽早提供上述保证更加重要,以使社区能够更加自信地发展。

注意:尽管Corda稳定了对等通信和状态持久存储的有线协议和基础设施,但对于此版本,RPC框架将不在此保证范围内。将客户端和服务器上下文从Kryo转移到我们稳定的AMQP实现计划将用于下一版Corda

Artemis和桥梁

Corda现在已经实现了使用AMQP 1.0开放协议标准作为其对等通信协议的长期目标。这形成了一个强大而灵活的框架,我们可以通过该框架实现未来的增强功能,从而使Corda与第三方经纪商,语言和邮件系统之间的整合更加顺畅。此外,这也是正式定义Corda官方对等消息协议的重要一步,这是Corda协议更深入安全审核所需的一些内容。

新的网络地图服务

本版本引入了新的网络地图体系结构。网络地图服务已经过完全重新设计和实施,以实现未来增加的网络可扩展性和冗余度,减少运行时间运行开销,支持多重公证以及管理网络兼容区域(CZ)。

Corda兼容性区域被定义为在操作Corda网络中配置的参与者和服务(公证人,神谕者,门卫,网络地图服务器)的组合,以便彼此可互操作和兼容。

我们引入网络参数的概念来精确地指定网络中的节点需要同意的一组常量(或常量范围),以确保无缝的互操作。额外的安全控制措施确保所有网络地图数据现在都被签名,从而降低了网络运营商篡改地图的能力。

还支持一组节点在本地操作,这是通过将每个节点的签名信息文件复制到其他节点的目录来实现的。我们添加了一个引导工具来简化这个用例。

注意:这取代了Corda 1.0和Corda 2.0中的Network Map服务。

合同升级

在此版本中,对合同升级的支持已经大大延伸。

合同状态表明哪些附加的JAR可以使用constraints来定义和验证它们。在较早的版本中,唯一受支持的约束是哈希约束。这提供了与比特币和以太坊这样的公共区块链系统类似的行为,其中代码在部署后完全修复,以后无法更改。在Corda有一个升级路径,涉及到所有相关方的合作(如各州自己宣传的),但这需要明确的交易适用于所有州,并由各方签署。

以灵活性为代价,散列约束提供了最大限度的分散和最小信任。在Corda 3.0中,我们添加了一个新约束,一个_network parameters_约束,它允许兼容区域的操作员维护可接受合同JAR的列表,而不是硬编码。这允许以导入集中元素为代价的简单升级。

区域限制提供限制较少但更集中的控制机制。如果您希望升级应用程序,并且您不介意在其他业务原因需要事务处理时“即时”升级,则此功能非常有用。这些允许您指定兼容性区域的网络参数(请参阅文档)预计包含类名映射到允许提供该类的JAR的散列。升级应用程序的过程包括要求区域操作员将新JAR的散列添加到参数文件并触发网络参数升级过程。这涉及每个运行shell命令的节点操作员接受新的参数文件,然后重新启动节点。没有及时重新启动节点的节点所有者会有效地停止成为网络的一部分。

在运行合同验证码之前,测试合同验证码所在的JAR是否符合合同约束条件:

对于HashConstraint:所部署的CorDapp jar的哈希必须与在事务中找到的哈希相同。 对于ZoneConstraint:交易必须为每个合约国列入白名单附件。 如果此步骤失败,则遵循正常的事务验证失败路径。

Corda 3.0为将来的版本奠定了基础,当合同验证将针对附加的合同JAR进行时,而不是要求本地部署的CorDapp确定交易指定的确切版本。此功能的未来愿景将需要动态下载适当版本的智能合约及其在沙盒环境中的执行。

未来版本的Corda将添加对基于签名的约束的支持,其中由给定身份签名的任何JAR都可以附加到事务。这个最终的约束类型提供了所有需求的平衡:平滑的滚动升级可以在没有任何额外的步骤或事务被签名的情况下执行,代价是应用程序开发人员更加信任,并且在管理应用程序签名方面还有一些额外的复杂性。有关更新合同的更多信息,请参阅升级cordapps`文档。

测试API稳定性

已经进行了大量的工作来完善提供给测试CorDapps的API,使它们更简单,更直观,并且通常更易于使用。此外,这些API已添加到我们保证随时间推移稳定的API的 locked 列表中。这将在不同版本之间进行升级时大大提高生产力,因为您的测试环境将不会发生任何变化。

有关将旧测试转换为新框架的更多信息,请参阅3.0版的升级说明。

其他功能改进

清洁节点关闭

除了用户反馈,我们还得出结论,强烈需要有一个明确的转折点,在这个转折点可以关闭一个节点,而无需进行任何正在进行的交易,以便为升级目的提供干净的系统。因此,增加了流量消耗模式。激活时,节点进入静止状态,以确保在关闭之前不会开始新的工作并完成所有未完成的工作。

因此可以通过以下方式实现干净关闭:

1.订阅状态机更新 2.通过rpc.setFlowsDrainingModeEnabled(true)触发流量排空模式 3.等到订阅设置为阶段1时,让您知道不再有检查点 4.不管你想要关闭节点

X.509证书

它们现在有一个扩展名,用于指定证书所用的Corda角色,现在在验证代码中强制实施角色层次结构。这只对那些与外部PKI解决方案进行整合的人有影响;在大多数情况下,它由Corda透明地管理。

数据库表命名方案

为了与所有支持的Corda和R3 Corda数据库中的通用约定保持一致,某些表名已更改。

另外,对于从CommonSchemaV1.LinearState或CommonSchemaV1.FungibleState扩展的现有合同ORM模式,您需要将参与者的集合显式映射到数据库表。以前这个映射是在超类中完成的,但是这使得不能正确配置表名。所需的更改是添加覆盖var参与者:MutableSet <AbstractParty>? = null字段添加到您的类中,并添加JPA映射。

可插入的自定义串行器

随着AMQP的引入,我们引入了要求无缝可序列化的类,特别是Java类(与Kotlin相对),必须使用“-parameter”标志进行编译。但是,我们认识到这并非总是可行的,特别是在严格控制的业务环境中处理第三方库。

为了尽可能简单地解决这个问题,CorDapps现在支持为这些类创建可插入代理序列化器。这些应该写成这样,他们创建一个中间表示,Corda可以序列化,可以直接映射到非序列化类和可以从中直接映射。

SIMM评估演示中提供了许多示例

样本/ SIMM估值-演示/ SRC /主/科特林/净/金色/维加/插件/ customserializers

安全审计

这个版本的Corda是R3内部安全团队首先对选定的组件进行了新建安全审查流程的组件。安全审查将是一个正在进行的过程,旨在确保Corda的安全模型已经达到最高标准,并符合行业最佳实践。

作为此安全审查流程的一部分,对代码中基于HTTP的组件进行了独立的外部安全审计,并对其建议采取了行动。安全保证流程将与Corda平台并行发展,并将结合代码审查,自动化安全测试和安全开发实践,确保Corda实现其安全保证。

安全修复程序

由于潜在的隐私泄露,公证服务在尝试消耗相同状态两次时返回的错误对象发生了突变:“NotaryError.Conflict”不再包含发起第一次消费的一方的身份状态,并指定一个状态的消耗事务id的散列,而不是id本身。

如果没有这种变化,知道某个特定状态的参考,攻击者就可以构建一个无效的双重支出交易,并获取有关交易和消耗它的一方的信息。它可以通过猜测其输出索引来获得具有相关身份的转发事务图,并重新获取新获得的事务id。当使用匿名身份时,这也可以揭示资产所有者的身份。

小的变化

升级gradle到4.4.1。 现金支出现在允许通过一次API调用向多方发送多笔金额 *全面改进错误处理(RPC,流量,网络客户端)。

  • TLS身份验证现在支持混合的RSA和ECDSA密钥。
  • PrivacySalt计算速度更快,因为它不直接依赖操作系统的熵池。 众多的错误修复和文档调整。 删除了对Jolokia WAR文件的依赖。 *通过CRaSH外壳远程管理Corda节点现在可以通过SSH进行访问。
  • Corda现在允许通过SSL进行RPC调用的配置。有关更多详细信息,请参阅文档。
  • Corda现在可以配置为从外部数据库加载RPC用户凭据和权限,并且支持基于(Apache Shiro框架)[https://shiro.apache.org]的密码加密。 *公证人的配置已简化为单一的“公证人”配置对象。有关更多详细信息,请参阅文档。