You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chainlink Functions调用Alpaca API重复执行问题排查

问题概述

  • 函数执行成功但重复触发,在Alpaca上生成3个完全相同的市价订单
  • 仅在Base Sepolia链上复现该问题,本地模拟测试无此情况

预期与实际行为

  • 预期行为:单次合约调用仅在Alpaca创建1个市价订单
  • 实际行为:单次合约调用生成3个完全相同的订单

疑问

是否是_sendRequest因内部超时或错误触发重试导致?或是存在其他重复调用的原因?

上下文信息

  • DON ID: fun-base-sepolia-1
  • 已部署合约地址:0x5AB9A1c38fEb301F71010f9F7406FCAE417d1541
  • 请求ID: 0x442676c1692e799bee3f14b6293e1185aa31cad6be7161ebbf792f7869ba0fee
async function main() {
  ethers = await import("npm:ethers@6.10.0");

  const symbol = args[0];
  const qty = symbolPrecision(symbol, args[1]); // 转换为18位小数

  console.log(`Buying ${qty} ${symbol}...`);

  _checkKeys();

  const alpacaBuyRequest = Functions.makeHttpRequest({
    method: "POST",
    url: "https://paper-api.alpaca.markets/v2/orders",
    headers: {
      accept: "application/json",
      content_type: "application/json",
      "APCA-API-KEY-ID": secrets.alpacaKey,
      "APCA-API-SECRET-KEY": secrets.alpacaSecret,
    },
    data: {
      side: side,
      type: "market",
      time_in_force: "gtc",
      symbol: symbol,
      qty: qty,
    },
  });

  // 触发订单请求
  const [response] = await Promise.all([alpacaBuyRequest]);
  const responseStatus = response.status;

  if (responseStatus !== 200) {
    throw new Error(
      `Unexpected response status ${responseStatus} ${response.Error}`
    );
  }

  // 等待订单成交后再返回
  const response_data = await waitForOrderToFill(response.data.id);
  console.log(response_data); // 例如:filled_avg_price

  const filledAvgPrice = ethers.parseUnits(response_data.filled_avg_price, 6);
  const encodedData = ethers.AbiCoder.defaultAbiCoder().encode(
    ["string", "uint256"],
    [response_data.id, filledAvgPrice]
  );

  // 返回编码后的数据
  return ethers.getBytes(encodedData);
}

内容的提问来源于stack exchange,提问作者Mo0x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 02:42:18