Ethereum Özel Ağı Nasıl Oluşturulur?


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.

Düğüm 1 Kodlama URL'si

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/

Reklam

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s