Cafe sáng blockchain số 10 - Mạng ngang hàng, khởi nguồn của thế giới phi tập trung.

 Sự thật là, bộ 3 thành phần chính cấu tạo nên công nghệ blockchain là:

  1. Network: Cách mà hàng chục nghìn node tìm thấy nhau và giao tiếp với nhau.
  2. Cấu trúc dữ liệu: Chính là thứ mà các bạn hay nghe nói tới: các block nối tiếp nhau tạo thành chuỗi.
  3. Giao thức đồng thuận: các quy tắc, phương pháp để các node đạt được sự đồng thuận.
Cấu trúc dữ liệu thì tivi báo đài nói suốt rồi, giao thức đồng thuận thì mình đã đề cập đến ở cafe sáng blockchain các số đầu tiên.
Còn phần network cũng quan trọng không kém mà chả thấy ai nhắc đến.
Ly cafe hôm nay sẽ nói về network nhé.
Các bạn có bao giờ đặt câu hỏi, với mạng ngang hàng thì các máy tính(mà cài đặt node) tìm thấy nhau như thế nào?, làm sao mà biết được mạng Bitcoin có 10.000 máy tính đang chạy node? Phi tập trung mà, có ai quản lý đâu?
----
Mỗi blockchain có cách tổ chức network khác nhau, tùy vào thiết kế phần network và giao thức đồng thuận mà có những biến đổi cho phù hợp.
Nhưng trong bài viết này, để ly cafe đỡ đắng, mình sẽ chỉ nhắc đến phần network của Bitcoin, là đại diện cho triết lý cơ bản cho phần network của blockchain
(các blockchain khác có thể có thay đổi, nhưng về tư duy chung là giống nhau).
(Từ phiên bản 0.8.2 trở về trước, bitcoin core cũng có sử dụng IRC, nhưng hiện tại không còn sử dụng nữa nên mình cũng sẽ không đề cập đến ở đây)
---
Mạng ngang hàng( Peer to peer, P2P) là 1 tập hợp các máy tính kết nối với nhau, các máy tính đều có vai trò như nhau, mỗi máy kết nối với 1 số máy khác, tạo thành 1 mạng kiểu như lưới đánh cá, hay 1 mạng nhện.
Nếu là ngang hàng và phi tập trung, không có ai quản lý, vậy khi bạn mới bắt đầu tham gia vào mạng, chưa biết ai với ai, làm sao để biết máy nào ở trong mạng mà kết nối?
Bitcoin sử dụng 1 số hạt giống, gọi là seed. Nghĩa là các node ban đầu, được cấu hình sẵn trong source code. Node của bạn sẽ bắt đầu từ những node này, kết nối với nó, kiểu như sau:
  • Bạn: Ê, cho tao kết nối với
  • Seed 1: Tao bận rồi, nhiều thằng bu vào quá
  • Bạn: thế cho tao xin danh sách những thằng trong network mà mày biết để tao kết nối đến chúng nó.
  • Seed1: đây, tao biết 50 thằng này, mày hỏi nó thử xem.
  • Bạn(kết nối đến thằng B): Ê B, cho tao kết nối với
  • Thằng B: tao cũng bận rồi. mày thử hỏi thẳng C với thằng G xem .
  • Bạn (kết nối đến thằng C): Ê thằng C kia ,cho tao kết nối không tao chém chết cha mày bây giờ.
  • C: ok, tao vẫn còn 1 slot, mày cắm vào đây, nhưng không phải vì tao sợ mày đâu nhé.
  • Bạn: may quá, cám ơn bạn hiền.
Nhưng để đảm bảo an toàn, và đẩy nhanh tốc độ giao tiếp và truyền tải thông tin, bạn cần kết nối đến vài thằng, nên bạn tiếp tục đi hỏi những thằng khác, cũng với quy trình như trên. Đó chính là cách để mạng tham gia vào mạng lưới, và trở thành 1 phần của mạng lưới.
Để có thể biết được tất cả các node trong mạng lưới, để thống kê xem toàn mạng có bao nhiêu node chẳng hạn thì bạn cũng cứ làm như vậy liên tục cho đến khi không còn node nào nữa.
----
Với bitcoin, thì trong source code có sẵn 2 cách để tìm thấy các node hạt giống.
Đầu tiên là DNS seed, là 1 danh sách tên miền của các cá nhân tổ chức khác nhau, có uy tín, mỗi tên miền lại trỏ đến nhiều địa chỉ IP của nhiều node khác nhau.
Node của bạn ban đầu khởi chạy sẽ truy vấn các domain này để lấy danh sách địa chỉ IP của các node hạt giống.
(Danh sách này chứa trong file code này, từ dòng 121 đến 129 nếu bạn nào muốn tham khảo: https://github.com/.../blob/master/src/chainparams.cpp)
Nếu trong trường hợp tất cả các node hạt giống trong các domain trên không hoạt động (hoặc chính domain đó có vấn đề), thì bitcoin core sẽ sử dụng đến 1 danh sách các địa chỉ IP của 1 số node hạt giống được lưu sẵn trong code.
-----
Kết nối xong rồi thì sao nữa?
Khi bạn muốn gửi bitcoin cho ai đó (Gửi 5BTC cho Dinh chẳng hạn), thì bạn sẽ cần tạo 1 giao dịch, ký nó bằng private key, sau đó gửi lên mạng lưới để chờ thợ mỏ xác nhận.
Vậy gửi lên mạng lưới như thế nào, và làm sao thợ mỏ biết được nó?
Bạn sẽ cần 1 node(tự cài, đi mượn, đi thuê, hoặc xài chùa, nhưng phải có kết nối với 1 node, nó là cầu nối giữa bạn và mạng lưới blockchain),
Bạn gửi transaction cho node đó. Lúc này, Node của bạn đang kết nối với 3 thằng A, B,C. Node của bạn sẽ làm như sau:
  • Bạn: Ê 3 thằng kia, tao có giao dịch mới nè.
  • A: OK, để tao xem.... à, giao dịch này hợp lệ, chữ ký hợp lệ, số tiền hợp lệ. Để tao đưa vào mempool (danh sách các giao dịch đang chờ được xác nhận)
  • Vẫn là A, đang kết nối đến thằng X,Y, Z, cũng sẽ làm tương tự như bạn, thông báo với thằng X,Y,Z về 1 giao dịch mới.
  • Cứ thế, Cứ thế, giao dịch của bạn sẽ được phát đi toàn mạng lưới. Và nếu hấp dẫn, các thợ mỏ (kết nối với node của họ) sẽ đưa giao dịch của bạn vào block và bắt đầu đào. Nếu đào thành công thì họ sẽ lấy tiền thưởng và phí giao dịch của bạn.
À, khi 1 thợ mỏ đào thành công 1 block mới, nó cũng sẽ thông báo với node của nó là nó đào được 1 block, rồi các node cũng rỉ tai nhau, lan truyền ra toàn mạng y như đối với giao dịch vậy.

Nhận xét

Bài đăng phổ biến từ blog này

Tấn công thao túng giá trong DeFi - đơn giản, hay gặp nhưng khó nhận diện

Ai bảo bitcoin là hữu hạn

Cafe sáng blockchain - tập 1. PHI TẬP TRUNG (decentralized)

Tổng số lượt xem trang