设置Moonbeam开发节点¶
概览¶
Moonbeam开发节点是您自己的个人开发环境,用于在Moonbeam上构建和测试应用程序。对于以太坊开发者来说,它相当于Hardhat Network或Ganache。它助您快速轻松上手,而无需承担中继链的开销。您可以使用--sealing
选项启动您的节点,以在收到交易后立即、手动或以自定义间隔创建区块。默认情况下,当收到交易时将创建一个区块,这类似于Hardhat Network的默认行为和Ganache的instamine(即时)功能。
如果您完整地遵循本教程操作,您将拥有一个在本地环境中运行的Moonbeam开发节点,其中包含10个预注资的账户。
注意事项
本教程使用Moonbase Alpha的v0.32.2标签创建。为实现与以太坊的全面兼容,基于Substrate的Moonbeam平台和Frontier组件正处于积极开发阶段。 本教程示例基于Ubuntu 18.04和MacOS的环境,用户需根据其所使用的Windows版本进行微调。
启动Moonbeam开发节点¶
目前有两种方式运行Moonbeam节点:使用Docker来执行预构建的二进制文件,或在本地编译二进制文件然后自行设置开发节点。使用Docker更为快速便捷,您无需安装Substrate和所有依赖项,并且可以跳过构建节点的过程。但您必须安装Docker。另一方面,如果您决定要完成构建自己的开发节点的过程,则需要大约30分钟或更长时间才能完成,具体情况取决于您的硬件设备。
使用Docker启动节点¶
使用Docker可让您在几秒钟内启动节点。安装Docker后,您可以执行以下步骤来启动您的节点:
-
执行以下命令下载最新Moonbeam镜像:
docker pull purestake/moonbeam:v0.32.2
控制台日志的结尾应如下所示:
-
通过运行以下Docker命令启动Moonbeam开发节点,该命令将以即时封装模式启动节点以进行本地测试,以便在收到交易时立即创建区块:
docker run --rm --name moonbeam_development --network host \ purestake/moonbeam:v0.32.2 \ --dev
docker run --rm --name moonbeam_development -p 9944:9944 \ purestake/moonbeam:v0.32.2 \ --dev --ws-external --rpc-external
docker run --rm --name moonbeam_development -p 9944:9944 ^ purestake/moonbeam:v0.32.2 ^ --dev --ws-external --rpc-external
如果节点已经启动,您将看到显示区块待创建的空闲状态界面:
您可点击常用标志及选项来查阅更多用于示例的标志及选项。如果要查看所有标志、选项和子命令的完整列表,请通过运行以下命令打开帮助菜单:
docker run --rm --name moonbeam_development \
purestake/moonbeam \
--help
如果您已经使用Docker来启动节点,则可以跳过下一部分的教程,直接进入配置Moonbeam开发节点部分。
使用二进制文件启动节点¶
注意事项
如果您了解目前所在执行的操作,您可以直接在Moonbeam版本发布页面上下载每个版本附带的预编译二进制文件。但这并不适用于所有系统,例如:二进制文件仅适用于具有特定依赖项版本的x86-64 Linux。确保兼容性的最安全方法是在运行二进制文件的系统中编译二进制文件。
要构建二进制文件,您可以执行以下步骤:
-
克隆Moonbeam代码库的特定标签,你可以在Moonbeam GitHub代码库上找到它:
git clone -b v0.32.2 https://github.com/moonbeam-foundation/moonbeam cd moonbeam
-
如果您已安装Rust,您可跳过以下两个步骤。如果您未安装Rust,请执行以下命令通过Rust推荐方式安装Rust和其先决条件:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-
运行以下命令更新您的PATH环境变量:
source $HOME/.cargo/env
-
运行以下命令构建开发节点:
注意事项
如果您使用的是Ubuntu 20.04或22.04,那么您需要在构建二进制文件之前安装这些额外的依赖项:
apt install clang protobuf-compiler libprotobuf-dev -y
cargo build --release
构建输出的末尾应如下所示:
注意事项
初始构建将会需要一些时间。取决于您的硬件设备,构建过程大约需要30分钟。
然后,您可以通过以下命令运行开发节点:
./target/release/moonbeam --dev
注意事项
对于不熟悉Substrate的人来说,--dev
标志是一种在单节点开发者配置中运行基于Substrate的节点以用于测试目的的方法。当您使用--dev
标志运行您的节点时,您的节点将以全新状态启动,并且不会持久保存其状态。
您将看到显示区块待创建的空闲状态界面:
您可点击常用标志及选项来查阅更多用于示例的标志及选项。如果要查看所有标志、选项和子命令的完整列表,请通过运行以下命令打开帮助菜单:
./target/release/moonbeam --help
配置Moonbeam开发节点¶
现在您已知道如何启动和运行标准的Moonbeam开发节点,您可能还想知道如何配置它。以下部分将介绍一些在启动节点时可以使用的常见配置。
配置节点的常用标志¶
标志不带参数。要使用标志,请将其添加到命令末尾。例如:
./target/release/moonbeam --dev
--dev
- 指定开发链--tmp
- 运行一个临时节点,该节点将在流程结束时删除所有配置--rpc-external
- 监听所有RPC接口--ws-external
- 监听所有Websocket接口
配置节点的常用选项¶
选项接受一个选项右侧的参数。例如:
./target/release/moonbeam --dev --sealing 6000
-l <log pattern>
or--log <log pattern>
- 设置自定义日志记录筛选器。日志模式的语法为<target>=<level>
。例如,要打印所有JSON RPC日志,命令应如下所示:-l json=trace
--sealing <interval>
- 什么时候区块需要被封装在开发服务中。可接受的时间间隔参数为:instant
、manual
、或一个代表计时器间隔(以毫秒为单位)的数字(例如,6000
是指节点每6秒产生一次区块)。默认设置是instant
。请参阅下面的配置区块生产部分以获取更多信息--rpc-port <port>
- 从v0.30.0客户端版本开始弃用,使用--ws-port
进行HTTP和WS的连接 - 设置HTTP RPC服务器的TCP端口。接受端口作为参数--ws-port <port>
- 设置WebSockets RPC服务器的TCP端口。从v0.30.0客户端版本开始,WS端口是用于HTTP和WS连接的统一端口。接受端口作为参数。默认值是9944--rpc-max-connections <connections>
- 自客户端v0.30.0起已弃用,此值已硬编码为100。请使用--ws-max-connections
以调整HTTP和WS连接的总限制 - 指定HTTP RPC服务器连接的最大数量--ws-max-connections <connections>
- 指定WS RPC服务器连接的最大数量。自客户端v0.30.0起,此标志调整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 Apps或MetaMask(或者任何其他EVM钱包)与您的账户交互。此外,您还可以使用其他开发工具,例如Remix和Hardhat。
您的Moonbeam开发节点带有十个预注资的以太坊风格的开发帐户。这些地址源自于Substrate的规范开发助记词:
bottom drive obey lake curtain smoke basket hold race lonely fit walk
开发账户地址和私钥
-
Alith:
- Public Address:
0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac
- Private Key:
0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133
- Public Address:
-
Baltathar:
- Public Address:
0x3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0
- Private Key:
0x8075991ce870b93a8870eca0c0f91913d12f47948ca0fd25b49c6fa7cdbeee8b
- Public Address:
-
Charleth:
- Public Address:
0x798d4Ba9baf0064Ec19eB4F0a1a45785ae9D6DFc
- Private Key:
0x0b6e18cafb6ed99687ec547bd28139cafdd2bffe70e6b688025de6b445aa5c5b
- Public Address:
-
Dorothy:
- Public Address:
0x773539d4Ac0e786233D90A233654ccEE26a613D9
- Private Key:
0x39539ab1876910bbf3a223d84a29e28f1cb4e2e456503e7e91ed39b2e7223d68
- Public Address:
-
Ethan:
- Public Address:
0xFf64d3F6efE2317EE2807d223a0Bdc4c0c49dfDB
- Private Key:
0x7dce9bc8babb68fec1409be38c8e1a52650206a7ed90ff956ae8a6d15eeaaef4
- Public Address:
-
Faith:
- Public Address:
0xC0F0f4ab324C46e55D02D0033343B4Be8A55532d
- Private Key:
0xb9d2ea9a615f3165812e8d44de0d24da9bbd164b65c4f0573e1ce2c8dbd9c8df
- Public Address:
-
Goliath:
- Public Address:
0x7BF369283338E12C90514468aa3868A551AB2929
- Private Key:
0x96b8a38e12e1a31dee1eab2fffdf9d9990045f5b37e44d8cc27766ef294acf18
- Public Address:
-
Heath:
- Public Address:
0x931f3600a299fd9B24cEfB3BfF79388D19804BeA
- Private Key:
0x0d6dcaaef49272a5411896be8ad16c01c35d6f8c18873387b71fbc734759b0ab
- Public Address:
-
Ida:
- Public Address:
0xC41C5F1123ECCd5ce233578B2e7ebd5693869d73
- Private Key:
0x4c42532034540267bf568198ccec4cb822a025da542861fcb146a5fab6433ff8
- Public Address:
-
Judith:
- Public Address:
0x2898FE7a42Be376C8BC7AF536A940F7Fd5aDd423
- Private Key:
0x94c49300a58d576011096bcb006aa06f5a91b34b4383891e8029c21dc39fbb8b
- Public Address:
另外,开发节点中还包括一个用于测试目的的额外预注资帐户:
- Gerald:
- Public Address:
0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b
- Private Key:
0x99b3c12287537e38c90a9219d4cb074a89a16e9cdb20bf85728ebd97c343e342
- Public Address:
你可以将这些帐户中的任何一个通过使用他们的私钥连接到MetaMask、Talisman、Polkadot.js Apps等。
开发节点端点¶
您可以使用以下RPC和WSS端点访问您的Moonbeam开发节点:
http://127.0.0.1:9944
ws://127.0.0.1:9944
区块浏览器¶
您可以使用以下任一区块浏览器来浏览Moonbeam开发节点:
- Substrate API — Polkadot.js Apps在WS端口
9944
- 基于JSON-RPC的以太坊API — Moonbeam Basic浏览器在HTTP端口
9944
调试(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
命令,您可以查看我们文档的清除二进制数据部分。
| Created: March 26, 2021