#解决方案 #矿工 #抵押 #波卡 #元数据 #Substrate #提交

bin+lib polkadot-staking-miner

用于提交基于 Substrate 链的 NPoS 选举解决方案的工具

5 个版本 (稳定版)

1.5.1 2024 年 7 月 3 日
1.5.0 2024 年 6 月 7 日
1.4.0 2024 年 4 月 12 日
1.3.1 2023 年 12 月 27 日
0.0.0 2022 年 11 月 23 日

#3#矿工

Download history 5/week @ 2024-05-22 138/week @ 2024-06-05 7/week @ 2024-06-12 131/week @ 2024-07-03

349 每月下载量

GPL-3.0 许可证

4.5MB
2.5K SLoC

波卡抵押矿工

Daily compatibility check against latest polkadot

这是使用 抵押矿工subxt 重新编写的,以避免对每个运行时版本的硬依赖。

二进制本身嵌入 静态元数据,在编译时生成 Rust 代码生成,由 subxt 提供

通过升级存储常量,由 polkadot-staking-miner 处理运行时升级,除非在 pallet-election-provider-multi-phaseframe_system 中有破坏性更改。

由于在使用 polkadot-staking-miner 连接到 RPC 节点时检测破坏性更改很困难,因此该存储库每天都会针对 polkadot master 执行集成测试,并且在大多数情况下,更新元数据 和修复编译错误就足够了。

还可以使用 info 命令来检查二进制中嵌入的元数据是否与远程节点兼容,请参阅 info 命令以获取更多信息

每个版本将指定其测试过的运行时版本,但无法提前知道它将与哪些运行时一起工作。

因此,订阅此存储库的版本或添加一些逻辑,以便在 polkadot-staking-miner 崩溃时触发警报非常重要。

使用方法

您可以使用以下命令查看帮助:

$ polkadot-staking-miner --help

监控

要“挖掘解决方案”并赚取奖励,请使用以下命令。在使用真实资金之前,请先在开发链上尝试此命令,因为可能会损失资金。

$ cargo run --release -- --uri ws://127.0.0.1:9944 monitor --seed-or-path //Alice --dry-run seq-phragmen

这是一个起点,将尝试计算新的解决方案集,这些解决方案集也会在提交之前验证该交易。

有关不同选项的更多信息,请运行

$ cargo run --release -- monitor --help

Dry run(干燥运行)

可以在本地挖掘解决方案而不提交任何内容到链上,但这仅在具有快照的块(当事件Phase::Signed → Phase::Off发出时)上有效。

$ cargo run --release -- --uri ws://127.0.0.1:9944 dry-run --at 0xba86a0ba663df496743eeb077d004ef86bd767716e0d8cb935ab90d3ae174e85 seq-phragmen

紧急解决方案

挖掘一个可以作为紧急解决方案提交的解决方案。

$ cargo run --release -- --uri ws://127.0.0.1:9944 emergency-solution --at 0xba86a0ba663df496743eeb077d004ef86bd767716e0d8cb935ab90d3ae174e85 seq-phragmen

Info命令

检查polkadot-staking-miner的元数据是否与远程节点兼容。

$ cargo run --release -- --uri wss://rpc.polkadot.io info
Remote_node:
{
  "spec_name": "polkadot",
  "impl_name": "parity-polkadot",
  "spec_version": 9431,
  "impl_version": 0,
  "authoring_version": 0,
  "transaction_version": 24,
  "state_version": 0
}
Compatible: YES

准备你的SEED

虽然你可以直接将种子传递给命令行或Docker,但这强烈不推荐。相反,你应该使用ENV变量。

你可以使用以下方式手动设置

# The following line starts with an extra space on purpose, make sure to include it:
 SEED=0x1234...

或者,为了开发,你可以将你的种子存储在.env文件中,该文件可以被加载以使种子可用

.env:

SEED=0x1234...
RUST_LOG=polkadot-staking-miner=debug

你可以使用source .env来加载它。

Docker

应尽可能保持Docker容器安全,特别是那些包含你的SEED的容器。尽管如此,如果恶意行为者获得了对容器的访问权限,他们仍然可能读取你的SEED,但仍然建议以只读模式运行此容器

docker run --rm -it \
    --name polkadot-staking-miner \
    --read-only \
    -e RUST_LOG=info \
    -e SEED \
    -e URI=wss://your-node:9944 \
    polkadot-staking-miner dry-run

更新元数据

静态元数据文件存储在artifacts/metadata.scale

要更新元数据,您需要连接到polkadot、kusama或westend节点。

# Install subxt-cli
$ cargo install --locked subxt-cli
# Download the metadata from a local node and replace the current metadata
# See `https://github.com/paritytech/subxt/tree/master/cli` for further documentation of the `subxt-cli` tool.
$ subxt metadata --pallets "ElectionProviderMultiPhase,System" -f bytes > artifacts/metadata.scale
# Inspect the generated code
$ subxt codegen --file artifacts/metadata.scale | rustfmt > code.rs

本地测试

由于选举发生相当少,如果您想本地测试,可以通过构建带有feature --fast-runtime的polkadot二进制文件来确保选举发生得更频繁(以分钟为单位,而不是小时/天)。

$ cargo run --release --package polkadot --features fast-runtime -- --chain westend-dev --tmp --alice --execution Native -lruntime=debug --offchain-worker=Never --ws-port 9999
# open another terminal and run
$ cargo run --release -- --uri ws://127.0.0.1:9999 monitor --seed-or-path //Alice seq-phragmen

Prometheus指标

staking-miner在9999端口启动一个prometheus服务器,并且可以通过以下方式获取指标

$ curl localhost:9999/metrics
# HELP staking_miner_balance The balance of the staking miner account
# TYPE staking_miner_balance gauge
staking_miner_balance 88756574897390270
# HELP staking_miner_mining_duration_ms The mined solution time in milliseconds.
# TYPE staking_miner_mining_duration_ms gauge
staking_miner_mining_duration_ms 50
# HELP staking_miner_score_minimal_stake The minimal winner, in terms of total backing stake
# TYPE staking_miner_score_minimal_stake gauge
staking_miner_score_minimal_stake 24426059484170936
# HELP staking_miner_score_sum_stake The sum of the total backing of all winners
# TYPE staking_miner_score_sum_stake gauge
staking_miner_score_sum_stake 2891461667266507300
# HELP staking_miner_score_sum_stake_squared The sum squared of the total backing of all winners, aka. the variance.
# TYPE staking_miner_score_sum_stake_squared gauge
staking_miner_score_sum_stake_squared 83801161022319280000000000000000000
# HELP staking_miner_solution_length_bytes Number of bytes in the solution submitted
# TYPE staking_miner_solution_length_bytes gauge
staking_miner_solution_length_bytes 2947
# HELP staking_miner_solution_weight Weight of the solution submitted
# TYPE staking_miner_solution_weight gauge
staking_miner_solution_weight 8285574626
# HELP staking_miner_submissions_started Number of submissions started
# TYPE staking_miner_submissions_started counter
staking_miner_submissions_started 2
# HELP staking_miner_submissions_success Number of submissions finished successfully
# TYPE staking_miner_submissions_success counter
staking_miner_submissions_success 2
# HELP staking_miner_submit_and_watch_duration_ms The time in milliseconds it took to submit the solution to chain and to be included in block
# TYPE staking_miner_submit_and_watch_duration_ms gauge
staking_miner_submit_and_watch_duration_ms 17283
  • substrate-etl - 从基于substrate的链中提取状态的工具。

依赖关系

~35–50MB
~853K SLoC