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. 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 Giao thức Superfluid https://www.superfluid.finance/home 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 Gelato Network 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 . 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: https://gelato-superapp.web.app Hợp đồng ứng dụng bên ( ) xem khi quét Hợp đồng Siêu ứng dụng Gelato ( ) xem khi quét Mã có thể được tìm thấy trong này kho https://youtu.be/yjmJZ6LuPig 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: Cơ sở hạ tầng Wire Gelato Chiến lược tài trợ Gelato 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 ). Chúng tôi sẽ tương tác với ba hợp đồng: ở đây 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 , chúng tôi sẽ chuyển vào trình khởi tạo địa chỉ kho bạc gelato và gelato và !. Hợp đồng Ops: Hợp đồng OpsReady.sol 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)){ } : 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) Hợp đồng kho bạc 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 Mạng lưới Gelato Hợp đồng OpsReady.sol, cũng như các giao diện, có thể được tìm thấy trong trong kho lưu trữ. Bạn chỉ có thể sao chép chúng và nó hoạt động! các tệp gelato 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 đó: 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ó. 1) Tài trợ cho Hợp đồng kho bạc Gelato: 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); } 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 . 2) Tài trợ cho mọi giao dịch: 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ụ: 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. 3.1) Tạo Nhiệm vụ: 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; } Để 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 3.2) Điều kiện của người kiểm tra: function checkerStartParty() external view returns (bool canExec, bytes memory execPayload) { canExec = headachePresent == false; execPayload = abi.encodeWithSelector(this.startParty.selector); } 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. 3.3) Chức năng thực thi: 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: 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 và chúng ta sẽ thấy nhiệm vụ của mình đang chờ thực thi trang web gelato ops 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. 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 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 đó (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 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. CFA ACL , bạn có thể muốn cho phép Super App của chúng tôi bắt đầu một luồng 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à , 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 đó . 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 của chúng tôi (cảm ơn và vì đã chỉ ra hướng đi đúng đắn). nếu chúng tôi muốn duy trì tính cục bộ có thể cồng kềnh và chúng tôi sẽ dành thời gian phát triển quý báu hardhat.config.ts Sam Flamini Hilmar X https://gist.github.com/donoso-eth/1dbfc57d3d40679e324048e1d7c01ab4 và sau đó với , 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) npx hardhat node --network "hardhat" 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 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, 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 và chúng tôi sẽ sử dụng nó để trở thành “người thực thi” cục bộ. chúng ta sẽ tự mình thực thi nhiệm vụ chúng tôi có thể trở thành bất kỳ ai chúng tôi muốn trở thành hardhat_impersonateAcount 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. mã 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