Flashbots là một cái tên rất quen thuộc trong cộng đồng blockchain và tiền mã hoá. Trong bài viết này, Mytour muốn giới thiệu cho bạn một số thông tin cơ bản và cách Flashbots hoạt động thông qua ngôn ngữ lập trình.
Cách Flashbots hoạt động thông qua ngôn ngữ lập trình1. Giới thiệu về Flashbots
1.1. Tại sao cần có Flashbots
Từ giữa năm 2020 đến đầu năm 2021, việc sử dụng Ethereum tăng đột ngột, điều tra cho thấy có liên quan đến MEV. Kết quả là mạng lưới bị tắc nghẽn và gây hại cho người dùng thông thường với giá gas tăng cao và không gian khối bị hạn chế.
Để đối phó với tình hình này, một số người dùng đã phải sử dụng các thỏa thuận riêng tư với các nhóm đào. Thay vì công khai chia sẻ giao dịch MEV của họ, họ trực tiếp gửi chúng đến các nhóm đào để tránh cạnh tranh về chi phí. Tuy nhiên, cách này gây ra mối lo ngại về sự tập trung khi có thợ đào độc quyền hoặc gian lận trong việc khai thác các nhóm đào, đe dọa đến sự an toàn của mạng lưới Ethereum. Chính vì lý do đó mà Flashbots được thành lập.
- Xuất hiện MEV bot có 'thành tích khủng' chỉ sau vài tháng hoạt động
- Ngày 'ăn nên làm ra' của MEV với kỷ lục 11 triệu USD nhờ vào vụ tấn công Curve Finance
- MEV Bot thu lợi hơn 2 triệu USD trên friend.tech
Flashbots cơ bản là một tổ chức kết nối các searcher (người tìm kiếm, người đào) và các nhóm đào lại với nhau. Khác với việc sử dụng các giao kèo riêng tư, Flashbots là một hệ thống mở, cho phép tất cả các searcher và nhóm đào tham gia. Tuy nhiên, Flashbots vẫn phải đối mặt với sự cạnh tranh vì cho phép các thợ đào nhỏ và các searcher ít nổi bật tham gia. Điều này giúp Flashbots tránh được tình trạng một searcher lớn và một nhóm đào quan trọng thiết lập một giao kèo riêng.
Flashbots hoạt động như sau: Searchers tìm kiếm cơ hội MEV trên blockchain. Khi phát hiện, thay vì chia sẻ thông tin MEV trên mempool, searchers gửi nó đến máy chủ Flashbots, kèm theo thanh toán cho các nhóm đào. Điều này giúp searchers không lo lắng thông tin giao dịch bị lộ trên mempool.
1.2. Cơ chế đấu giá của Flashbots
Cơ chế Đấu giá của Flashbots. Nguồn: Tài liệu FlashbotsCác thành phần tham gia Flashbots bao gồm:
- Searchers là những người dùng của mạng lưới Ethereum. Những người này theo dõi trạng thái của blockchain và gửi các gói giao dịch tới người xây dựng khối thay vì qua mạng lưới p2p. Điều này giúp searchers giữ tính riêng tư trước giao dịch (Riêng tư trước giao dịch). Searchers đưa ra các đề xuất gói giao dịch thông qua các giao dịch Ethereum.
- Block builders là những chuyên gia chấp nhận giao dịch từ người dùng và searchers, tạo ra các khối có lợi nhuận từ những giao dịch đó. Sau đó, các khối này được gửi đến các relay.
- Relayer được giao nhiệm vụ chọn ra các khối có lợi nhuận cao nhất từ các builders và gửi chúng đến validator.
- Thích ứng với Mev-boost, Validator chọn ra các khối có lợi nhuận cao nhất từ các relay và đưa vào mạng lưới.
2. Kiểm tra giao dịch Flashbots trên Etherscan
Vậy giao dịch trong Flashbots diễn ra như thế nào? Khi kiểm tra Etherscan, bạn chỉ nhìn thấy những giao dịch đơn giản hoặc thông tin một ví được gắn tag là Flashbots.
Ví dụ, hãy xem ví có địa chỉ 0x8712. Ví này đã được đặt tên là 'Trình duyệt Gói Flashbots'.
Ví được đặt tên là FlashbotsVí này thực hiện chức năng tìm kiếm các gói (bundles), rồi chuyển chúng đến các xây dựng khối. Để xem chi tiết, bạn nhấn vào tên ví và sẽ được đưa đến trang thông tin về các gói này.
Trình duyệt Gói FlashbotsKhối #17976483 bao gồm 25 gói với tổng cộng 122 giao dịch và phần thưởng cho thợ mỏ là 0,057 ETH.
Thông tin bên trong một gói
Mỗi giao dịch được nhóm lại thành một gói3. Tạo Flashbots
Ở phần này, chúng ta sẽ thảo luận về cách tạo Flashbots bằng ngôn ngữ Javascript. Đoạn mã dưới đây minh họa việc gửi hai giao dịch chuyển ETH đến một địa chỉ và góp chúng thành một gói để gửi đến Flashbots.
Khi tạo Flashbots, các ứng dụng cần bao gồm:
Sử dụng nền tảng Visual Studio Code để lập trình Javascript.
Có tài khoản trên Alchemy.
Bước 1: Nhập thư viện ethers và Flashbots/ethers-provider-bundle để truy xuất các thông tin cần thiết như ethers, BigNumber, ví (wallet), và nhà cung cấp (provider).
Hãy truy cập tài liệu của Flashbots để cập nhật những thông tin mới nhất.
Nhập thư viện ethers và Flashbots/ethers-provider-bundleBước 2: Thiết lập nhà cung cấp (provider) tiêu chuẩn. Provider là cầu nối đến blockchain. Bạn cần tạo tài khoản trên Alchemy để lấy link cần thiết. Lưu ý chọn mạng Goerli Testnet và API Key.
Tạo Ứng dụng trên AlchemyChọn mục Xem Key. Trên màn hình sẽ hiển thị hai liên kết để bạn sao chép vào đoạn mã.
Truy cập vào Xem Key
Sao chép Liên kết HTTPS và Websockets
Thiết lập nhà cung cấp và nhập liên kết từ AlchemyBước 3: Tạo Flashbots ID. Flashbots ID là một địa chỉ ví trên Ethereum, được dùng để ký các bundles và nhận dạng ai là người tạo ra các bundles đó. ID quan trọng để giúp nhận diện danh tiếng của người tạo và đảm bảo rằng những bundles này được chấp nhận sớm. Tạo một ví và lấy private key để nhập vào lệnh.
Dãy số sau 'mới Wallet' là private key được định dạng theo hexadecimal.
Tạo ID và cung cấp private keyBước 4: Tạo nhà cung cấp Flashbots. Đoạn code này có thể tham khảo từ Github. Trong đó, Provider và authSigner đã được tạo trong bước 2 và 3.
Tạo Provider cho FlashbotsBước 5: Tạo một số biến cần có cho hai giao dịch. Ở đây chúng ta cần tạo mức phí gas để đảm bảo giao dịch được xác nhận vì khi bạn tạo bundles và chuyển chúng đến block builders thì cần gửi rewards (ở đây rewards là gas) để họ chấp nhận bundles của bạn.
Tạo các biến như Phí Gas và GweiBước 6: Tạo tối thiểu hai giao dịch vì một bundle yêu cầu có từ hai giao dịch trở lên. Thực tế nó sẽ giống với giao dịch chuyển ETH từ ví này sang ví khác trên MetaMask nhưng hình bên dưới hiển thị giao dịch theo ngôn ngữ lập trình.
Đầu tiên cần tạo code để kí bundles của giao dịch muốn gửi. Cụ thể là giao dịch chuyển 0.001 ETH đến ví 0x9A2d (khác với ví ở bước 3). Sau đó thiết lập mức phí gas tối đa mà bạn muốn giao dịch được chấp nhận và chọn chainID là 5 (Goerli).
Tạo giao dịch đầu tiênTương tự, thêm một giao dịch khác vào đoạn mã này để tạo thành một bundle.
Tạo giao dịch thứ haiBước 7: Chạy mô phỏng khối để các giao dịch được ký và bao gồm trong khối đó. Kết quả sẽ cung cấp số lượng khối mô phỏng được tạo ra.
Tạo lệnh chạy mô phỏngBước 8: Kiểm tra kết quả sau khi chạy ở bước 7. Nếu thành công, điều đó ngụ ý rằng các bundles đã được gửi thành công đến các nhà xây khối và được bao gồm trong khối mà không cần thông qua mempool. Điều này lý tưởng cho những người không muốn giao dịch bị tiết lộ trong mempool và mất ưu thế.
Lệnh trả về kết quả của quá trình mô phỏng Bước 9: Thiết lập 10 bundles để đảm bảo chúng được bao gồm trong khối. Điều này đảm bảo rằng nếu các nhà xây khối không tạo ra khối, 10 bundles này sẽ được bao gồm trong khối do Flashbots tạo ra, vì Flashbots cũng có khả năng tạo ra các khối.
Tạo vòng lặp để gửi 10 bundles đến các nhà xây khốiTiếp theo, chúng ta muốn biết trạng thái của các bundles. Nếu phản hồi là BundleIncluded (các bundles được bao gồm trong khối), câu “Bundle included' sẽ được hiển thị và quá trình sẽ kết thúc.
Tạo câu lệnh phản hồi thông tin sau khi gửi các bundlesNếu bundles không được bao gồm trong khối, thông số của các bundles sẽ được hiển thị.
Tạo lệnh hiển thị thông số nếu bundle không được bao gồm trong khốiSau khi lệnh chạy thành công với địa chỉ ví testnet Goerli của bạn được nhập vào ở bước 6, số ETH của bạn sẽ tăng thêm 0.002.
Lưu ý: Nếu bạn chỉ sao chép các đoạn mã trên thì sẽ không thể chạy được. Đây chỉ là phần mã mẫu đơn giản giúp bạn hiểu cách Flashbots hoạt động qua ngôn ngữ lập trình. Để Flashbots hoạt động cần có nhiều thư viện dữ liệu như Node Modules, Yarn, Smart Contracts,... và bạn cần hiểu biết về lập trình cũng như đọc hợp đồng thông minh để tạo ra một thư viện Flashbots hoàn chỉnh.
Tổng kết
Trên đây là một số thông tin về Flashbots mà chúng tôi muốn chia sẻ với các bạn. Hy vọng những thông tin này sẽ giúp bạn hiểu rõ hơn về cách hoạt động của Flashbots thông qua ngôn ngữ lập trình và có thể tự tạo Flashbots cho bản thân.
Cameron
