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的请求时,可以直接从持久化存储中获取。