Skip to content

设置Moonbeam开发节点

概览

Moonbeam开发节点是您自己的个人开发环境,用于在Moonbeam上构建和测试应用程序。对于以太坊开发者来说,它相当于Hardhat Network或Ganache。它助您快速轻松上手,而无需承担中继链的开销。您可以使用--sealing选项启动您的节点,以在收到交易后立即、手动或以自定义间隔创建区块。默认情况下,当收到交易时将创建一个区块,这类似于Hardhat Network的默认行为和Ganache的instamine(即时)功能。

如果您完整地遵循本教程操作,您将拥有一个在本地环境中运行的Moonbeam开发节点,其中包含10个预注资的账户

注意事项

本教程使用Moonbase Alpha的v0.36.0标签创建。为实现与以太坊的全面兼容,基于Substrate的Moonbeam平台和Frontier组件正处于积极开发阶段。 本教程示例基于Ubuntu 22.04和MacOS的环境,用户需根据其所使用的Windows版本进行微调。

启动Moonbeam开发节点

目前有两种方式运行Moonbeam节点:使用Docker来执行预构建的二进制文件,或在本地编译二进制文件然后自行设置开发节点。使用Docker更为快速便捷,您无需安装Substrate和所有依赖项,并且可以跳过构建节点的过程。但您必须安装Docker。另一方面,如果您决定要完成构建自己的开发节点的过程,则需要大约30分钟或更长时间才能完成,具体情况取决于您的硬件设备。

使用Docker启动节点

使用Docker可让您在几秒钟内启动节点。安装Docker后,您可以执行以下步骤来启动您的节点:

  1. 执行以下命令下载最新Moonbeam镜像:

    docker pull moonbeamfoundation/moonbeam:v0.36.0
    

    控制台日志的结尾应如下所示:

    docker pull moonbeamfoundation/moonbeam:v0.36.0
    v0.36.0: Pulling from moonbeamfoundation/moonbeam
    e1caac4eb9d2: Pull complete
    303f0b059437: Pull complete
    1987eeb667a4: Pull complete
    c2b8e919bd5a: Pull complete
    c6a7952896a0: Pull complete
    3ad97e77096a: Pull complete
    a5e5655dbb4f: Pull complete
    Digest: sha256:099e885c4601c8f7ba4408492f2df142920a794baf019cf71cf3a3a16810f504
    Status: Downloaded newer image for moonbeamfoundation/moonbeam:v0.36.0
    docker.io/moonbeamfoundation/moonbeam:v0.36.0

  2. 通过运行以下Docker命令启动Moonbeam开发节点,该命令将以即时封装模式启动节点以进行本地测试,以便在收到交易时立即创建区块:

    docker run --rm --name moonbeam_development --network host \
    moonbeamfoundation/moonbeam:v0.36.0 \
    --dev
    
    docker run --rm --name moonbeam_development -p 9944:9944 \
    moonbeamfoundation/moonbeam:v0.36.0 \
    --dev --ws-external --rpc-external
    
    docker run --rm --name moonbeam_development -p 9944:9944 ^
    moonbeamfoundation/moonbeam:v0.36.0 ^
    --dev --ws-external --rpc-external
    

注意事项

如果您的电脑使用的是Apple芯片, Docker可能无法完美运行您使用的镜像文件. 为了提升性能, 请尝试 使用二进制文件启动节点.

如果节点已经启动,您将看到显示区块待创建的空闲状态界面:

docker run --rm --name moonbeam_development --network host \
moonbeamfoundation/moonbeam:v0.36.0 \
--dev --rpc-external

CLI parameter `--execution` has no effect anymore and will be removed in the future!
2024-02-27 06:09:29 Moonbeam Parachain Collator
2024-02-27 06:09:29 ✌️ 0.36.0-d1087f30917
2024-02-27 06:09:29 ❤️ by PureStake, 2019-2024
2024-02-27 06:09:29 📋 Chain specification: Moonbase Development Testnet
2024-02-27 06:09:29 🏷 Node name: black-and-white-sticks-9174
2024-02-27 06:09:29 👤 Role: AUTHORITY
2024-02-27 06:09:29 💾 Database: RocksDb at /tmp/substrateO3YeRz/chains/moonbase_dev/db/full
2024-02-27 06:09:40 🔨 Initializing Genesis block/state (state: 0x7c34…99c5, header-hash: 0xa083…f354)
2024-02-27 06:09:40 Using default protocol ID "sup" because none is configured in the chain specs
2024-02-27 06:09:40 🏷 Local node identity is: 12D3KooWLcpczme2JeBEfLqmjqkzYVKTGKhhGmwSzHjRXGBVhDX7
2024-02-27 06:09:40 💻 Operating system: linux
2024-02-27 06:09:40 💻 CPU architecture: x86_64
2024-02-27 06:09:40 💻 Target environment: gnu
2024-02-27 06:09:40 💻 CPU: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
2024-02-27 06:09:40 💻 CPU cores: 12
2024-02-27 06:09:40 💻 Memory: 7946MB
2024-02-27 06:09:40 💻 Kernel: 6.4.16-linuxkit
2024-02-27 06:09:40 💻 Linux distribution: Debian GNU/Linux 12 (bookworm)
2024-02-27 06:09:40 💻 Virtual machine: yes
2024-02-27 06:09:40 📦 Highest known block at #0
2024-02-27 06:09:40 Running JSON-RPC server: addr=0.0.0.0:9944, allowed origins=["*"]
2024-02-27 06:09:40 🏁 CPU score: 1.14 GiBs
2024-02-27 06:09:40 〽️ Prometheus exporter started at 127.0.0.1:9615
2024-02-27 06:09:40 🏁 Memory score: 10.41 GiBs
2024-02-27 06:09:40 🏁 Disk score (seq. writes): 987.96 MiBs
2024-02-27 06:09:40 🏁 Disk score (rand. writes): 363.65 MiBs
2024-02-27 06:09:40 Development Service Ready
2024-02-27 06:09:45 💤 Idle (0 peers), best: #0 (0xa083…f354), finalized #0 (0xa083…f354), ⬇ 0 ⬆ 0
2024-02-27 06:09:50 💤 Idle (0 peers), best: #0 (0xa083…f354), finalized #0 (0xa083…f354), ⬇ 0 ⬆ 0

您可点击常用标志选项来查阅更多用于示例的标志及选项。如果要查看所有标志、选项和子命令的完整列表,请通过运行以下命令打开帮助菜单:

docker run --rm --name moonbeam_development \
moonbeamfoundation/moonbeam \
--help

如果您已经使用Docker来启动节点,则可以跳过下一部分的教程,直接进入配置Moonbeam开发节点部分。

使用二进制文件启动节点

注意事项

如果您了解目前所在执行的操作,您可以直接在Moonbeam版本发布页面上下载每个版本附带的预编译二进制文件。但这并不适用于所有系统,例如:二进制文件仅适用于具有特定依赖项版本的x86-64 Linux。确保兼容性的最安全方法是在运行二进制文件的系统中编译二进制文件。

要构建二进制文件,您可以执行以下步骤:

  1. 克隆Moonbeam代码库的特定标签,你可以在Moonbeam GitHub代码库上找到它:

    git clone -b v0.36.0 https://github.com/moonbeam-foundation/moonbeam
    cd moonbeam
    
  2. 如果您已安装Rust,您可跳过以下两个步骤。如果您未安装Rust,请执行以下命令通过Rust推荐方式安装Rust和其先决条件:

    注意事项

    安装路径包含空格会造成编译错误

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    
  3. 运行以下命令更新您的PATH环境变量:

    source $HOME/.cargo/env
    
  4. 运行以下命令构建开发节点:

    注意事项

    如果您使用的是Ubuntu 20.04或22.04,那么您需要在构建二进制文件之前安装这些额外的依赖项:

    apt install clang protobuf-compiler libprotobuf-dev pkg-config libssl-dev -y 
    

    MacOS用户请使用Homebrew来安装依赖项:

    brew install llvm
    brew install protobuf
    
    cargo build --release
    

    构建输出的末尾应如下所示:

    Compiling try-runtime-cli v0.9.0 (https://github.com/paritytech/substrate?branch=rococo-v1#401c24e8)
    Compiling frame-benchmarking-cli v3.0.0 (https://github.com/paritytech/substrate?branch=rococo-v1#401c24e8)
    Compiling cumulus-client-cli v0.1.0 (https://github.com/paritytech/cumulus?branch=rococo-v1#9d89ed65)
    Compiling moonbeam-rpc-txpool v0.6.0 (/home/purestake/moonbeam/client/rpc/txpool)
    Compiling moonbeam-rpc-debug v0.1.0 (/home/purestake/moonbeam/client/rpc/debug)
    Compiling moonbeam-rpc-trace v0.6.0 (/home/purestake/moonbeam/client/rpc/trace)
    Compiling cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=rococo-v1#9d89ed65)
    Compiling cumulus-client-consensus-relay-chain v0.1.0 (https://github.com/paritytech/cumulus?branch=rococo-v1#9d89ed65)
    Compiling polkadot-test-service v0.8.29 (https://github.com/paritytech/polkadot?branch=rococo-v1#b64741e6)
    Compiling cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=rococo-v1#9d89ed65)
    Compiling cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=rococo-v1#9d89ed65)
    Finished release [optimized] target(s) in 31m 17s

注意事项

初始构建将会需要一些时间。取决于您的硬件设备,构建过程大约需要30分钟。

然后,您可以通过以下命令运行开发节点:

./target/release/moonbeam --dev

注意事项

对于不熟悉Substrate的人来说,--dev标志是一种在单节点开发者配置中运行基于Substrate的节点以用于测试目的的方法。当您使用--dev标志运行您的节点时,您的节点将以全新状态启动,并且不会持久保存其状态。

您将看到显示区块待创建的空闲状态界面:

./target/release/moonbeam --dev
CLI parameter `--execution` has no effect anymore and will be removed in the future!
2024-01-10 06:41:29 Moonbeam Parachain Collator
2024-01-10 06:41:29 ✌️ version 0.35.0-7131ef902c0
2024-01-10 06:41:29 ❤️ by PureStake, 2019-2024
2024-01-10 06:41:29 📋 Chain specification: Moonbase Development Testnet
2024-01-10 06:41:29 🏷 Node name: black-and-white-sticks-9174
2024-01-10 06:41:29 👤 Role: AUTHORITY
2024-01-10 06:41:29 💾 Database: RocksDb at /tmp/substrateO3YeRz/chains/moonbase_dev/db/full
2024-01-10 06:41:40 🔨 Initializing Genesis block/state (state: 0x7c34…99c5, header-hash: 0xa083…f354)
2024-01-10 06:41:40 Using default protocol ID "sup" because none is configured in the chain specs
2024-01-10 06:41:40 🏷 Local node identity is: 12D3KooWLcpczme2JeBEfLqmjqkzYVKTGKhhGmwSzHjRXGBVhDX7
2024-01-10 06:41:40 💻 Operating system: linux
2024-01-10 06:41:40 💻 CPU architecture: x86_64
2024-01-10 06:41:40 💻 Target environment: gnu
2024-01-10 06:41:40 💻 CPU: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
2024-01-10 06:41:40 💻 CPU cores: 12
2024-01-10 06:41:40 💻 Memory: 7946MB
2024-01-10 06:41:40 💻 Kernel: 6.4.16-linuxkit
2024-01-10 06:41:40 💻 Linux distribution: Debian GNU/Linux 12 (bookworm)
2024-01-10 06:41:40 💻 Virtual machine: yes
2024-01-10 06:41:40 📦 Highest known block at #0
2024-01-10 06:41:40 Running JSON-RPC server: addr=0.0.0.0:9944, allowed origins=["*"]
2024-01-10 06:41:40 🏁 CPU score: 1.14 GiBs
2024-01-10 06:41:40 〽️ Prometheus exporter started at 127.0.0.1:9615
2024-01-10 06:41:40 🏁 Memory score: 10.41 GiBs
2024-01-10 06:41:40 🏁 Disk score (seq. writes): 987.96 MiBs
2024-01-10 06:41:40 🏁 Disk score (rand. writes): 363.65 MiBs
2024-01-10 06:41:40 Development Service Ready
2024-01-10 06:41:45 💤 Idle (0 peers), best: #0 (0xa083…f354), finalized #0 (0xa083…f354), ⬇ 0 ⬆ 0
2024-01-10 06:41:50 💤 Idle (0 peers), best: #0 (0xa083…f354), finalized #0 (0xa083…f354), ⬇ 0 ⬆ 0

您可点击常用标志选项来查阅更多用于示例的标志及选项。如果要查看所有标志、选项和子命令的完整列表,请通过运行以下命令打开帮助菜单:

./target/release/moonbeam --help

配置Moonbeam开发节点

现在您已知道如何启动和运行标准的Moonbeam开发节点,您可能还想知道如何配置它。以下部分将介绍一些在启动节点时可以使用的常见配置。

配置节点的常用标志

标志不带参数。要使用标志,请将其添加到命令末尾。例如:

./target/release/moonbeam --dev
  • --dev - 指定开发链
  • --tmp - 运行一个临时节点,该节点将在流程结束时删除所有配置
  • --rpc-external - 监听所有RPC与Websocket接口

配置节点的常用选项

选项接受一个选项右侧的参数。例如:

./target/release/moonbeam --dev --sealing 6000
  • -l <log pattern> or --log <log pattern> - 设置自定义日志记录筛选器。日志模式的语法为<target>=<level>。例如,要打印所有JSON-RPC日志,命令应如下所示:-l json=trace
  • --sealing <interval> - 什么时候区块需要被封装在开发服务中。可接受的时间间隔参数为:instantmanual、或一个代表计时器间隔(以毫秒为单位)的数字(例如,6000是指节点每6秒产生一次区块)。默认设置是instant。请参阅下面的配置区块生产部分以获取更多信息
  • --rpc-port <port> - 用来配置HTTP与WS连接的统一端口。接收一个port作为参数,默认为9944
  • --ws-port <port> - v0.33.0客户端版本开始已弃用,HTTP与WS连接改为统一使用--rpc-port来配置 设置WebSockets RPC服务器的TCP端口。从v0.30.0客户端版本开始使用,用来设置HTTP与WS连接的统一端口. 接收一个port作为参数
  • --rpc-max-connections <connections> - 配置HTTP与WS连接的上限总和. 默认连接数为100
  • --ws-max-connections <connections> - * v0.33.0客户端版本开始已弃用, 改为使用--rpc-max-connections参数来限制 HTTP与WS连接数量上线 - 配置HTTP与WS连接的上限总和. 默认连接数为100
  • --rpc-cors <origins> - 指定允许浏览器源头访问HTTP和WS RPC服务器。该源头可以是允许访问的以逗号分隔的来源列表,或者您也可以指定null。当运行一个开发节点时,预设为允许所有源头

如需命令行标志和选项的完整列表,请在命令末尾添加--help来启动Moonbeam开发节点。

配置区块生产

默认情况下,您的Moonbeam开发节点以即时封装模式启动,该模式会在收到交易时立即创建区块。但是,您可以使用--sealing选项指定何时制造或封装区块。

--sealing标志接受以下任何参数:

  • instant - 正如我们已经介绍过的,这是默认选项,一旦收到交易就会创建区块
  • manual - 允许您手动生成区块。如果收到交易,在您手动创建一个之前不会产生区块
  • 以毫秒为单位的间隔 - 在特定时间间隔创建一个区块。例如,如果将其设置为6000,您将让节点每6秒产生一个区块

该标志应按以下格式附加到启动命令中:

--sealing <interval>

如果选择manual,您需要自己手动使用engine_createBlock JSON-RPC方法来创建区块:

engine_createBlock(createEmpty: *bool*, finalize: *bool*, parentHash?: *BlockHash*)

例如,您可以使用以下代码片段使用Ethers.js(一个可以轻松地与JSON-RPC方法进行交互的以太坊库)手动创建区块:

import { ethers } from 'ethers';

const produceBlock = async () => {
  // Connect to the Ethereum node (if applicable, replace the URL with your node's address)
  const provider = new ethers.JsonRpcProvider(
    'http://127.0.0.1:9944'
  );

  // Set the custom JSON-RPC method and parameters
  const method = 'engine_createBlock';
  const params = [true, true, null];

  try {
    // Send the custom JSON-RPC call
    const result = await provider.send(method, params);
  } catch (error) {
    // Handle any errors that may occur
    console.error('Error:', error.message);
  }
};

produceBlock();

注意事项

如果您不熟悉Ethers,请参阅Ethers.js文档页面以了解更多信息。

预注资的开发账户

Moonbeam拥有统一账户系统,使用户能够拥有可以与Substrate API和以太坊API交互的以太坊格式H160账户。因此,您可以通过Polkadot.js AppsMetaMask(或者任何其他EVM钱包)与您的账户交互。此外,您还可以使用其他开发工具,例如RemixHardhat

您的Moonbeam开发节点带有十个预注资的以太坊风格的开发帐户。这些地址源自于Substrate的规范开发助记词:

bottom drive obey lake curtain smoke basket hold race lonely fit walk
开发账户地址和私钥
  • Alith:

    • Public Address: 0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac
    • Private Key: 0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133
  • Baltathar:

    • Public Address: 0x3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0
    • Private Key: 0x8075991ce870b93a8870eca0c0f91913d12f47948ca0fd25b49c6fa7cdbeee8b
  • Charleth:

    • Public Address: 0x798d4Ba9baf0064Ec19eB4F0a1a45785ae9D6DFc
    • Private Key: 0x0b6e18cafb6ed99687ec547bd28139cafdd2bffe70e6b688025de6b445aa5c5b
  • Dorothy:

    • Public Address: 0x773539d4Ac0e786233D90A233654ccEE26a613D9
    • Private Key: 0x39539ab1876910bbf3a223d84a29e28f1cb4e2e456503e7e91ed39b2e7223d68
  • Ethan:

    • Public Address: 0xFf64d3F6efE2317EE2807d223a0Bdc4c0c49dfDB
    • Private Key: 0x7dce9bc8babb68fec1409be38c8e1a52650206a7ed90ff956ae8a6d15eeaaef4
  • Faith:

    • Public Address: 0xC0F0f4ab324C46e55D02D0033343B4Be8A55532d
    • Private Key: 0xb9d2ea9a615f3165812e8d44de0d24da9bbd164b65c4f0573e1ce2c8dbd9c8df
  • Goliath:

    • Public Address: 0x7BF369283338E12C90514468aa3868A551AB2929
    • Private Key: 0x96b8a38e12e1a31dee1eab2fffdf9d9990045f5b37e44d8cc27766ef294acf18
  • Heath:

    • Public Address: 0x931f3600a299fd9B24cEfB3BfF79388D19804BeA
    • Private Key: 0x0d6dcaaef49272a5411896be8ad16c01c35d6f8c18873387b71fbc734759b0ab
  • Ida:

    • Public Address: 0xC41C5F1123ECCd5ce233578B2e7ebd5693869d73
    • Private Key: 0x4c42532034540267bf568198ccec4cb822a025da542861fcb146a5fab6433ff8
  • Judith:

    • Public Address: 0x2898FE7a42Be376C8BC7AF536A940F7Fd5aDd423
    • Private Key: 0x94c49300a58d576011096bcb006aa06f5a91b34b4383891e8029c21dc39fbb8b

另外,开发节点中还包括一个用于测试目的的额外预注资帐户:

  • Gerald:
    • Public Address: 0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b
    • Private Key: 0x99b3c12287537e38c90a9219d4cb074a89a16e9cdb20bf85728ebd97c343e342

你可以将这些帐户中的任何一个通过使用他们的私钥连接到MetaMaskTalismanPolkadot.js Apps等。

开发节点端点

您可以使用以下RPC和WSS端点访问您的Moonbeam开发节点:

http://127.0.0.1:9944
ws://127.0.0.1:9944

区块浏览器

您可以使用以下任一区块浏览器来浏览Moonbeam开发节点:

调试(Debug)、追踪(Trace)、和TxPool API

您也可以通过运行追踪节点访问一些非标准的RPC方法,这将允许开发者在runtime期间检查和调试交易。追踪节点使用的是与标准Moonbeam开发节点不同的Docker镜像。

想要学习如何运行Moonbeam开发追踪节点,请查看运行追踪节点的操作指南并确保在操作过程中已切换至Moonbeam Development Node标签。随后,通过您的追踪节点访问非标准的RPC方法,详情请查看Debug & Trace操作指南。

清除开发节点

如果您想删除与您节点关联的数据,您可以清除它。清除节点的说明因启动节点的方式而异。

清除由Docker启动的节点

如果您使用Docker和-v标志来启动您的节点,为您的Docker容器指定挂载目录,您将需要清除该目录。为此,请运行以下命令:

sudo rm -rf /var/lib/alphanet-data/*

如果您按照本指南中的说明进行操作并且未使用-v标志,您可停止并删除Docker容器,关联的数据也将与其一起被删除。为此,请运行以下命令:

sudo docker stop `CONTAINER_ID` && docker rm `CONTAINER_ID`

清除由二进制文件启动的节点

通过二进制文件运行节点时,数据存储在本地目录中,该目录通常位于~/.local/shared/moonbeam/chains/development/db。如果要启动该节点的新实例,您可以删除该文件夹的内容,或者在moonbeam文件夹中运行以下命令:

./target/release/moonbeam purge-chain --dev -y

这将删除数据文件夹。请注意,所有链数据均已丢失。想要了解所有可用purge-chain命令,您可以查看我们文档的清除二进制数据部分。

Last update: January 31, 2024
| Created: March 26, 2021