天天看点

Quorum简介&部署简介账户/密钥管理隐私状态验证交易和合约隐私 (Transaction and Contract Privacy)参考

文章目录

  • 简介
  • 账户/密钥管理
  • 隐私
    • 私有交易管理器 (Private transaction Manager)
    • enclave
    • 公有/私有状态
  • 状态验证
  • 交易和合约隐私 (Transaction and Contract Privacy)
  • 参考

简介

GoQuorum基于geth,在其基础上增加了一些联盟链需要的组件,主要包括以下几点:

  1. 使用Raft或者Istanbul BFT共识算法,而不是PoW。
  2. 加入了准入机制,而不是任何节点都可以加入网络。
  3. 修改了区块产生逻辑:使用

    global public state root

    替换了

    global state root

    。(TODO)
  4. 修改了区块验证逻辑:
  5. State Patricia trie

    分成了两个:

    public state trie

    private state trie

  6. 修改了区块验证逻辑以支持private transactions。
  7. 修改了创建transactions的逻辑,支持private transactions。
  8. 移除了gas的费用(但保留了gas)。
Quorum简介&部署简介账户/密钥管理隐私状态验证交易和合约隐私 (Transaction and Contract Privacy)参考

账户/密钥管理

用户提供公私钥。

账户地址是公钥

keccak256

哈希的后20个byte。

隐私管理器使用公钥作为目标节点的标识(

privateFor

字段)。

隐私

在GoQuorum中,隐私指对于private transactions,只对相关的参与者可见,其它参与者不可见。

私有交易管理器 (Private transaction Manager)

**Tessera**

指 Quorum 中的私有交易管理器:

  • 存储、访问加密后的交易数据。
  • 与其它 Tessera 节点交换加密后的payload。
  • 不能访问私钥
  • 使用 enclaves 实现密码学相关功能
  • stateless/restful

enclave

密码学技术是分布式账本的基石,Quorum将很多密码学功能(对称密钥生成、加解密)委托到了 enclave 中。

公有/私有状态

Quorum支持两种状态:

  1. 共有状态 (

    public state

    ):网络中的所有节点都有权访问
  2. 私有状态 (

    private state

    ):有权限的节点才能访问,private transaction 的状态

二者的不同在于 transaction 的 payload 是否加密。对于 private transactions ,无关节点没有 payload,因此每个节点需要维护两个 state 。

状态验证

为了保证节点同步,block 需要包含 public transaction 的 root hash。对于 private transactions,不可能达到全局同步(因为有些节点不含private transactions),因此需要使用

eth_storageRoot

这个 RPC,指定 private smart contract 地址和区块高度,如果所有相关的节点完成同步,那么将得到相同的 root hash。

交易和合约隐私 (Transaction and Contract Privacy)

Quorum 如何实现交易隐私:

  1. client 可以通过指定

    privateFor

    字段来限制交易的可见者
  2. 替换 transaction 的 payload 为 payload 加密后的 hash 值
  3. 使用隐私管理器 (Privacy Manager) 链下存储加密的数据

#Private Transaction Manager

两个组件:

  • transaction manager
  • enclave

启动node之前,通过设置环境变量

PRIVATE_CONFIG

来支持 private transaction.

PRIVATE_CONFIG

可以设置为 privacy manager 的 ipc socker,或者设置为 TOML IPC 的配置文件。

socket = "tm.ipc"
workdir = "path/to/ipc/file"
dialTimeout = 1
requestTimeout = 5
responseHeaderTimeout = 5
           

#Private Transaction Lifecycle

参考

  1. https://docs.goquorum.consensys.net/en/stable/Concepts/Architecture/