# 如何建立StarkNet全节点

By [dapaopao](https://paragraph.com/@dapaopao) · 2023-11-01

---

**参考资料**

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

[https://www.starknet.io/en/ecosystem/fullnodes-and-api-services](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/](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](https://github.com/starkware-libs/papyrus#command-line)`--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](https://github.com/starkware-libs/starknet-specs/) 假设节点暴露在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](https://docs.rs/libmdbx/latest/libmdbx/index.html) )，有关更多详细信息，请参阅[libmdbx::Stat](https://docs.rs/libmdbx/latest/libmdbx/struct.Stat.html)。
    
*   `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`。

---

*Originally published on [dapaopao](https://paragraph.com/@dapaopao/starknet)*
