Skip to main content
本页列举 @lifi/composer-sdk 的公共 API。如需权威的 TypeScript 类型,请浏览包源码 unpkg.com/browse/@lifi/composer-sdk
不存在 sdk.compile() compile 位于 builder 上:builder.compile(run)sdk.request(flow, run) 是用于自定义传输的应急出口(escape hatch)。

createComposeSdk(options)

声明于 sdk.ts

ComposeSdkOptions

ComposeSdk

成员:

sdk.flow(chainId, options)FlowBuilder

FlowOptions<T>

泛型 T 会贯穿传递到 builder.inputs.<name> 上的类型化句柄。

FlowBuilder<T>

FlowBuilder 是一个 FlowBuilderCore<T>(声明于 FlowBuilderCore.ts),并额外增加了每个 op 对应一个类型化方法以及一个 compile 方法。

Inherited FlowBuilderCore members

Op methods

SDK 为 Composer API 支持的每个 op 暴露一个类型化方法。示例:
  • builder.lifi.swap(id, args)builder.lifi.zap(id, args)
  • builder.core.call(id, args)builder.core.asResource(id, args)builder.core.balanceOf(id, args),以及算术方法 builder.core.add(id, args)subtractmultiplydivideDowndivideUpbpsDownbpsUp —— 每个算术 op 一个方法。
每个方法为该 op 的输出返回一个类型化的 Record<portName, OutputHandle>。参见实时的 Ops catalog

builder.compile(run)

一步完成:调用 build(),经由 sdk.request 组成一个 ComposeCompileRequest,将其 POST 到 /compose,并返回一个 ComposeCompileResult
在网络、校验或服务端错误时抛出 ComposeError

sdk.request(flow, run)ComposeCompileRequest

当你需要原始请求载荷时使用 —— 排队、服务端代理、对请求签名、在测试中检查。

sdk.client

低层 HTTP 客户端。大多数集成只需要 builder.compile();当你通过 sdk.request() 构建请求并自行提交,或需要协议/manifest 发现时,再使用该客户端。
getZapPacks 接受一个可选的 { protocols?: string | readonly string[] } 过滤器。结果不由 SDK 缓存 —— 请根据你的刷新需求自行缓存。参见路由边目录以查看渲染后的实时视图。

ComposeCompileResult

一个基于 status 字段的判别联合(discriminated union)。在访问特定结构的字段之前,先按 result.status 分支。
  • status: 'success' —— 在默认的 simulationPolicy: 'strict' 下,当 compile 与 simulation 都成功时返回。
  • status: 'partial' —— 仅当运行时传入了 simulationPolicy: 'allow-revert' 模拟发生了 revert 时返回。transactionRequest 仍然存在;revert 诊断信息被暴露出来供调用方呈现。
两种结构都携带核心字段:transactionRequestuserProxyproducedResourcesproducedHandles(任何标记为 expose: true 的输出句柄的值)、可选的 approvals、可选的 priceImpact,以及可选的 fees

ComposeRunInput<T>

声明于 run/inputs.ts

Handles

声明于 authoring/handles.ts
  • InputHandle<T> —— { _tag: 'input', inputName, __outputKind?: T }。以幻影类型参数(phantom type parameter)携带该输入的输出 kind。
  • ResourceInputHandle —— InputHandle<'resource'> & { resource: Resource }
  • OutputHandle<T> —— { _tag: 'output', nodeId, portName, __outputKind?: T }
  • Bindable<T> —— 类型化 bind 槽位所接受的值的联合:InputHandle<T>OutputHandle<T>TypedRef<T>。对于 'uint256' 槽位,'resource' 标记的句柄也被接受(资源即 uint256 金额)。
使用 handleToRef(从同一模块导出)将句柄转换为原始 ref。

Namespaces

  • resources —— 用于声明代币资源的辅助函数(resources.erc20(token, chainId)resources.native(chainId))。
  • materialisers —— 为已注册 materialiser 生成的辅助函数(materialisers.directDeposit({ amount })materialisers.balanceOf({ ... }) 等)。
  • guards —— 为已注册 guard 生成的辅助函数(guards.slippage({ port, bps }) 等)。
  • raw —— 低层应急出口:raw.ref<T>(path) 创建一个 TypedRef<T>raw.guard(kind, config?) 为尚未被类型化辅助函数覆盖的 guard kind 构建一个 AppliedGuardraw.materialiser(kind, config?) 出于同样原因构建一个 MaterialiserInput

TypedFlow<T>

builder.build() 返回的 Flow 文档。在结构上与来自 @lifi/compose-specFlow 完全相同,另带一个幻影 __inputs?: T,通过 TypeScript 推断携带输入 schema(__inputs 在运行时不存在)。

Error types

ComposeError(从 @lifi/compose-spec 重新导出)携带:
参见 Error codes 了解完整目录以及每种 kind 映射到的 HTTP 状态。

See also

  • Quickstart —— 五分钟的首个 flow 讲解。
  • Build a Flow —— 生产环境的设置、输入、ops、materialisers、guards、preconditions 与提交。
  • Flow wire format —— SDK 生成的 JSON。