#tendermint #bft #cosmos #consensus #blockchain #command-line-interface

bin+lib tendermint-light-node

Tendermint light-node 将 light-client 库封装成一个命令行界面工具。它可以用来初始化和启动一个独立的光客户端守护程序,并暴露一个 JSON-RPC 端点,您可以从该端点查询光节点的当前状态

10 个版本 (4 个破坏性版本)

0.19.0 2021 年 4 月 7 日
0.18.1 2021 年 2 月 11 日
0.18.0 2021 年 1 月 29 日
0.17.0 2020 年 12 月 17 日
0.15.0 2020 年 7 月 20 日

#28 in #bft

Apache-2.0

2MB
32K SLoC

Crate Docs

查看 仓库根目录 以获取构建状态、许可证、Rust 版本等信息

光节点

Tendermint light-node 将 Tendermint 的 light-client 库封装成一个命令行界面工具。它可以作为一个独立的光客户端守护程序使用,并暴露一个 JSON-RPC 端点,您可以从该端点查询光节点的当前状态。

入门

前提条件

本简短教程假设您熟悉如何在您的机器上运行 Tendermint 全节点。要了解如何做到这一点,您可以查阅 tendermint 文档中的 快速入门 部分。

本教程还假设您已安装 git 和最新的稳定 Rust 工具链(见 https://rustup.rs/)。此外,jq 工具将使您处理 JSON 输出更加容易。

克隆仓库

要从源运行轻节点,您必须首先克隆此仓库

$ git clone https://github.com/informalsystems/tendermint-rs.git

然后导航到轻节点构建目录

$ cd tendermint-rs/light-node

配置

您可以通过配置文件配置轻节点的所有方面。一个示例配置可以在light_node.toml.example下找到。

如果您在您的计算机上运行Tendermint全节点,您可以简单地复制并使用它来开始

$ cp light_node.toml.example light_node.toml

请查看配置文件并根据您的需求进行编辑。提供的示例配置文件包含大量说明性注释,希望这些注释能为您提供足够的指导以配置您的轻节点。

主观初始化

假设您正在运行一个在回环接口上公开RPC端点的Tendermint全节点,您可以按照以下步骤主观初始化轻节点:

首先,您必须获取一个您想要信任的标头哈希和高度(主观)。为了我们的目的,您可以通过查询您正在运行的Tendermint全节点来获取一个。这里我们获取了高度2的标头哈希。

$ curl -X GET "https://127.0.0.1:26657/block?height=2" -H  "accept: application/json" | jq .result.block_id.hash                                              1515:15:26
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2155    0  2155    0     0   161k      0 --:--:-- --:--:-- --:--:--  161k
"76F85BEF1133114482FC8F78C5E78D2B1C1875DD8422A0394B175DD694A7FBA1"

现在您可以使用这个标头哈希通过以下方式主观初始化您的轻节点:

$ cargo run --  initialize  2 76F85BEF1133114482FC8F78C5E78D2B1C1875DD8422A0394B175DD694A7FBA1

请注意,第一次调用cargo run可能需要一段时间,因为这个命令还将编译轻节点及其所有依赖项。

运行轻节点守护进程

现在您可以通过简单地运行以下命令来启动您的轻节点:

$ cargo run --  start                             

如果一切正常,输出将类似于

 cargo run --  start                           17:56:31
    Finished dev [unoptimized + debuginfo] target(s) in 0.42s
     Running `/redacted/tendermint-rs/target/debug/light_node start`
[info] synced to block 20041
[info] synced to block 20042
[info] synced to block 20044
[info] synced to block 20046
[info] synced to block 20048
[info] synced to block 20049
[info] synced to block 20051
[info] synced to block 20053
[info] synced to block 20054
[...]

您可以通过按Ctrl+c来停止轻节点。

帮助

您会注意到一些配置参数可以通过命令行参数进行覆盖。

要获取完整概述、命令行参数和可用子命令,请运行

$ cargo run --  help

或在特定子命令下,例如

$ cargo run --  help start

JSON-RPC端点

当您有一个正在运行的轻节点时,您可以通过以下方式查询其当前状态:

$ curl localhost:8888 -X POST -H 'Content-Type: application/json' \
  -d '{"jsonrpc": "2.0", "method": "state", "id": 1}' | jq

或者您可以通过/status端点查询一个简短的摘要

$  curl localhost:8888 -X POST -H 'Content-Type: application/json'\                                                                        15:58:52
                                                             -d '{"jsonrpc": "2.0", "method": "status", "id": 1}' | jq

点击这里查看状态端点的预期输出示例
$ curl localhost:8888 -X POST -H 'Content-Type: application/json' \
  -d '{"jsonrpc": "2.0", "method": "status", "id": 1}' | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   364  100   317  100    47   1843    273 --:--:-- --:--:-- --:--:--  2104
{
  "jsonrpc": "2.0",
  "result": {
    "block_hash": "ED745723430944215F65ED78AD7DF9ED0AA8A2A3B465BF421E0BAF66AA55AA08",
    "connected_nodes": [
      "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE",
      "CEFEEDBADFADAD0C0CEEFACADE0ADEADBEEFC0FF"
    ],
    "height": 3850,
    "valset_hash": "74F2AC2B6622504D08DD2509E28CE731985CFE4D133C9DB0CB85763EDCA95AA3"
  },
  "id": 1
}
点击这里查看状态端点的预期输出示例

命令

$ curl localhost:8888 -X POST -H 'Content-Type: application/json' \
-d '{"jsonrpc": "2.0", "method": "state", "id": 1}' | jq 
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                               Dload  Upload   Total   Spent    Left  Speed
100  1902  100  1856  100    46   164k   4181 --:--:-- --:--:-- --:--:--  168k

示例输出

{
  "jsonrpc": "2.0",
  "result": {
    "next_validator_set": {
      "validators": [
        {
          "address": "AD358F20C8CE80889E0F0248FDDC454595D632AE",
          "proposer_priority": "0",
          "pub_key": {
            "type": "tendermint/PubKeyEd25519",
            "value": "uo9rbgR5J0kuED0C529bTa6mcHZ4uXDjJRdg1k8proY="
          },
          "voting_power": "10"
        }
      ]
    },
    "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE",
    "signed_header": {
      "commit": {
        "block_id": {
          "hash": "76F85BEF1133114482FC8F78C5E78D2B1C1875DD8422A0394B175DD694A7FBA1",
          "parts": {
            "hash": "568F279E3F59FBE3CABEACE7A3C028C15CA6A902F9D77DDEBA3BFCB9514E2881",
            "total": "1"
          }
        },
        "height": "2",
        "round": "0",
        "signatures": [
          {
            "block_id_flag": 2,
            "signature": "sN3e6bzKLeIFNRptQ4SytBDLZJA53e92D6FWTll5Lq8Wdg4fVzxya6qx3SHFU82ukuj8jKmBMkwTTJsb8xThCQ==",
            "timestamp": "2020-07-10T12:39:06.977628900Z",
            "validator_address": "AD358F20C8CE80889E0F0248FDDC454595D632AE"
          }
        ]
      },
      "header": {
        "app_hash": "0000000000000000",
        "chain_id": "dockerchain",
        "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F",
        "data_hash": null,
        "evidence_hash": null,
        "height": "2",
        "last_block_id": {
          "hash": "F008EACA817CF6A3918CF7A6FD44F1F2464BB24D25A7EDB45A03E8783E9AB438",
          "parts": {
            "hash": "BF5130E879A02AC4BB83E392732ED4A37BE2F01304A615467EE7960858774E57",
            "total": "1"
          }
        },
        "last_commit_hash": "474496740A2EAA967EED02B239DA302BAF696AE36AEA78F7FEFCE4A77CCA5B33",
        "last_results_hash": null,
        "next_validators_hash": "74F2AC2B6622504D08DD2509E28CE731985CFE4D133C9DB0CB85763EDCA95AA3",
        "proposer_address": "AD358F20C8CE80889E0F0248FDDC454595D632AE",
        "time": "2020-07-10T12:39:05.977628900Z",
        "validators_hash": "74F2AC2B6622504D08DD2509E28CE731985CFE4D133C9DB0CB85763EDCA95AA3",
        "version": {
          "app": "1",
          "block": "10"
        }
      }
    },
    "validator_set": {
      "validators": [
        {
          "address": "AD358F20C8CE80889E0F0248FDDC454595D632AE",
          "proposer_priority": "0",
          "pub_key": {
            "type": "tendermint/PubKeyEd25519",
            "value": "uo9rbgR5J0kuED0C529bTa6mcHZ4uXDjJRdg1k8proY="
          },
          "voting_power": "10"
        }
      ]
    }
  },
  "id": 1
}

依赖项

~29–43MB
~808K SLoC