Endpoint RPC Cục Bộ
Sử Dụng Endpoint RPC localhost
Trong Backpack
localhost
Trong BackpackĐây là phần giải thích phi kỹ thuật, giúp bạn hiểu rõ vì sao khi sử dụng địa chỉ
http://localhost:XXXX
hoặchttp://127.0.0.1:XXXX
làm RPC tùy chỉnh trong Backpack (và một số ví khác) sẽ không hoạt động.
Bối cảnh
Khi các kỹ sư muốn phát triển hoặc thử nghiệm với dữ liệu on-chain trong môi trường cục bộ, họ thường chạy RPC node ngay trên localhost
.
Điều này chỉ hoạt động cho đến khi các hệ thống hoặc ứng dụng bên ngoài máy tính của bạn cũng cần kết nối hoặc gửi yêu cầu đến RPC đang chạy trên localhost
.
Vấn đề
Từ góc độ mạng máy tính, việc sử dụng các địa chỉ localhost
hoặc 127.0.0.1
cũng giống như bạn đang nói về chính mình (tức là dùng từ me
or I
).
Backpack, cũng như một số ví phổ biến khác, đọc dữ liệu tài sản (như số dư ví, lịch sử giao dịch, NFT,...) thông qua các server và API từ xa, chứ không chạy hoặc thực thi trực tiếp trên thiết bị người dùng. Khi bạn đăng nhập vào Backpack, ứng dụng web hoặc mobile sẽ gửi yêu cầu tới server từ xa để lấy thông tin ví của bạn, bao gồm số dư, lịch sử giao dịch, NFT, v.v.
Khi bạn thiết lập một RPC tùy chỉnh trong ứng dụng ví Backpack, RPC đó sẽ được sử dụng để thay thế các RPC mặc định đã được cài sẵn ở một số chức năng sau:
Ký và gửi giao dịch (Transaction serialization and sending)
Kiểm tra tình trạng mạng
Truy xuất metadata blockchain/mạng
Yêu cầu API của Backpack đọc dữ liệu trực tiếp từ blockchain thay vì từ các nguồn dữ liệu khác nhanh hơn
Việc thiết lập RPC localhost
có thể ảnh hưởng đến ba mục đầu tiên theo những cách khác nhau, nhưng mục số 4 mới là vấn đề chính. Vì API của Backpack là một server từ xa, nên khi bạn yêu cầu nó lấy dữ liệu on-chain từ một RPC có địa chỉ http://localhost:XXXX
, hệ thống sẽ hiểu nhầm như sau:
"Đây là một node RPC blockchain mà chính tôi (server) đang vận hành, và tôi nên gửi yêu cầu đến đó."
Điều này rõ ràng là không chính xác, bởi vì đối với server từ xa,localhost
không phải là máy tính cá nhân của người dùng đang chạy node RPC (thậm chí có thể ở một quốc gia khác).Thay vào đó, RPC tùy chỉnh nên luôn được cấu hình bằng một địa chỉ công khai (public endpoint), không sử dụng bất kỳ địa chỉ nội bộ, mạng cục bộ hoặc các tên mạng dự phòng nào.
Vậy làm thế nào để sử dụng RPC test đang chạy trên localhost
?
Cách Khắc Phục
Điều cốt lõi là RPC tùy chỉnh cần phải là một endpoint có thể truy cập công khai
Hiện có rất nhiều công cụ và ứng dụng hỗ trợ bạn "tunnel" (chuyển tiếp) các ứng dụng đang chạy trên localhost
ra internet công khai. Một số ví dụ phổ biến:
ngrok (được khuyến nghị)
...và nhiều công cụ khác.
Các công cụ này cho phép bạn chọn một cổng (port) trên mạng nội bộ máy tính và mở nó ra internet thông qua tunnel, tạo ra một tên miền tạm thời có thể truy cập từ bên ngoài.
Với ngrok
, sau khi bạn đã tạo và xác minh tài khoản, tất cả những gì bạn cần làm là chạy lệnh sau để thiết lập một tunnel từ localhost cho RPC endpoint của bạn. Sau đó, bạn có thể sử dụng endpoint này làm RPC tùy chỉnh trong ví:
$ ngrok http 8080 # whichever port number you want
Tại Sao Một Số dApp Vẫn Hoạt Động Dù Không Dùng Tunnel?
Trong một số trường hợp, ngay cả khi không sử dụng tunnel từ localhost
, việc cấu hình RPC tùy chỉnh về localhost
vẫn có thể hoạt động bình thường.
Điều này phụ thuộc hoàn toàn vào cách dApp được lập trình. Nếu website của dApp được xây dựng để truy vấn on-chain trực tiếp từ mã chạy trên trình duyệt của bạn, thì vẫn sẽ hoạt động, vì các request RPC được gửi đi từ chính trình duyệt — cùng mạng nội bộ với RPClocalhost
của bạn.
Đó là trường hợp ngoại lệ duy nhất mà bạn không cần phải sử dụng tunnel cho localhost.
Last updated