37 个版本 (8 个破坏性版本)

0.13.2 2022 年 10 月 17 日
0.12.0 2022 年 9 月 28 日
0.11.4 2022 年 7 月 30 日
0.5.5 2022 年 3 月 26 日

#2900 in 神奇豆子

Download history 4/week @ 2024-03-28 7/week @ 2024-04-04 70/week @ 2024-04-11

每月 68 次下载

MPL-2.0 许可证

180KB
2.5K SLoC

Rust 1.5K SLoC // 0.0% comments Shell 853 SLoC // 0.1% comments Jinja2 200 SLoC

themelio-node: Themelio 的参考实现

Themelio 是一个专注于安全性、性能和长期稳定性的新型公共区块链。 themelio-node 是 Themelio 在 Rust 中的参考实现。

安装

出于安全原因,直到我们拥有可靠的可重复构建基础设施,themelio-node 的唯一官方发行渠道是其在 crates.io 上的源代码包。

幸运的是,从源代码安装 themelio-node 非常简单。首先,确保您的机器上已安装 cargo。然后,只需运行

$ cargo install --locked themelio-node

这将产生一个可执行的 themelio-node,位于 ~/.cargo/bin/ 中,它应该已经在您的 $PATH 中。

硬件要求

最低要求

  • 1 核心CPU
  • 4GB 内存
  • 至少 200GB 的可用存储空间(SSD 不是必需的)
  • 10 Mbit/sec 的下载互联网服务
  • 4+ 核心CPU
  • 16GB 内存
  • 在快速设备上至少 200+GB 的可用存储空间(SSD、RAID 阵列等)
  • 50+ Mbit/sec 的上下行互联网服务

完整节点复制每个共识确认的区块,验证其内容,确保网络安全,同时在本地缓存整个区块链状态。运行完整节点有助于提高网络的安全性和(读取)性能。

有两种类型的完整节点

  • 审计节点占完整节点的大多数。它们复制和验证区块,但在共识中不投票。
  • 抵押节点是Themelio安全性的终极守护者,它们将代币锁定并参与共识。这与比特币等工作量证明区块链中的矿工类似。

审计全节点

在Themelio主网上

要在“主网”上运行审计器(目前尚不稳定,但具有持久的历史记录),只需运行

$ themelio-node

themelio-node然后开始同步区块链中的所有区块。这将花费相当长的时间(大约一天)并在~/.themelio-node/中存储大量数据。

在Themelio测试网上

要在非持久性测试网上运行审计器,在betanet期间,大多数契约开发和测试将在此进行,请运行

$ themelio-node --bootstrap tm-1.themelio.org:11814 --testnet

请注意,连接到测试网需要两件事

  • 连接到测试网引导节点(这是您的全节点首先与之通信的服务器)
  • 指定 --testnet,使用测试网验证规则

配置

您可以使用以下标志更改审计节点配置

--bootstrap <bootstrap>...
            Bootstrap addresses. May be given as a DNS name [default: mainnet-bootstrap.themelio.org:11814]

--database <database>                        Database path [default: /tmp/themelio-mainnet]

--listen <listen>                            Listen address

--testnet                                    Use testnet validation rules

--override-genesis <override-genesis>
            If given, uses this YAML file to configure the network genesis rather than following the known
            testnet/mainnet genesis

本地simnet支持

注意:很快将有一个工具可以自动生成这些配置。

我们可以通过以下三个选项的组合配置一个simnet——一个位于我们计算机本地的“虚拟”网络

  • --bootstrap 127.0.0.1:11814仅与我们自己引导,而不是任何远程节点

  • --override-genesis network-config.yaml,其中custom-config.yaml包含以下形式的自定义网络的配置

    network: custom02 # anything from custom02..custom08
    # specifies the "initial stash" of money in the genesis block
    init_coindata:
      # what address gets the initial supply of money
      covhash: t5xw3qvzvfezkb748d3zt929zkbt7szgt6jr3zfxxnewj1rtajpjx0
      # how many units (in millionths)
      value: 1000000
      # denomination
      denom: MEL
      # additional data in the UTXO, as a hex string
      additional_data: ""
    # specifies all the stakers with consensus power.
    # we need to specify ourselves in order to produce any blocks; "themelio-crypttool generate-ed25519" (install via cargo) can generate a keypair for us
    stakes:
      deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef:
        pubkey: 4ce983d241f1d40b0e5b65e0bd1a6877a35acaec5182f110810f1276103c829e
        e_start: 0
        e_post_end: 100000 # essentially never end the stake
        syms_staked: 10000 # does not matter
    # Initial fee pool
    init_fee_pool: 10000
    
  • --staker-cfg staker-config.yaml必须包含如下所示的抵押配置

    # secret key; must correspond to "stakes.dead[...]beef.pubkey" in the network config
    signing_secret: 5b4c8873cbdb089439d025e9fa817b1df1128231699131c245c0027be880d4d44ce983d241f1d40b0e5b65e0bd1a6877a35acaec5182f110810f1276103c829e
    # address for staker-network communication, this can be arbitrary
    listen: 127.0.0.1:20000
    # must be same as "listen"
    bootstrap: 127.0.0.1:20000
    # where block rewards are sent
    payout_addr: t5xw3qvzvfezkb748d3zt929zkbt7szgt6jr3zfxxnewj1rtajpjx0
    # vote for this fee multiplier (higher values charge more fees)
    target_fee_multiplier: 10000
    

--staker-cfg的更详细解释需要解释抵押和共识系统,如下

抵押全节点

在Themelio主网上

进行中

在Themelio测试网上

进行中

配置

进行中

贡献

感谢您考虑为Themelio源代码做出贡献!我们欢迎互联网上任何人的所有贡献。

对于较小的更改,只需分叉、修复并提交一个pull request。如果您想提出较大的更改,请务必与我们的开发团队在Discord上取得联系,以确保您的更改与Themelio的总体理念一致。这将可能节省您大量的时间和精力,并加快您更改的审查过程。

最后,确保您的代码遵循以下准则

  • 您的代码必须遵循官方Rust 风格指南
  • 您的代码必须按照官方Rust 文档指南进行文档化
  • pull requests必须基于并针对master分支
  • 提交信息必须具有描述性
  • 任何协议更改(无论是共识破坏性的还是不是)都必须从一个TIP开始(例如TIP-101

许可

项目的许可协议是Mozilla公共许可证,版本2。


源代码结构

themelio-node 是一个高度并发的程序,其中不同的任务由独立的 actor 执行,这些 actor 是拥有后台异步任务或线程的“活跃”结构体。它们与其他 actor 以及类似 Mempool 这样的“纯数据”类型并发运行和通信。在以下说明整个程序 数据流 的图中,它们表示为绿色框

themelio-node 中有以下主要类型

  • NodeProtocol核心节点 actor。它实现了核心审计员/全节点逻辑:通过基于 melnet 的审计员 P2P 网络(通过 themelio-nodeprot crate)与其他节点进行 gossip,以同步最新的区块链状态。
    • 将新块推送到 Storage
    • 将新交易推送到 Mempool;如果 Mempool 接受它们,则会进一步进行 gossip
    • Storage 中拉取数据以与其他节点进行 gossip
    • BlockIndexer 中拉取数据以回答有关币列表的查询(哪些币是这个地址“拥有”)
  • BlockIndexer 索引关于块的非必需信息。它不断地从 Storage 中拉取块,并对它们进行索引,跟踪有关哪些地址拥有哪些币等信息。
  • Storage 封装了系统中的所有持久存储。它不是一个 actor,因此不会启动任何数据流。
    • 使用 meshanina(用于稀疏 Merkle 树节点)和 boringdb(用于块和其他元数据)存储数据
    • Mempool 是一个非持久字段,用于跟踪 最有可能的下一个块。这基于现有的区块链状态加上网络中看到的未确认交易。
  • StakerProtocol核心质押者 actor,仅在质押者模式下启动。它通过一个单独的 melnet P2P 运行 Streamlet 共识协议(在 novasymph crate 中实现)。
    • 将带有其共识证明(签名多数)的新最终化块推送到 Storage(其中 NodeProtocol 将从中取出并传播)
    • 在提议一个块时,从 Mempool 中拉取候选者

指标

Themelio Labs 运营着一个全球的 Themelio 全节点网络 —— themelio-node 也可以编译为报告此网络的指标。

请在此处阅读 这里

依赖关系

~48–89MB
~1.5M SLoC