渴望成为Corda专家吗?以下Corda教程将涵盖您开发Corda应用程序所需的所有知识.
区块链已经走了很长一段路。分布式分类帐技术的思想解决了当前组织所经历的许多难题。主要目标是无需投入数百万美元即可变得更加高效,安全和可扩展.
Corda是提供全球区块链生态系统的开源区块链平台。它通过使用智能合约提供严格的隐私。它还可以帮助企业直接进行交易,并提供一种经济高效的方法来简化业务运营.
主要区别在于Corda处理交易的方式。这是一个DLT,希望通过不与每个对等方拥有完整的分类账来提高区块链的可行性,速度和可伸缩性。如果可以在不通知整个网络的情况下在两个对等点之间完成事务,那么Corda将使用该方法。它还设计为包括其他各方,这些各方可以轻松地跟踪交易并查看其有效性。这是一种用于企业的分布式分类帐技术.
现在就开始我们的Corda区块链教程!
快来了: Corda开发课程初学者指南
Corda开发教程的结构?
我们将详细介绍Corda。在大多数部分中,我们将尝试涵盖重要的Corda概念.
我们将涵盖的关键概念包括以下内容.
- 状态
- 合同
- 流节
我们的教程将创建一个IOU应用程序。 IOU代表“我欠你”。这是一个人拥有另一个人的钱这一事实的简单表述。稍后我们将更详细地介绍该概念。.
为简化起见,我们将使用Kotlin编程语言。作为一个学习者,如果您了解Kotlin,那就太好了,但这不是必须遵循本教程的必要技能。.
工具
在开始为初学者提供Corda教程之前,我们将需要以下工具。还有一些开发人员真正喜欢经常使用的区块链工具。但是,我们今天不讨论它们.
- 科特林
- 摇篮
- 吉特
- IntelliJ
- 命令行
从集成开发环境开始,我们将使用IntelliJ。它将简化我们的发展.
Corda教程
什么是科尔达?
最好将Corda区块链定义为通过提供可互操作的区块链网络来解决业务问题的开源。其主要功能包括严格的隐私,效率和使用智能合约技术的直接交易.
Corda中使用的智能合约可以使用JVM语言或Java编写。 Corda平台中的dApp被称为CorDapps。而且,它们为点对点节点网络提供了使用公证基础架构的能力。该基础结构用于验证交易和对交易进行排序,而无需向网络上的每个对等方广播交易详细信息.
区块链使用的另一个重要组件包括Flow框架,该框架管理参与者之间的谈判和沟通.
了解Corda Ledger
Corda Ledger与传统区块链技术使用的分类系统不同。因此,我们需要清楚地了解它的工作原理,并从功能角度和数据角度对其进行理解。.
Corda分类帐的工作方式类似于图表。图中的所有节点都直接或通过其他一些节点相互连接。如果需要,所有节点都可以相互通信。使用该图意味着无需在全球范围内广播交易.
节点发现
那么,节点如何相互发现?他们使用网络图互相查找。您可以想到它,类似于电话簿。网络地图包含用于定位这些服务中每个服务的元数据,因此为地图发现提供了一种不错的方法.
它是如何工作的?
非全球广播区块链网络中的最大挑战是共识。因此,节点如何相互了解并验证该信息?
答案是共同的事实。每个节点都以某种方式与任何其他节点重叠。共享的事实存储在Corda分类帐中,然后可用于验证信息。科尔达分类帐包含这些集合中的一组。由于没有中央节点,因此这些节点在需要验证事物时充当代理。为了存储该信息,每个节点都有一个包含无法更改事实的保管库。这就是开发人员实施区块链的方式.
状态
Corda区块链中的状态是不可变的。它们用于存储在特定时间点有关交易,协议或合同的共享事实.
听起来是技术性的吗?让我们尝试用简单的词来分解它.
共同的事实
让我们两个人使用Corda分类帐。我们命名为Alpha和Bravo.
他们两个都有共同的事实。共有的事实是一个IOU(我拥有您)。当借方由于贷款提供者而有钱时,将使用IOU。为了使事实共享,它们在IOU中都具有相同的共享信息.
代表一切
状态可以用来表示任何东西。这意味着它可以为不同的corda用例存储任何形式的信息。作为开发人员,您可以使用州来存储KYC信息,金融工具,银团贷款等.
同样,状态可用于存储多个属性。但是状态是有局限性的。局限性在于,一旦为状态指定了类型,就不能更改其类型。如果您创建了一个IOU状态,那么它将在余下的时间里声明IOU状态.
不变且不断发展
状态被创建为不可变的。但是,它们的不变性关系到时间。在给定的时间呈现状态.
这意味着除了原始状态外,还可以创建一个新状态。当需要对状态进行新的更改时,将完成此操作。然后将旧状态称为历史状态.
例如,如果Alpha还清了欠Bravo的债务,则将以Alpha已清算债务的事实为基础,创建一个新的州。同样,如果状态完成,则IOU将过期。简单来说,在这种情况下,状态的生命周期如下.
- 创建了第一个状态来展示Alpha欠Bravo的债务。该州还共享有关IoU的更多信息,包括日期,时间,利率,借出的金额以及IoU所需的其他有用信息.
- 现在,当Alpha解决债务时,将创建一个新状态来更新新信息。旧状态不会改变,因为它是不可变的.
- 现在,两个用户之间共享的事实中更新了新状态.
- 现在,旧状态被称为历史性的。单个交易中可能有多个历史状态。这可能导致创建一系列状态.
- 将创建一个引用最新状态的序列头。另外,最新状态也称为未消耗状态.
阅读更多:Hyperledger vs Corda vs以太坊比较指南
准备好开发环境
现在,按照dApp开发指南,该环境应该已经为Corda开发教程做好了准备。您需要以下工具才能上手.
- Oracle JDK 8 JVM – v8u171或更高版本.
- 吉特
- IntelliJ IDEA
克隆Git存储库
开始我们旅程的最好方法是在我们的开发环境中运行一个CorDapp示例。好消息是Corda提供了一个示例CorDapp,您可以在本地下载并运行它.
您可以使用git clone命令在本地克隆存储库,如下所示.
git克隆 http://github.com/roger3cev/corda-training-template.git
对于本教程,我们将使用IntelliJ导入git存储库。打开IntelliJ。完成后,您将看到从版本控制中检出的选项。单击它,然后在您的计算机上克隆存储库.
您可以选择保存项目。您将在下面找到项目存储库.
在右下角,您会看到一条通知,说导入Gradle Project,如下所示。对于我们的Corda教程来说,重要的是.
单击“导入Gradle项目”。
您还需要设置Project SDK。转到项目设置,然后选择最新版本的Java。就我而言,它设置为Java 11.0.5.
如果发现任何错误要运行,则应升级Gradle并使其导入必要的存储库以使其正常运行。这样做需要一些时间。因此,请坐在后座等待其完成.
对我来说,花了大约20分钟才能完成所有Gradle依赖项更新.
让我们快速浏览一下Corda教程项目的结构。我们的主要存储库是src文件。当我们使用Kotlin时,我们将使用Kotlin-source文件夹;您会在下面找到src文件夹。请不要将其与java-source文件夹混淆.
在这里,您将在训练文件夹中找到所有必需的文件。还有一个“测试”文件夹,其中包含应用程序的测试单元.
我们需要了解的另一个重要文件是IOUState.kt。它位于培训内 > 状态.
使状态单元测试正常工作
IOUState类看起来非常基础。尚未完成。我们将使用测试驱动的开发方法来开发课程并使其准备就绪.
当涉及到现代开发实践时,测试驱动的开发是一种很好的方法。从一开始就可以帮助解决错误或其他问题.
因此,您下载的模板已经针对每个类别(包括合同,流程和状态)进行了相应的测试.
首先,我们需要进行测试 > 科特林> 网 > 科尔达 > 训练 > 状态 > IOUStateTests
在这里,您会发现已经编写的测试。它还带有大量文档。 R3 Corda团队花了很多时间来创建模板.
您需要取消注释该部分,如下所示,以进行单个测试.
选择代码,然后按Ctrl + /取消注释。如果使用MAC,请使用CMD + /取消注释.
现在,我们该进行单元测试了.
由于我们的IOUState类几乎为空,因此测试将失败,并且您将收到以下测试错误.
如您所见,这就是说Kotlin-source:test由于NoSuchFieldException而失败。这意味着测试期望没有发现任何数量的变量.
要修复它,我们需要返回到IOUState.kt文件并对其进行编辑。如果您知道如何构建区块链应用程序,那么对您来说将是一件容易的事.
在继续之前,我们需要更好地了解Kotlin。为了弄清楚我们将要编辑的代码,最好进行介绍。 Kotlin是一种密集的编程语言。另外,Kotlin还将转换为JVM虚拟机,因此在我们的教程中使用它应该没问题.
- 数据类IOUState→此关键字意味着我们定义了一个名为“ IOUState”的数据类。
- val数据→变量声明。字段名称是数据
- String =“数据”→如果未定义,则定义数据变量的默认值.
- ContractState→接口
如果您根据测试对IOUState.kt文件进行了所有更改,则IOUState类将如下所示.
资料类别 IOUState(值 金额:金额,
值 贷方:聚会,
值 借款人:当事人,
值 已支付:金额=金额(0,金额。代币),
覆盖值 linearId:UniqueIdentifier = UniqueIdentifier()):LinearState {
/ **
*此属性保存可以在有效事务中“使用”此状态的节点列表。在这种情况下,
*贷方或借款人.
* /
覆盖值 参加者:清单 得到()= listOf(贷方,借款人)
/ **
*建立交易以结算和转移借条时的辅助方法.
* – [支付] 将一笔金额添加到已支付的财产中。它没有验证.
* – [withNewLender] 使用新指定的贷方创建当前状态的副本。转让时使用.
* /
乐趣 支付(amountToPay:金额)=复制(已支付=已支付.plus(amountToPay))
乐趣 withNewLender(newLender:Party)=复制(贷方= newLender)
}
现在,您应该能够根据上面的评论添加辅助方法.
想要成为Corda专家吗?这是R3 Corda认证指南,将指导您完成认证过程.
Corda联系方式
我们了解到,国家可以演变成新的国家。开发人员可以使用合同控制账本状态的演变。在本节中,我们将详细了解合同.
由于R3 Corda不依赖于向整个网络广播消息,因此它针对每种状态类型采用了通用的交易验证定义。这样,Corda网络将验证交易并获得共识。与其他区块链记录交易的方式非常相似.
Corda合同是通过功能实现的。您可以将状态视为数据存储单元和合同,这是一种验证数据及其状态更改的方法。这些验证功能特定于状态类型.
为了确保状态可以被验证并且可以使用,每个状态都需要引用合同.
每个合同包含两个项目,包括合同代码和法律散文.
要了解它,让我们看一下下图.
如您所见,合同包含两个项目,并且在该状态下,该代码有一个IOU合同参考。.
法律散文: 法律散文被用作协议法律合同的参考。它用于确保在发生纠纷时可以使用现有的法律框架和司法系统.
Corda合同的其他主要功能包括以下内容
- 多个合同可以引用一个合同。此外,合同可以包含多种状态类型
- Corda利用验证功能来验证提议的交易
- 验证方法的签名如下
- 有趣的验证(tx:交易):单位
- 验证方法通过执行所有约束来验证事务。如果约束失败,则将引发异常;否则,将抛出异常。否则,交易将被视为有效.
- 验证功能是确定性的.
区块链模板还包含Corda合同的代码。您还应该处理类似于各州的Corda合同。如果您去了Corda测试部门,然后在合同类中添加了所需的代码,这将有所帮助。.
Corda交易
我们的下一站是Corda Transactions。是使状态改变成为可能的事务.
那么,什么是交易?最好将其定义为包含输入状态引用(0或更多)的容器。它们还会产生状态(0或更多).
事务使多个对等方可以实时相互交互,从而使网络能够发挥最佳性能。这样,两方就可以进行原子交换而不会妨碍其他对等活动。同样,交易本质上是原子的。这意味着交易永远无法减少或分割.
还有三种交易类型:保险,更新和退出。每个人都有自己的议程。让我们在下面列出它们.
- 保险→建立新状态
- 更新→更改状态属性
- 退出→从分类帐中删除状态
科尔达流
Corda Flows是对等方执行(执行)成功交易所需的步骤.
该流程确定CorDapp核心业务逻辑。它负责确保以正确的顺序和正确的参数执行事务。由于交易本质上是复杂的,因此需要流程以确保一切按预期进行.
流量控制可确保何时进行通信,进行何种通信以及与谁进行通信.
这与其他分布式分类帐技术完全相反,后者侧重于将交易详细信息广播到整个网络。 Corda在点对点交易中蓬勃发展,其中交易需要具有两个重要参数,即发送方和接收方.
您应该了解的关键事项
- 流程可以在几秒钟内完成,也可能需要几天才能完成
- 他们是完全自主的
- 流程在找到等待响应之前就进入睡眠状态
- 流程遵循流程框架,该框架为开发人员提供了一种机制,以确保正确的状态机开发.
- 流可以成对或单向
- 开发人员还可以对子流进行编码,以使代码更简单
是否想成为一名专家?这是有关如何在Python中构建区块链的指南.
共识
到目前为止,在我们讨论的所有激动人心的事情中,Corda特别之处在于它如何达成共识。 Corda采用独特的方法,因此使其对于企业可行.
首先,Corda利用两种共识算法。它包括以下内容
- 唯一性共识→这种共识方法可确保总账中不会发生任何冲突
- 验证共识→验证共识可以处理交易,并确保按照合同代码不会发生冲突。它促进了网络内共享状态的演进.
关于“ Corda共识”,您应该注意的关键事项:
- 唯一共识可确保分类账更新始终是唯一的。而且,它可以确保进行更新时分类帐有效.
- 验证共识可确保更新有效.
Corda节点
我们将在这里讨论的Corda的最后一部分是Corda节点。 Corda Node是Corda的高级视图.
那么,Corda节点到底是什么?
Corda节点是在Java虚拟机中运行的实体。它涉及以下内容
- 它提供存储服务和保管库
- SQL DB支持保管库和存储服务
- 专用文件夹用于存储附件
- 提供自定义功能和称为CorDapps的内置扩展
- 提供RPC客户端框架
这就是Corda节点的样子.
如您所见,它包含运行Corda网络的所有必要方面。它们与流程交互并提供自定义的CorDapp功能.
结论
这使我们结束了Corda教程的结尾。在这里,我们查看了Corda,并试图看到一个IoU CorDapp。我们使用Corda GitHub存储库上提供的模板培训讨论了其不同部分.
我们的重点是开始使用Corda而不试图解释Corda提供的所有内容。为此,您始终可以使用Corda文档。我们还将开设有关Corda开发教程的课程。如果您需要完整的开发指南,一定要检查一下.