Есть много причин для создания частной сети, в основном:
Создать две учетные записи,соответственноaccount 1
иaccount 2
,Используется в качестве начального адреса валидатора.
# node
# account 1
$ geth --datadir ./node account new
INFO [09-27|09:40:38.644] Maximum peer count ETH=50 total=50
INFO [09-27|09:40:38.645] Smartcard socket not found, disabling err="stat /run/pcscd/pcscd.comm: no such file or directory"
Your new account is locked with a password. Please give a password. Do not forget this password.
Password:
Repeat password:
Your new key was generated
Public address of the key: 0x51C4d2FeEBBAd01c2202d7CE772de1D953571201
Path of the secret key file: node/keystore/UTC--2024-09-27T01-40-44.544853516Z--51c4d2feebbad01c2202d7ce772de1d953571201
- You can share your public address with anyone. Others need it to interact with you.
- You must NEVER share the secret key with anyone! The key controls access to your funds!
- You must BACKUP your key file! Without the key, it's impossible to access account funds!
- You must REMEMBER your password! Without the password, it's impossible to decrypt the key!
# account 2
$ geth --datadir ./node account new
INFO [09-27|09:41:29.078] Maximum peer count ETH=50 total=50
INFO [09-27|09:41:29.079] Smartcard socket not found, disabling err="stat /run/pcscd/pcscd.comm: no such file or directory"
Your new account is locked with a password. Please give a password. Do not forget this password.
Password:
Repeat password:
Your new key was generated
Public address of the key: 0x19Eac074dba9BBa2Eb97FFE7BBA80A9E9E83EcBe
Path of the secret key file: node/keystore/UTC--2024-09-27T01-41-34.412585202Z--19eac074dba9bba2eb97ffe7bba80a9e9e83ecbe
- You can share your public address with anyone. Others need it to interact with you.
- You must NEVER share the secret key with anyone! The key controls access to your funds!
- You must BACKUP your key file! Without the key, it's impossible to access account funds!
- You must REMEMBER your password! Without the password, it's impossible to decrypt the key!
Настройте файл конфигурации генезис-блокаgenesis.json
,Содержание следующее:
{
"config": {
"chainId": 377777,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"berlinBlock": 0,
"clique": {
"period": 5,
"epoch": 30000
}
},
"difficulty": "1",
"gasLimit": "8000000",
"extradata": "0x000000000000000000000000000000000000000000000000000000000000000051C4d2FeEBBAd01c2202d7CE772de1D95357120119Eac074dba9BBa2Eb97FFE7BBA80A9E9E83EcBe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"alloc": {
"51C4d2FeEBBAd01c2202d7CE772de1D953571201": {
"balance": "100000000000000000000"
},
"19Eac074dba9BBa2Eb97FFE7BBA80A9E9E83EcBe": {
"balance": "100000000000000000000"
}
}
}
Начальный адрес валидатора должен пройти
extradata
Спецификация поля。
$ geth --datadir ./node init ./genesis.json
После создания генезис-блока можно запустить узел частной цепи.
# networkid Указан ли идентификатор ChainId в файле Genesis.json?
$ geth --datadir ./node --networkid 377777
$ geth attach ./node/geth.ipc
Welcome to the Geth JavaScript console!
instance: Geth/v1.13.15-stable-c5ba367e/linux-amd64/go1.22.7
at block: 1 (Fri Sep 27 2024 10:01:07 GMT+0800 (CST))
datadir: /root/vscode/ethereum/node
modules: admin:1.0 clique:1.0 debug:1.0 engine:1.0 eth:1.0 miner:1.0 net:1.0 rpc:1.0 txpool:1.0 web3:1.0
To exit, press ctrl-d or type exit
# Получить последнюю высоту блока
> eth.blockNumber
1
# Получите последнюю информацию о блоках
> eth.getBlock('latest')
{
difficulty: 2,
extraData: "0xd883010d0f846765746888676f312e32312e39856c696e757800000000000000ebcda637df33928e4ce34051f777ccac21c643a8dcd1984b019984af41d99d5c41ff73559c837b0204c7764c71d8b5b49ecf63a555ee127e3d0cc86673d3214100",
gasLimit: 8007811,
gasUsed: 0,
hash: "0xe4c14eb995dbcc9652a53fa8d47402dead30fa82af57b11399f9db23b06ab78b",
logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
miner: "0x0000000000000000000000000000000000000000",
mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
nonce: "0x0000000000000000",
number: 1,
parentHash: "0xb2ad7555b68d5c1e334d44033ef78c869fa4248a64a976a172318126a3db55a7",
receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
size: 606,
stateRoot: "0xc5f02ccb91cfbde9f92912bb02aac9b2601e9a6e41ea9335343fa1991d277a5a",
timestamp: 1727402467,
totalDifficulty: 3,
transactions: [],
transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
uncles: []
}
# Получить баланс счета
> eth.getBalance("0x51C4d2FeEBBAd01c2202d7CE772de1D953571201")
100000000000000000000
> eth.getBalance("0x19Eac074dba9BBa2Eb97FFE7BBA80A9E9E83EcBe")
100000000000000000000
# Получить список аккаунтов
> eth.accounts
["0x51c4d2feebbad01c2202d7ce772de1d953571201", "0x19eac074dba9bba2eb97ffe7bba80a9e9e83ecbe"]
curl
Командный тест:
# Получить последнюю высоту блока,result это шестнадцатеричная строка
$ curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' http://localhost:8545
{"jsonrpc":"2.0","id":1,"result":"0x1"}
# Получить баланс счета
curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x19Eac074dba9BBa2Eb97FFE7BBA80A9E9E83EcBe","latest"],"id":1}' http://localhost:8545
{"jsonrpc":"2.0","id":1,"result":"0x56bc75e2d63100000"}
extradata
Поле является частью заголовка блока Ethereum и в основном используется для Proof of Authority (PoA) Механизмы консенсуса (такие как Клика). Он содержит конкретную информацию для облегчения консенсуса и проверки между узлами. Далее идет пара extradata
Подробное введение полей:
extradata
Обычно содержит адрес подписывающего лица (или валидатора) текущего блока. Эти адреса представляют собой узлы в сети, которым разрешено генерировать блоки.extradata
представляет собой массив байтов, его структура обычно следующая:
extradata
Общая длина в байтах отвечает всем требованиям.Предположим, у вас есть три адреса подписывающего лица,extradata
Этапы строительства следующие:
extradata
Используется для определения того, какой узел имеет право генерировать новые блоки в определенный момент.extradata
Это часть заголовка блока, обеспечивающая его передачу вместе с другой информацией блока, повышая целостность и согласованность данных.extradata
из Длина в байтов, как и ожидалось, неправильный Формат может привести к сбою запуска цепочки.