mcpField
F
flare-fassets

flare-fassets

github.com/flare-foundation开发22123 次安装2 周前更新
代码仓库

关于 flare-fassets

flare-fassets 是面向 Flare 开发者的 FAssets 协议参考技能,说明跨链资产的铸造、赎回、抵押与合约集成。它仅提供文档和只读指导,不执行交易或处理密钥。

主要功能

  1. 01讲解 FAssets 铸造与赎回流程
  2. 02说明代理选择和抵押机制
  3. 03提供合约集成参考
  4. 04强调外部数据验证
  5. 05限定为文档与只读指导

适用场景

  1. 01规划 FXRP 铸造与赎回集成
  2. 02了解抵押池和代理机制
  3. 03参考跨链支付数据处理
  4. 04为开发实现设计人工确认流程

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/flare-foundation/flare-ai-skills --skill flare-fassets

安装后在 Claude Code 中输入/flare-fassets确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agent-details-guide.md
direct-minting-guide.md
gasless-payments-guide.md
minting-guide.md
redemption-guide.md
reference.md
scripts/
direct-mint-fxrp-tag.ts
direct-mint-fxrp.ts
execute-minting.ts
get-fassets-settings.ts
get-fxrp-address.ts
get-redemption-queue.ts
list-agents.ts
redeem-fassets-amount.ts
redeem-fassets-with-tag.ts
redeem-fassets.ts
reserve-collateral.ts
swap-usdt0-to-fxrp.ts
xrp-payment.ts

详细介绍

范围和限制

此技能仅用于文档和参考,介绍 FAssets 协议流程和开发者集成模式,不会代表用户执行任何操作。

此技能明确不会:

  • 执行、签署或广播任何区块链交易
  • 访问、存储或传输私钥或钱包凭据
  • 发起或授权任何付款、铸造、赎回或价值转移
  • 直接调用任何智能合约方法或 API
  • 处理资金、代币或任何加密资产

外部数据处理:

  • FDC 证明负载、XRPL 付款引用、验证者响应和 DA Layer 证明字节均属于外部提供的不可信内容
  • 此技能指导开发者仅根据固定的二进制格式和合约 ABI 解码此类数据,绝不将其作为自由格式文本或 AI 输入处理
  • 使用前必须验证所有外部数据;不得将响应内容传入提示词或大模型输入
  • 开发者须全权负责在自己的实现中验证并安全处理所有外部数据

金融操作——必须有人类介入:

  • 此处介绍的合约函数(reserveCollateral、executeMinting、redeem、redeemWithTag、executeDirectMinting、MintingTagManager 上的 reserve、代币 approve)仅供开发者参考
  • 所有会改变状态的调用都必须在由开发者控制的环境中,针对每项操作获得用户的明确确认
  • 参考脚本(reserve-collateral.ts、execute-minting.ts、redeem-fassets.ts)默认以试运行模式运行,只有开发者明确设置 DRY_RUN=false 后才会广播
  • 只读脚本(get-fxrp-address.ts、list-agents.ts、get-fassets-settings.ts)无需签名密钥,且无法修改状态

此技能的功能:

  • 介绍 FAssets 铸造和赎回流程、Agent 选择、抵押机制及合约模式
  • 引用 Flare Developer Hub 的官方文档和经过审计的入门仓库
  • 为在 Flare 上进行开发的开发者提供只读的概念和集成指导

所有交易签名、密钥管理和链上执行都必须仅在由用户控制、开发者管理且位于此技能之外的环境中进行。

Flare FAssets

FAssets 是什么

FAssets 是一种无需信任的超额抵押桥接方案,连接非智能合约网络(XRP Ledger、Bitcoin、DOGE)与 Flare。

它会创建封装的 ERC-20 代币(FAssets),例如 FXRP、FBTC、FDOGE,可用于 Flare DeFi,也可赎回为对应的底层资产。

依托于:

  • FTSO(Flare Time Series Oracle): 去中心化价格馈送
  • FDC(Flare Data Connector): 验证链下操作(例如其他链上的付款)

抵押品: 稳定币和原生 FLR。

Agent 和社区抵押池提供超额抵押。

FXRP 一览

FXRP 是 XRP 在 Flare 上的 ERC-20 表示形式,由 FAssets 系统提供支持。

其设计目标是无需信任,并且可赎回为 XRP。

要点:

  • 兼容 EVM 的代币: 可与 Flare 上的标准钱包、智能合约和 DeFi 应用配合使用。
  • 最大限度减少信任的桥接流程: 使用 FDC 证明验证 XRPL 付款。
  • 可赎回: 可通过 FAssets 赎回流程将 FXRP 赎回为原生 XRP。
  • DeFi + 收益应用场景: 可用于借贷/流动性策略,以及 Firelight 等基于金库的产品。

用户如何获取 FXRP:

  1. 使用铸造 dApp 从 XRP 铸造。
  2. 通过 AssetManager 流程以编程方式铸造。
  3. 在 Flare DEX 上从其他代币兑换。

指南: FXRP 概览

FXRP 跨链(OFT)

FXRP 也已作为 LayerZero **全链可互换代币(OFT)**进行部署,让持有者能够在 Flare 与其他链之间转移 FXRP,无需封装版本或单独的流动性池。

  • 机制: 在 Flare 上,OFT Adapter 合约会在跨链转出时锁定 FXRP;在目标链上,原生 OFT 合约会在代币转入或转出时铸造或销毁代币。各链上的总供应量保持统一。
  • 安全性: 跨链消息由 LayerZero V2 **DVN(去中心化验证者网络)**堆栈验证(LayerZero Labs、Nethermind、Canary、Horizen),而非由单个验证者验证。
  • 跨链桥接: 使用 Stargate Finance、简单的 Bridge FXRP to Ethereum 指南(在 OFT Adapter 上先授权,再调用 send();适用于你已持有的 FXRP,无需智能账户或铸造),或使用 Auto Minting and Bridging FXRP / FAsset Auto-Redemption 流程,一步完成铸造并跨链桥接,或跨链桥接并赎回。
  • 主网部署(Flare 上的 OFT Adapter,其他链上的原生 OFT): Flare、HyperEVM、HyperCore、Ethereum Mainnet、Base、BNB Smart Chain、Monad、Katana——当前地址请参阅 FXRP OFT Deployments;未经该页面或区块浏览器核实,请勿硬编码地址。

合约: Flare/Coston2 上的 FAssetOFTAdapter(主链;send 会通过 transferFrom 拉取底层 FXRP,因此发送方必须先对适配器调用 approve),以及所有其他 EVM 链上的 FXRPOFT(精简版 FAssetOFT,decimals() 固定为 6;发送时销毁代币,因此无需授权)。每个 FXRP 网络仅存在一个适配器。FXRP 在所有链上均使用 6 位小数,与 LayerZero 的共享小数位数一致,因此不会产生零头。适配器地址:Flare 0xd70659a6396285BF7214d7Ea9673184e7C72E07E,Coston2 0xCd3d2127935Ae82Af54Fc31cCD9D3440dbF46639。EID:Flare 30295、Coston2 40294、Sepolia 40161、Ethereum 30101。两份合约都包含以下 Flare 扩展:

  • 接收方检查: _send 会在扣款前,将 to(不透明的 bytes32)与目标端点进行校验:零值会触发 ZeroRecipient;格式错误会触发 RecipientFormatMismatch。EVM 接收方必须在左侧填充至 32 字节(pad(addr, { size: 32 }));Solana 端点使用全部 32 字节。
  • 暂停: ExternalPausable 会限制扣款和入账;当 paused() 时,发送和入账都会回滚(读取不受影响)。所有者或任何 pauseSenders() 地址都可以调用 pause/unpause。
  • 每次跨链转出有两种费用:
    • 代币费用(从金额中扣除 FXRP):defaultFeeBps(),可通过目标端点对应的 feeBps(dstEid) 覆盖,返回 FeeConfig { uint16 feeBps; bool enabled; }(enabled 为真且费用为 0 时表示显式设为零)。BPS_DENOMINATOR = 10_000;getFee(dstEid, amountLD) = amount * bps / 10_000(不足一个最小单位的费用会向下取整为 0)。quoteOFT(sendParam) 返回 (oftLimit, oftFeeDetails, oftReceipt)——费用显示为单条 "Flare system fee"(BPS 费用 + 去尘余数)。当发送量 = 接收量时,费用详情为空。已累计费用:feeBalance()(所有者可调用 withdrawFees)。
    • 消息费用(原生 FLR/C2FLR,msg.value):quoteSend(sendParam, false) → MessagingFee { nativeFee, lzTokenFee };nativeFee = 执行器 + DVN(+ 国库,目前为 0)费用,且已包含 DVN 费用。负载为普通的 40 字节,因此费用与金额无关;组合路径(例如继续转至 HyperCore)费用更高。应在与 send 相同的流程中进行报价——费用会随目标链的 Gas 和 DVN 价格预言机变动。主网路由使用 20 次确认 / 130k lzReceive Gas,要求 4 个 DVN(编写文档时,Ethereum 约为 235 FLR,Katana 约为 35 FLR);Coston2 使用 2 次确认 / 100k Gas、1 个 DVN(LayerZero Labs)。
  • 转账限额(不同于 AssetManager 铸造速率限额): 独立的逐 EID 滑动窗口——转出(源合约上的每个 dstEid)和转入(目标合约上的每个 srcEid);两个方向不会互相补充额度。发送前可在源合约调用 getAmountCanBeSent(dstEid),在目标合约调用 getAmountCanBeReceived(srcEid) 进行预检——两者都返回 (consumedAfterDecay, remaining),并应用衰减(每秒按 limit/window 衰减)和默认回退值。原始的 outgoingRateLimit/incomingRateLimit 返回已存储的 RateLimit,其中 window == 0 表示使用 default*RateLimit(),而非无限制;若逐 EID 限制和默认限制的 window 均为 0,则表示已禁用(type(uint256).max);若 window > 0, limit == 0,则表示禁止转账。quoteOFT 还会通过 oftLimit.maxAmountLD = min(amountCanBeSent, totalSupply) 暴露限额。超出限额的发送/入账会触发不带参数的自定义错误 RateLimitExceeded() 并回滚——直接拒绝,不发出事件,也没有延迟(与铸造速率限额不同)。@flarenetwork/flare-periphery-contracts 中未包含这些视图函数,需内联 ABI。
  • 发现: peers(eid) 返回已连接的端点,未连接时返回 bytes32(0);适配器上的 token() 是内部 FXRP,而 FXRPOFT 上的 token() 则是 OFT 本身。

指南: FXRP 全链可替代代币(OFT) · FXRP OFT 适配器 · OFT 费用 · 检查 OFT 转账限额 · FAssetOFTAdapter 参考

关键参与方

角色职责
Agents持有底层资产、提供抵押品并代表用户赎回。通过治理验证。使用 work(热)地址和 management(冷)地址。必须满足支持率要求。
用户铸造(存入底层资产 → 获取 FAssets)或赎回(销毁 FAssets → 获取底层资产)。不受限制。
抵押品提供者在 Agent 的资金池中锁定 FLR;赚取铸造费用分成。
清算人当 Agent 的抵押品低于最低要求时,销毁 FAssets 换取抵押品;赚取奖励。
挑战者提交 Agent 违规行为的证明;挑战成功后从金库获利。完全清算会阻止 Agent 继续铸造。

FAsset 工作流

铸造(核心金库,XRP)

铸造模式变更: 标准 FXRP 铸造路径现为向核心金库进行一笔 XRPL 支付(以前称为“直接铸造”)。较早的抵押品预留流程(预留抵押品 → 向 Agent 付款 → executeMinting)现已归档/弃用——请参阅下方的标准铸造(旧版)和标准铸造(已归档)参考资料。

铸造只需向核心金库地址进行一笔 XRPL 支付。无需预留抵押品。

  1. 通过 XRP 目标标签(使用 MintingTagManager)或二进制 备忘录字段编码铸造参数(接收方、可选的执行者)。对于 32 字节备忘录形式,编码 [8-byte DIRECT_MINTING prefix 0x4642505266410018][4-byte zero padding][20-byte recipient];48 字节形式(0x4642505266410021 前缀)还会编码执行者。
  2. 向核心金库地址(AssetManager.directMintingPaymentAddress())发送 XRPL 付款。
  3. 执行者在 Flare 上调用 executeDirectMinting(对于智能账户哈希承诺备忘录,则调用 executeDirectMintingWithData)以完成铸造 → FXRP 铸造给接收方。

费用: 按百分比收取的铸造费(设有最低金额)+ 固定执行者费用,均从付款中扣除。如果付款仅够支付铸造费,执行者将收不到任何费用;如果付款低于最低铸造费,则不会铸造任何 FAsset,全部付款将转给费用接收方。速率限制(每小时/每日上限、大额铸造延迟)会限制铸造,但不会拒绝铸造;只有 FAsset 全局铸造上限(mintingCapAMG)会拒绝铸造(回滚 MintingCapExceeded)。

技能指南: direct-minting-guide.md

开发者指南(TypeScript/viem,flare-viem-starter):

  • 铸造 FXRP — 基于备忘录的路径(32 字节备忘录,包含 0x4642505266410018 前缀 + 接收方)
  • 使用标签铸造 FXRP — 基于目标标签的路径(通过 MintingTagManager 预留,绑定接收方,供后续付款重复使用)
自行铸造(Agent)

Agent 可以作为铸造者,从自己的金库直接铸造 FAsset。Agent 自行铸造时,会在底层链上支付金额并自行执行铸造;此操作会在赎回队列中添加一张票据,与其他用户的票据并列。Agent 可以创建仅用于自行铸造的非公开金库。

赎回

用户可随时将 FAssets 赎回为原始底层资产(流程为:发起请求 → Agent 在底层链上付款)。

赎回费用: 两项费用依次收取(均以 BIPS 计,每项均向下取整),另可选择收取 FLR 执行者费用。赎回者收到 x · (1 − systemRedemptionFeeBIPS/10000) · (1 − redemptionFeeBIPS/10000) 底层资产。转入核心金库时,两项费用均免收。参见赎回费用。

  • 系统费用(首先在创建请求时扣除):从赎回金额中扣除 systemRedemptionFeeBIPS,并向 systemRedemptionFeeReceiver 铸造等额的 FAssets(事件 SystemRedemptionFeePaid(agentVault, requestId, feeUBA))。接收方为零地址时则停用此费用。effectiveSystemRedemptionFeeBIPS() 返回实际收取的费率——Coston2 上未实现(会回滚);请改为读取 systemRedemptionFeeBIPS() + systemRedemptionFeeReceiver()。治理通过 RedeemExtendedSettingsFacet 上的 setSystemRedemptionFeeBIPS/setSystemRedemptionFeeReceiver 进行设置。当前 XRP 数值:Flare 和 Coston2 上为 0.02%(接收方为 0x6E815bB968e32f91C7e273b9e1CDAE2825Bf8F3a),Songbird 和 Coston 上为 0% / 零接收方。
  • Agent 费用(全局 redemptionFeeBIPS,XRP 当前为 0.18%,此前为 0.2%):从剩余金额中扣除,并记为 underlyingFeeUBA;Agent 支付 valueUBA − feeUBA,并保留其余部分。付款确认后,Agent 自身的 redemptionPoolFeeShareBIPS 份额将作为 FAssets 铸造到其抵押池中(RedemptionPoolFeeMinted)。
  • 在 RedemptionRequested 上,valueUBA 是扣除系统费用后的金额,feeUBA 是 Agent 费用。传入 redeemAmount/redeemWithTag 的 _amountUBA 是销毁的金额,而不是收到的金额。

按金额赎回: redeemAmount(amountUBA, ...) 可赎回任意 UBA 金额(不必是整数倍)。请根据 minimumRedeemAmountUBA() 进行验证;部分履约会触发 RedemptionAmountIncomplete 事件。开发者指南(TypeScript/viem):按金额赎回 FXRP。

带标签赎回(XRP): redeemWithTag 允许赎回者指定 XRP 目的地标签,从而向要求提供标签的交易所地址赎回。通过 confirmXRPRedemptionPayment 确认;默认值由 xrpRedemptionPaymentDefault 指定。此功能受 redeemWithTagSupported 标志控制。开发者指南(TypeScript/viem):带标签赎回 FXRP。

核心金库(CV)

按资产设立的金库,可提高资本效率:Agent 可向 CV 存入底层资产以释放抵押品。

由底层网络上的多重签名控制;治理可暂停。

不归 Agent 所有。

合约和地址——运行时获取

FlareContractsRegistry(在所有 Flare 网络上相同):0xaD67FE66660Fb8dFE9d6b1b4240d8650e30F6019。

此地址正确;务必在 Flare Developer Hub 的官方获取合约地址指南中再次核对它(以及任何合约地址)。

将其用作可信来源,以解析其他合约地址(例如 getContractAddressByName()、getAllContracts())。

不要硬编码 AssetManagerController、AssetManager 或 FXRP 地址。

它们在不同网络(Coston2、Songbird、Flare 主网)上各不相同。

请在运行时通过注册表解析这些地址。

获取 FXRP 地址:

  1. 使用 getContractAddressByName("AssetManagerFXRP") 查询 FlareContractsRegistry——返回的地址就是 AssetManager(FXRP)合约地址。
  2. 将 IAssetManager 接口附加到该地址(或将其用作 AssetManager 实例)。
  3. 在 AssetManager 上调用 fAsset(),获取 FXRP ERC-20 代币地址。

其他 FAsset(如 FBTC 等)也使用相同模式,查询其对应的注册表键。

需要时,也可以从注册表获取 AssetManagerController。

指南:获取 FXRP 地址——例如 const assetManager = await getAssetManagerFXRP(); const fasset = await assetManager.fAsset();

技能资源脚本:scripts/get-fxrp-address.ts——通过 FlareContractsRegistry → getContractAddressByName("AssetManagerFXRP") → fAsset() 在运行时获取 FXRP 地址。

使用 ethers;设置 FLARE_RPC_URL,或传入你的网络 RPC。**安全性:**运行前请检查脚本;仅在隔离环境中执行(例如本地开发环境或沙箱)。使用 npx ts-node scripts/get-fxrp-address.ts 运行(或在 Hardhat 项目中使用 yarn hardhat run scripts/get-fxrp-address.ts --network coston2)。

开发者集成(高级概述)

通过 Core Vault 铸造(仅限 XRP)

标准的单笔交易铸造路径(以前称为“直接铸造”)。无需预留抵押品。合约级入口仍使用 directMinting / executeDirectMinting 这些名称。

  1. **获取 Core Vault 地址:**调用 AssetManager.directMintingPaymentAddress()。
  2. 获取费用参数:
    • getDirectMintingMinimumFeeUBA()——最低铸造费用下限
    • getDirectMintingFeeBIPS()——铸造费率
    • getDirectMintingExecutorFeeUBA()——固定执行者费用
  3. 通过目标标签(使用 MintingTagManager)或二进制 memo 字段,在 XRPL 支付中编码参数。
  4. 在 XRPL 上向 Core Vault 地址发送支付。
  5. 如果首选执行者未激活,等待 othersCanExecuteAfterSeconds 后,执行者在 Flare 上调用 executeDirectMinting。 速率限制(滚动窗口): 直接铸造使用按时钟对齐的滚动窗口(每小时:3600s,与 UTC 对齐;每天:86400s,与 UTC 00:00 对齐)。超过上限的铸造会延迟,而不会被拒绝。查询:
  • getDirectMintingHourlyLimitUBA()、getDirectMintingDailyLimitUBA() — 上限
  • getDirectMintingHourlyLimiterState()、getDirectMintingDailyLimiterState() — 原始窗口状态(需在链下推进,才能获取实时值)
  • getDirectMintingsUnblockUntilTimestamp() — 最近一次治理调用 unblockDirectMintingsUntil 的时间戳(若从未使用则为 0);始终是过去的时间。仅追溯生效:所有已延迟且在该时间戳之前开始的铸造(包括大额铸造延迟)都可立即执行;新铸造仍受速率限制——不要将其理解为“关闭了限制器”
  • assetMintingGranularityUBA() — 将 AMG 单位转换为 UBA 的粒度
  • getDirectMintingLargeMintingThresholdUBA()、getDirectMintingLargeMintingDelaySeconds() — 达到或超过阈值(>=)的铸造属于大额铸造:会走独立分支,始终会延迟(即使延迟时间为零,也需要第二次调用 executeDirectMinting),跳过每小时/每天的窗口,且不占用窗口额度
  • getSettings().mintingCapAMG — FAsset 全局上限,在速率限制之前检查并预留:totalReservedCollateralAMG + toAmg(totalSupply) + amountAmg <= mintingCapAMG,否则回滚 MintingCapExceeded(0 表示禁用)。预留容量没有 getter,因此链下 mintingCap − totalSupply 是一个上限值 注意 DirectMintingDelayed(每小时/每天)或 LargeDirectMintingDelayed(大额铸造)事件——两者互斥;低于阈值时,哪个窗口导致 executionAllowedAt 更晚,哪个窗口就会生效。窗口边界也包含在内:铸造量恰好达到窗口上限时也会延迟。使用相同 FDC 证明重试延迟的铸造时,不会重新检查上限或限制器;若在 executionAllowedAt 之前调用,则会回滚 DirectMintingStillDelayed。查询 directMintingDelayState(transactionId) 获取当前状态,并在治理解除限制(DirectMintingsUnblocked)后调用 markUnblockedDirectMintingAllowed(transactionId),以重置执行器的独占窗口。开发者指南:检查铸造限制。完整排障指南:铸造排障

MintingTagManager(通过 AssetManager.getMintingTagManager() 访问):

  • reserve() — payable;预留一个标签 NFT,并返回标签 ID
  • setMintingRecipient(tagId, recipient) — 仅限所有者;设置 FAsset 接收方
  • reservationFee() — 返回原生代币费用
  • reservedTagsForOwner(owner) — 返回某个地址的所有标签 ID
  • transfer(to, tagId) — 转移标签;重置接收方和执行器
  • mintingRecipient(tagId) — 返回当前接收方
  • allowedExecutor(tagId) — 返回当前执行器(address(0) = 任何人)
  • setAllowedExecutor(tagId, executor) — 仅限所有者;限制为由 executor 执行(冷却时间为 10 分钟;在 transfer 时清除)
  • transferFrom(from, to, tagId) — ERC-721 转移;将接收方重置为新所有者,清除允许的执行器,标签 ID 不变。可用于轮换托管方,或将标签交给另一个账户。开发者指南:转移铸造标签

技能指南:direct-minting-guide.md

标准铸造(旧版)

已归档。 以下抵押品预留流程是旧版铸造路径,保留供参考及历史集成使用。新集成应使用上文的 通过 Core Vault 铸造。请参阅 标准铸造(已归档)参考文档。reserveCollateral / executeMinting 仍保留在 AssetManager 接口中。

  1. 预留抵押品: 在 AssetManager 上调用 reserveCollateral(agentVault, lots, feeBIPS, executor)。

通过 collateralReservationFee(lots) 支付 CRF。

使用 CollateralReserved 事件获取 collateralReservationId、付款引用和截止时间。 2. 底层资产付款: 用户向 Agent 在底层链上的地址发送底层资产,并附上事件中的付款引用。

必须在 lastUnderlyingBlock 和 lastUnderlyingTimestamp 之前完成。 3. 证明: 使用 FDC 获取该笔付款的证明/证明数据(例如 Payment 证明类型)。 4. 执行铸造: 在 AssetManager 上调用 executeMinting(proof, collateralReservationId)。

Agent 选择: 使用 getAvailableAgentsDetailedList(或同等方法),按可用抵押品批次数量和状态筛选,再按费用(例如 feeBIPS)筛选。

优先选择状态为 NORMAL 的 Agent。

读取 FAssets 设置

FAssets 运行参数(批次大小、资产小数位、抵押率、费用、阈值)通过 AssetManager 的 getSettings() 读取。官方提供两种方法:

Solidity(Hardhat)

使用 @flarenetwork/flare-periphery-contracts 访问带类型的合约:

// ContractRegistry.getAssetManagerFXRP() resolves the AssetManager at runtime
IAssetManager am = ContractRegistry.getAssetManagerFXRP();
IAssetManager.Settings memory s = am.getSettings();
// s.lotSizeAMG — lot size in AMG units
// s.assetDecimals — decimal places for the FAsset
uint256 lotSizeXRP = s.lotSizeAMG / (10 ** s.assetDecimals);

运行交互脚本:

npx hardhat run scripts/fassets/getLotSize.ts --network coston2

预期输出(示例):

FAssetsSettings deployed to: 0x40deEaA76224Ca9439D4e1c86F827Be829b89D9E
Lot size: 20000000 | Decimals: 6 | Lot size in XRP: 20

指南: 读取 FAssets 设置(Solidity)

Node.js(TypeScript + viem)

使用 @flarenetwork/flare-wagmi-periphery-package — 这是 TypeScript/Node.js 脚本的推荐包。它为 Flare 网络(包括 Coston2)提供所有带类型的合约 ABI,并可直接与 viem 集成,无需手动定义 ABI。

安装依赖:

npm install --save-dev typescript viem @flarenetwork/flare-wagmi-periphery-package

关键步骤:

  1. 从 @flarenetwork/flare-wagmi-periphery-package 导入 coston2 命名空间 — 获取 Coston2 网络的带类型 ABI。
  2. 创建连接到 Flare 测试网 Coston2 的 viem 公共客户端。
  3. 通过 FlareContractRegistry 解析 FXRP AssetManager 地址(getContractAddressByName("AssetManagerFXRP"))。
  4. 调用 getSettings() → 读取 lotSizeAMG 和 assetDecimals → 计算以 XRP 为单位的批次大小。
  5. 解析 FtsoV2 地址,并使用 XRP/USD 馈送 ID(0x015852502f55534400000000000000000000000000)调用 getFeedById,获取当前价格。
  6. 计算批次的美元价值。

预期输出(示例):批次大小:10 FXRP · XRP/USD:约 2.84 · 批次价值:约 28.44 美元

指南: 读取 FAssets 设置(Node.js)

技能脚本: scripts/get-fassets-settings.ts — 读取批次大小、小数位和 XRP/USD 价格(使用 ethers;新项目建议优先采用上文 Node.js 指南所示的 viem + @flarenetwork/flare-wagmi-periphery-package)。

赎回

请求赎回(在 Flare 上销毁 FAssets);所选 Agent 会在底层链上支付底层资产。

完整流程(赎回请求、队列、Agent 付款、可选的兑换并赎回 / 自动赎回)请参阅 FAssets 赎回和 赎回 FAssets。

前置条件(来自 Flare 文档): Flare Hardhat Starter Kit、@flarenetwork/flare-periphery-contracts,以及用于 XRP 付款的 xrpl 包。

无 Gas FXRP 支付

FXRP 支持通过 EIP-712 签名支付请求进行无 Gas(元交易)转账。用户在链下签名;中继器在链上提交并支付 Gas。

技能指南: agent-details-guide.md — 从 AgentOwnerRegistry 读取 Agent 名称、描述、图标 URL 和使用条款。

指南: 读取 FAssets Agent 详情

技能指南: gasless-payments-guide.md — 完整教程(架构、GaslessPaymentForwarder 合约、中继器服务、防重放保护、一次性授权设置)。

指南: 无 Gas FXRP 支付

IAssetManager — 主要 API 分组

信息: getSettings()、getAgentInfo(agentVault)、getCollateralTypes()、collateralReservationFee(lots)、collateralReservationInfo(collateralReservationId)、fAsset()

直接铸造设置: directMintingPaymentAddress()、getDirectMintingMinimumFeeUBA()、getDirectMintingFeeBIPS()、getDirectMintingExecutorFeeUBA()、getDirectMintingOthersCanExecuteAfterSeconds()、getDirectMintingHourlyLimitUBA()、getDirectMintingDailyLimitUBA()、getDirectMintingLargeMintingThresholdUBA()、getDirectMintingLargeMintingDelaySeconds()、getDirectMintingFeeReceiver()

带标签兑换设置: minimumRedeemAmountUBA()、getMintingTagManager()

兑换: redeem(lots, underlyingAddress, executor)、redeemAmount(amountUBA, underlyingAddress, executor)、redeemWithTag(amountUBA, underlyingAddress, executor, destinationTag)、redemptionPaymentDefault(proof, requestId)

Agent: getAllAgents(start, end)、getAvailableAgentsList(start, end)、getAvailableAgentsDetailedList(start, end)

兑换队列: redemptionQueue(firstRedemptionTicketId, pageSize)、agentRedemptionQueue(agentVault, firstRedemptionTicketId, pageSize)

抵押品预留与铸造执行: reserveCollateral(agentVault, lots, maxFeeBIPS, executor)、executeMinting(IPayment.Proof proof, collateralReservationId)、executeDirectMinting(IXRPPayment.Proof proof)、executeDirectMintingWithData(IXRPPayment.Proof proof, bytes data)(用于智能账户自定义指令;data = ABI 编码的 PackedUserOperation;仅对智能账户目标有效)

核心金库: getCoreVaultManager()、getCoreVaultDonationTag()、getCoreVaultMinimumAmountLeftBIPS()、getCoreVaultTransferTimeExtensionSeconds()、getCoreVaultTransferFeeBIPS()、getCoreVaultMinimumRedeemLots()、getCoreVaultRedemptionFeeBIPS()

兑换费用设置: systemRedemptionFeeBIPS()、systemRedemptionFeeReceiver()、effectiveSystemRedemptionFeeBIPS()(Coston2 上不可用)

参考: IAssetManager | IMintingTagManager

术语

  • 底层网络 / 底层资产: 源链及其原生资产(例如 XRPL、XRP)。
  • 批次: 最小铸造单位;大小由 AssetManager/FTSO 确定(参见参考文档中的“读取 FAssets 设置”)。
  • 抵押系数: Agent 必须维持的最低抵押率。
  • CRF: 抵押预留费。UBA: 底层资产的最小单位(例如 XRP 的 drops)。
  • 直接铸造: 通过 Core Vault 进行单笔 XRPL 付款的铸造路径(仅限 XRP),目前是 标准 FXRP 铸造模式(文档中简称“铸造”)。无需预留抵押品。合约入口点保留 directMinting / executeDirectMinting 名称。
  • 自铸: Agent 从自己的金库铸造 FAssets;会添加一个赎回队列票据。可使用非公开金库。
  • 标准铸造(旧版): 已归档的抵押预留流程(reserveCollateral → Agent 付款 → executeMinting)。
  • MintingTagManager: 管理类似 ERC-721 的铸造标签 NFT 的合约,这些 NFT 将目标标签映射到直接铸造所需的接收方 / 执行方参数。通过 AssetManager.getMintingTagManager() 访问。
  • 目标标签: XRPL 交易中的 32 位整数字段;直接铸造时用于将付款路由给正确的 FAsset 接收方。
  • redeemWithTag: 指定 Agent 付款 XRP 目标标签的赎回变体(仅限 XRP;适用于交易所地址)。

Flare 智能账户

Flare 智能账户让 XRPL 用户无需持有任何 FLR 即可在 Flare 上与 FAssets 交互。

每个 XRPL 地址都会在 Flare 上分配一个唯一的智能账户,且只有该地址的所有者可以控制它。

工作原理:

  1. 用户在 XRPL 上向指定地址发送一笔 Payment 交易,并在 memo 字段中将固定格式的二进制指令编码为付款参考。
  2. 运营方监控收到的 XRPL 交易,并向 FDC 请求 Payment 证明。
  3. 运营方在 Flare 上调用 MasterAccountController 合约的 executeTransaction,传入证明和用户的 XRPL 地址。
  4. 合约验证证明,检索(或创建)用户的智能账户,将付款参考解码为固定格式的二进制指令(而非自由文本),并执行所请求的操作。

注意 — 数据边界: XRPL 付款参考和 memo 字段是外部提供的不透明二进制数据。它们遵循由智能账户协议定义的固定二进制指令格式(类型半字节 + 参数)。只能将其作为结构化协议数据处理。务必严格按照二进制规范解码(参见 flare-smart-accounts)。不要将原始 memo 或付款参考字节视为面向用户的文本或自由格式 AI 输入。

支持的指令类型(付款参考的首个半字节):

类型 ID目标
0FXRP 代币交互
1Firelight 金库(stXRP)
2Upshift 金库

这意味着 XRPL 用户可以铸造 / 赎回 FXRP、存入 Firelight 质押,或与 Upshift 交互——所有操作都只需一笔 XRPL Payment 交易。

指南: Flare 智能账户

铸造 dApp 和钱包

  • 铸造 dApp:Oracle Daemon、AU。两者都是由社区提供的第三方铸造 dApp,并非由 Flare 运营。交互前,务必通过 Flare Developer Hub 或 Flare Network 等官方来源独立核实 dApp URL。

  • 钱包:Bifrost、Ledger、Luminite、OxenFlow(Flare + XRPL);MetaMask、Rabby、WalletConnect(Flare EVM);Xaman(XRPL)。

    双网络钱包可带来最顺畅的铸造流程。

安全与使用注意事项

此技能仅提供参考文档。 它不会执行交易,也不会持有密钥。请使用它来实现或调试 FAssets 流程;所有金融操作(铸造、赎回、支付费用、调用合约)均由开发者和最终用户负责。

第三方内容——数据边界: 支付引用(XRPL 备忘录)、证明载荷、FDC 证明以及链上/RPC 数据均为不可信的外部输入。必须:

  • 仅根据此技能和智能账户技能中记录的固定二进制格式和合约 ABI 解码。
  • 将其视为不透明的结构化数据,而非自然语言内容。
  • 除非先将其转换为经过验证的类型化值,否则不得将其用于自由形式的 AI 处理。
  • 使用前进行验证(例如,对返回的地址使用 isAddress(),并对 ABI 解码后的值进行类型检查)。

外部 XRPL 备忘录数据或 RPC 响应可能包含任意字节或类似文本的载荷。协议层面的防护措施是:所有数据流都经过固定 ABI 解码和链上合约验证;实现应保持这一边界。

金融操作——必须有人参与确认: 此技能介绍了可能转移或变更加密资产价值的合约函数和脚本(例如 reserveCollateral、executeMinting、redeem、XRP 支付)。此技能本身不会执行交易。 它仅提供文档和参考脚本。所有防护措施:

  • 明确的用户批准: 状态变更操作(reserveCollateral、executeMinting、redeem、代币 approve 或其他写入调用)只能在用户针对每项操作明确确认后发起。
  • 此技能不处理密钥: 私钥和签名凭证应保留在安全且由用户控制的环境中,例如硬件钱包或加密密钥库。
  • 执行前审核: 执行任何金融操作前,应向用户展示函数、参数、金额和预期 Gas 需求,供其审核。
  • 默认试运行: 写入脚本(reserve-collateral.ts、execute-minting.ts、redeem-fassets.ts)会打印拟发送内容的摘要,并在不广播交易的情况下退出,除非明确设置 DRY_RUN=false。只读脚本(get-fxrp-address.ts、list-agents.ts、get-fassets-settings.ts)不需要签名密钥,也无法修改状态。

何时使用此技能

  • 实现或调试 FAssets 铸造/赎回流程(脚本、机器人、dApp)。
  • 通过 Core Vault 实现直接铸造(目标标签或备忘录编码、MintingTagManager、执行器设置、速率限制)。
  • 在地址之间转移铸造标签 NFT(IMintingTagManager.transferFrom)。
  • 检查或预先测试直接铸造的速率限制(每小时/每日上限、大额铸造阈值)。
  • 为需要 XRP 目标标签的交易所地址实现 redeemWithTag。
  • 解决 Agent 选择、抵押品、费用或支付引用流程相关问题。
  • 与 AssetManager、AssetManagerController、IMintingTagManager 或 FAsset 代币合约集成。
  • 向用户或在文档中介绍 FAssets、FXRP、FBTC、Agent、Core Vault 或直接铸造。
  • 遵循 Flare Developer Hub 中的 FAssets 指南和参考资料。

其他资源

  • 官方文档和 API/参考资料:reference.md
  • 技能指南: direct-minting-guide.md — 通过 Core Vault、MintingTagManager、IMintingTagManager API 进行直接铸造
  • 有关详细的合约接口、铸造/赎回脚本和操作参数,请使用 reference.md 中的 Flare Developer Hub 链接。

评论

支持 Markdown