Bài 28: Thực hiện Flashloan trên AAVE đầy đủ nhất

Posted by tommy bao on tháng 12 14, 2021

Tổng quat

Aave, trước đây được gọi là ETHLender, đã dẫn đầu trong không gian DeFi. Aave là người đầu tiên trong lĩnh vực này nảy ra ý tưởng về Khoản vay nhanh . Trước khi cho vay nhanh, bạn sẽ phải đặt cọc một tài sản được thế chấp quá mức để cho vay một tài sản khác. Ví dụ: nếu tôi muốn vay một DAI, tôi sẽ phải gửi một loại tiền điện tử khác vượt quá giá trị đó. Nói cách khác, bạn phải có tiền để vay tiền. Flash Loans đã phá bỏ ý tưởng này. Và họ đã mở ra cánh cửa cho một hệ thống cho vay mới. Họ đã làm điều này bằng cách cho phép người dùng vay mà không cần thế chấp bất cứ thứ gì. Trong hướng dẫn này, bạn sẽ tìm hiểu cách điều này có thể xảy ra và cách bạn có thể tự làm điều đó!

Về Aave

Lấy từ trang web Aave .

Aave là một giao thức thị trường thanh khoản phi tập trung không lưu giữ, nơi người dùng có thể tham gia với tư cách là người gửi tiền hoặc người đi vay. Người gửi tiền cung cấp tính thanh khoản cho thị trường để kiếm thu nhập thụ động, trong khi người đi vay có thể vay theo hình thức thế chấp quá mức (vĩnh viễn) hoặc không tập trung (thanh khoản một khối).

Mặc dù điều đó hoàn toàn chính xác, nhưng nó có thể không có nhiều ý nghĩa đối với bạn nếu bạn chưa quen thuộc với tất cả các thuật ngữ của ngành DeFi. Bạn có thể coi Aave là một ngân hàng giả phi tập trung. Thay vì một ngân hàng trung ương xác thực tất cả các giao dịch, Aave có các hợp đồng thông minh thực hiện tất cả công việc này theo cách tự động. Người gửi tiền đặt mã thông báo của họ vào Aave và bắt đầu kiếm tiền lãi từ khoản tiền gửi của họ. Ngược lại, những người đi vay sẽ làm điều ngược lại. Họ sẽ lấy tiền ra khỏi Aave và sẽ bắt đầu cộng lãi cho số tiền đã vay. Để làm được điều này, chúng phải được tập trung hóa quá mức .

Có một phương pháp khác dành cho những người không muốn gửi tiền vào Aave và chỉ muốn vay. Đây là Khoản vay Nhanh mà chúng tôi đã đề cập trước đó.

Giới thiệu về các khoản cho vay nhanh

Khoản vay Flash đã đề cập trước đây là một cách mới để vay tài sản trên blockchain. Ban đầu được triển khai bởi Aave, các giao thức DeFi thịnh hành khác như dYdX nhanh chóng làm theo khi thêm tính năng mới này. Có một thuộc tính mà tất cả các giao dịch Ethereum đều chia sẻ cho phép các Khoản vay Flash có thể thực hiện được. Và đặc điểm chính này là tính nguyên tử .

Một giao dịch là nguyên tử bất cứ khi nào chuỗi hoạt động của nó là không thể phân chia và không thể quy đổi được. Hoặc bằng tiếng Anh đơn giản - tất cả hoặc không có giao dịch nào xảy ra. Không có nửa vời! Khoản vay Flash tận dụng tính nguyên tử để cho phép người dùng vay mà không cần đăng ký tài sản thế chấp. Trước hết, bất cứ khi nào bạn vay một tài sản trong Khoản vay nhanh, bạn phải trả một khoản phí là 0,09% số tiền đã cho vay. Thứ hai, bạn phải trả lại khoản vay trong cùng một giao dịch mà bạn đã vay. Tuy khả năng này là tuyệt vời nhưng nó có phần hạn chế trong việc sử dụng. Các khoản vay Flash chủ yếu được sử dụng để chênh lệch giá giữa các tài sản .

Thiết lập phối lại

Vì đơn giản, chúng tôi sẽ sử dụng Remix IDE .

Đây là một IDE dựa trên trình duyệt. Còn được gọi là Môi trường Phát triển Tích hợp.
Remix đi kèm với khả năng viết, gỡ lỗi, triển khai và nói cách khác là thao tác các Hợp đồng thông minh Ethereum .

Khi bạn tải Remix trong trình duyệt của mình, bạn sẽ được chào đón bởi menu này.

Chúng tôi sẽ không đi sâu về IDE, vì trọng tâm của hướng dẫn này là về Khoản vay nhanh. Tuy nhiên, bạn sẽ muốn làm quen với bốn phần được đánh dấu: bảng điều khiển chính, bảng điều khiển bên cạnh, bảng điều khiển biểu tượng và thiết bị đầu cuối.

Trước khi bắt đầu viết các hợp đồng thông minh của mình, chúng tôi sẽ muốn tải xuống một tiện ích mở rộng trình duyệt cho phép chúng tôi giao tiếp với chuỗi khối Ethereum. Có một số công cụ mở khóa chức năng như vậy, nhưng công cụ phổ biến nhất là MetaMask .

Thiết lập MetaMask

Phân tích từng bước về cách cài đặt MetaMask.

  1. Bạn sẽ bắt đầu bằng cách tải xuống tiện ích mở rộng của trang web ở trên.
  2. Nhấp vào tiện ích mở rộng mới được cài đặt của bạn và đồng ý với các điều khoản và điều kiện.
  3. Tạo một mật khẩu an toàn!
  4. Viết ra cụm từ hạt giống dễ nhớ. Điều này phải ở trong thế giới thực và không nên được giữ ở bất kỳ đâu trên máy tính của bạn.

Nếu bốn bước nêu trên đã hoàn thành, bạn đã sẵn sàng để bắt đầu viết các hợp đồng thông minh đầu tiên của mình!

Hợp đồng thông minh

Các hợp đồng thông minh cho phép chúng tôi đọc và ghi dữ liệu vào chuỗi khối bằng cách thực hiện các chương trình xác định. Khi mã hóa một hợp đồng thông minh để sử dụng trên Ethereum, chúng tôi sử dụng một ngôn ngữ lập trình có tên là Solidity. Các tệp solidity kết thúc bằng phần mở rộng .sol.

Bạn có thể xóa bất kỳ tệp nào có thể có trong không gian làm việc của mình khi bạn khởi động Remix lần đầu tiên.

Bạn sẽ muốn tạo một số tệp:
  1. FlashLoan.sol
  2. FlashLoanReceiverBase.sol
  3. ILendingPoolAddressesProvider.sol
  4. IFlashLoanReceiver.sol
  5. ILendingPool.sol
  6. Withdrawable.sol

Đoạn mã sau là cách triển khai FlashLoan.sol.

Khoản vay Flash này sẽ được vay 1 DAI .



Tóm lại, chúng tôi bắt đầu bằng cách nhập các phụ thuộc cần thiết để thực hiện Khoản vay Flash của chúng tôi. Một số phụ thuộc này được gọi là hợp đồng trừu tượng . Một hợp đồng trừu tượng có ít nhất một chức năng không được triển khai. Bạn có thể coi nó như một bản thiết kế của một ngôi nhà. Một người xây dựng sử dụng bản thiết kế này để làm một ngôi nhà. Tuy nhiên, theo cách tương tự của chúng tôi, bản thiết kế là một hợp đồng trừu tượng, bạn là người xây dựng, và ngôi nhà là hợp đồng bắt nguồn.

Trong trường hợp của chúng tôi, hợp đồng Cho vay Flash đang sử dụng một hợp đồng trừu tượng có tên là FlashLoanReceiverBaseV1 . Nó cung cấp các chi tiết thực hiện cần thiết như hoàn trả Khoản vay Nhanh.

Bây giờ để chia nhỏ từng dòng mã.

  1. Đầu tiên, chúng ta phải xác định phiên bản trình biên dịch solidity. Trong trường hợp này, nó là 0,6,6.
     2-4. Nhập các phần phụ thuộc cho hợp đồng thông minh
      6. Hợp đồng FlashLoanV1 kế thừa từ hợp đồng FlashLoanReceiverBaseV1.
      8. Chúng tôi đã chuyển địa chỉ của một trong những Nhà cung cấp hồ bơi cho vay của Aave. Trong trường hợp này, chúng tôi đang cung cấp địa chỉ của DAI Lending Pool. 
     13. Chúng tôi đã định nghĩa một chức năng được gọi là flashLoan. Nó có địa chỉ của tài sản mà chúng tôi muốn cho vay nhanh. Trong trường hợp này, nội dung là DAI.
14. Chúng tôi không có bất kỳ nhu cầu dữ liệu nào cho khoản vay flash, vì vậy chúng tôi đang chuyển một chuỗi trống.
15. Chúng tôi đang xác định số lượng DAI (theo wei là 10 ^ 18) mà chúng tôi muốn cho vay.
16. Chúng tôi khởi tạo giao diện LendingPool là ILendingPoolV1 do Aave cung cấp để chúng tôi có thể gọi hàm flashLoan.
17. Cuối cùng, chúng tôi gọi hàm flashLoan của chúng tôi. Hàm nhận 4 tham số chính. Đầu tiên, chúng tôi chuyển địa chỉ sẽ nhận khoản vay. Trong trường hợp của chúng tôi, đó là hợp đồng của chính chúng tôi. Thứ hai, chúng tôi chuyển địa chỉ của nội dung. Trong trường hợp của chúng tôi, đó là địa chỉ của DAI trong mạng Kovan. Thứ ba, chúng tôi chuyển số lượng tài sản và trong trường hợp của chúng tôi, đó là 1 lượng đơn vị "ether" (hoặc 10 ^ 18 trong đơn vị "wei"). Cuối cùng nhưng không kém phần quan trọng, chúng tôi chuyển giá trị dữ liệu mà trong trường hợp của chúng tôi là một chuỗi rỗng.
24-31 Tiếp theo, chúng ta định nghĩa hàm thứ hai là executeOperation. Đó là nơi chúng tôi sử dụng khoản vay nhanh. Nó được gọi nội bộ sau khi hàm flashLoan được thực thi thành công. Nó có 4 tham số chính là -
        1. Địa chỉ của khoản dự trữ mà chúng tôi sẽ phải trả khoản vay.
        2. Số lượng tài sản
        3. Phí được tính bởi giao thức
        4. Tham số bổ sung được sử dụng nội bộ bởi chức năng.
33. Nó kiểm tra xem chúng tôi đã nhận được số tiền vay thích hợp hay chưa, nếu không nó sẽ đưa ra một thông báo lỗi.
34. Tại thời điểm này, đây là nơi bạn sẽ triển khai logic cho bất kỳ trường hợp sử dụng tùy ý nào.
40. Chúng tôi thêm phí cùng với số tiền cho vay bằng cách sử dụng chức năng thêm do thư viện SafeMaths cung cấp.
41 Cuối cùng, chúng tôi trả lại tổng số nợ hoặc số tiền cho vay trở lại nhóm cho vay.




Triển khai Hợp đồng

  1. Đầu tiên, mở MetaMask của bạn và đặt mạng của bạn thành "Kovan Test Network".


2. Sử dụng ý chính này để xác định các phụ thuộc cho các hợp đồng thông minh flashloan. Nhấp vào từng liên kết và dán mã
vào tệp Solidity tương ứng mà bạn đã tạo trước đó.
        Một. ILendingPool
        b. IFlashLoanReceiver
        c. ILendingPoolAddressesProvider
        d. FlashLoanReceiverBase
        e. Có thể rút tiền


3. Chuyển sang tab "Solidity Compiler". Đặt trình biên dịch thành 0.6.6 và nhấp vào "Biên dịch FlashLoan.sol".



4. Bạn sẽ thấy một số cảnh báo nhưng không có thông báo lỗi.

5. Bây giờ, chúng tôi đã sẵn sàng triển khai hợp đồng với mạng Kovan. Chuyển sang tab "Triển khai & Chạy giao dịch". Trong trường môi trường, hãy thay đổi nó từ JavaScript VM thành Injected Web3. Thao tác này sẽ mở MetaMask yêu cầu sự cho phép của bạn.



6. Đảm bảo trường “HỢP ĐỒNG” được đặt thành FlashLoan.sol. Cung cấp địa chỉ của LendingPool trong trường văn bản bên cạnh nút triển khai. Trong trường hợp của chúng tôi, nó sẽ là 0x506B0B2CF20FAA8f38a4E2B524EE43e1f4458Cc5 . Sau đó nhấp vào “Triển khai”. Nó sẽ mở MetaMask. 

Lưu ý : Bạn có thể tìm thấy danh sách tất cả các địa chỉ hợp đồng đã triển khai tại đây . Tại đó, bạn có thể tìm thấy địa chỉ của các Hồ cho vay khác nhau được Aave hỗ trợ. Mặc dù các địa chỉ khác nhau cho mỗi mã thông báo, quy trình vẫn giống nhau.



7. Nhấp vào "Xác nhận". Khi làm như vậy, bạn sẽ thấy thông báo thành công từ MetaMask. Bây giờ sẽ có một "Hợp đồng đã triển khai" trong bảng điều khiển bên.

Tài trợ cho Khoản vay chớp nhoáng



Trong tab “Hợp đồng đã triển khai” mới, bạn sẽ có thể sao chép địa chỉ của hợp đồng đã triển khai. Chúng ta sẽ quay lại bước này sau; trong thời gian chờ đợi, chúng tôi cần thêm một số DAI vào hợp đồng Cho vay nhanh của chúng tôi. Điều này là do Flash Loans cần tiền trong hợp đồng để thực hiện thành công. Đối với điều đó, bạn có thể chuyển đến liên kết này để nhận một số mã thông báo DAI (hãy đảm bảo kết nối với “Aave v2 Market” với một chữ “K” nhỏ ở góc trên cùng bên phải). Nhấp vào vòi, dán địa chỉ ví MetaMask của bạn và đợi xác nhận.


Sau khi có xác nhận, chúng tôi sẽ thêm mã thông báo DAI vào MetaMask. Đối với điều đó, hãy mở MetaMask của bạn. Nhấp vào “Thêm mã thông báo” ở dưới cùng. Trong trường “Địa chỉ hợp đồng mã thông báo”, nhập 0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD. Đây là địa chỉ hợp đồng cho DAI ở Kovan. Sau khi nhấp vào “Tiếp theo”, nó sẽ hiển thị DAI mà bạn đã nhận được từ vòi trước đó.


Tiếp theo, nhấp vào mã thông báo DAI. Nhấp vào “Gửi” và nó sẽ mở ra một cửa sổ tương tự như hình bên dưới.



Nhập địa chỉ hợp đồng Flash Loan của chúng tôi, địa chỉ mà chúng tôi đã tìm ra nơi lấy trước đó. Nhập số tiền mà chúng tôi muốn gửi. Trong trường hợp của chúng tôi, chúng tôi sẽ gửi 10 DAI. Sau đó nhấp vào "Tiếp theo". Nhấp vào "Xác nhận"! Bây giờ bạn đã đưa thành công hợp đồng cho vay Flash 10 DAI của mình.

Thực hiện Khoản vay Nhanh

Quay lại Remix. Trong hợp đồng Cho vay Flash được triển khai, có một trường văn bản "flashloan" khác. Trường này lấy địa chỉ hợp đồng của nội dung mà chúng tôi muốn sử dụng. Trong trường hợp của chúng tôi, đó là hợp đồng DAI của Kovan Testnet, là 0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD. Với trường đó đã được điền chính xác, bây giờ bạn có thể nhấn vào nút "giao dịch" như được hiển thị bên dưới.


Khi nhấp vào nút, MetaMask sẽ bật lên yêu cầu phê duyệt giao dịch. Xác nhận giao dịch và bạn sẽ được chào đón bằng một thông báo thành công. Trong thiết bị đầu cuối của Remix, bạn sẽ thấy một URL. Nhấp vào đó và bạn sẽ được chuyển hướng đến Etherscan.


Trong “Mã thông báo đã chuyển”, bạn sẽ thấy ba giao dịch khác nhau.


  1. Mũi tên màu đỏ đánh dấu việc chuyển 1 DAI từ LendingPool sang hợp đồng của chúng tôi.
  2. Mũi tên màu cam cho biết khoản hoàn trả của 1 DAI cùng với các khoản phí trở lại Nhóm đích.
  3. Mũi tên màu xanh lam cho thấy DAI được tạo lãi suất có tiện ích riêng biệt.

Sự kết luận

Chúng tôi đã có thể viết thành công hợp đồng thông minh cho Khoản vay nhanh! Chúng tôi có thể vay DAI từ nhóm, trả phí Khoản vay nhanh, và sau đó hoàn trả số tiền đã vay trong một giao dịch duy nhất. Bạn chỉ cần vay tiền mà không cần thế chấp!