
IBFT 2.0 kullanarak özel bir ağ oluşturun
Özel bir ağ, test için yapılandırılabilir bir ağ sağlar. Bu özel ağ, IBFT 2.0 (yetki kanıtı) konsensüs protokolünü kullanır .
Bu öğreticideki adımlar, yalıtılmış, ancak korunmayan veya güvenli olmayan bir Ethereum özel ağı oluşturur. Özel ağı uygun şekilde yapılandırılmış bir güvenlik duvarının arkasında çalıştırmanızı öneririz.
Bu öğretici, yalnızca eğitim amaçlı olarak IBFT 2.0 kullanarak özel bir ağ yapılandırır. IBFT 2.0, Bizans hatasına dayanıklı olmak için 4 doğrulayıcı gerektirir.
Önkoşullar
Adımlar
Sayfanın sağ tarafında, dört düğümlü IBFT 2.0 kullanarak özel bir ağ oluşturma adımları listelenmiştir. Dört düğümün tümü doğrulayıcıdır.
1. Dizinler oluşturun
Her düğüm, blok zinciri verileri için bir veri dizini gerektirir.
Özel ağınız için, dört düğümün her biri için dizinler ve her düğüm için bir veri dizini oluşturun:
IBFT-Network/
├── Node-1
│ ├── data
├── Node-2
│ ├── data
├── Node-3
│ ├── data
└── Node-4
├── data
2. Bir yapılandırma dosyası oluşturun
Yapılandırma dosyası, IBFT 2.0 oluşum dosyasını ve üretilecek düğüm anahtar çifti sayısını tanımlar.
Yapılandırma dosyasında iç içe geçmiş iki JSON düğümü vardır. İlki, Besu’nun ortaya çıkan başlangıç dosyasında otomatik olarak oluşturduğu dize genesis
dışında, IBFT 2.0 oluşum dosyasını tanımlayan özelliktir. İkincisi extraData, blockchain
üretilecek anahtar çifti sayısını tanımlayan özelliktir.
Aşağıdaki yapılandırma dosyası tanımını ibftConfigFile.json adlı bir dosyaya kopyalayın ve IBFT-Network dizinine kaydedin:
{
"genesis": {
"config": {
"chainId": 1337,
"berlinBlock": 0,
"ibft2": {
"blockperiodseconds": 2,
"epochlength": 30000,
"requesttimeoutseconds": 4
}
},
"nonce": "0x0",
"timestamp": "0x58ee40ba",
"gasLimit": "0x47b760",
"difficulty": "0x1",
"mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"fe3b557e8fb62b89f4916b721be55ceb828dbd73": {
"privateKey": "8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63",
"comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",
"balance": "0xad78ebc5ac6200000"
},
"627306090abaB3A6e1400e9345bC60c78a8BEf57": {
"privateKey": "c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3",
"comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",
"balance": "90000000000000000000000"
},
"f17f52151EbEF6C7334FAD080c5704D77216b732": {
"privateKey": "ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f",
"comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",
"balance": "90000000000000000000000"
}
}
},
"blockchain": {
"nodes": {
"generate": true,
"count": 4
}
}
}
Özel bir ağ için yapılandırma dosyası oluştururken en son kilometre taşını belirtmenizi öneririz. Bu, en güncel protokolü kullanmanızı ve en yeni işlem kodlarına erişiminizi sağlar.
Mainnet veya herhangi bir genel ağ üzerindeki genesis dosyasındaki hesapları test dışında kullanmayın. Özel anahtarlar görüntülenir, bu da hesapların güvenli olmadığı anlamına gelir.
3. Düğüm anahtarları ve bir genesis dosyası oluşturun
IBFT-Network
, Dizininde düğüm anahtarını ve genesis dosyasını oluşturun:
Mac os işletim sistemi:
besu operator generate-blockchain-config --config-file=ibftConfigFile.json --to=networkFiles --private-key-file-name=key
Besu, networkFiles dizininde aşağıdakileri oluşturur:
genesis.json
– Dört düğümü belirten extraData özelliği içeren genesis dosyası doğrulayıcılardır.- Düğüm adresi kullanılarak adlandırılan ve her düğüm için genel ve özel anahtarı içeren her düğüm için bir dizin.
networkFiles/
├── genesis.json
└── keys
├── 0x438821c42b812fecdcea7fe8235806a412712fc0
│ ├── key
│ └── key.pub
├── 0xca9c2dfa62f4589827c0dd7dcf48259aa29f22f5
│ ├── key
│ └── key.pub
├── 0xcd5629bd37155608a0c9b28c4fd19310d53b3184
│ ├── key
│ └── key.pub
└── 0xe96825c5ab8d145b9eeca1aba7ea3695e034911a
├── key
└── key.pub
4. genesis dosyasını IBFT-Network dizinine kopyalayın
genesis.json
dosyasını IBFT-Network dizinine kopyalayın.
5. Düğüm özel anahtarlarını düğüm dizinlerine kopyalayın
Her düğüm için, anahtar dosyalarını o düğümün data dizinine kopyalayın
IBFT-Network/
├── genesis.json
├── Node-1
│ ├── data
│ │ ├── key
│ │ ├── key.pub
├── Node-2
│ ├── data
│ │ ├── key
│ │ ├── key.pub
├── Node-3
│ ├── data
│ │ ├── key
│ │ ├── key.pub
├── Node-4
│ ├── data
│ │ ├── key
│ │ ├── key.pub
6. İlk düğümü bootnode olarak başlatın
Node-1 dizininde, Düğüm-1’i başlatın:
Mac os işletim sistemi
besu --data-path=data --genesis-file=../genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist="*" --rpc-http-cors-origins="all"
Komut satırı:
--data-path
seçeneği kullanarak Düğüm-1 için veri dizinini belirtir.--rpc-http-enabled
seçeneği kullanarak JSON-RPC API’sini etkinleştirir.--rpc-http-api
seçeneği kullanarak ETH, NET ve IBFT API’lerini etkinleştirir.--host-allowlist
seçeneği kullanarak HTTP JSON-RPC API’sine tüm ana bilgisayar erişimini etkinleştirir.--rpc-http-cors-origins
seçeneği kullanarak HTTP JSON-RPC API aracılığıyla düğüme tüm etki alanı erişimini etkinleştirir.
Düğüm başladığında kodlama URL’si görüntülenir. Aşağıdaki adımlarda Node-1’i bootnode olarak belirtmek için kodlama URL’sini kopyalayın.

7. Düğüm-2’yi başlatın
Başka bir terminal başlatın, Node-2 dizinine geçin ve Node-1’i bootnode olarak başlatırken kopyalanan Node-1 kodlama URL’sini belirterek Node-2’yi başlatın:
Mac os işletim sistemi:
besu --data-path=data --genesis-file=../genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8546
Komut satırı şunları belirtir:
--data-path
seçeneği kullanan Düğüm-2 için veri dizini.--p2p-port
seçeneği kullanarak P2P keşfi için Düğüm-1’e farklı bir bağlantı noktası.--rpc-http-port
seçeneği kullanarak HTTP JSON-RPC için Node-1’e farklı bir bağlantı noktası .--bootnodes
seçeneği kullanan Düğüm-1’in kodlama URL’si.- Düğüm-1 için diğer seçenekler.
8. Düğüm-3’ü başlatın
Başka bir terminal başlatın, Node-3 dizine geçin ve Node-1’i bootnode olarak başlatırken kopyalanan Node-1 kodlama URL’sini belirterek Node-3’ü başlatın:
Mac os işletim sistemi:
besu --data-path=data --genesis-file=../genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8547
Komut satırı şunları belirtir:
--data-path
seçeneği kullanan Düğüm-3 için veri dizini.--p2p-port
seçeneği kullanarak P2P keşfi için Node-1 ve Node-2’ye farklı bir bağlantı noktası.--rpc-http-port
HTTP JSON-RPC için Düğüm-1 ve Düğüm-2’ye farklı bir bağlantı noktası seçeneği kullanılarak.- Düğüm-2 için olduğu gibi bootnode.
- Düğüm-1 için diğer seçenekler.
9. Düğüm-4’ü başlatın
Başka bir terminal başlatın, Node-4 dizinine geçin ve Node-1’i bootnode olarak başlatırken kopyalanan Node-1 kodlama URL’sini belirterek Node-4’ü başlatın:
Mac os işletim sistemi
besu --data-path=data --genesis-file=../genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8548
Komut satırı şunları belirtir:
--data-path
Seçeneği kullanan Düğüm-4 için veri dizini.--p2p-port
seçeneği kullanarak P2P keşfi için Node-1, Node-2 ve Node-3’e farklı bir bağlantı noktası.--rpc-http-port
seçeneği kullanarak HTTP JSON-RPC için Node-1, Node-2 ve Node-3’e farklı bir bağlantı noktası.- Düğüm-2 için olduğu gibi bootnode.
- Düğüm-1 için diğer seçenekler.
10. Özel ağın çalıştığını onaylayın
Başka bir terminal başlatın, JSON-RPC API ibft_getvalidatorsbyblocknumber
yöntemini çağırmak için curl kullanın ve ağın dört doğrulayıcıya sahip olduğunu onaylayın:
curl -X POST --data '{"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockNumber","params":["latest"], "id":1}' localhost:8545
Sonuç, dört doğrulayıcıyı görüntüler:
{
"jsonrpc" : "2.0",
"id" : 1,
"result" : [ "0x1e326b6da177ede2d3eb6d7247bd9f6901d40234", "0x4aaac297fefe4466ebcb0b23ab90c5f466b11556", "0xa267ead2e91e1673e0943b925176b51d9cd4f6d2", "0xe3e680bc0ff485d1d415a384721f19e0db65fea7" ]
}
Besu’nun blok ürettiğini doğrulamak için günlüklere bakın:
2020-12-21 07:22:17.883+10:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #1 / 0 tx / 0 om / 0 (0.0%) gas / (0xde088192f27ca376eea969cb7a4a1de445bd923fde0444194c88e630f7705584) in 0.010s. Peers: 4
2020-12-21 07:22:19.057+10:00 | pool-8-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=2, Round=0}, hash=0x2ca2652fa79ae2b3b6aadcfb13d5d362ffd6207c3b5ae47971e04eb9d05deaa9
2020-12-21 07:22:21.044+10:00 | pool-8-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=3, Round=0}, hash=0x5d9a06cd17127712cfae7d1c25f705f302e146f4b64a73de3c814e1b5a3f9a16
2020-12-21 07:22:23.049+10:00 | pool-8-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=4, Round=0}, hash=0x843981375f4cb2bb0f33a09b647ac27da5df2c539d940d8344c907eede57829c
2020-12-21 07:22:25.060+10:00 | pool-8-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=5, Round=0}, hash=0x82b2069961d9185f7857cad1123de72d715729e122441335db486ea436834d6e
Anahtar dosyaları adım 5’te doğru dizine kopyalanmadıysa, ağ blok üretmeye başlamaz.
Her düğüm için günlükler, genel anahtarın şu dizinden yüklendiğini belirtmelidir data/key
:
2020-12-21 07:16:18.360+10:00 | main | INFO | KeyPairUtil | Loaded public key 0xe143eadaf670d49afa3327cae2e655b083f5a89dac037c9af065914a9f8e6bceebcfe7ae2258bd22a9cd18b6a6de07b9790e71de49b78afa456e401bd2fb22fc from <path to network>/IBFT-Network/Node-1/data/key
Anahtarlar doğru dizine kopyalanmadıysa, Besu başlatırken bir anahtar oluşturur:
2020-12-21 07:33:11.458+10:00 | main | INFO | KeyPairUtil | Generated new public key 0x1a4a2ade5ebc0a85572e2492e0cdf3e96b8928c75fa55b4425de8849850cf9b3a8cad1e27d98a3d3afac326a5e8788dbe6cc40249715c92825aebb28abe3e346 and stored it to <path to network>/IBFT-Network/Node-1/data/key
Yeni bir anahtar oluşturulduysa, yapılandırmada belirtilen doğrulayıcı anahtar, oluşturulan anahtarla eşleşmez ve düğüm, blok oluşturmaya katılamaz.
Sonraki adımlar
Doğrulayıcıları kaldırmak veya eklemek için IBFT API’sini kullanın .
Düğümleri doğrulayıcı olarak eklemek veya kaldırmak için düğüm adresine ihtiyacınız vardır. Her düğüm için oluşturulan dizin, ad olarak düğüm adresine sahiptir.
Bu öğretici, yalnızca eğitim amaçlı olarak IBFT 2.0 kullanarak özel bir ağ yapılandırır. IBFT 2.0, Bizans hatasına dayanıklı olmak için dört doğrulayıcı gerektirir .
Hesapları MetaMask’a aktarın ve işlemleri Hızlı Başlangıç eğitiminde açıklandığı gibi gönderin.
Besu özel anahtar yönetimini desteklemez .
Düğümleri durdur
Özel ağı kullanmayı bitirdiğinizde, her terminal penceresinde Ctrl+c kullanarak tüm düğümleri durdurun.
Not:
Gelecekte IBFT 2.0 ağını yeniden başlatmak için 6’dan başlayın. First Node’u Bootnode olarak başlatın.
Kaynak: https://besu.hyperledger.org/en/stable/private-networks/tutorials/ibft/