Corda技术理解之物理模型

Corda之物理模型

一,Corda的节点类型

Corda有三类节点类型,分别是Notary, Regular, Oracle。

  1. Notary
    Corda源码中有相应的逻辑代码,这部分逻辑代码只有Notary节点才会执行,这个Notary节点你可以理解为一个人,一个企业,一旦Notary节点加入这个网络,那么我们应该相信它。因为它的任务就是公证。那它做了什么呢? 保证交易的有效。那它又是怎么保证交易的有效呢?它保证交易的 InputState有效,它需要去查询此InputState在数据库中的的vault_state表中的状态,这个状态就表明此InputState是否被消费,以此防止双花 。它在数据库中对state(可以理解为Java的Object,也可以理解为现实生活中的事实)进行了持久化,并且有vault_state表,进行标记某个state是否有效。Corda不是区块链,它比区块链更健康,它希望在一个信任比较差的环境中,实现一个较好的信任,不保证100%。所以设计一个Notary节点来妥协。(具体原因暂时还不知道 //TODO)

  2. Regular
    常规节点。发起交易,签名交易,建立session与counterparty进行交互。当常规节点发起交易的时候,什么时候需要Notary节点参与呢?当建立的交易有InputState的时候就需要Notary参与。那此时Notary做了什么呢?Notary首先需要获取InputState在数据库中的状态,判断状态是未被消费的,然后Notary对交易进行签名(用它的私钥对交易信息签名)。

  3. Oracle
    Corda的应用场景就是金融领域。又因为现实生活中的利率随时都有细小的波动。需要Oracle确定这个波动利率究竟多大才是对的,而不是各个节点自由决定。它是怎么做的呢?Oracle(先知)节点配置好利率大小。当常规节点发起相关交易的时候,会与Oracle节点建立Session。获取到这个利率值,并作相应的计算。

二,Corda中的每个类型的节点都有的物理模型

  1. 特点
    如下表结构,属于Corda的每个类型的节点都有的物理模型,并且这些表中的随时都需要同步数据,就是这个网络中的参与者都需要有这些信息。

  2. 问题
    这个世界的任何应用在未来都需要隐私。Corda在这方面也做的好。在这个网络中的节点,当他们相互之间发起交易的时候,并不是全网广播的,只是参与者保存相应的记录信息即可。那既然是这样,如下表又为什么需要存储整个网络中的节点信息呢?我为什么不在需要的时候去拿呢?首先,交易的发起者,他肯定知道他要与谁发起交易。如果去一个网络管理的集中地拿信息,拿到自己想要的信息呢?其次,对于网络中任何一个节点实时同步整个网络中的节点信息是否有必要呢?

  3. 结论
    在如下表中满足某个具体的交易参与者信息即可。无论你是实时去集中地拿,还是实时同步到自己的数据库表中,数据库中的表数据是一定要有的,因为Corda源码会对这些信息进行查询使用。

  4. 物理模型
    Corda技术理解之物理模型_第1张图片

  5. 物理模型的说明与理解

    这6张表中的数据总是需要同步的(保证数据的一致性,也就是当A给B节点发送信息或者交易的时候,A需要B节点信息,不然A也不知道需要给谁发送交易信息)

    如果使用network-map-service的话,只需要一个Corda源码编译好的jar包,自己写的一个dapp,并放入到cordapps目录下,node.conf对节点信息(此节点的属性)进行配置。当节点启动的时候,会自动加载cordapps目录下的应用程序,就跟tomcat一样,把打好的jar包放入到webapps目录下。

    如果没有network-map-service的话,则需要同时生成多个节点,当节点启动的时候,表中就有相应的数据,就是上面6张表。

    有尝试单独生成节点,然后修改上面表数据情况,但是交易都没有正常进行,可能是数据不完整导致的。

    isMain意义是什么?

三,为了保证当节点在进行数据分发(发生交易过程中)宕机或者网络中断情况,Corda设计如下表:

Corda技术理解之物理模型_第2张图片

四,描述交易的物理模型

Corda技术理解之物理模型_第3张图片

  1. 物理模型说明与理解

    交易的值是blob类型,当交易的contract修改的时候,把修改的信息记录到node_contract_upgrades,但是没有体会它的作用。//TODO

    交易的字段就是我们的业务数据,在Corda采用实体state来描述的,它有index_output, transaction_id两个字段来描述。当一个交易的outputState有多条的时候,其中output_index是从0开始排序,这笔交易的transaction_id对每个state来说是一样。

    这条数据(state)是否有效,就是vault_states这个表的state_status来描述的,默认是0,如果是1的话,就是无效的,在Corda中的术语就是Consumed(被消费掉了)。

    如何来描述被消费掉了呢?对应我们理解来说,就是Command指明此交易的意图,我要Create或者Update,这仅仅是表达此交易的意图而已,真正怎么被修改,其实就是看你的交易中是否有InputState,一旦有了,则此InputState一定是原来数据库中一条记录(state),在交易中也并非是真实的实体信息,而是数据的reference。

五,如下4张表还不知道,它表达什么意思

Corda技术理解之物理模型_第4张图片

六,如下3张表,序列总是需要的。(无论是什么样的数据库)

在这里插入图片描述

  1. 物理模型说明与理解
    Corda支持事件触发任务调度,没有体验其过程。//TODO

    在Corda CE 中,采用手动建立hibernate_sequence,启动console没有任何报错,但是log中一致报有跟这个序列的错误,DDL错误。//TODO

七,Corda对附件的支持。因为金融领域有很多合同文本

Corda技术理解之物理模型_第5张图片

八,Corda对fiber的支持

Corda技术理解之物理模型_第6张图片

  1. 物理模型的说明与理解
    在Kotlin中有协程的概念,在Corda它使用fiber纤程来实现节点重启,仍然可以把交易写入库。
    但是这个node_checkpoints究竟有什么用呢?用到哪儿了?//TODO

九,Notary独有的3张表。

Corda技术理解之物理模型_第7张图片

  1. 物理模型的说明与理解
    raft和bft都是分布式系统中的共识算法,因为区块链技术就是分布式系统,数据的一致性也需要某个共识算法。
    这里并没有对每个字段都理解,有很多只是按照字面推测进行理解的。//TODO

小结

  1. 首先,描述了Corda的节点类型及其在Corda源码中的作用。也许Notary是Corda设计的一个亮点。也许世界无法做到公证公平,需要大家共同认可一个节点,它说什么是对的,是正确的,大家都相信。因为Corda说,它不是区块链,它比区块链更"健康"。
  2. 其次,描述了每个类型的节点都有的数据表结构。这6张表结构的作用就是记录整个网络中的节点的信息,这样交易发起时,P2P才能进行通信。以及后续的物理模型描述。这物理模型是Corda的系统表。
  3. 最后,说了Notary独有的3张表。Notary有26张表,有自己独有的3张表,描述了不同的共识算法机制,后续Corda支持其他的算法机制,相应地增加共识算法表。扩展性。
  4. 其他说明:普通节点有23张表,他们跟Notary都共有的表,二中描述的。这些节点信息总是需要同步的(分布式节点保证数据一致性,怎么保证的?)。涉及到的身份,证书,公钥,私钥,信息(通信),交易值,checkpoint_value都是blob类型的,在oracle中如果使用关键字distinct blob类型就会报错。

你可能感兴趣的:(Corda,Corda,物理模型,节点类型,Notary,Corda理解)