本文へスキップ
このページは英語からの機械翻訳を使用しており、誤りや不明瞭な表現が含まれている可能性があります。最も正確な情報については、オリジナルの英語版をご覧ください。頻繁な更新のため、一部のコンテンツはオリジナルの英語になっている可能性があります。Crowdinでの取り組みに参加して、このページの翻訳改善にご協力ください。 (Crowdin translation page, Contributing guide)

アップグレード・サービス・チェーン

カイアとそのServiceChainは、新機能の開発とバグの修正のため、常に新しいバージョンをリリースしてきた。 このページはServiceChainのバイナリをアップグレードし、ServiceChainのハードフォークブロック番号を設定するためのガイドです。

アップグレード

このセクションでは、ServiceChainバイナリをアップグレードする方法を示します。

注意 ServiceChainバイナリのアップグレードは、不可逆的で後方互換性がない場合があります。 詳細はリリースノートを参照。 例えば、Kaia v1.9.0 release noteにはこうある:

注:このバージョンは、スナップショット同期をサポートするためにデータベースのバージョンを更新します。 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

ハードフォーク

このセクションでは、カイアのハードフォークをServiceChainに適用する手順について説明します。

ServiceChainにハードフォークを適用するには、次のことが必要だ:

  1. ハードフォークに適切なブロック番号を選ぶ
  2. ServiceChainのバイナリをハードフォークをサポートするバージョンにアップグレードする。
  3. ServiceChainにハードフォークのブロック番号を設定する

1) 1) 1) Pick an appropriate block number for the hard fork

ServiceChainのJavascriptコンソールでは、以下のように現在のブロック番号を確認できる。


$ kscn attach --datadir ~/kscnd_home
Kaia JavaScript コンソールへようこそ!
インスタンス: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

ここで、ハードフォークを有効にするために適切なブロック番号を選択する必要があります。 現在のブロックとハードフォークのブロックの間に十分なブロック数(1秒ごとに生成される)があることを確認する。

2. ServiceChainバイナリのアップグレード

ServiceChain バイナリのアップグレード方法については、このページの Upgrade セクションを参照してください。 当面はServiceChainノードを停止しておくこと。 ハードフォークのブロック番号を設定した後、それらを再開します。

3. ハードフォーク・ブロック番号の設定

ServiceChainのバイナリを希望するハードフォークをサポートするバージョンにアップグレードした場合、更新されたgenesisでチェーン設定を再初期化することで、ServiceChainにハードフォークブロック番号を設定することができます。

すべてのServiceChainノードのgenesisを更新し、チェーン設定を再初期化する。

まず、genesis.jsonconfigフィールドにハードフォーク番号を指定する。 例えば、ServiceChainでMagmaのハードフォークを有効化しようとする場合、以下のようにgenesisのconfigフィールドでmagmaCompatibleBlockを指定する必要がある。


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

チェーン設定でハードフォークを有効にするには、以前のハードフォークが有効になっていなければならない。 つまり、Magmaハードフォークを有効にするには、EthTxTypeハードフォークがすでに有効になっていなければならない。 チェーン設定に先行ハードフォークの互換ブロック番号のフィールドがない場合は、それも追加しなければならない。

例えば、Magmaのハードフォークブロック番号を設定したい場合、genesis.jsonconfigフィールドに以下のようにethTxTypeCompatibleBlockがない:


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

以下のように、configフィールドにmagmaCompatibleBlockを追加する際に、ethTxTypeCompatibleBlockも追加する必要がある。


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

Kaiaのハードフォークの歴史はKaia Docsにあります。

ハードフォークを使用して 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 コンソールへようこそ!
インスタンス: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

マグマのハードフォークでは、KIP-71、ダイナミック・ガス料金が導入される。 これにはガス価格の上限と下限が含まれる。

デフォルトでは、上限は7500000000、下限は25000000000に設定されている。 これらの境界は SCN ノードの Javascript コンソールで governance API を使って変更することができます。 もちろん、下限が上限を超えることはない。

ガス料金を固定値に設定するには、ガス料金の上限と下限を同じ値に設定する必要がある。 例えば、SCNノードのJavascriptコンソールでgovernance.vote APIを使用して、ガス料金を0に設定することができます。


$ kscn attach --datadir ~/kscnd_home
Kaia JavaScript コンソールへようこそ!
インスタンス: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)
"あなたの投票が準備されました。あなたのノードが提案者としてブロックを生成するときに、ブロックヘッダに入れられるか、適用されます。あなたの票は重複する可能性があることに注意してください。"
> governance.vote("kip71.upperboundbasefee", 0)
"あなたの投票は準備中です。ブロックヘッダに入れるか、あなたのノードが提案者としてブロックを生成するときに適用されます。あなたの票は重複する可能性があることに注意してください。"

ガバナンス投票とそのアップデートは、マグマのハードフォークの発動に関係なく利用可能である。 つまり、ガバナンス投票はマグマのハードフォーク発動前にも行うことができる。

ガス価格の上限と下限を更新するための投票が成功した場合、その変更は2イスタンブール・エポック後に有効になる(エポックはブロック番号で表される)。

例えば、エポックが3600で、ガス価格の上限と下限を更新する投票がブロック#4000に置かれた場合、その変更はブロック#10800から有効になる。 詳細には、ブロック#7200で最初のエポックに達した時点で投票が確定し、2番目のエポック(ブロック#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."

ページを改善してください。