Corda技术理解之节点间简单交互过程

节点之间需要通信,可是怎么进行的呢?
  1. 官方技术文档中的描述

Inter-node communication

Nodes communicate by passing messages between flows. Each node has zero or more flow classes that are registered to respond to messages from a single other flow.

Suppose Alice is a node on the network and wishes to agree a ledger update with Bob, another network node. To communicate with Bob, Alice must:

Start a flow that Bob is registered to respond to
Send Bob a message within the context of that flow
Bob will start its registered counterparty flow
Now that a connection is established, Alice and Bob can communicate to agree a ledger update by passing a series of messages back and forth, as prescribed by the flow steps.


  1. 官方技术文档的图片
    Corda技术理解之节点间简单交互过程

  1. 时序图说明
AliceBobNotaryTed创建交易,并签名,发送Notary节点是一定要启动的。因为它需要参与每一笔交易,但是它不一定会验证每一笔交易。只有交易有InputState的时候,进行验证。Alice创建一个合理的交易并签名,然后发送给Bob。接收交易,验证,签名,发送Bob接收到交易,并验证交易,然后签名,在发送给AliceTed节点没有参与Alice和Bob的交易,所以它不需要存储一条交易记录Alice接收到交易并验证Bob的签名。How are you,Ted?Not bad.AliceBobNotaryTed

  1. 详细对流程图进行描述

请问这个过程发送了什么?

发起交易的节点需要建立Session,并来回地进行交互,需要验证交易数据,验证对方的签名。


这个过程有什么需要注意的地方?

这个过程中Notary节点是一定参与了的。但是参与不代表一定要做事情。只有当交易有Inputstate的时候,Notary进行双花验证。


请问交易的数据结构是什么样的?

Corda为了保证交易的隐私性。交易数据采用默克尔树结构进行处理,把敏感信息进行隐藏。


请问交易的安全是怎么保证的?

Corda使用TLS进行通信,保证交易在传输过程中的安全。每次交易都生成一个随机**进行加密传输。并且,参与交易的节点会验证交易数据信息,并且使用非对称密码的私钥进行签名。


请问参与交易的节点是怎么验证交易数据信息的?
//TODO
猜测,通过我们开发过程中合约代码处,获取到交易的所有数据信息,拿到数据的每个小模块,比如时间窗口,比如参与者的签名。看交易的时间是否满足时间窗口,Corda的交易时间定义不严格,它只需要你满足在某个具体时间之前,或者两个时间之间,或者么某个具体时间之后都是有效的。看参与者是否签名了,在建立交易的时候,我们通过Command定义好需要哪些节点进行签名的,如果某个节点并没有签名,那么此交易就是无效的。


请问Corda的最最核心的概念是什么?

那就是Flow了。Corda的RPC访问Node,并开启flow。Corda的节点间交互也是通过flow来进行的。而且我们所定义的业务逻辑都是在flow中写的。


请问通信过程中用到了什么消息队列技术?

Corda用到的是ActiveMQ来做的消息代理的。


请问Corda创造了什么新技术吗?

Corda没有创造新的技术。它是受到区块链技术的启发而创造的一个项目。

所以他是什么呢?他是什么不重要。是区块链也好,类区块链也好,反正他就是来解决传统金融领域的记账对账的繁琐问题。有了Corda技术。在一个网络中,加入大家公认的监管节点Notary。因为Notary做任何操作都是透明的,所以这个Corda网络中任何节点都相信它。银行间某个具体的用户进行转账了,此交易记录直接记录到节点银行下的数据库中,这样就无需对账处理了。

所以没有创造新的技术。

它是站在巨人的肩上(Java社区开源的代码)写的一个只是运用于金融领域的一个项目。

它是站在巨人的肩上(区块链技术),借鉴了比特币UTXO模型进行转账而且不是账户余额模型;金融领域对隐私有很大要求,于是选择了参与方记录交易信息(比特币是全局广播,而Corda是参与者广播,当然也可以给其他节点发送此数据)。

它是站在巨人的肩上(共识算法)使用分布式共识算法如Raft,PBFT等,它支持扩展共识算法。

它也创建了很多新的概念。Notary,Time-window,Oracle等概念。它只是想解决它想解决的问题而已。

小结
  1. 首先,通过引入官方技术文档对交互过程的描述和一个动态的图片说明两个节点之间大致的一个交互流程。
  2. 其次,通过时序图再次说明,交互过程是怎样的,主要是想添加自己的一些理解,比如加入了Notary节点,并阐述Notary干了什么,加入Ted节点是说明,它没有参与交易,它是不知道发送了这么一件事情的。
  3. 最后,通过自问自答的方式,对这个流程中涉及的一些知识说明,比如交易数据结构,交易过程如何保证安全,交易信息是怎么进行验证的。可能我的有些理解并不是正确的,后续会对这一系列的描述进行修正。