Tạo chuỗi dịch vụ lồng nhau
Chương này giải thích cách xây dựng mạng lưới ServiceChain theo cấu trúc phân cấp bằng cách thêm mạng lưới ServiceChain mới vào mạng lưới ServiceChain đã được xây dựng trong chương trước. Trong ví dụ này, mạng lưới ServiceChain được thêm vào cũng bao gồm 4 SCN. Mạng lưới ServiceChain được xây dựng trong chương trước là L2 còn Mạng lưới ServiceChain mới được xây dựng sẽ là L3. Chúng ta sẽ kết nối một cầu nối giữa L2 và L3 để tạo ra một cấu trúc phân cấp. Cấu trúc tổng thể của mạng lưới ServiceChain được xây dựng trong chương này sẽ như trong hình bên dưới.
Điều kiện tiên quyết
- Giả sử rằng bạn đã chuyển sang cấu hình ServiceChain và EN Baobab được mô tả trong Chuỗi dịch vụ lồng nhau. Vì vậy, chúng ta sẽ giải thích ngắn gọn những gì đã được giải thích trong phần trước.
- Giả định và hạn chế
- Một EN có thể kết nối trực tiếp với một trong các SCN của ServiceChain L2. Tương tự, một SCN trong L2 của ServiceChain có thể kết nối một-một với một trong các SCN trong L3.
- Một nút SCN có thể có một cầu chính và cả một cầu nối con. Tuy nhiên, số cổng của cầu nối chính và cầu nối con phải được đặt khác nhau. (Ví dụ: cầu nối chính: 50505, cầu nối con: 50506)
- Không phải tất cả các SCN trong L2 đều cần có cầu nối đến EN và tương tự như vậy, không phải tất cả các SCN trong L3 đều cần cầu nối đến L2. Tuy nhiên, để đạt được tính sẵn sàng cao, nên có hai hoặc nhiều cặp cầu nối chính và cầu nối con giữa các chuỗi. Trong chương này, chỉ một cặp sẽ được kết nối giữa L2 và L3 và tính sẵn sàng cao giữa L2 và L3 cũng giống như HA giữa Baobab và L2.
Bước 1: Tạo và cập nhật dữ liệu Homi cho L3
Giống như khi định cấu hình ServiceChain L2, hãy thực thi lệnh homi
để tạo tập lệnh và tập tin cấu hình cho việc xây dựng L3. Bạn có thể chạy homi
trên bất kỳ máy tính để bàn Linux/Mac nào. chainID
của Baobab là 1001
và chainID
của L2 được đặt thành 1002
trong ví dụ trước, vì vậy, để thuận tiện, chainID
của L3 được đặt thành 1003
. Khi vận hành chuỗi khối cho một dịch vụ thực tế, bạn phải đăng ký giá trị chainID
mới tại https://chainlist.defillama.com/ để tránh xung đột chainID
với các ServiceChain và chuỗi EVM khác.
$ ./homi setup --gen-type local --cn-num 4 --test-num 1 --servicechain --chainID 1003 --p2p-port 22323 -o homi-outputCreated : homi-output/keys/passwd1Created : homi-output/keys/passwd2Created : homi-output/keys/passwd3Created : homi-output/keys/passwd4Created : homi-output/scripts/genesis.jsonCreated : homi-output/keys/nodekey1Created : homi-output/keys/validator1Created : homi-output/keys/nodekey2Created : homi-output/keys/validator2Created : homi-output/keys/nodekey3Created : homi-output/keys/validator3Created : homi-output/keys/nodekey4Created : homi-output/keys/validator4Created : homi-output/scripts/static-nodes.jsonCreated : homi-output/keys_test/testkey1Created : homi-output/keys_test/keystore1/0xdC7218621513f71d609653d22C39d79d558d9CDCCreated : homi-output/Klaytn.jsonCreated : homi-output/Klaytn_txpool.json
Cập nhật thông tin địa chỉ IP
và cổng
của các nút ServiceChain L3 trong homi-output/scripts/static-nodes.json
.
[ "kni://358235ccbf97a1f...787f7@192.168.0.21:22323?discport=0&type=cn", "kni://14ac4e3d53de5c7...6c91d@192.168.0.22:22323?discport=0&type=cn", "kni://5f36a456d93da09...8e216@192.168.0.23:22323?discport=0&type=cn", "kni://d62fd0928b9b6e5...6badf@192.168.0.24:22323?discport=0&type=cn"]
Sao chép homi-output
vào tất cả các nút SCN (SCN-L3-01, SCN-L3-02, SCN-L3-03, SCN-L3-04) của ServiceChain L3.
$ scp -r path/to/homi-output user@192.168.0.21:~/ $ scp -r path/to/homi-output user@192.168.0.22:~/ $ scp -r path/to/homi-output user@192.168.0.23:~/ $ scp -r path/to/homi-output user@192.168.0.24:~/
Khởi tạo tất cả các nút.
$ kscn --datadir ~/data init ~/homi-output/scripts/genesis.json$ ls ~/datakeystore klay kscn
Kết nối với tất cả các SCN (SCN-L3-01, SCN-L3-02, SCN-L3-03 và SCN-L3-04), sao chép static-nodes.json
vào thư mục dữ liệu ~/data
và sao chép từng khóa núts
một.
$ cp ~/homi-output/scripts/static-nodes.json ~/data/$ cp ~/homi-output/keys/nodekey{1..4} ~/data/klay/nodekey
Bước 2: Định cấu hình SCN trong L3
Chỉnh sửa conf/kscnd.conf
trên tất cả các SCN trong ServiceChain L3 như sau: PORT
sử dụng 22323, cổng mặc định của ServiceChain. DATA_DIR
là ~/data
.
...PORT=22323...DATA_DIR=~/data...
Chạy ServiceChain trên tất cả các nút SCN trong L3 và kiểm tra xem nó có hoạt động bình thường không.
$ kscnd startStarting kscnd: OK$ kscn attach --datadir ~/data> klay.blockNumber10
Bước 3: Khởi động lại sau khi cài đặt cầu nối chính L2
Kết nối với bảng điều khiển của nút SCN-L2-03, (Lưu ý: không phải L3 mà là L2) nút này sẽ đóng vai trò là cầu nối chính trong ServiceChain L2.
Chỉnh sửa tập tin cấu hình kscn conf/kscnd.conf
của SCN-L2-03 như sau.
SC_MAIN_BRIDGE=1
Khởi động lại kscnd trên SCN-L2-03.
SCN-L2-03$ kscnd stopSCN-L2-03$ kscnd start
Bước 4: Kiểm tra KNI của Nút cầu nối chính
Kiểm tra thông tin KNI của nút SCN-L2-03. Giá trị này sẽ được sử dụng để tạo tập tin main-bridges.json
của nút SCN-L2-03, dùng để thiết lập cầu nối con trong ServiceChain L3.
SCN-L2-03$ kscn attach --datadir ~/data> mainbridge.nodeInfo.kni"kni://87989a5a5dcc165...85b16b@[::]:50505?discport=0"
Bước 5: Định cấu hình cầu nối con L3
Kết nối với nút SCN-L3-01 sẽ tạo một cầu con của ServiceChain L3 (Lưu ý: không phải là L2). Tạo main-bridges.json
trong thư mục ~/data
. Thay thế [::] sau @ bằng địa chỉ IP của nút mà bạn đã kiểm tra ở bước 4.
SCN-L3-01$ echo '["kni://87989a5a5dcc165...85b16b@192.168.0.13:50505?discport=0"]' > ~/data/main-bridges.json
Chỉnh sửa tập tin cấu hình conf/kscnd.conf
của nút SCN-L3-01 với cầu nối con như sau. đặt SC_SUB_BRIDGE
thành 1 để kích hoạt kết nối cầu nối và SC_PARENT_CHAIN_ID
là 1002
, chainID
của L2, Đặt SC_ANCHORING
thành 1 để tự động neo dữ liệu khi khởi động lại. Bạn cũng có thể truy cập tập lệnh shell SCN-L3-01 và bật neo dữ liệu bằng lệnh subbridge.anchoring(true)
hoặc tắt tính năng này bằng lệnh subbridge.anchoring(false)
. SC_ANCHORING_PERIOD
là tham số xác định tần suất gửi các giao dịch neo đến chuỗi mẹ. Đặt nút để neo sau mỗi 10 khối bằng cách đặt giá trị là 10. Mặc định là 1.
SC_SUB_BRIDGE=1…SC_PARENT_CHAIN_ID=1002…SC_ANCHORING=1SC_ANCHORING_PERIOD=10
Khởi động lại kscnd trên SCN-L3-01 sau khi hoàn tất thiết lập.
SCN-L3-01$ kscnd stopShutting down kscnd: KilledSCN-L3-01$ kscnd startStarting kscnd: OK
Kiểm tra subbridge.peers.length
để xem SCN-L3-01 có được kết nối với SCN-L2-03 hay không, kiểm tra subbridge.latestAnchoredBlockNumber
để nắm được số khối được neo mới nhất để xem việc neo có đang được thực hiện hay không.
SCN-L3-01$ kscn attach --datadir ~/data> subbridge.peers.length1> subbridge.latestAnchoredBlockNumber5010