法定人数区块链
Quorum 是一个“以企业为中心”的以太坊区块链,它试图改进区块链技术。第一代区块链虽然提供了可扩展性、点对点网络、互操作性、透明性等特性,但仍不完美。世界各地的研究人员都在努力改善区块链的状态。 Quorum 是摩根大通的心血结晶,该公司旨在推动金融行业的区块链技术。
需要法定人数
目前,金融部门的信息由多个组织处理,但金融部门仍然缺乏透明度、信息控制和安全性。传统的区块链即使提供了可追溯性和不变性,也不能满足金融部门的要求。需要一种通过自动化对区块链提供私有控制的系统,该自动化可根据需要进行定制。
法定人数的特点
- 性能: Quorum 比比特币和以太坊更快。它每秒执行超过 150 笔交易。这是因为 quorum 使用了简单的共识机制。默认情况下,quorum 使用 RAFT 共识进行容错,IBFT 共识用于拜占庭容错,这比以太坊的工作量证明共识要快得多。
- 权限管理:它将参与限制在一组已知的节点,这些节点必须被配置为区块链网络的一部分,因此它不是对所有人开放,并且仅在由指定机构预先批准的参与者之间实施
- 消除交易定价:它消除了使用 gas 为交易增加成本的概念。不需要与在仲裁网络上运行交易相关的任何加密货币成本。 Quorum 代码最初是从以太坊分叉出来的,gas 本身的使用存在但设置为零。
- 更好的隐私: Quorum 提供链上公共和私人交易。公开交易类似于以太坊,而私人交易不向公众公开。它使用 Constellation 技术,在称为 enclave 的地方加密特定消息,并存储有关先前交易的信息。
- 资产管理:它允许实体在不通过第三方的情况下创建、管理和分发数字资产。这赋予了所有者如何管理其资产的自主权。
- 开源:它是一个开源项目,有 300 多名贡献者积极参与 Quorum 的开发。
法定人数的优势
- 共识算法:它使用基于多数投票的“Quorum-Chain”共识算法。但是,并非所有节点都能够投票。只有少数选定的节点被赋予在投票过程中投票的能力。这有助于验证交易。 Quorum 使用了伊斯坦布尔 BFT 和基于 Raft 的模型来实现更好的容错性。只有选定的参与者才能参与网络。
- 混合智能合约:智能合约设置为私有和公共,并使用solidity对其进行编程。一旦智能合约被设置为私有,它就无法转换为公共合约。同样,公共智能合约不能更改为私有智能合约,这使得它们更加安全。
- 性能: Quorum 提供更高的交易速度,因为通常使用私人合约并且私人合约比公共合约更有效。经测试,Raft 的性能优于伊斯坦布尔 BFT。
法定人数的缺点
- 可扩展性:随着用例变得更加复杂,Quorum 基于通道的隐私方法对隐私和可扩展性提出了挑战。
- 缺乏加密经济学:Quorum 不需要内置的加密货币,因为没有通过挖矿达成共识。使用 Quorum 开发本地货币或数字代币是不可能的。
- 缺乏支持: Quorum 的开发人员和贡献者较少,因此帮助和支持较少。
仲裁架构
让我们讨论一下 Quorum Blockchain 的架构细节。
- Quorum Node:它是一个命令行工具,是 Geth 的轻量级分支。它被配置为仅允许来自权限节点的连接,放弃了 P2P 连接。
- Constellation:它保留了事务管理器和飞地。它确保添加到区块链的信息以各种可能的方式保持安全。
- 交易管理器:它负责交易隐私,并通过存储允许的访问权限和其他重要数据来确保交易数据在处理过程中被加密以促进交易。
- Enclave:它提供不同的加密技术,例如参与者身份验证、交易历史和其他关键功能,以确保所有操作都以最佳方式执行,重点关注可扩展性。
基于 Quorum 的项目
- Alastria:一个多部门的西班牙财团。它促进了DLT半公共基础设施的建立。它旨在改善西班牙的服务,并将根据欧洲法规开展工作。
- VAKT:它提供了一个数字生态系统,使用户能够进行实物交易后处理。它可以称为“交易后管理平台”。通过这样做,它可以作为交易生命周期的单一来源,可以在需要时进行验证。它涵盖了端到端的贸易生命周期,不像其他解决方案只尝试解决某个部分而不是整个问题。
- Kimlic:这是区块链上的 KYC。它是一个去中心化的身份验证平台。它可以帮助初创公司立即将用户添加到他们的 Dapps 和加密货币交易所。这意味着用户只需完成一次KYC,即可在不同平台上使用。
- Blockoneiq-quorum:它是 Quorum 区块链的数据提供者,这是一个 Oracle 框架,将帮助 DLT 使用使用 Thomson Reuters 的智能合约生成和捕获的签名内容。
- Komgo:这是一个有趣的项目,有助于金融网络与其他用户和网络的集成。
Quorum 区块链的应用
- 疫苗接种追踪: Quorum 的一大特色是保存只有不同个人才能访问的记录。尼日利亚的一个联合国团队提出了一种使用 Quorum 创建安全数据库的方法,用于使用 blockTEST 进行疫苗接种。该数据库显示已经或尚未接种疫苗的儿童的记录。
- 供应链跟踪:各种行业和企业都在使用 Quorum 来跟踪其产品的供应。例如,星巴克使用 Microsoft 功能 Azure 来跟踪各个部分的咖啡生产。
- 定制私有区块链:任何私人金融机构都可以充分利用 Quorum 区块链,如银行或保险公司。许可性质有助于 Quorum 在所有类型的设置中使用。从一开始就进行定制的能力使其成为理想的候选人。
在 Google Cloud Shell 中使用 Docker 实现 Quorum 区块链
第 1 步:从 Google 开发者控制台以提供的编辑器模式打开 Google Cloud Shell。
第 2 步:安装 Docker。
第 3 步:通过运行这些命令克隆存储库,然后移至 quorum-examples 文件夹。
$ git clone https://github.com/jpmorganchase/quorum-examples
$ cd quorum-examples
$ PRIVATE_CONFIG=ignore QUORUM_CONSENSUS=raft docker-compose up -d
第 4 步:运行上述命令后,将运行 7 个容器,其中包含 7 个节点和 7 个事务管理器。至少需要 3 个节点。因此,通过运行以下命令打开 3 个终端并激活 3 个节点:
For node1:
docker exec -it quorum-examples_node1_1 geth attach /qdata/dd/geth.ipc
eth.accounts
eth.getBalance("0xed9d02e382b34818e88b88a309c7fe71e65f419d")
For node 4:
docker exec -it quorum-examples_node7_1 geth attach /qdata/dd/geth.ipc
eth.accounts
eth.getBalance("0xcc71c7546429a13796cf1bf9228bff213e7ae9cc")
For node 7:
docker exec -it quorum-examples_node4_1 geth attach /qdata/dd/geth.ipc
eth.accounts
eth.getBalance("0x9186eb3d20cbd1f5f992a950d808c4495153abd5")
第五步:创建智能合约(示例代码),复制代码,粘贴到任意geth控制台生成合约地址:
a = eth.accounts[0]
web3.eth.defaultAccount = a;
// abi and bytecode generated from simplestorage.sol:
// > solcjs --bin --abi simplestorage.sol
var abi = [{"constant":true,"inputs":[],"name":"storedData","outputs":
[{"name":"","type":"uint256"}],"payable":false,"type":"function"},
{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set",
"outputs":[],"payable":false,"type":"function"},
{"constant":true,"inputs":[],"name":"get","outputs":
[{"name":"retVal","type":"uint256"}],"payable":false,"type":"function"},
{"inputs":[{"name":"initVal","type":"uint256"}],"payable":false,"type":"constructor"}];
var bytecode = "0x6060604052341561000f57600080fd5b604051602080610149833981016040528080519060200190919050505b806000819055505b505b610104806100456000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632a1afcd914605157806360fe47b11460775780636d4ce63c146097575b600080fd5b3415605b57600080fd5b606160bd565b6040518082815260200191505060405180910390f35b3415608157600080fd5b6095600480803590602001909190505060c3565b005b341560a157600080fd5b60a760ce565b6040518082815260200191505060405180910390f35b60005481565b806000819055505b50565b6000805490505b905600a165627a7a72305820d5851baab720bba574474de3d09dbeaabc674a15f4dd93b974908476542c23f00029";
var simpleContract = web3.eth.contract(abi);
var simple = simpleContract.new(40002, {from:web3.eth.accounts[0],
data: bytecode, gas: 0x47b760},
function(e, contract){
if (e)
{
console.log("err creating contract", e);
} else
{
if (!contract.address)
{
console.log("Contract transaction send: TransactionHash: " +
contract.transactionHash + " waiting to be mined...");
} else
{
console.log("Contract mined! Address: " + contract.address);
console.log(contract);
}
}
});
第 6 步:一旦生成交易哈希,就可以使用以下命令获取合约地址:
eth.getTransactionReceipt(mention the txHash here as shown in picture)
第七步:部署合约地址。
var address = # mention your contract address here
var abi = [{"constant":true,"inputs":[],"name":"storedData","outputs":
[{"name":"","type":"uint256"}],"payable":false,"type":"function"},
{"constant":false,"inputs":[{"name":"x","type":"uint256"}],
"name":"set","outputs":[],"payable":false,"type":"function"},
{"constant":true,"inputs":[],"name":"get","outputs":
[{"name":"retVal","type":"uint256"}],"payable":false,"type":"function"},
{"inputs":[{"name":"initVal","type":"uint256"}],"type":"constructor"}];
var private = eth.contract(abi).at(address)
输出:这里节点 1 对节点 7 进行了私有交易,节点 4 与该交易状态完全隔离,因此只有节点 1 和节点 7 可以看到交易状态。