本文档介绍了OpenZeppelin Relayer插件,它允许Relayer操作者通过TypeScript函数扩展Relayer的功能。文档详细说明了如何编写、配置、调用和调试插件,并提供了一个完整的示例,包括插件代码、调用方式和响应结果,方便开发者理解。
OpenZeppelin Relayer 支持插件来扩展 relayer 的功能。
插件是运行在 Relayer 服务器中的 TypeScript
函数,可以包含 Relayer 运营者定义的任何自定义逻辑。
它还包括一个简单的 Plugin
库来与 Relayer 交互,允许发送交易,并且
可以扩展以支持未来的新功能。
插件在 plugins
目录下声明,并且应该是 TypeScript 文件(.ts
扩展名)。
openzeppelin-relayer/
├── plugins/
│ └── my-plugin.ts # 插件代码
└── config/
└── config.json # 配置文件中的插件
插件代码必须包含以下结构:
/// 必须的导入。
import { runPlugin, Plugin } from "./lib/plugin";
/// 在这里你可以定义自定义参数,当插件被调用时,这些参数将作为请求的一部分被包含进来。
type MyCustomParams = {
foo: string,
bar: number
}
/// 插件函数体。
async function myPlugin(api: Plugin, params: MyCustomParams) {
// 你可以使用 `params` 来访问传递给插件的自定义参数。
console.log(params.foo);
console.log(params.bar);
// Api 用法来发送交易:
let relayer = api.relayer('my-relayer');
const tx = await relayer.sendTransaction({
to: "0x1234567890123456789012345678901234567890",
value: ethers.parseEther("1"),
});
}
/// `runPlugin` 是插件的入口点。
runPlugin(myPlugin);
插件在 ./config/config.json
文件中的 plugins
键下配置。
该文件包含一个插件列表,每个插件都有一个 id 和路径。
插件路径是相对于 /plugins 目录的 |
例子:
"plugins": [\
{\
"id": "my-plugin",\
"path": "my-plugin.ts"\
}\
]
插件通过访问 api/v1/plugins/{plugin-id}/call
端点来调用。
该端点接受一个带有以下主体的 POST
请求:
{
"params": {
"foo": "bar",
"bar": 1
}
}
然后插件将被调用,并将 params
作为插件函数的第二个参数传递。
当调用插件时,响应将包括:
logs
: 插件执行的日志。
return_value
: 插件执行的返回值。
error
: 如果插件执行失败,则会显示错误消息。
traces
: 插件和 Relayer 实例之间发送的消息列表。这包括通过 api
对象传递的所有 payload。
import { runPlugin, Plugin } from "./lib/plugin";
import { ethers } from "ethers";
type MyCustomParams = {
foo: string,
}
async function myPlugin(api: Plugin, params: MyCustomParams) {
console.log("Hello, world!");
// 例如,要发送一笔交易:
let relayer = api.relayer('my-relayer');
const tx = await relayer.sendTransaction({
to: "0x1234567890123456789012345678901234567890",
value: ethers.parseEther("1"),
});
console.log("Foo ", params.foo);
return `Successfully sent transaction with id: ${tx.id}`;
}
runPlugin(myPlugin);
curl -X POST http://localhost:3000/api/v1/plugins/my-plugin/call \
-H "Content-Type: application/json" \
-d '{"params": {"foo": "bar"}}'
{
"success": true,
"message": "Plugin called successfully",
"logs": [\
{\
"level": "log",\
"message": "Hello, world!"\
},\
{\
"level": "log",\
"message": "Foo bar"\
}\
],
"return_value": "Successfully sent transaction with id: 1234567890",
"error": "",
"traces": [\
{\
"relayer_id": "my-relayer",\
"method": "sendTransaction",\
"payload": {\
"to": "0x1234567890123456789012345678901234567890",\
"value": "1000000000000000000"\
}\
}\
]
}
其中:
- logs
指示插件的终端日志(console.log, console.error 等)。
- traces
是插件和 Relayer 实例之间发送的消息。
- 如果插件失败,error
将包含错误消息。
- return_value
将包含插件执行的返回值。
- 原文链接: docs.openzeppelin.com/re...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!