Flashbots là một cái tên không còn xa lạ trong cộng đồng blockchain và tiền mã hoá. Trong bài viết hôm nay, Coincuatui muốn giới thiệu đến 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ình
Từ giữa năm 2020 đến đầu năm 2021, việc sử dụng Ethereum tăng đột ngột, kết quả điều tra cho thấy có liên quan đến MEV. Điều này dẫn đến mạng lưới bị tắc nghẽn và gây hại cho người dùng thông thường thông qua việc giá gas tăng cao và block space 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 mining pools. 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 mining pools để tránh việc cạnh tranh về chi phí. Tuy nhiên, cách này dẫn đến mối lo ngại về sự tập trung khi xuất hiện thợ đào độc quyền hoặc gian lận trong việc khai thác các mining pools, đe dọa tới sự an toàn của mạng lưới Ethereum. Chính vì lý do đó mà Flashbots được thành lập.
Flashbots cơ bản là một tổ chức kết nối các searcher (tạm dịch: người tìm kiếm, người khai thác) và các mining pools lại với nhau. Tuy nhiên, khác với việc sử dụng các hợp đồng và thỏa thuận riêng tư, thì Flashbots là một hệ thống tham gia mở, trong đó bất kỳ searchers và mining pool nào cũng có thể tham gia. Dù vậy, Flashbots vẫn có sự cạnh tranh vì cho phép các thợ đào nhỏ và những searcher ít nổi bật tham gia. Đặc điểm này khiến Flashbots có lợi hơn so với tình huống một searcher lớn và một miner quan trọng thiết lập một thỏa thuận riêng.
Flashbots hoạt động như sau: Searchers tìm cơ hội MEV từ blockchain. Khi phát hiện ra, thay vì chia sẻ thông tin MEV trên các mempool, searchers gửi nó đến máy chủ Flashbots, kèm theo một khoản thanh toán cho các miners. Như vậy, searchers không lo sợ các thông tin giao dịch bị lộ ra trên mempool.
Cơ chế Flashbot Auction. Nguồn: Flashbots docs
Các thành phần tham gia Flashbots bao gồm:
Vậy giao dịch trong Flashbots diễn ra như thế nào? Khi kiểm tra Etherscan, bạn chỉ cơ bản nhìn thấy những giao dịch đơn giản hay thông tin một ví được gắn tag là Flashbots.
Hãy lấy ví dụ địa chỉ ví 0x8712. Ví này được gắn name tag là "Flashbots Bundle Explorer".
Địa chỉ một ví được gắn tên Flashbots
Địa chỉ ví này thực hiện việc tìm kiếm các bundles (cụm giao dịch), sau đó chuyển đến block builders. Để xem thông tin, bạn nhấn vào tag của ví đó và được chuyển hướng đến trang thông tin về các bundles này.
Flashbots Bundle Explorer
Khối #17976483 gồm có 25 bundles với tổng là 122 giao dịch và phần thưởng cho miner là 0.057 ETH.
Thông tin trong một bundle
Một giao dịch được gói vào một bundle
Phần này mình sẽ giải thích qua ý nghĩa từng bước tạo Flashbots bằng ngôn ngữ Javascript. Trong đoạn code này chỉ minh hoạ đơn giản hai giao dịch chuyển ETH đến một ví và gộp chúng lại thành một bundle để chuyển đến Flashbots.
Khi tạo Flashbots thì những ứng dụng cần có bao gồm:
Nền tảng để code Javascript (dưới đây Visual Studio Code).
Tài khoản trên Alchemy.
Bước 1: Import thư viện ethers và Flashbots/ethers-provider-bundle để lấy các thông tin cần thiết như ethers, BigNumber, wallet (ví) và providers (nhà cung cấp).
Bạn có thể truy cập vào tài liệu của Flashbots để xem những update mới nhất.
Import thư viện ethers và Flashbots/ethers-provider-bundle
Bước 2: Thiết lập nhà cung cấp (provider) tiêu chuẩn. Provider cơ bản là sự kết nối đến blockchain. Ở phần này, bạn cần tạo tài khoản trên Alchemy để lấy một số link cần thiết. Lưu ý chọn mạng lưới Goerli Testnet. Sau đó chọn API Key để lấy link.
Tạo App trên Alchemy
Chọn mục View Key. Trên màn hình sẽ xuất hiện hai đường link để bạn sao chép vào đoạn code.
Truy cập vào View Key
Sao chép HTTPS và Websockets
Thiết lập provider và nhập link từ Alchemy
Bướ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 "new Wallet" là private key được định dạng theo hexadecimal.
Tạo ID và cung cấp private key
Bướ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 Flashbots
Bướ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ư Gas fee và Gwei
Bướ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 thứ nhất
Tương tự thiết lập thêm một giao dịch trong đoạn code này để tạo thành một bundle.
Tạo giao dịch thứ hai
Bước 7: Chạy giả lập block để giao dịch được ký bao gồm trong block đó. Kết quả sẽ đưa ra cho bạn số block.
Tạo lệnh chạy giả lập
Bước 8: Kiểm tra kết quả đã chạy ở bước 7. Nếu kết quả thành công thì điều đó có nghĩa là bundles được gửi thành công đến các block builders và được bao gồm trong khối mà không cần qua mempool. Điều này lý tưởng với những ai không muốn giao dịch bị lộ trong mempool và bị giành đi lợi thế.
Câu lệnh trả về kết quả giả lập
Bước 9: Thiết lập 10 bundles để đảm bảo rằng chúng được bao gồm trong khối. Điều này để phòng trường hợp các block builders không tạo ra khối thì 10 bundles trên sẽ được bao gồm trong khối mà Flashbots đã tạo vì bản thân Flashbots cũng tạo ra các khối.
Trước tiên, tạo vòng lặp để thực hiện gửi 10 bundles chứa các giao dịch đã được ký và gửi vào khối. Các dòng code này cho ra kết quả tương tự như ở bước 8. Nhưng tại đây, các bundles sẽ thật sự được gửi tới các block builders. Và nếu giao dịch không được bao gồm trong khối thì lệnh tiếp tục chạy để bao gồm bundles vào block tiếp theo.
Tạo vòng lặp để thực hiện gửi 10 bundle đến block builders
Tiếp đến, chúng ta muốn biết trạng thái của bundles như thế nào. Nếu như phản hồi là BundleIncluded (bundles được bao gồm trong khối) thì hiện lên câu “Bundle included" và kết thúc quá trình.
Tạo câu lệnh phản hồi thông tin sau khi gửi bundles
Nếu bundles không được bao gồm trong khối thì hiển thị thông số của bundles.
Tạo lệnh hiển thị thông số nếu bundle không được bao gồm trong khối
Kết quả sau khi lệnh chạy thành công khi địa chỉ ví testnet Goerli của bạn được nhập vào ở bước 6 sẽ có thêm 0.002 ETH.
Lưu ý: Nếu bạn chỉ sao chép các đoạn code trên thì sẽ không chạy ra được kết quả. Trên đây chỉ là phần code đơn giản để giúp bạn hiểu cách Flashbots hoạt động thông qua ngôn ngữ lập trình. Để Flashbots chạy được cần có thêm nhiều thư viện dữ liệu như Node Modules, Yarn, Smart Contracts,... và bạn cần có kiến thức lập trình cũng như đọc được hợp đồng thông minh để tạo ra một thư viện hoàn chỉnh vận hành Flashbots này.
Trên đây là những thông tin về Flashbots mà Coincuatui tổng hợp và muốn giới thiệu đến các bạn. Hi vọng những thông tin này sẽ giúp bạn có cái nhìn rõ ràng 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 mình.
Cameron
Nguồn: Coin68