Ultima-1.3.0

是否强制更新及版本号

事项备注
是否强更
版本号ultima1.3.0
最迟升级时间2023.09.24 08:00 (UTC+8)
Github代码Tag版本https://github.com/vision-consensus/vision-core/releases/tag/mainnet_ultima_v1.3.0
Docker镜像版本maintainers/vision-mainnet:ultima_v1.3.0
maintainers/vision-mainnet:latest

版本功能变动

Ultima1.3.0 版本作出3个更新
1、升级底层光量子和熵的解冻操作,支持碎片化解冻,优化投票算法

2、vvm中支持合约获取chainid指令,evm兼容优化及,支持eth_FeeHistory方法

3、优化出块效率

CORE

1、升级底层光量子和熵的解冻操作,支持碎片化解冻,优化投票算法

2、优化出块效率

EVM

1、vvm中支持合约获取chainid指令,evm兼容优化及,支持eth_FeeHistory方法

2、

源码编译节点升级步骤

1. 关闭进程

# 获取正在运行的 vision-core 进程的PID
ps aux | grep "java -Xmx.*g -XX:+UseConcMarkSweepGC -jar"
# 停止该进程
kill -15 PID

2. 备份节点数据和配置文件

# 首先进入到自己节点的工作目录, 这里我们以 $OLD_WORKDIR 表示自己节点的工作目录, 具体路径大家要根据自己当初节点部署时候选定的目录来进行替换
cd $OLD_WORKDIR

# 备份当前运行的vision-core程序的jar包
mv FullNode.jar FullNode.jar.$(date '+%FT%T').bak

# 备份当前数据库
tar --force-local -zcvf "output-directory-$(date '+%FT%T')-backup.tar.gz" output-directory

# 备份配置文件
cp vision-mainnet.config vision-mainnet.config.bak

3. 获取新版本的jar包和最新的配置文件

# 获取最新版的java源代码
git clone https://github.com/vision-consensus/vision-core.git

# 编译源代码, 获取FullNode.jar 包
cd vision-core
gradle build -x test


# 拷贝 FullNode.jar 包到先前的工作目录, 用户需要根据自己所使用的的工作目录来替换下面命令中的$OLD_WORKDIR, 这样原先老的 FullNode.jar 文件会被新的 jar 包替换掉
cp -a build/libs/FullNode.jar $OLD_WORKDIR

# 回到节点工作目录中
cd $OLD_WORKDIR

# 获取最新的配置文件去替换掉原先的配置文件, 假设咱们得配置文件放在我们节点的工作目录的 configs 子目录中并且配置文件的文件名为默认的 vision-mainnet.config

wget https://vision-mainnet-configs.s3.us-east-2.amazonaws.com/stage001/vision-mainnet.config -O configs/vision-mainnet.config

📘

直接获取官方提供的jar包

也可以直接获取官方提供的 jar 包来重新运行服务。
获取地址: https://github.com/vision-consensus/vision-core/releases/download/mainnet_ultima_v1.3.0/FullNode.jar

4. 启动节点

# 进入到自己原先的工作目录, 请自行替换 $OLD_WORKDIR
cd $OLD_WORKDIR

# 启动节点
# FullNode:
nohup java -Xmx12g -XX:+UseConcMarkSweepGC -jar FullNode.jar -c configs/vision-mainnet.config &

# FVGuarantee:
nohup java -Xmx12g -XX:+UseConcMarkSweepGC -jar FullNode.jar --witness -p <privateKey> -c configs/vision-mainnet.config &

# 如果有需要使用其他的witness账户, 请自行替换 <privateKey>

📘

使用 Google tcmalloc 库优化内存分配

若是使用 Google tcmalloc 库, 请在启动节点的命令前设置相关环境变量 , 比如,在 Ubuntu 18.04 上启动命令如下所示:

export LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libtcmalloc.so.4"
export TCMALLOC_RELEASE_RATE=10

nohup java -Xmx12g -XX:+UseConcMarkSweepGC -jar FullNode.jar -c configs/vision-mainnet.config &

5. 升级完成, 请等待全网升级完成

📘

删除备份数据以节约磁盘空间

等待全网升级完后, 用户可以去将前面我们备份的程序包、配置文件和数据库文件进行删除, 从而节约节点机器的磁盘空间

Docker镜像节点升级步骤

1. 关闭Docker 容器并删除

# 关闭docker容器, 请自行替换vision-core服务对应的容器名

docker stop $CONTAINER_NAME

docker rm $CONTAINER_NAME

2. 备份节点数据

# 进入vision-core服务容器映射出来的外部卷, 请自行替换 VOLUME_NAME
cd $VOLUME_NAME

# 备份当前数据库
tar --force-local -zcvf "output-directory-$(date '+%FT%T')-backup.tar.gz" output-directory

3. 拉取最新 docker 镜像并更新配置文件

# 拉取docker镜像
docker pull maintainers/vision-mainnet:latest

# 更新配置文件, 这里假设我们原先的配置文件为docker容器的外部映射卷的configs子目录中的 mainnet.config , 我们进入到 该外部映射卷中,然后执行如下命令:
wget https://vision-mainnet-configs.s3.us-east-2.amazonaws.com/stage001/vision-mainnet.config -O configs/mainnet.config

🚧

先拉取镜像再运行容器

请先独立使用 docker pull 拉取最新的镜像。 再使用下面的 docker run 命令运行容器。 否则对于前面本地拉取过同名镜像的节点会直接使用原先的镜像运行容器。 这样的话, 节点相当于是重启了服务, 而没有升级新的底层代码.

  1. 使用新镜像启动Docker 容器服务
# fv  witness节点:
docker run -itd \
    -v "/data/mainnet:/data/vision" \
    -p 7080:7080 \
    -p 7081:7081 \
    -p 7082:7082 \
    -p 16666:16666 \
    -p 60061:60061 \
    -p 60071:60071 \
    -p 60081:60081 \
    --name vision-mainnet-FVGuarantee \
    maintainers/vision-mainnet:latest --private <private-key>

# 请自行使用自己节点使用的 witness 账户对应的私钥替换<private-key>.


# FullNode 节点:
docker run -itd \
    -v "/data/mainnet:/data/vision" \
    -p 7080:7080 \
    -p 7081:7081 \
    -p 7082:7082 \
    -p 16666:16666 \
    -p 60061:60061 \
    -p 60071:60071 \
    -p 60081:60081 \
    --name vision-fullnode \
    maintainers/vision-mainnet:latest

❗️

保持原有的外部挂载卷

在使用新的镜像重新运行容器时, 请务必注意保持原先的外部容器挂在卷的位置。 不要随意更改。

5. 升级完成, 请等待全网升级完成