在Meter主网上运行全节点
这里有关于MTRG质押工作的细节,以及如何使用Meter钱包质押的教程

概述

Meter是一个具有双链结构的PoW和PoS混合区块链系统。所有的账户和交易都记录在PoS链上,而PoW链(目前是比特币的修改版,与比特币的起源相同)只维护用于挖矿的加密难题。PoW链向PoS链提交密码难题的解决方案,获胜的矿工在PoS链的账户上获得奖励。
区块
Meter以区块为单位进行操作,区块由k块(普通区块称为m块)发出信号。在区块结束时,委员会节点对最长的PoW链进行投票,并向所有PoW矿工分发挖矿奖励,它还将信息传递给PoW链,所有PoW矿工将不得不开始对加盖印章的PoW区块进行挖矿。要创建一个k区块,PoW链通常要有60个以上的区块。由于PoW区块的平均周期为1分钟,因此每个区块约为1小时(目前区块的时间完全由PoW决定,但我们将在未来实现交叉互动的区块调整)。所有与系统财务相关的活动,如奖励分配,进入和退出代表节点池,只发生在k-block。
还需要在同一台物理或虚拟机上运行PoS和PoW进程,以确保安全。
在Meter中,网络中存在几种类型的全节点。
1、普通全节点:他们为每个区块进行同步,并可以支持与钱包的互动
2、代表节点:这些节点是委员会节点的候选人,有机会提出和签署区块。要成为一个代表节点,前N个(N是一个协议参数)被押注的全节点(包括自我押注和其他押注者的投票)就是代表节点。
3、委员会节点:每个区块都会随机选择一个代表节点的子集。这些节点组成委员会的法定人数,并执行共识。委员会节点轮流提出区块。如果一个提议的区块得到了委员会中2/3的节点的认可,这些签名就形成了一个QC(法定人数证书)。每个新提议的区块都带有前一个区块的QC。一旦新提议的区块获得了QC,前一个区块就被认为是被确认和最终确定的。
在主网的初始启动阶段。代表节点的数量将与委员会节点的数量相同,这些节点的数量被设定为300。
运行一个委托/委员会节点的要求。为了实现Meter网络的全部性能,推荐的硬件配置是8个以上的计算优化的vCPU,16GB内存和200GB的SSD(AWS c5.2xlarge实例或更好)。Meter中的最大块大小约为1.3MB。还建议拥有数据中心级别的1Gbps至10Gbps互联网连接。然而,Meter共识协议能够在一定程度上适应交易负载、网络和节点处理速度,将区块周期从2秒到30秒不等。最低要求是2个vCPU和4GB内存。当网络有最小负荷时,预计每月平均区块数据约为1.5GB。

教程(社区版)

关于如何设置Meter的全节点和验证器的步骤教程是由一个社区成员创建的。 以下指南由官方维护。

设置Docker

由于Meter全节点由多个进程组成,我们将整个节点打包成一个docker容器镜像。下面的说明是假设Ubuntu Linux。 如果你使用的是Windows,你可以用Ubuntu镜像来安装WSL2。请参考Ubuntu Docker安装指南,在Ubuntu上添加Docker支持。
在Ubuntu上,你可以使用以下命令来安装docker
1
sudo apt update
2
sudo apt install docker.io
Copied!
默认情况下,如果你通过apt install安装了docker,它需要root用户权限才能运行。然而,这可能会带来安全问题。实际上,以非root用户身份运行Docker是非常简单的。
设置Docker用户组,以非root用户身份运行Docker。我们假设运行Docker的非root用户是 "ubuntu",如果你使用不同的用户,请相应改变命令。
1
sudo groupadd docker
2
sudo usermod -aG docker ubuntu
Copied!
在此之后,请退出并重新登录以刷新用户组设置,你就可以开始工作了。

设置一个全节点

  1. 1.
    下载最新的桌面钱包
  2. 2.
    为Meter Docker容器准备主机工作目录 建议为容器准备一个主机工作目录,以保存重要的密钥和区块数据库,这样我们可以在未来的升级中保留它们。我们将创建一个名为meter-data的目录,并将其路径设置为环境变量METER_MAIN_DATA_PATH
  3. 3.
    为Meter Docker容器准备主机工作目录 我们建议为容器准备一个主机工作目录,以保存重要的密钥和区块数据库,这样我们就可以在未来的升级中保留它们。我们将创建一个名为meter-data的目录,并将其路径设置为环境变量METER_DATA_PATH(如果你有一个不同的目录结构,你将不得不进行相应的修改),并将其映射到容器内的/pos目录。
准备一个干净的工作目录
1
$ mkdir meter_main_data
2
$ cd meter_main_data/
3
$ echo export "METER_MAIN_DATA_PATH=$PWD" >> ~/.bashrc
4
$ source ~/.bashrc
Copied!
启动Meter容器
下面的说明假设用户在METER_MAIN_DATA_PATH中操作。请注意命令中的参数,并根据你的环境替换相应的路径,特别是docker run命令中-v后面的路径。
1
docker run --network host --name meter_main --restart always -e NETWORK="main" -v $METER_MAIN_DATA_PATH:/pos -d meterio/mainnet:latest
Copied!
对docker有用的几个命令:
1
docker container ls -a
Copied!
输出结果将如下:
1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2
260bbd571d1a meterio/mainnet "/usr/bin/supervisord" 23 hours ago Up 23 hours meter_main
Copied!
1
docker container stop meter_main //stop the container
2
docker container start meter_main //start the container
3
docker container rm meter_main //remove the container
4
docker image ls
5
docker image rm [image ID] //remove the container image, will trigger redownloading the image at the next docker run, it is recommended to do this every time we upgrade the testnet
6
docker container exec -it meter_main bash //launch a bash in the container
Copied!
日志文件可以位于容器内,在/var/log/supervisor目录下。如果你提交任何bug,请记得在bug中附上PoS的日志(包括stderr和stdout)。你可以复制和粘贴日志,或者使用
1
docker cp meter_main:/var/log/supervisor/[LogFileNameHere] //replace with the log file name
Copied!
在通过日志确认节点正常运行后,你可以将桌面钱包连接到你自己的全节点。
你可以将其与团队维护的资源管理器的高度进行比较
Meter桌面钱包指向你自己的全节点 在钱包的设置中,在节点下,你可以通过添加http://IPaddrOfYourNode:8669,连接添加你自己的全节点。如果一切运行正常,地址栏左边的图标应该变成绿色。你可以使用钱包里面的资源管理器来查看区块制作的状态。
请确保钱包中的区块高度与官方区块浏览器相同。

自动升级为全节点

由于主网刚刚启动,我们预计可能会不时出现紧急升级的情况。 为了减轻节点操作员的工作,我们提供了一个名为watchtower的自动升级服务。 它定期拉取docker容器镜像发布,并进行相应的升级。 对于那些不能全天候监控节点的非专业验证者,我们强烈建议在主网启动后的第一年使用watchtower服务。
1
docker run -d --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --include-stopped --revive-stopped --enable-lifecycle-hooks --interval 10 --cleanup meter_main
Copied!

手动升级为全节点

停止并删除当前的CONTAINER
1
docker container rm -f meter
Copied!
拉出最新的容器镜像
1
docker pull meterio/mainnet:latest
Copied!
启动新的图像
1
docker run --network host --name meter_main --restart always -e NETWORK="main" -v $METER_MAIN_DATA_PATH:/pos -d meterio/mainnet:latest
Copied!
Last modified 4mo ago