Ich verstehe, dass der Zustand von Ethereum seine Konten ist, entweder EOAs oder Verträge.
Aber die Datei genesis.json gibt keine Konten an; stattdessen definiert es zB difficulty
und gas-limit
(Block).
Warum sehe ich also oft, dass genesis.json den Anfangszustand einer Ethereum-basierten Blockchain definiert?
Wenn Sie eine neue Ethereum-Kette starten, ist es möglich, Benutzerkonten und -guthaben und sogar Verträge im Genesis-Block anzugeben, sodass die Blockchain mit einem gewissen Status startet.
Ein Beispiel ist Quorum mit QuorumChain-Konsens. Dies verwendet den Genesis-Block, um einen Kontakt zu erstellen, ihn zu initialisieren und einige Konten mit Salden zu erstellen. Es gibt kein Proof-of-Work-Mining in Quorum, also wird kein Ether erstellt; es muss alles im Genesis-Block angegeben werden und die Gesamtversorgung ist für immer festgelegt.
Sehen Sie sich hier ein Beispiel dafür an , das in der folgenden Datei genesis.json abgeschnitten dargestellt wird . Der "alloc"-Block erstellt zuerst einen Vertrag an der Adresse 0x20 und initialisiert seinen Speicher. Die nächsten Zeilen initialisieren einige Kontoadressen mit großen Ether-Salden (Private-Chain).
{
"alloc": {
"0x0000000000000000000000000000000000000020": {
"code": "606060405236156100c45760e060020a60003504631290948581146100...<truncated>...",
"storage": {
"0x0000000000000000000000000000000000000000000000000000000000000001": "0x02",
"0x0000000000000000000000000000000000000000000000000000000000000002": "0x04",
"0x29ecdbdf95c7f6ceec92d6150c697aa14abeb0f8595dd58d808842ea237d8494": "0x01",
"0x6aa118c6537572d8b515a9f9154be55a3377a8de7991cd23bf6e5ceb368688e3": "0x01",
...
}
},
"0xed9d02e382b34818e88b88a309c7fe71e65f419d": {
"balance": "1000000000000000000000000000"
},
"0xca843569e3427144cead5e4d5999a3d0ccf92b8e": {
"balance": "1000000000000000000000000000"
},
"0x0fbdc686b912d7722dc86510934589e0aaf3b55a": {
"balance": "1000000000000000000000000000"
},
...
}
},
"coinbase": "0x0000000000000000000000000000000000000000",
"config": {
"homesteadBlock": 0
},
"difficulty": "0x0",
"extraData": "0x",
"gasLimit": "0x2FEFD800",
"mixhash": "0x00000000000000000000000000000000000000647572616c65787365646c6578",
"nonce": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
In der öffentlichen Mainnet-Ethereum-Kette haben Sie Recht, dass der ursprüngliche Zustand grundsätzlich leer war, aber das schränkt die Verwendung des Genesis-Blocks zum Erstellen von Zuständen in anderen Ketten nicht ein.
Shuzheng
Benjaminion
Cormacncheese