体验Hyperledger-Burrow-1

文档链接=>https://hyperledger.github.io/burrow/

github链接=>https://github.com/hyperledger/burrow/

Burrow是一个权限控制较为严格、以太坊EVM和WASM虚拟机支持、运行于Tendermint共识之上的区块链客户端。其主要由Monax贡献,并由Monax 和英特尔赞助。

其强调的设计理念包括:

  1. 防篡改的Merkle状态—Tamper-resistant merkle state
  2. PoS支持
  3. 链上治理原生支持
  4. 以太坊账户一览
  5. 可以根据每个帐户设置代码执行权限
  6. 事件流支持
  7. 智能合约事件弹出至SQL表记录
  8. GRPC和Protobuf支持
  9. Javascript SDK支持,客户端库可以生成代码来访问合约,生成的代码是静态的Typescript对象
  10. Keys服务,提供代理签名服务器
  11. Web3 RPC,兼容Ethereum主网的开发工具,如 Truffle、 Metamask、Remix

Burrow应用于多个区块链生产项目

初始化Burrow节点

https://github.com/hyperledger/burrow/下载可执行文件,本文以 ubuntu 环境为例。

1
./burrow spec -f2 -p2 | ./burrow configure --curve-type secp256k1 -s- --pool --separate-genesis-doc=genesis.json

./burrow spec 建立一个GenesisSpec作为GenesisDoc和configure命令的模板,f2是指2个full-accounts,p2是指2个participant-accounts。

--curve-type secp256k1 是指定加密曲线的类型。

./burrow configure -s- 通过使用GenesisDoc或GenesisSpec,创建密钥并创建配置文档。--pool 为名为burrowNNN.toml的所有共识节点(validators)编写配置文件。--separate-genesis-doc 将genesis文档投送至 JSON或者TOML文件。

  • validator-accounts 共识的参与者,需要抵押一部分资金

  • root-accounts 根账户

  • developer-accounts 开发者,功能很多和全节点很像

  • participant-accounts 参与者

  • full-accounts 全功能

启动Burrow节点

1
2
3
4
5
6
7
8
➜  script ./burrow start --config=burrow000.toml &
./burrow start --config=burrow001.toml &
./burrow start --config=burrow002.toml &
./burrow start --config=burrow003.toml &
[5] 12458
[6] 12459
[7] 12460
[8] 12464

网页端访问RPC服务

http://127.0.0.1:26759/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

Available endpoints:
//127.0.0.1:26759/account_stats
//127.0.0.1:26759/accounts
//127.0.0.1:26759/chain_id
//127.0.0.1:26759/consensus
//127.0.0.1:26759/genesis
//127.0.0.1:26759/network
//127.0.0.1:26759/network/registry
//127.0.0.1:26759/validators

Endpoints that require arguments:
//127.0.0.1:26759/account?address=_
//127.0.0.1:26759/account_human?address=_
//127.0.0.1:26759/block?height=_
//127.0.0.1:26759/blocks?minHeight=_&maxHeight=_
//127.0.0.1:26759/dump_storage?address=_
//127.0.0.1:26759/name?name=_
//127.0.0.1:26759/names?regex=_
//127.0.0.1:26759/status?block_time_within=_&block_seen_time_within=_
//127.0.0.1:26759/storage?address=_&key=_
//127.0.0.1:26759/unconfirmed_txs?maxTxs=_