dapaopao

发布于 2023-11-01到 Mirror 阅读

如何建立StarkNet全节点

参考资料

     目前官网上构建有三个,这里选用其中一个 Papyrus

https://www.starknet.io/en/ecosystem/fullnodes-and-api-services

     注意,目前仍在构建中,因此可能会经常发生重大更改,因此使用它需要您自担风险

安装依赖

需要先安装Rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --help

可以Papyrus通过运行以下命令来构建并运行具有默认配置的节点:

mkdir data
cargo run --release --package papyrus_node --bin papyrus_node -- --base_layer.node_url <ethereum_node_url>

ethereum_node_url 填写RPC地址,比如你申请了Achemly rpc 就填写在这里

配置

--config_file 您可以通过提供命令行参数的路径,使用配置 json 文件覆盖默认值。

可以通过修改配置文件的方式或者通过传参数的方式来修改配置。

1.通过修改配置文件,比如主网配置

{
    "central.url": "https://alpha-mainnet.starknet.io/",
    "chain_id": "SN_MAIN",
    "rpc.starknet_url": "https://alpha-mainnet.starknet.io/",
    "base_layer.starknet_contract_address": "0xc662c410C0ECf747543f5bA90660f6ABeBD9C8c4"
}

2.也可以运行命令行参数

cargo run --release --package papyrus_node --bin papyrus_node -- --help

使用docker安装

除了以上的方法外还可以使用docker来安装

首先下载docker,下载链接

https://docs.docker.com/get-docker/

通过运行以下命令来运行具有默认配置的节点:

docker run --rm --name papyrus\
  -p 8080-8081:8080-8081 \
  -v <local-host-data-path>:/app/data \
  ghcr.io/starkware-libs/papyrus:dev \
  --base_layer.node_url <ethereum_node_url>

注意事项

  • 容器必须具有对<local-host-data-path>. 确保这一点的一种可能方法是创建<local-host-data-path>目录(仅在第一次运行时Papyrus)并将其添加--user "$(id -u):$(id -g)"到 docker run 命令中。

  • 必须包含dev跟踪开发分支并包含最新代码的标签。latest一旦发布正式版本,将为最新版本添加标签。

  • 目前没有自动升级机制。确保定期拉取最新映像并重新运行节点。

控制内存使用情况

Papyrus 节点将使用所有可用的 RAM 来缓存存储。如果计算机上没有运行任何其他应用程序,推荐这么做。

否则,您可以通过在内存有限的容器中运行节点来限制节点的内存使用。请注意,这可能会降低节点的效率,因为它会减少存储的缓存。

这可以通过将标志(对于 1GB 限制)添加到Docker--memory 1g部分的命令来完成。完整的命令应该是:

docker run --rm --name papyrus\
  -p 8080-8081:8080-8081 \
  -v <local-host-data-path>:/app/data \
  --memory <memory-limit>
  ghcr.io/starkware-libs/papyrus:dev

向节点发送API请求

API 请求发送到该路径/rpc/<starknet-rpc-version-id>。当前支持的版本有:

  • V0_3_0

  • V0_4_0

请参阅以下规范:starknet-specs repo 假设节点暴露在localhost:8080一个可能通过curl发送请求的位置:

curl --location 'localhost:8080/rpc/v0_3' --header 'Content-Type: application/json'\  
 --data '{"jsonrpc":"2.0","id":0,"method":"starknet_blockHashAndNumber"}'

监控API

用于检索正在运行的节点的监控信息的端点在路径中可用monitoring

假设节点监控网关暴露在外,localhost:8081可能会通过curl发送请求:curl -X GET https://localhost:8081/monitoring/alive

  • alive  活跃度端点(如果节点处于活动状态,则返回状态代码 200)。

  • nodeVersion  获取节点版本。

  • nodeConfig  获取当前节点配置。

  • dbTablesStats  获取数据库中每个表的统计信息 ( libmdbx ),有关更多详细信息,请参阅libmdbx::Stat

  • metrics  获取节点活动的指标。请参阅下面的详细信息。

指标

Papyrus 收集三种指标:rpc 指标、同步指标和进程指标。默认情况下,节点不会收集指标,并且指标路径将返回错误代码405 - Method Not Allowed。要收集指标,请将配置值设置collect_metrics为 true。

Papyrus 在 rpc 中收集三个指标:

  • rpc_incoming_requests柜台

  • rpc_failed_requests柜台

  • rpc_request_latency_seconds直方图

method每个指标都可以通过带有标签的方法和带有标签的规范版本进行过滤version。例如,要获取规范版本 0.4 中方法 starknet_chainId 的所有传入请求,请使用 metric rpc_incoming_requests{method="chainId", version="V0_4"}

此外,可以使用illegal_method标签值检索具有非法方法名称(例如用户拼写错误,starknet_chainIddd)的请求数量method