ということで検索して出てきたParityのPoAでネットワークを建てたらめちゃくちゃ軽くなってかなり満足した。
本当はそこでおしまいのはずだったのだけれど、「ところでコマンドがopenethereumとかなんで名前違うの?」と調べてるうちにParityが合併みたいになって、さらにはOpenEthereumのサポートさえ終わってることに気付く。
どんだけ浦島なことしてんのと落胆しつつNethermindを試した日記です。
基本はNamebase(github)に書いてあることとあるものですべて終わります。
ただ、Debianでソースからあれこれしたら10ギガ近くも容量を取られたので全消しして結局Namebaseサイトからビルド済みをダウンロードしました。
ほとんどコピーだけれど変えた部分とか参考になればどうぞ。なんか余分なものとか、ローカルとは言え有効になってると嫌だなぁってモジュールは除いてます。
もとはgithubのspaceneth.jsonです。
{
"name": "Jpu Network",
"engine": {
"NethDev": {
"params": {
}
}
},
"params": {
"gasLimitBoundDivisor": "0x0400",
"accountStartNonce": "0x0",
"maximumExtraDataSize": "0x20",
"minGasLimit": "0x1388",
"networkID": "0x3e7",
"eip140Transition": "0x0",
"eip145Transition": "0x0",
"eip150Transition": "0x0",
"eip155Transition": "0x0",
"eip160Transition": "0x0",
"eip161abcTransition": "0x0",
"eip161dTransition": "0x0",
"eip211Transition": "0x0",
"eip214Transition": "0x0",
"eip658Transition": "0x0",
"eip1014Transition": "0x0",
"eip1052Transition": "0x0",
"eip1283Transition": "0x0",
"eip1283DisableTransition": "0x0",
"eip152Transition": "0x0",
"eip1108Transition": "0x0",
"eip1344Transition": "0x0",
"eip1884Transition": "0x0",
"eip2028Transition": "0x0",
"eip2200Transition": "0x0",
"eip2315Transition": "0x0",
"eip2537Transition": "0x0",
"eip2565Transition": "0x0",
"eip2929Transition": "0x0",
"eip2930Transition": "0x0",
"eip1559Transition": "0x0",
"eip3198Transition": "0x0",
"eip3529Transition": "0x0",
"eip3541Transition": "0x0"
},
"genesis": {
"seal": {
"ethereum": {
"nonce": "0x0000000000000042",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
},
"difficulty": "0x01",
"author": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x1000000"
},
"nodes": [
],
"accounts": {
"0000000000000000000000000000000000000000": { "balance": "1" },
"0000000000000000000000000000000000000001": { "balance": "1", "nonce": "0", "builtin": { "name": "ecrecover", "pricing": { "linear": { "base": 3000, "word": 0 } } } },
"0000000000000000000000000000000000000002": { "balance": "1", "nonce": "0", "builtin": { "name": "sha256", "pricing": { "linear": { "base": 60, "word": 12 } } } },
"0000000000000000000000000000000000000003": { "balance": "1", "nonce": "0", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "balance": "1", "nonce": "0", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0000000000000000000000000000000000000005": { "balance": "1", "nonce": "0", "builtin": { "name": "modexp", "activate_at": 1700000, "pricing": { "modexp": { "divisor": 20 } } } },
"0000000000000000000000000000000000000006": { "balance": "1", "nonce": "0", "builtin": { "name": "alt_bn128_add", "activate_at": 1700000, "pricing": { "linear": { "base": 500, "word": 0 } } } },
"0000000000000000000000000000000000000007": { "balance": "1", "nonce": "0", "builtin": { "name": "alt_bn128_mul", "activate_at": 1700000, "pricing": { "linear": { "base": 40000, "word": 0 } } } },
"0000000000000000000000000000000000000008": { "balance": "1", "nonce": "0", "builtin": { "name": "alt_bn128_pairing", "activate_at": 1700000, "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } } },
"0000000000000000000000000000000000000009": { "balance": "1" },
"0x123456789abcdffghijklmnopqrstuvwxyz...": { "balance": "100000000000000000000" }
}
}
configはこんな感じ
{
"Init": {
"WebSocketsEnabled": false,
"IsMining": true,
"StoreReceipts" : true,
"EnableUnsecuredDevWallet": true,
"DiscoveryEnabled": false,
"GenesisHash": "0x...",
"ChainSpecPath": "jpu/jpu.json",
"BaseDbPath": "node/db",
"LogFileName": "node/clique.logs.txt",
"StaticNodesPath": "Data/static-nodes.json"
},
"Aura": {
"ForceSealing": false
},
"Pruning": {
"CacheMb": 64
},
"Network": {
"OnlyStaticPeers": true
},
"JsonRpc": {
"Enabled": true,
"EnabledModules": ["Eth", "Web3", "Net"],
"Port": 9999
},
"KeyStore": {
"KeyStoreDirectory": "node/keystore",
"BlockAuthorAccount": "0x123456789abcdffghijklmnopqrstuvwxyz...",
"UnlockAccounts": "0x123456789abcdffghijklmnopqrstuvwxyz...",
"PasswordFiles": ["node.pwds"]
}
}
あとはもうかんたん、「./Nethermind.Runner -c ./node/configs/config.cfg」ですね! 一通り確認したら、ログを見やすくするために「--log ERROR」もしくは「--log WARN」のオプションをつけることをお勧めします。
GenesisHashは一回起動しないとわからないので、一行抜いておいて、後から足してください。この行はなくてもいいけれど、エラーが出るのでデータベースのうっかり上書き予防に少し役立ちます。
こんだけで一応コントラクトあげたりする、ちょっとしたブロックチェーンとして事足ります。
ただ、マイニングされたときのガス代がどこかに消えてるんですよ。なんか最初につくられるアカウントにも入っていなくて、Init moduleのIsMiningとMining moduleのEnabledとの違いの謎を解明したらわかるかな?
他にも問題があって、本当はPoAで構築したいんだけれど、どんなトランザクションもなにしてもpendingから一向にすすまない!
構築でき方からのご連絡を切に希望しております。今後、Web3関連の仕事のお手伝いお願いします!
近くの小学校は今日から新学期でした。
今年度も頑張っていきましょう!!
ではまた。
2023/4/6
--------------------------------