paint-brush
Lên lịch phát trực tiếp với Superfluid & Gelatotừ tác giả@donoso
1,653 lượt đọc
1,653 lượt đọc

Lên lịch phát trực tiếp với Superfluid & Gelato

từ tác giả Javier Donoso9m2022/08/19
Read on Terminal Reader
Read this story w/o Javascript

dài quá đọc không nổi

Tìm hiểu cách tự động hóa Bắt đầu / Dừng luồng Siêu lỏng trong Super Apps bằng cách sử dụng Mạng Gelato tự động hóa hợp đồng thông minh.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail

Coins Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Lên lịch phát trực tiếp với Superfluid & Gelato
Javier Donoso HackerNoon profile picture


🚀 Tìm hiểu cách tự động hóa Bắt đầu / Dừng luồng Siêu lỏng trong Super Apps.


Một trong những điều đặc biệt nhất về web3 là chúng tôi vẫn đang ở giai đoạn đầu và như chúng tôi nói, hệ sinh thái web3 đang phát triển với các giao thức, công cụ mới, v.v. và bất kể trình độ chuyên môn của chúng tôi như thế nào, chúng tôi có thể đóng góp vào việc giúp đỡ những người khác như chúng ta đang học. Blog này nhằm mục đích giúp các nhà phát triển sử dụng mạng gelato với các hợp đồng thông minh và đặc biệt để sử dụng tự động hóa Gelato với Super Apps Superfluid.


Giao thức Superfluid trong số các tính năng khác cho phép người dùng truyền tiền / mã thông báo cho người dùng / hợp đồng chỉ với một giao dịch và khóa vốn tối thiểu. Lưu ý là bạn phải nhớ dừng dòng suối lại, nếu không dòng suối sẽ tiếp tục không ngừng. Vui lòng truy cập trang web Superfluid để biết thêm thông tin https://www.superfluid.finance/home


Gelato Network cho phép bạn thực thi các tác vụ tại một thời điểm trong tương lai (đối với ex-web2 sẽ tương tự như một loại bộ lập lịch). Trường hợp sử dụng chính là cho các tác vụ lặp đi lặp lại. Đối với các luồng Superfluid, chúng tôi sẽ chỉ cần một lần thực thi (bắt đầu hoặc dừng) do đó chúng tôi sẽ phải triển khai tác vụ và đồng thời “hủy tác vụ”. Vui lòng truy cập trang web Gelato để biết thêm thông tin https://www.gelato.network/



Dự án này giới thiệu các ví dụ có mục đích chung về việc tự động hóa các hợp đồng thông minh với gelato cũng như ứng dụng cho các dòng siêu lỏng trình bày hướng dẫn 3 + 3 Bước rất đơn giản để tạo dòng tiền có thể lập trình


Để làm được điều đó, chúng tôi đã triển khai một dapp trưng bày tại https://gelato-superapp.web.app . chúng tôi sẽ tương tác với hai hợp đồng chính đã được xác minh và triển khai trên mumbai:

Mã có thể được tìm thấy trong kho này



Hướng dẫn 3 + 3 bước để gelatofy một hợp đồng thông minh

Tại đây, bạn sẽ tìm thấy 3 + 3 bước đơn giản nhất để thêm cơ sở hạ tầng gelato và rất dễ dàng tự động hóa các tác vụ hợp đồng thông minh của bạn:

  1. Cơ sở hạ tầng Wire Gelato

  2. Chiến lược tài trợ Gelato

  3. Logic kinh doanh Gelato

    3.1) Tạo nhiệm vụ

    3.2) Tình trạng của người kiểm tra

    3.3) Chức năng thực thi


Bước 1: Kết nối cơ sở hạ tầng Gelato

Để tương tác với mạng lưới gelato, chúng ta sẽ cần phải tương tác với các hợp đồng Gelato (địa chỉ có thể được tìm thấy ở đây ). Chúng tôi sẽ tương tác với ba hợp đồng:


Hợp đồng Ops: Hợp đồng chính để tạo, hủy, nhận Phí giao dịch, phí chuyển nhượng, v.v. Chúng tôi sẽ kế thừa hợp đồng OpsReady.sol , chúng tôi sẽ chuyển vào trình khởi tạo địa chỉ kho bạc gelato và gelato và chúng tôi sẵn sàng tiếp tục !.


 import {OpsReady} from "./gelato/OpsReady.sol"; import {IOps} from "./gelato/IOps.sol"; import {ITaskTreasury} from "./gelato/ITaskTreasury.sol"; contract PartyApp is OpsReady, Ownable { constructor(address payable _ops, address payable _treasury) OpsReady(_ops, payable(_treasury)){ }


Hợp đồng kho bạc Gelato : Chúng tôi sẽ yêu cầu tương tác với hợp đồng kho bạc gelato để rút tiền / rút tiền tùy thuộc vào chiến lược tài trợ của chúng tôi (xem bước 2)


Mạng lưới Gelato : Chúng tôi sẽ tương tác với hợp đồng này trong các thử nghiệm của chúng tôi… thêm trên Bản nhạc thưởng # 2

Hợp đồng OpsReady.sol, cũng như các giao diện, có thể được tìm thấy trong các tệp gelato trong kho lưu trữ. Bạn chỉ có thể sao chép chúng và nó hoạt động!


Bước 2: Chiến lược tài trợ Gelato

Gelato thực hiện các giao dịch tại một thời điểm trong tương lai, do đó chúng tôi cần chọn cách tài trợ cho các giao dịch mà Gelato sẽ thay mặt chúng tôi thực hiện. Có hai lựa chọn thay thế để thực hiện điều đó:


1) Tài trợ cho Hợp đồng kho bạc Gelato: miễn là bạn có số dư dương trong hợp đồng kho bạc, các giao dịch trong tương lai sẽ được thực hiện. Nếu chúng tôi chọn giải pháp thay thế này, chúng tôi cần phải tương tác với Hợp đồng Kho bạc Gelato tài trợ cho nó.


 function fundGelato(uint256 amount) public payable { require(msg.value == amount, "NO_FUNDING"); ITaskTreasury(treasury).depositFunds{value: amount}(address(this),ETH,amount); } function withdrawGelato() public onlyOwner { uint256 maxAmount = ITaskTreasury(treasury).userTokenBalance(address(this),ETH); ITaskTreasury(treasury).withdrawFunds(payable(msg.sender), ETH, maxAmount); }


2) Tài trợ cho mọi giao dịch: Hợp đồng thông minh của chúng tôi sẽ chuyển trong mọi giao dịch trong tương lai số tiền được yêu cầu thanh toán phí. Trong trường hợp này, chúng tôi sẽ không cần phải tương tác với Hợp đồng Kho bạc Gelato nhưng chúng tôi phải duy trì sự cân bằng tích cực trong hợp đồng của mình .


Bước 3: Logic kinh doanh Gelato

Có ba phần / bước chính mà chúng ta phải xác định trong logic nghiệp vụ:

3.1) Tạo Nhiệm vụ: Chúng ta sẽ phải xác định một nhiệm vụ để cho Gelato biết những gì chúng ta muốn được thực thi.


 function createTask() public { require(taskIdByUser[msg.sender] == bytes32(0), "TASK_STILL_ACTIVE"); bytes32 taskId = IOps(ops).createTask( address(this), /// Contract executing the task this.startParty.selector, /// Executable function's selector address(this), /// Resolver contract, in our case will be the same abi.encodeWithSelector(this.checkerStartParty.selector) /// Checker Condition ); taskIdByUser[msg.sender] = taskId; }


3.2) Điều kiện của người kiểm tra: Để thực hiện một giao dịch trong tương lai, chúng tôi sẽ phải cung cấp cho Gelato điều kiện để kiểm tra xem Gelato có thể thực hiện hay không


 function checkerStartParty() external view returns (bool canExec, bytes memory execPayload) { canExec = headachePresent == false; execPayload = abi.encodeWithSelector(this.startParty.selector); }


3.3) Chức năng thực thi: Chức năng sẽ được thực thi khi các điều kiện và / hoặc thời gian được đáp ứng.


 function startParty() external onlyOps { require(headachePresent == false, "NOT_READY"); lastPartyStart = block.timestamp; headachePresent = true; }


https://gist.github.com/donoso-eth/0678b0613db36c6c332063c9f39cddfd


Bản demo ứng dụng bên!

Ứng dụng Gelato đầu tiên của chúng tôi sẽ rất đơn giản. Nó kiểm tra xem bữa tiệc gelato của chúng ta đã bắt đầu hay chưa. Bữa tiệc sẽ luôn bắt đầu nếu chúng ta không gặp phải sự “đau đầu” từ bữa tiệc trước.

Chúng tôi có thể đặt theo cách thủ công khi “cơn đau đầu” của chúng tôi kết thúc và sau đó mạng Gelato sẽ có thể thực hiện bên bắt đầu, đặt dấu thời gian cho bên bắt đầu mới và đặt “cơn đau đầu thành sự thật”

Màn hình của chúng tôi được chia thành hai phần tùy thuộc vào chiến lược tài trợ của chúng tôi.

Hợp đồng này cho phép ba trường hợp sử dụng:

  1. Tạo một nhiệm vụ đơn giản được cấp vốn bằng kho bạc: Chi tiết có thể xem ở trên

Khi nhiệm vụ được tạo, chúng ta có thể truy cập trang web gelato ops và chúng ta sẽ thấy nhiệm vụ của mình đang chờ thực thi

Và sau khi thực hiện thành công, bảng điều khiển hoạt động sẽ hiển thị cho chúng ta một cái gì đó như thế này.

  1. Tạo một nhiệm vụ đơn giản được cấp vốn bằng kho bạc và hủy sau lần thực hiện đầu tiên (chúng tôi sẽ sử dụng mẫu này sau này với các luồng Superfluid của chúng tôi).

    https://gist.github.com/donoso-eth/517e2dca691980de506229cbe27eee62

  2. Tạo một nhiệm vụ đơn giản thanh toán cho mỗi giao dịch (không phải tài trợ kho bạc)

    https://gist.github.com/donoso-eth/340ca96b53005dd457defab0991a735c



Bản trình diễn siêu ứng dụng Gelato

Siêu ứng dụng Gelato của chúng tôi sẽ giúp chúng tôi làm cho các luồng siêu lỏng có thể lập trình được bằng cách tự động hóa việc dừng hoặc bắt đầu một luồng.


Chúng tôi sẽ triển khai Cơ sở hạ tầng gelato (Bước 1) giống như trong ứng dụng bên và chúng tôi chọn Tài trợ kho bạc làm Chiến lược tài trợ (Bước 2)


Chúng tôi sẽ giới thiệu việc dừng luồng sau một số phút được xác định trước. Logic Kinh doanh của chúng tôi sẽ trông như thế này:

https://gist.github.com/donoso-eth/e4fc0145ed75ed84309da1a467175931


Bây giờ nếu bạn đã tài trợ cho kho bạc, đã bắt đầu một luồng và gelato đã được thực hiện dừng luồng, bạn đã mở khóa Tiền thưởng của mình !!



Phần thưởng theo dõi # 1: Chuyển sang chế độ Ngủ và Luồng sẽ bắt đầu.

Cho đến nay, chúng tôi đã đạt được mục tiêu tự động dừng luồng, nhưng theo cùng một logic, tôi có thể muốn bắt đầu phát trực tiếp cho nhân viên mới chính xác vào lúc 00:00 sáng của ngày đầu tiên làm việc và tôi không muốn thức mỗi ngày bởi vì hy vọng, chúng tôi sẽ thuê nhiều nhân viên!


.. sau đó CFA ACL (Danh sách kiểm soát truy cập CFA) để giải cứu, với một lệnh gọi đơn giản đến thỏa thuận liên tục CFA từ SDK hoặc trực tiếp đến hợp đồng , bạn có thể muốn cho phép Super App của chúng tôi bắt đầu một luồng thay mặt bạn khi thời gian nhất định trôi qua và một "Tác vụ Gelato" được thực hiện.


Trong trường hợp sử dụng này, chúng ta đang nối hai tác vụ, khi tác vụ đầu tiên được thực thi, luồng sẽ được bắt đầu, tác vụ bị hủy và một tác vụ khác để dừng luồng sẽ được tạo.

https://gist.github.com/donoso-eth/5491f5f94409f9648fa196c3ed24ca3d



Phần thưởng theo dõi # 2: Master Hardhat Fork và Sky Rocket tăng tốc độ phát triển của bạn

Một trong những trải nghiệm thú vị trong quá trình phát triển blockchain là khả năng tạo ra… ..


Khi các dapp của chúng tôi ngày càng phức tạp, chúng tôi sẽ yêu cầu tương tác với các hợp đồng trên chuỗi hiện có và nếu chúng tôi muốn duy trì tính cục bộ , chúng tôi sẽ phải mô phỏng / triển khai các giao thức. Trong một số trường hợp, điều đó có thể cồng kềnh và chúng tôi sẽ dành thời gian phát triển quý báu . Giải pháp thay thế tốt nhất để khắc phục vấn đề này là làm việc với một fork, với cấu hình rất đơn giản trong hardhat.config.ts của chúng tôi (cảm ơn Sam FlaminiHilmar X vì đã chỉ ra hướng đi đúng đắn).

https://gist.github.com/donoso-eth/1dbfc57d3d40679e324048e1d7c01ab4


và sau đó với npx hardhat node --network "hardhat" , chúng tôi sẽ có thể tạo một bản sao "ảo" của chuỗi khối mà chúng tôi đang nhắm mục tiêu. Các khối chúng tôi tạo từ bây giờ sẽ được lưu trữ cục bộ và đối với những khối cũ hơn, chúng tôi sẽ truy vấn chuỗi khối “thực” với nhà cung cấp RPC của chúng tôi (ở trên chúng tôi đang sử dụng thuật giả kim)


Trong ví dụ của chúng tôi, chúng tôi đang làm việc với mumbai, các hợp đồng Superfluid (Máy chủ, ConstanFlowAgreeent, Supertoken…), cũng như các hợp đồng Gelato (Mạng, OPS và Kho bạc), tồn tại ở trạng thái mà chúng có ở số khối của fork cho phép chúng tôi tương tác với họ như chúng tôi sẽ tương tác với blockchain "thực".


Bây giờ, bạn có “mumbai” cục bộ của mình với các phương thức trợ giúp bổ sung để thực sự làm chủ chuỗi:

https://gist.github.com/donoso-eth/148d031bbc57e6a3b6708367a52b0069


Trong Dapp của chúng tôi, chúng tôi đang làm việc với các hợp đồng Gelato. “Người thực thi” sẽ chăm sóc để tự động hóa các nhiệm vụ của chúng tôi, nhưng trong chuỗi “ảo” cục bộ của chúng tôi không có người thực thi… ai sẽ thực hiện nhiệm vụ của chúng tôi ?. Và câu trả lời cho điều đó rất đơn giản, chúng ta sẽ tự mình thực thi nhiệm vụ . Chúng tôi có thể làm điều đó bởi vì chúng tôi làm chủ blockchain cục bộ của mình, chúng tôi có thể trở thành bất kỳ ai chúng tôi muốn trở thành và chúng tôi chọn trở thành người thực thi. Hardhat cung cấp cho chúng tôi phương thức tuyệt vời hardhat_impersonateAcount và chúng tôi sẽ sử dụng nó để trở thành “người thực thi” cục bộ.


Tại đây, chúng ta có thể xem chi tiết cách triển khai để thực hiện các tác vụ gelato mạo danh hợp đồng Gelato NetWork

https://gist.github.com/donoso-eth/88b3e43f5957cf1e6cdbcd326067fee0


Chúng ta sẽ cần xây dựng các tham số để có thể thực thi nhiệm vụ, nếu nhìn trong giao diện Ops, chúng ta thấy rằng chúng ta cần các tham số sau


 /// @notice Execution API called by Gelato /// @param _txFee Fee paid to Gelato for execution, deducted on the TaskTreasury /// @param _feeToken Token used to pay for the execution. ETH = 0xeeeeee... /// @param _taskCreator On which contract should Gelato check when to execute the tx /// @param _useTaskTreasuryFunds If msg.sender's balance on TaskTreasury should pay for the tx /// @param _revertOnFailure To revert or not if call to execAddress fails /// @param _execAddress On which contract should Gelato execute the tx /// @param _execData Data used to execute the tx, queried from the Resolver by Gelato function exec( uint256 _txFee, address _feeToken, address _taskCreator, bool _useTaskTreasuryFunds, bool _revertOnFailure, bytes32 _resolverHash, address _execAddress, bytes calldata _execData ) external;


Sử dụng một trong các ví dụ của chúng tôi trong ứng dụng party, chúng tôi sẽ có:

https://gist.github.com/donoso-eth/bacd13ccb9718d70f618eca6c82587f7


Việc triển khai trong các bài kiểm tra dapp của chúng tôi có thể được nhìn thấy trong . Chúng tôi sử dụng kỹ thuật này trong các thử nghiệm hợp đồng của chúng tôi.

Sự kết luận

Như chúng ta đã thấy, tương đối đơn giản để kết nối mạng gelato vào các hợp đồng thông minh của chúng tôi và khai thác toàn bộ tiềm năng của tự động hóa. Đặc biệt đối với các luồng Superfluid, gelato có thể cho phép các Super Apps thực hiện lập lịch phát trực tiếp.


Hy vọng bài viết này có thể giúp các nhà phát triển khác nhanh chóng làm quen với gelato và áp dụng nó vào các luồng Superfluid.


Bạn có thể kết nối với tôi trên Twitter @donoso_eth


Cũng được xuất bản ở đây .