使用 Gelato Functions Callbacks 增强开发者体验

  • gelato
  • 发布于 2023-12-15 23:53
  • 阅读 19

Gelato Functions 推出 Callbacks 功能,通过提供交易生命周期的更多反馈来增强开发者体验。Callbacks 允许开发者高效管理交易结果,实现错误处理和自定义逻辑,例如发送警报、数据库更新或触发额外交易。开发者可以通过 onSuccess 和 onFail 回调来处理交易成功或失败的情况,并使用本地测试环境来模拟执行。

博客 - 更新

使用 Gelato Functions 回调增强开发者体验

通过 Gelato Functions 回调,将你的 DevX 提升 1000 倍!

有了新的 Gelato Functions 更新 - 回调,通过更多关于交易生命周期的反馈来增强你的开发者体验。

Gelato 的 Functions 是无服务器且事件驱动的工具,专为使用链下和链上数据自动化区块链交易而设计。

什么是回调?

在 Gelato Functions 中引入回调现在允许开发者有效地管理交易结果。此功能提供了一个强大的框架来处理自动化任务中的各种场景,最终增强去中心化应用程序 (dApp) 的功能。

为什么回调至关重要?
  • 增强的控制:回调使你能够响应并适应交易的成功或失败,从而更好地控制 dApp 的自动化流程。
  • 错误处理:实施全面的错误处理,以确保 dApp 的稳健性和可靠性。
  • 自定义逻辑实施:根据交易结果执行自定义逻辑,例如发送警报、数据库更新或触发其他交易。

回调的类型

在我们的 GitHub 存储库 中查看回调如何在实际场景中实施

onSuccess 回调

这些回调在链上执行成功后触发。此回调非常适合跟踪交易和后处理。

Web3Function.onSuccess(async (context: Web3FunctionSuccessContext) => {
  const { transactionHash } = context;
  console.log("onSuccess: txHash: ", transactionHash);
  // Additional onSuccess logic...
});
onFail 回调

当执行遇到问题(例如资金不足、模拟失败或执行回滚)时,将调用此回调。这对于错误处理和实施回退策略至关重要。

Web3Function.onFail(async (context: Web3FunctionFailContext) => {
  const { reason, transactionHash, callData } = context;
  // Handle various failure scenarios...
});

用例示例:预言机价格更新

考虑这样一种情况:你有一个预言机智能合约,需要定期从外部 API 更新加密货币价格。下面是如何使用回调:

onRun 函数:

  • 准备调用数据,以使用最新的加密货币价格更新预言机。

onSuccess 回调:

  • 记录交易哈希。
  • 使用新价格更新数据库。
  • 尝试获取当前价格并将其存储在存储中;如果发生任何错误,则记录错误。

onFail 回调:

  • 处理更新过程中的错误(API 失败、区块链回滚)。
  • 根据失败原因构建详细的警报消息。
  • 发送警报,例如 Slack 通知,以应对重大失败。
onSuccess 函数示例:
//Web3 Function onSuccess callback
Web3Function.onSuccess(async (context: Web3FunctionSuccessContext) => {
  const { userArgs, transactionHash, storage } = context;
  console.log("userArgs: ", userArgs.canExec);
  console.log("onSuccess: txHash: ", transactionHash);

  const currency = (userArgs.currency as string) ?? "ethereum";
  let price = 0;

  try {
    const price = await getCurrentPrice(currency);
    console.log(`Current Price: ${price}`);
    await storage.set("lastPrice", price.toString());
  } catch (err) {
    console.error("Failed to update price:", err);
  }

  // Update storage with the current price
  await storage.set("lastPrice", price.toString());
});

在此 onSuccess 回调中,我们有几个关键要素:

  • 上下文变量: 我们从执行上下文中访问重要信息,例如 userArgs、transactionHash 和 storage。这些提供了有关当前执行的数据,并允许我们根据这些数据做出决策。
  • 日志记录: 我们记录相关信息,例如 transactionHash,以跟踪成功交易。这对于跟踪和审计目的很有价值。
  • 货币价格更新: 在 try-catch 块中,我们尝试获取加密货币的当前价格 (getCurrentPrice(currency))。如果成功,我们将记录价格并将其更新到存储中。这演示了如何根据主要执行的成功执行其他操作。
  • 错误处理: 如果在获取价格时出现错误,我们会捕获该错误并进行记录。这展示了 onSuccess 回调中的错误处理。
  • 存储更新: 最后,我们更新存储中的 lastPrice,以确保将新价格存储以供将来参考。
onFail 函数示例:
//Web3 Function onFail callback
Web3Function.onFail(async (context: Web3FunctionFailContext) => {
  const { userArgs, reason } = context;

  let alertMessage = `Web3 Function Failed. Reason: ${reason}`;
  console.log("userArgs: ", userArgs.canExec);

  if (reason === "ExecutionReverted") {
    alertMessage += ` TxHash: ${context.transactionHash}`;
    console.log(`onFail: ${reason} txHash: ${context.transactionHash}`);
  } else if (reason === "SimulationFailed") {
    alertMessage += ` callData: ${JSON.stringify(context.callData)}`;
    console.log(
      `onFail: ${reason} callData: ${JSON.stringify(context.callData)}`
    );
  } else {
    console.log(`onFail: ${reason}`);
  }

  // Send Slack alert if specified
  await sendSlackAlert(alertMessage);
});

现在让我们探索 onFail 回调:

  • 上下文变量:与 onSuccess 回调类似,我们访问上下文变量(例如 userArgs 和 reason)以了解执行失败的原因。
  • 警报消息: 我们构建一个 alertMessage,其中提供有关失败的详细信息,包括原因。此消息对于调试和了解出现的问题至关重要。
  • 条件处理: 根据失败的原因,我们自定义 alertMessage。例如,如果原因是“ExecutionReverted”,我们会包含 transactionHash 以查明失败的交易。此条件处理对于提供有关不同失败场景的清晰信息至关重要。
  • Slack 警报: 如果需要,我们将使用 sendSlackAlert(alertMessage) 发送 Slack 警报。这演示了如何集成外部系统以通知利益相关者有关失败的信息。

这些示例展示了 onSuccess 和 onFail 回调如何允许你对交易的成功或失败做出不同的响应、实施错误处理以及根据结果采取特定操作。它们提供了一种强大的机制来定制去中心化应用程序的行为,以满足你的确切要求。

对于那些渴望深入了解 Gelato Functions 的世界并亲身体验回调功能的人员 - 请前往我们的 Github 存储库并访问此处提到的代码示例。

测试你的回调

为了确保回调的可靠性,Gelato Functions 提供了一个本地测试环境。这允许你模拟成功和失败的执行,从而帮助你在实时部署之前微调回调逻辑。你可以为此目的使用 –onFail 或 –onSuccess 标志。

## Test onFail Callback
yarn test src/web3-functions/callbacks/index.ts --logs --onFail

## Test onSuccess Callback
yarn test src/web3-functions/callbacks/index.ts --logs --onSuccess

结论

总之,Gelato Functions 的回调提供了一种动态且强大的方式来控制你的去中心化应用程序 (dApp)。凭借响应成功和失败的能力,回调为你提供了无与伦比的灵活性。你可以微调 dApp 的行为、轻松处理错误,甚至引入自定义逻辑来满足你的特定需求。

关于 Gelato

Gelato 是一个 Web3 云平台,使开发者能够创建自动化的、无 Gas 的和链下感知的 Layer 2 链和智能合约。400 多个 web3 项目多年来一直依赖 Gelato 来促进 DeFi、NFT 和游戏中的数百万笔交易。

  • Gelato RaaS: 一键部署你自己的量身定制的 ZK 或 OP L2 链,其中包含原生账户抽象和所有内置的 Gelato 中间件。

  • VRF:Gelato VRF 为区块链应用程序提供快速、链上可验证的随机性。

  • Functions:无服务器、事件驱动的函数,用于自动化区块链交易。

  • Relay:通过易于使用的 API,让你的用户可以访问可靠、强大且可扩展的无 Gas 交易。

  • 账户抽象 SDK:Gelato 已与 Safe 合作,构建一个功能完善的账户抽象 SDK,将 Gelato 业界最佳的无 Gas 交易功能与业界最安全的智能合约钱包相结合。

订阅我们的新闻通讯并打开你的 Twitter 通知,以获取有关 Gelato 生态系统的最新更新! 如果你有兴趣加入 Gelato 团队并构建互联网的未来,请浏览空缺职位并在此处申请 here

  • 原文链接: gelato.cloud/blog/Develo...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
gelato
gelato
The Web3 Developer Cloud. Launch your own chain via our #1 Rollup-As-A-Service platform.