Demo một vài chức năng với libp2p

Tram Ho

Làm gì bây giờ nhỉ ?

H chúng ta sẽ cùng thử sử dụng một vài chức năng cơ bản của libp2p để gửi tin nhắn ping qua lại giữa hai peer bằng js .

Requirement

  • Nodejs > 12.16.x

Setup folder

Configure libp2p

Tiếp theo là cài đặt libp2p

Basic setup

H thì bạn đã hoàn thành việc Install libp2p rồi h hãy cấu hình một chút . Chúng ta cần 2 module của libp2p đó là TransportCrypto .Tuy nhiên, theo docs của họ khuyên thì cũng nên setup cả Stream Multiplexer . Bắt đầu setup từng phần nào .

Transports

Libp2p sử dụng Transports để thiết lập các kết nối giữa các peer thông qua mạng . Bạn có thể định cấu hình bao nhiêu Transport cũng đc , nhưng trong demo này bạn chỉ cần 1 thôi . Có rất nhiều giao thức đc hỗ trợ nhưng hãy chọn tcp nhé .

Sau khi install xong hãy viết vài dòng code để libp2p có thể sử dụng TCP nào

Trong đó Libp2p.create khởi tạo và modules transport để chọn giao thức và bạn hoàn toàn có thể chọn nhiều giao thức hơn vì transport nhận vào là một array mà .

Connection Encryption

Mọi kết nối phải được mã hóa để đảm bảo tính bảo mật cho người dùng . Có rất nhiều module Crypto được phát triển cho libp2p và trong demo này thì hãy sử dụng libp2p-secio

Thêm phần secio vào :

Multiplexing

Mặc dù Multiplexing không phải là bắt buộc nhưng theo docs của họ thì học khuyến khích vì nó giúp cải thiện hiệu quả của các kết nối trên các giao thức mà libp2p chạy .

Thêm phần mplex vào :

Chạy thử nào

Chúng ta đã config Transport, CryptoStream Multiplexer module rồi h hãy chạy libp2p node nào . Sử dụng libp2p.start()libp2p.stop() để start và stop node.

Một libp2p node cần phải listen một address trên giao thức mà chúng ta đã cài đặt .Theo đó chúng ta sẽ install thêm multiaddr để tạo một multiaddress tcp và thêm nó vào node

Thêm multiaddr vào

Sau đó chạy thử bằng lênh node src/index và đây là kết quả :

Ping pong !

Mọi thứ đã đc setup ngon lành từ giao thức đến bảo mật ,… hãy thử kết nối chúng với nhau nào .

Chúng ta có thể sử dụng libp2p.ping() để gửi “ping” từ peer này đến một peer khác. Peer nhận được “ping” sẽ gửi lại “pong” và như vậy chúng ta biết đc các peer có thể connect đc với nhau .Đồng thời có thể kiểm tra độ trễ giữa các peer

Chúng ta cần truyền peer multiaddress thông qua command line vì thế chúng ta cần thêm process

Sau đó chúng ta thử truyền multiaddress từ commad line và thử ping xem thế nào . Và đây sẽ là code full

Hãy bắt đầu chạy trước 1 node libp2p node src/index.js . Kết quả :

Mở một terminal khác lấy địa chỉ multiaddress truyền vào . Ví dụ theo đúng address bên trên chạy :

Kết quả :

Như vậy là 2 peer này đã có thể communicating với nhau thông qua multiplexed trên một kênh bảo mật .

Connect vs các peer khác

Khi node libp2p của chúng đã chạy đc thì đã đến lúc thử kết nối nó với public network. Chúng ta có thể làm điều này thông qua peer discovery. Hãy thử tính năng này bằng cách tạo một file mới nhé .

Peer Discovery

Ý tưởng chung ở đây đó là sẽ có một danh sách cố định một vài peer thường sẽ được sử dụng để cho các node mới tham gia mạng kết nối , nhưng tất nhiên sẽ phải kết hợp thêm một vài cơ chế khám phá khác để đảm bảo bạn có thể tìm các ra các peer khác quan trọng đối với app của mình . Có một số cách sau đây để tìm thấy các peer available trên mạng:

  • Nếu bạn đã có được địa chỉ của một vài peer khác thì cách đơn giản nhất là dùng libp2p-bootstrap
  • Nếu app của bạn chạy trên browser thì có thể sử dụng libp2p-webrtc-star nó sẽ khám phá các peer khác dựa vào peer sharing service
  • Một cách tiếp cận khác đó là sử dụng libp2p-kad-dhtcơ bản thì nó sẽ crawl dữ liệu về network và tìm các peer mới một cách random dựa trên dữ liệu trên các peer mà nó đã kết nối đc .

Để đơn giản thì mình sẽ sử dụng libp2p-bootstrap và thay đổi giao thức thành websocket ( vì các node kia sử dụng giao thức này ) . Install libp2p-bootstrap :

code sẽ như thế này :

peer:discoverypeer:on là hai Event mà libp2p cung cấp các bạn có thể xem thêm tại đây https://github.com/libp2p/js-libp2p/blob/master/doc/API.md#events

Kết quả :

Reference

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo