1. Germ节点

Germ节点是构建在区块链以上的去中心化二层网络的节点,Germ节点间不通过直接通信来达成共识,而是依赖底层区块链的共识机制来保证自身各个节点间的一致性。每一个Germ节点都能独立处理对于DID的增删改查的请求。其中,对于增删改的请求,Germ节点会把请求数据汇聚后打包,发送到IPFS中,从而获取到标识该请求包的唯一地址,并把该地址上链。从而所有连接到同一个区块链网络的所有Germ节点都能够获取到这一个事件,并进行响应。

2. 架构

3. Request

Request是用来描述一个具体的增删改DID的的请求的JSON结构:

{
    "did":"",
    "document":{},
    "operation":"",
    "timestamp":253146316,
    "signature":""
}
  • did: 该请求操作的DID;
  • document: 该请求对应的DID document,对于delete操作为空;
  • operation: 具体的操作类型,支持: create, edit, delete
  • signature: 对于edit和delete操作,需要使用上一个版本的document中的recovery key对请求签名。

4. Package

Package是一个Request的有序列表:

[
    {
        "did":"",
        "document":{},
        "operation":"",
        "timestamp":253146316,
        "signature":""
    }
]

每个Germ节点收集自身接受的Request,当Request达到一定的数量或者等待一定的时间,就会把这些Request打包成Package,对Package进行压缩后,保存到IPFS,并把得到的在IPFS中的地址上链。

5. Germ智能合约

目前Germ与区块链的对接主要依赖智能合约,该智能合约的作用主要是维护一个Package的列表,从而保证在所有的Germ节点上都能获取到一致的Request列表,使得Germ节点间能够保持一致。

6. 持久化存储

由于链上不是直接存储DID以及对应的document,而是存储了Package在IPFS中的地址。因此,Germ节点在获取到Package并执行所有的Request后,把执行结果保存在持久化存储中,从而在处理解析DID document的请求时,可以直接从持久化存储中获取。