跳至主要内容
本页面使用机器翻译自英语,可能包含错误或不清楚的语言。如需最准确的信息,请参阅英文原文。由于更新频繁,部分内容可能与英文原文有出入。请加入我们在 Crowdin 上的努力,帮助我们改进本页面的翻译。 (Crowdin translation page, Contributing guide)

升级服务链

Kaia 及其 ServiceChain 不断发布新版本,以开发新功能和修复漏洞。本页是升级 ServiceChain 二进制文件和设置 ServiceChain 硬分叉区块编号的指南。

升级​

本节介绍如何升级 ServiceChain 二进制文件。

注意* 服务链二进制文件的升级可能是不可逆和向后兼容的,这意味着您不能降级到旧版本。有关详细信息,请参阅发行说明。例如,Kaia v1.9.0 发布说明 说:

注意:该版本更新了数据库版本,以支持快照同步。更新到 v1.9.0 后,您不能使用现有数据降级到旧版本。

您可以通过以下链接获取最新版的 Kaia 和 ServiceChain 二进制文件:

要升级 ServiceChain 二进制文件,请停止 ServiceChain 节点并替换二进制文件。例如,您可以使用以下命令停止 SCN 节点,并将二进制文件替换为更新的二进制文件。


$ kscnd stop
Shutting down kscnd: OK
$ cp /path/to/new/kscn /path/to/original/kscn

升级后可以重新启动 ServiceChain 节点。但是,如果计划在 ServiceChain 中激活硬分叉,就必须保持 ServiceChain 节点的宕机。有关 ServiceChain 硬分叉的说明,请参阅 硬分叉。


$ kscnd start

硬分叉​

本节介绍将 Kaia hard fork 应用于 ServiceChain 的步骤。

要将硬分叉应用于 ServiceChain,您需要

  1. 为硬分叉选择一个合适的区块编号
  2. 将 ServiceChain 二进制版本升级到支持硬分叉的版本
  3. 在服务链中设置硬分叉区块编号

1) 为硬分叉选择一个合适的区块编号​

在 ServiceChain 的 Javascript 控制台中,您可以检查当前的区块编号,如下图所示。


$ kscn attach --datadir ~/kscnd_home
欢迎访问 Kaia JavaScript 控制台!
instance:Kaia/vX.X.X/XXXX-XXXX/goX.X.X
datadir: ~/kscnd_home
modules: admin:1.0 debug:1.0 eth:1.0 governance:1.0 istanbul:1.0 klay:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
> kaia.blockNumber
1234

现在,您必须选择一个合适的区块编号来激活硬分叉。确保当前区块和硬分叉区块之间有足够多的区块(每秒产生一个)。

2. 升级服务链二进制文件​

有关升级 ServiceChain 二进制文件的说明,请参阅本页的 Upgrade 部分。确保暂时关闭(或停止)ServiceChain 节点。设置硬分叉区块编号后,您将重新启动它们。

3. 设置硬分叉区块编号​

如果已将 ServiceChain 二进制文件升级为支持所需硬分叉的版本,则可以通过更新 genesis 重新初始化链配置,在 ServiceChain 中设置硬分叉区块编号。

更新 genesis 并重新初始化所有 ServiceChain 节点的链配置​

首先,在 genesis.json 的 config 字段中指定硬分叉编号。例如,如果要在 ServiceChain 中激活 Magma 硬分叉,则应在创世的 "配置 "字段中指定 "magmaCompatibleBlock",如下所示。


{
"config": {
"chainId": 1000,
"istanbulCompatibleBlock": 0,
...
"magmaCompatibleBlock": 1500,
...
},
...
}

要在链配置中启用硬分叉,应先启用之前的硬分叉。也就是说,要启用 Magma 硬分叉,EthTxType 硬分叉应该已经启用。如果链配置中缺少前面硬分叉的兼容区块编号字段,也必须添加。

例如,如果你想设置 Magma 硬分叉区块编号,而你的 genesis.json 的 config 字段中没有 ethTxTypeCompatibleBlock ,如下所示:


{
"config": {
"chainId": 1000,
"istanbulCompatibleBlock": 0,
"londonCompatibleBlock": 0,
"istanbul": {
"epoch": 3600,
"policy":0,
"sub":21
},
...
}
}

在 "配置 "字段中添加 "magmaCompatibleBlock "时,还必须添加 "ethTxTypeCompatibleBlock",如下所示。


{
"config": {
"chainId": 1000,
"istanbulCompatibleBlock": 0,
"londonCompatibleBlock": 0,
"ethTxTypeCompatibleBlock": 1500,
"magmaCompatibleBlock": 1500,
"istanbul": {
"epoch": 3600,
"policy":0,
"sub":21
},
...
}
}

您可以在 Kaia Docs 中找到 Kaia 硬分叉的历史。

如果您已使用所需的硬分叉更新了您的 genesis.json,请重新初始化链配置并应用您的更改。


$ kscn --datadir /path/to/data/directory init /path/to/genesis.json

注意* 重新初始化链配置时打印以下错误日志是正常现象。


ERROR[08/02,09:12:39 Z] [48] The same or more recent governance index exist. Skip writing governance index newIdx=0 govIdxes=[0]

确认更新的链配置​

现在,重新启动 ServiceChain 节点。例如,您可以使用以下命令重新启动 SCN 节点。


$ kscnd start

然后,您可以在 SCN 的 Javascript 控制台中检查更新后的链配置。


$ kscn attach --datadir ~/kscnd_home
欢迎来到 Kaia JavaScript 控制台!
instance:Kaia/vX.X.X/XXXX-XXXX/goX.X.X
datadir: ~/kscnd_home
modules: admin:1.0 debug:1.0 eth:1.0 governance:1.0 istanbul:1.0 klay:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
> governance.chainConfig.magmaCompatibleBlock
1500

硬分叉的一些具体情况​

本节将介绍特定硬分叉的一些细节。

Magma ​

Magma 硬分叉引入了 KIP-71,即动态气体费。它包括天然气价格的上限和下限。

默认情况下,上限设置为 7500000000,下限设置为 25000000000。您可以使用 governance APIs 在 SCN 节点的 Javascript 控制台中更改这些边界。显然,下限不能超过上限。

要将天然气价格设置为静态值,必须将天然气价格的上限和下限设置为相同的值。例如,您可以在 SCN 节点的 Javascript 控制台中使用 "governance.vote "API 将天然气价格设为 "0"。


$ kscn attach --datadir ~/kscnd_home
欢迎访问 Kaia JavaScript 控制台!
instance:Kaia/vX.X.X/XXXX-XXXX/goX.X.X
datadir: ~/kscnd_home
modules: admin:1.0 debug:1.0 eth:1.0 governance:1.0 istanbul:1.0 klay:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
> governance.vote("kip71.lowerboundbasefee", 0)
"Your vote is prepared.您的投票已准备就绪,将放入区块头,或在您的节点作为提案人生成区块时应用。请注意,您的投票可能是重复的。"
> governance.vote("kip71.upperboundbasefee", 0)
"您的投票已准备就绪。您的投票已准备就绪,它将被放入区块头,或在您的节点作为提案人生成区块时应用。请注意,您的投票可能是重复的。"

注 无论 Magma 硬分叉是否激活,都可以使用治理投票及其更新。也就是说,治理投票也可以在 Magma 硬分叉激活之前进行。

如果更新天然气价格上限和下限的投票成功,这些更改将在 2 个伊斯坦布尔纪元后生效(纪元的值以块号表示)。

例如,如果历时为 3600,而更新天然气价格上下限的投票被置于区块 #4000 中,则这些更改将从区块 #10800 开始生效。具体来说,投票将在 #7200 区块达到其第一个纪元时最终完成,而更改将在第二个纪元(#10800 区块)应用。

要检查纪元,可以使用 governanace.itemsAt API,如下所示。


> governance.itemsAt(kaia.blockNumber)
{
governance.governancemode: "none",
governance.governingnode: "0x05ad406f31e22b74f18c9ed65ed1ccd349bbbee0",
governance.unitprice: 0,
istanbul.committeesize: 21,
istanbul.epoch: 3600,
istanbul.policy: 0,
kip71.basefeedenominator: 20,
kip71.gastarget: 30000000,
kip71.lowerboundbasefee: 25000000000,
kip71.maxblockgasusedforbasefee: 60000000,
kip71.upperboundbasefee: 750000000000,
reward.deferredtxfee: false,
reward.minimumstake: "2000000",
reward.mintingamount: "9600000000000000000",
reward.proposerupdateinterval: 3600,
reward.useginicoeff: false
}

你可以看到,"istanbul.epoch "的值为 3600 个区块,通常需要一个小时才能通过。

您还可以使用 "governance.vote "API 更改时间。


> governance.vote("istanbul.epoch", 60)
"Your vote is prepared. It will be put into the block header or applied when your node generates a block as a proposer. Note that your vote may be duplicate."

让这个页面变得更好