使用Chainlink Functions Toolkit执行npm run simulate时出错求助
Chainlink Functions Toolkit 模拟运行错误修复方案
问题现象
运行npm run simulate时触发以下错误:
secp256k1 unavailable, reverting to browser version undefined syntax error, RAM exceeded, or other error error: Module not found "file:///tmp/FunctionsScript-1715359176579.ts"
修复步骤
1. 修正swa-func.js代码问题
Chainlink Functions运行环境内置ethers工具,无需手动从npm:导入;同时注意异步请求必须加await修饰。修改后的代码如下:
// 移除手动导入ethers,环境已内置该工具 const abiCoder = ethers.AbiCoder.defaultAbiCoder(); const characterId = args[0]; const url = `https://swapi.dev/api/people/${characterId}/`; // 异步请求必须加await const res = await Functions.makeHttpRequest({ url }) if (res.error) { console.log(res.error); throw Error("Request failed"); } console.log("res data available") console.log("response", res.data) const character = res.data.name; const height = res.data.height; console.log(characterId) console.log(character) console.log(height) const encoded = abiCoder.encode([`string`, `string`, `string`], [characterId, character, height]); // 替换getBytes为arrayify,兼容内置ethers版本 return ethers.utils.arrayify(encoded);
2. 简化Functions-request-config.js依赖引用
直接使用toolkit官方导出的枚举,避免手动定义枚举值出错:
const fs = require("fs") const { Location, ReturnType, CodeLanguage } = require("@chainlink/functions-toolkit") require("@chainlink/env-enc").config() const requestConfig = { source: fs.readFileSync("./swa-func.js").toString(), codeLocation: Location.Inline, secrets: {}, args: ["2"], codeLanguage: CodeLanguage.JavaScript, expectedReturnType: ReturnType.bytes, secretsURLs: [], } module.exports = requestConfig
3. 解决secp256k1警告
该警告源于node环境下secp256k1原生模块编译问题,降级版本即可修复。修改package.json中的依赖:
{ "scripts": { "simulate": "node ./Functions-simulate-script.js" }, "dependencies": { "@chainlink/env-enc": "^1.0.5", "@chainlink/functions-toolkit": "^0.2.8", "secp256k1": "^4.0.2" } }
执行npm install重新安装依赖。
4. 验证运行
完成上述修改后,执行npm run simulate,即可正常获取SWAPI数据并返回编码后的字节结果,控制台会输出对应的responseBytesHexstring及终端日志。
内容的提问来源于stack exchange,提问作者thoroughProgrammer
相关产品推荐
相关产品推荐

