Connext Router là thành phần cung cấp thanh khoản (Liquidity Provider) của mạng lưới. Mục đích chính của chúng là tạo điều kiện thuận lợi cho việc hoán đổi chuỗi chéo và chuyển tiếp calldata giữa các chuỗi. Đổi lại, họ nhận được phí cho các dịch vụ.
Trong bài viết này mình sẽ hướng dẫn để setup 1 router thử nghiệm.
Quá trình đấu giá tuyến đường của các router
Một cuộc đấu giá tuyến đường có sự tham dự của hai thành phần đó là người dùng (người có nhu cầu muốn chuyển tiền) và các router. Việc đấu giá tuyến đường giúp cho người dùng có thể chọn được router nào có tỉ lệ swap tốt nhất.
Phía người dùng
Bắt đầu cuộc đấu giá, người dùng sẽ phát đi 1 yêu cầu tới toàn bộ các router về tài sản muốn chuyển đi, số lượng, chain nhận và địa chỉ tại chain nhận. Sau khi gửi đi yêu cầu:
- Người dùng sẽ đợi trong vòng 6s để nhận các bid phản hồi từ routers.
- Nếu trong vòng 6s mà người dùng nhận được nhiều hơn 5 bid phản hồi thì người dùng sẽ kết thúc sớm quá trình đợi này.
Người dùng sẽ kiểm tra các bid này có hợp lệ hay không bằng các kiểm tra sau:
- Chữ ký của bid là hợp lệ để tránh giả mạo router
- Kiểm tra thanh khoản của router để đảm bảo router đủ tiền thực hiện việc swap
- Kiểm tra độ trượt giá của tài sản chuyển đổi, nếu trượt giá lớn hơn số lượng nhận được thì dừng việc chuyển đổi.
Sau khi kiểm tra xong, người dùng sẽ lựa chọn router nào cho số lượng token nhận được là nhiều nhất để thực hiện việc swap.
Phía các router
Các router lắng nghe các gói tin về yêu cầu đấu giá trên một kênh chung, sau khi nhận được gói tin yêu cầu đấu giá, routers sẽ kiểm tra để xem yêu cầu đấu giá có hợp lệ, và router có đủ điều kiện để tham gia đấu giá hay không.
Các bước kiểm tra điều kiện đấu giá:
- Kiểm tra số lượng muốn chuyển đi phải lớn hơn 0 để ngăn ngừa tấn công liên quan đến phí gas
- Kiểm tra xem yêu cầu đấu giá đó đã từng được đấu giá chưa
- Kiểm tra xem đấu giá đã hết hạn hay chưa
Các bước kiểm tra xem router có đủ điều kiện tham dự đấu giá hay không:
- Kiểm tra thanh khoản của router đủ để thực hiện
- Kiểm tra xem số lượng dựa trên công thức: amountReceived = ((amountSent * swapRate) * (1 – (routerFee / 100)) – GasFee
- Kiểm tra số lượng token của router có đủ để trả phí gas
Sau khi các điều kiện thỏa mãn, router sẽ tạo phản hồi bid, ký vào phản hồi này rồi gửi lại cho client.
Cài đặt Docker và Docker Compose
Để thuận tiện nhất cho việc triển khai router mà không mất công quá nhiều cho việc setup thì phía Connext đã cung cấp sẵn file cấu hình Docker Compose. Mình sẽ sử dụng luôn file cấu hình này để chạy 1 router. Hướng dẫn này được viết cho hệ điều hành Ubuntu 20.04, nếu thực hiện trên hệ điều hành khác thì các bạn thực hiện các thao tác tương ứng nhé.
Cài đặt Docker Compose
Compose là một công cụ để xác định và chạy các ứng dụng multi-container Docker. Với Compose, bạn sử dụng tệp YAML để định nghĩa cấu hình các dịch vụ của ứng dụng. Sau đó, với một lệnh duy nhất, bạn tạo và khởi động tất cả các dịch vụ từ cấu hình của mình.
- Chạy câu lệnh sau để tải xuống Docker Compose phiên bản 1.29.2
sudo curl -L “https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
- Tiếp theo phân quyền cho docker compose để có quyền thực thi
sudo chmod +x /usr/local/bin/docker-compose
- Cuối cùng kiểm tra xem đã cài đặt thành công hay chưa bằng lệnh sau:
docker-compose –version
Nếu ra kết quả như hình thì việc cài đặt đã thành công:
Cài đặt Docker CE
Compose chỉ hỗ trợ quản lý cấu hình một cách thuận tiện nhất, còn bản chất các ứng dụng sẽ chạy trên nền docker. Bước này mình sẽ cài đặt docker:
- Đầu tiên mình sẽ thực hiện cập nhật thông tin về các gói cài đặt trong apt trước
sudo apt update
- Tiếp theo sẽ cần cài đặt một số packages để hỗ trợ cho https
sudo apt install apt-transport-https ca-certificates curl software-properties-common
- Sau đó, thêm khóa GPG cho Docker repository vào hệ thống:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
- Thêm Docker Repository vào apt:
sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable”
- Sau đó là cài đặt Docker:
sudo apt install docker-ce
- Docker bây giờ đã được cài đặt, chạy lệnh sau để Docker start Docker service:
sudo systemctl start docker
- Kiểm tra xem Docker có đang chạy hay không:
sudo systemctl status docker
Nếu ra như hình bên dưới thì việc cài đặt đã hoàn thành:
Cấu hình router
Tạo chain providers URL
Trước tiên mình sẽ cần Chain Provider URL. Có thể sử dụng các URL do cộng đồng cung cấp, hoặc sử dụng URL trả phí do một số dự án cung cấp như alchemy, the graph, bware labs… Ở đây mình lựa chọn URL free do alchemy cung cấp.
- Đăng ký tài khoản trên https://www.alchemy.com/
- Sau đó tiến hành tạo app mới
- Sau khi tạo xong mình sẽ có một link với API Key như sau. Lưu lại thông tin này để cấu hình router sau.
Việc test này, mình sẽ làm trên 2 network là Rinkeby và Goerli nên mình sẽ cần tạo ra 2 URL nhé.
Cài đặt Router
Phần này mình sẽ chạy router trên máy chủ đã cài đặt ở phần I.
- Clone nxtp-router-docker-compose repository về máy chủ (nếu chưa có công cụ git thì các bạn cài đặt bằng “apt install git” trước)
git clone https://github.com/connext/nxtp-router-docker-compose.git
- Copy file .env.example thành .env
cp .env.example .env
- Trong file .env có thể sửa các lại cấu hình các port ROUTER, GRAFANA, WEB3SIGNER mà bạn muốn.
- Copy file config.example.json thành config.json
cp config.example.json config.json
- Trong file config.json chỉnh sửa providers bằng link http và api đã tạo trên alchemyapi. Và chỉnh sửa AdminToken với đoạn mật mã mà bạn muốn.
- Phần mnemonic sẽ là passphrase của địa chỉ ví bạn muốn sử dụng cho router. Lưu ý: trên ví bạn cần phải có ETH trong các chain để thực hiện được giao dịch.
- Sau khi cấu hình xong, Tiến hành cài đặt router với lệnh docker-compose. Docker sẽ tự động tải về và cài đặt mà mình không cần phải làm gì.
docker-compose up -d
- Sau khi lệnh đã chạy xong, mình sẽ truy cập vào địa chỉ http://ip:8000/config để có thể lấy địa chỉ signerAddress. Địa chỉ signerAddress sẽ được dùng thực hiện chạy test router trên Connext.
Đến đây thì việc cấu hình đã hoàn thành. Mình sẽ chuyển sang bước test router
Test Router
Lấy token TEST
Để test router bạn truy cập vào trang web https://nxtp.connext.network/ Tại đây sẽ sử dụng mạng testnet Rinkeby.
Sau đó chuyển metamask sang mạng Rinkeby và thực hiện kết nối trang web với ví metamask
Nếu trong ví Testnet Rinkeby của bạn không có ETH thì bạn có thể truy cập vào trang https://faucet.rinkeby.io/ để lấy ETH. ETH lấy được sẽ dùng làm fee gas thực hiện cho các giao dịch sau này.
Tiếp theo thực hiện lấy token TEST về ví bằng cách bấm vào “Get TEST”. Token TEST này sẽ được dùng để thêm vào Liquidity cho phần sau.
Sau khi thực hiện xong giao dịch bạn sẽ nhận được token TEST. Bạn có thể kiểm tra token TEST đã có trên ví chưa hay số lượng token mình có là bao nhiêu, bằng cách bấm vào “Add to Metamask” và bạn có thể vào metamask để kiểm tra.
Tương tự với mạng Goesli cũng vậy, bạn truy cập vào trang https://faucet.goerli.mudit.blog/ để lấy ETH và lấy token TEST về ví.
Thêm token TEST vào Liquidity pool:
Trên giao diện, bạn chuyển sang phần Router để quản lý Liquidity của Router. Bắt đầu tiến hành thêm Liquidity theo cấu hình sau:
- Router Address: là địa chỉ signerAddress trên Router của bạn
- Asset ID: là AssetID lấy ở trong phần cấu hình swapPool trong file cấu hình theo network
- Liquidity to Add: số lượng token bạn muốn thêm.
Sau khi thực hiện cấu hình xong bạn thực hiện Add Liquidity, khi thực hiện giao dịch thành công bạn sẽ thấy token sẽ được thêm vào Liquidity
Để có thể thực hiện swap giữa các mạng với nhau bạn cần thêm đủ Liquidity cho tất cả các Chain. Sau khi đã có đủ Liquidity, bạn có thể thực hiện Swap chuyển token TEST giữa các Chain.
Thực hiện swap token TEST giữa Rinkeby và Goerli
Sau khi thêm Liquidity xong, bạn quay lại giao diện swap để thực hiện việc swap:
Lưu ý:
- Amount phải ít hơn số lượng token trong Liquidity Pool
- Preferred Routers là địa chỉ signerAddress trên Router của bạn
Sau khi thực hiện tranfer xong bạn sẽ nhận được thông tin giao dịch như sau:
Kiểm tra lại token TEST trên các ví metamask bạn sẽ thấy token đã được chuyển qua chain mà bạn muốn.
Tổng kết
Như vậy, mình đã hoàn thành việc triển khai 1 router cho Connext và thực hiện công việc thêm thanh khoản, cũng như swap thành công. Các bước trong hướng dẫn hoàn toàn có thể thực hiện được đối với Mainnet, ngoại trừ việc thêm thanh khoản cần sự trợ giúp từ Connext team.
Phụ lục: Một số lỗi xảy ra mà mình gặp trong quá trình cài đặt:
Không thể “Get Quote”:
- Do cấu hình sai Chain Provider URL. Bạn cần kiểm tra lại phần này.
- Ngoài ra còn có thể do bạn không có đủ Liquidity. Bạn thử kiểm tra lại Liquidity của router.
Lỗi không thể chạy Docker logdna.
- Docker logdna không thể chạy là do bạn chưa cấu hình LOGDNA_KEY trong file .env.
- Để khắc phục lỗi này bạn truy cập vào địa chỉ https://www.logdna.com/ đăng ký 1 tài khoản miễn phí, lấy LOGDNA Key rồi cấu hình trong file .env sau đó update lại docker.
Lỗi không thể chạy Docker Router trên các phiên bản mới.
- Lỗi này là do bạn chưa cấu hình mnemonic trong file config.json
- Bạn chỉ việc tạo 1 địa chỉ ví mới chuyển ETH vào các chain tương ứng và cấu hình mnemonic sau đó update lại docker.
Nếu như bạn gặp vấn đề với Connext Router và muốn tìm hiểu thêm thông tin, hãy liên hệ các kênh sau tại đây nhé
Bài viết được FXCE biên tập với mục đích cung cấp thông tin và phi lợi nhuận. Chúng tôi không khuyến nghị đầu tư và không chịu trách nhiệm cho các quyết định đầu tư liên quan đến nội dung bài dịch.
—————————————————
👉 Theo dõi FXCE Crypto
Group Chat | Research Hub | FXCE Spotlight