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 神奇豆子
每月 68 次下载
180KB
2.5K 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