flare-fassets について
flare-fassets は、FAssets を扱う Flare 開発者向けのドキュメントスキルです。ミント、償還、担保、統合方法を解説しますが、トランザクションの実行や鍵の取り扱いは行いません。
主な機能
- 01FAssets のミントと償還の解説
- 02エージェント選定と担保の説明
- 03コントラクト統合の参考情報
- 04外部データ検証の重視
- 05ドキュメントと読み取り専用の案内
活用シーン
- 01FXRP のミント・償還統合の計画
- 02担保プールとエージェントの理解
- 03クロスチェーン決済データ処理の参照
- 04実装時の人間による確認手順の設計
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ flare-foundation/ flare-ai-skills --skill flare-fassetsインストール後、Claude Code で/flare-fassetsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agent-details-guide.mddirect-minting-guide.mdgasless-payments-guide.mdminting-guide.mdredemption-guide.mdreference.mdscripts/direct-mint-fxrp-tag.tsdirect-mint-fxrp.tsexecute-minting.tsget-fassets-settings.tsget-fxrp-address.tsget-redemption-queue.tslist-agents.tsredeem-fassets-amount.tsredeem-fassets-with-tag.tsredeem-fassets.tsreserve-collateral.tsswap-usdt0-to-fxrp.tsxrp-payment.ts詳細
対象範囲と制限
このスキルはドキュメントおよびリファレンスのみを提供します。FAssets のプロトコルフローと開発者向けの統合パターンについて説明します。ユーザーに代わって操作を実行することはありません。
このスキルが明示的に行わないこと:
- ブロックチェーン取引を実行、署名、またはブロードキャストすること
- 秘密鍵やウォレット認証情報にアクセス、保存、または送信すること
- 支払い、ミント、償還、または価値の移転を開始、承認すること
- スマートコントラクトのメソッドや API を直接呼び出すこと
- 資金、トークン、または暗号資産を取り扱うこと
外部データの取り扱い:
- FDC アテステーションペイロード、XRPL 支払い参照、検証者の応答、DA Layer の証明バイト列は、外部から提供される信頼できないコンテンツです
- このスキルでは、開発者がこうしたデータを固定のバイナリ形式とコントラクト ABI に従ってのみデコードするよう指示します。自由形式のテキストや AI 入力として扱ってはなりません
- すべての外部データは使用前に検証する必要があります。応答内容をプロンプトや LLM 入力に渡してはなりません
- 開発者は、自身の実装におけるすべての外部データの検証と安全な取り扱いについて、単独で責任を負います
金融操作 — 人間による確認が必須です:
- ここで説明するコントラクト関数(
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 のミントおよび償還フロー、エージェントの選択、担保の仕組み、コントラクトパターンについて説明します
- 公式の Flare Developer Hub ドキュメントと監査済みのスターターリポジトリを参照します
- Flare 上で開発する開発者に、読み取り専用の概念的なガイダンスと統合ガイダンスを提供します
取引の署名、鍵の管理、オンチェーンでの実行はすべて、このスキルの外部にある、ユーザーが管理し開発者が運用する環境内でのみ行う必要があります。
Flare FAssets
FAssets とは
FAssets は、スマートコントラクトに対応していないネットワーク(XRP Ledger、Bitcoin、DOGE)と Flare を接続するトラストレスな過剰担保型ブリッジです。
FXRP、FBTC、FDOGE などのラップされた ERC-20 トークン(FAssets)を発行します。これらは Flare の DeFi で利用したり、原資産と引き換えたりできます。
以下によって支えられています:
- FTSO(Flare Time Series Oracle): 分散型価格フィード
- FDC(Flare Data Connector): オフチェーンのアクション(例:他のチェーンでの支払い)を検証
担保: ステーブルコインとネイティブ FLR。
エージェントとコミュニティ担保プールが過剰担保を提供します。
FXRP の概要
FXRP は、FAssets システムによって実現される、Flare 上の XRP の ERC-20 表現です。
トラストレスで、XRP に償還できるよう設計されています。
主なポイント:
- EVM 互換トークン: Flare 上の標準的なウォレット、スマートコントラクト、DeFi アプリで動作します。
- 信頼を最小限に抑えたブリッジフロー: XRPL の支払い確認に FDC アテステーションを使用します。
- 償還可能: FAssets の償還フローを通じて、FXRP をネイティブ XRP に償還できます。
- DeFi と利回り獲得の用途: レンディングや流動性提供の戦略、および Firelight のようなボールトベースのプロダクトで利用できます。
ユーザーが FXRP を取得する方法:
- ミント用 dApp を使って XRP からミントします。
- AssetManager のフローを通じてプログラムからミントします。
- 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 のフローを使うと、ミントとブリッジ、またはブリッジと償還を1ステップで行えます。 - メインネットへのデプロイ(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(decimals() が 6 に固定された薄いラッパーの FAssetOFT)です(送信時にバーンされるため、承認は不要です)。FXRP メッシュ内にアダプターは 1つだけ 存在します。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を実行できます。 - ブリッジ送信ごとに発生する2種類の手数料:
- トークン手数料(FXRP、金額から差し引かれます):
defaultFeeBps()が既定値で、宛先ごとにfeeBps(dstEid)で上書きできます。戻り値はFeeConfig { uint16 feeBps; bool enabled; }です(enabledが有効で値が0の場合は明示的にゼロを指定します)。BPS_DENOMINATOR = 10_000で、getFee(dstEid, amountLD)=amount * bps / 10_000です(1単位未満の手数料は0に丸められます)。quoteOFT(sendParam)は(oftLimit, oftFeeDetails, oftReceipt)を返します。手数料は単一の"Flare system fee"行として表示されます(BPS 手数料+デダストの余り)。送信額と受取額が同じ場合は空です。発生した手数料はfeeBalance()で確認でき、オーナーはwithdrawFeesで引き出せます。 - メッセージ手数料(ネイティブ FLR/C2FLR、
msg.value):quoteSend(sendParam, false)はMessagingFee { nativeFee, lzTokenFee }を返します。nativeFeeは Executor と DVN(および現在は0の Treasury)の手数料で、DVN 手数料をすでに含みます。ペイロードは40バイト固定のため、手数料は金額に左右されません。Compose 経路(たとえば HyperCore への継続送信)はより高額になります。送信と同じ処理フロー内で見積もってください。宛先のガス量や DVN の価格フィードに応じて変動します。メインネットの経路では、20確認/lzReceiveガス量130k、必須 DVN 4つを使用します(ドキュメント作成時点で Ethereum は約235 FLR、Katana は約35 FLR)。Coston2 では、2確認/ガス量100k、DVN 1つ(LayerZero Labs)を使用します。
- トークン手数料(FXRP、金額から差し引かれます):
- 転送上限(AssetManager のミント速度制限とは別のもの): EID ごとに独立したスライディングウィンドウがあり、送信側(送信元コントラクトの
dstEidごと)と受信側(宛先コントラクトのsrcEidごと)に設定されます。一方の方向で、もう一方の方向の枠が回復することはありません。送信元ではgetAmountCanBeSent(dstEid)、宛先ではgetAmountCanBeReceived(srcEid)を使って事前確認してください。どちらも(consumedAfterDecay, remaining)を返し、減衰(1秒あたり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では OFT 自体を返します。
ガイド: FXRP Omnichain Fungible Token (OFT) · FXRP OFT Adapter · OFT Fees · Check OFT Transfer Limits · FAssetOFTAdapter reference
主な参加者
| 役割 | 責任 |
|---|---|
| エージェント | 原資産を保有し、担保を提供し、ユーザーのために償還します。ガバナンスによる検証が必要です。work(ホット)アドレスと management(コールド)アドレスを使用します。裏付け率を満たす必要があります。 |
| ユーザー | ミント(原資産を預け入れて FAssets を受け取る)または償還(FAssets をバーンして原資産を受け取る)を行います。制限はありません。 |
| 担保提供者 | エージェントのプールに FLR をロックし、ミント手数料の分配を得ます。 |
| 清算人 | エージェントの担保が最低額を下回った場合、担保と引き換えに FAssets をバーンし、報酬を得ます。 |
| 異議申立人 | エージェントの違反を証明する証拠を提出し、異議申立てに成功するとボールトから報酬を得ます。完全清算が発生すると、エージェントは新たなミントを停止します。 |
FAsset ワークフロー
ミント(Core Vault、XRP)
ミント方式の変更: 標準的な FXRP のミント経路は、現在、Core Vault への 単一の XRPL 支払い(以前「直接ミント」と呼ばれていた方式)です。以前の担保予約フロー(担保を予約 → エージェントに支払い →
executeMinting)は アーカイブ済み/レガシー です。以下の標準ミント(レガシー)と、標準ミント(アーカイブ済み)のリファレンスを参照してください。
ミントに必要なのは、Core Vault アドレスへの 単一の XRPL 支払いのみです。担保予約の手順は不要です。
- XRP の 宛先タグ(
MintingTagManagerを使用)またはバイナリの メモフィールドを使って、ミントパラメーター(受取人、任意の実行者)をエンコードします。32 バイトのメモ形式では、[8-byte DIRECT_MINTING prefix0x4642505266410018][4-byte zero padding][20-byte recipient]をエンコードします。48 バイト形式(0x4642505266410021プレフィックス)では、実行者もエンコードします。 - XRPL の 支払いを Core Vault アドレス(
AssetManager.directMintingPaymentAddress())に送信します。 - 実行者が Flare 上で
executeDirectMinting(スマートアカウントのハッシュコミットメントメモの場合はexecuteDirectMintingWithData)を呼び出して確定し、FXRP が受取人にミントされます。
手数料: 割合に基づくミント手数料(最低額あり)と定額の実行者手数料が、どちらも支払い額から差し引かれます。支払い額がミント手数料のみをまかなう場合、実行者は何も受け取りません。最低ミント手数料に満たない場合、FAssets はミントされず、支払い額の全額が手数料受取人に渡されます。レート制限(時間単位/日単位の上限、大口ミントの遅延)はミントを制限しますが、拒否はしません。拒否(MintingCapExceeded のリバート)が発生するのは、FAsset 全体のミント上限(mintingCapAMG)に達した場合のみです。
スキルガイド: direct-minting-guide.md
開発者ガイド(TypeScript/viem、flare-viem-starter):
- FXRP のミント — メモベースの経路(
0x4642505266410018プレフィックスと受取人を含む 32 バイトのメモ) - タグを使用した FXRP のミント — 宛先タグを使用する経路(
MintingTagManagerで予約し、受取人を紐付けて、以降の支払いにも再利用)
セルフミント(エージェント)
エージェントはミンターとして、自身のボルトから直接 FAssets をミントできます。エージェントがセルフミントする場合、基盤チェーン上で金額を支払い、自らミントを実行します。この操作により、他のユーザーのチケットとともに償還キューにチケットが追加されます。エージェントは、セルフミントのみに使用できる非公開のボルトを作成できます。
償還
ユーザーはいつでもFAssetsを元の原資産に償還できます(フローはリクエスト → エージェントが原資産チェーンで支払います)。
償還手数料: 2種類の手数料が順に適用されます(どちらもBIPS単位で、それぞれ切り捨て)。これに加えて、任意でFLRの実行者手数料がかかります。償還者が受け取る原資産は x · (1 − systemRedemptionFeeBIPS/10000) · (1 − redemptionFeeBIPS/10000) です。コアボールトへの転送では、どちらの手数料も免除されます。償還手数料を参照してください。
- システム手数料(リクエスト作成時に最初に徴収):
systemRedemptionFeeBIPSが償還額から差し引かれ、同額のFAssetsがsystemRedemptionFeeReceiverにミントされます(イベントSystemRedemptionFeePaid(agentVault, requestId, feeUBA))。ゼロアドレスを受取人に指定すると無効になります。effectiveSystemRedemptionFeeBIPS()は実際に課されるレートを返しますが、Coston2では未実装(リバートします)のため、代わりにsystemRedemptionFeeBIPS()とsystemRedemptionFeeReceiver()を読み取ってください。ガバナンスはRedeemExtendedSettingsFacetのsetSystemRedemptionFeeBIPS/setSystemRedemptionFeeReceiverで設定します。現在のXRPの値は、FlareとCoston2では0.02%(受取人は0x6E815bB968e32f91C7e273b9e1CDAE2825Bf8F3a)、SongbirdとCostonでは0%/ゼロアドレスです。 - エージェント手数料(グローバル設定の
redemptionFeeBIPS。現在のXRPでは0.18%、以前は0.2%):残額から徴収され、underlyingFeeUBAに記録されます。エージェントはvalueUBA − feeUBAを支払い、残りを受け取ります。支払いの確認時に、エージェント自身のredemptionPoolFeeShareBIPSの割合がFAssetsとしてミントされ、その担保プールに入ります(RedemptionPoolFeeMinted)。 RedemptionRequestedでは、valueUBAはシステム手数料控除後の金額で、feeUBAはエージェント手数料です。redeemAmount/redeemWithTagに渡す_amountUBAは、受取額ではなくバーンされる額です。
金額指定での償還: redeemAmount(amountUBA, ...) は、UBA単位で任意の金額(ロット単位に限りません)を償還します。minimumRedeemAmountUBA() に照らして検証してください。一部のみが履行された場合は RedemptionAmountIncomplete が発行されます。開発者ガイド(TypeScript/viem):金額を指定してFXRPを償還。
タグ指定での償還(XRP): redeemWithTag を使うと、償還者はXRPの宛先タグを指定できます。タグが必要な取引所アドレスへの償還が可能になります。confirmXRPRedemptionPayment で確認し、デフォルト値は xrpRedemptionPaymentDefault で設定します。redeemWithTagSupported フラグが有効な場合に利用できます。開発者ガイド(TypeScript/viem):タグを指定してFXRPを償還。
コアボールト(CV)
資本効率を高めるアセットごとのボールトです。エージェントは原資産をCVに預け入れることで、担保を解放できます。
原資産ネットワーク上のマルチシグで、ガバナンスによる一時停止が可能です。
エージェントの所有物ではありません。
コントラクトとアドレス — 実行時に取得
FlareContractsRegistry(すべての Flare ネットワークで共通):0xaD67FE66660Fb8dFE9d6b1b4240d8650e30F6019。
このアドレスは正しいものです。Flare Developer Hub の公式ガイドコントラクトアドレスの取得で、このアドレス(およびすべてのコントラクトアドレス)を必ず再確認してください。
このアドレスを信頼できる参照元として、ほかのコントラクトアドレス(例:getContractAddressByName()、getAllContracts())を取得してください。
AssetManagerController、AssetManager、FXRP のアドレスをハードコードしないでください。
ネットワーク(Coston2、Songbird、Flare メインネット)ごとに異なります。
レジストリを使って実行時に取得してください。
FXRP アドレスの取得方法:
- FlareContractsRegistry に
getContractAddressByName("AssetManagerFXRP")を問い合わせます。返されるアドレスは、AssetManager(FXRP)コントラクトのアドレスです。 - そのアドレスに IAssetManager インターフェースをアタッチします(または、AssetManager インスタンスとして使用します)。
- AssetManager で
fAsset()を呼び出し、FXRP ERC-20 トークンのアドレスを取得します。
FBTC などのほかの FAssets についても、対応するレジストリキーを使って同じ手順で取得できます。
必要に応じて、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 という名前が使用されます。
- Core Vault のアドレスを取得します:
AssetManager.directMintingPaymentAddress()を呼び出します。 - 手数料パラメーターを取得します:
getDirectMintingMinimumFeeUBA()— ミント手数料の最低額getDirectMintingFeeBIPS()— ミント手数料率getDirectMintingExecutorFeeUBA()— 固定のエグゼキューター手数料
- パラメーターをエンコードします。 XRPL の支払いに含めます。宛先タグ(
MintingTagManagerを使用)またはバイナリのメモフィールドを使います。 - 支払いを送信します。 XRPL で Core Vault アドレス宛てに送金します。
- 優先エグゼキューターが非アクティブの場合、
othersCanExecuteAfterSecondsが経過した後に、エグゼキューターが Flare 上でexecuteDirectMintingを呼び出します。 レート制限(タンブリングウィンドウ): 直接ミントでは、時刻に合わせたタンブリングウィンドウを使用します(1時間ごと:UTC に合わせた 3600s、1日ごと:00:00 UTC に合わせた 86400s)。上限を超えたミントは拒否されず、遅延されます。次の方法で照会できます。
getDirectMintingHourlyLimitUBA(),getDirectMintingDailyLimitUBA()— 上限getDirectMintingHourlyLimiterState(),getDirectMintingDailyLimiterState()— ウィンドウの生の状態(最新の値を得るには、オフチェーンで進行させてください)getDirectMintingsUnblockUntilTimestamp()— 最後にガバナンスによって呼び出されたunblockDirectMintingsUntilのタイムスタンプ(未使用の場合は0)。常に過去の時刻です。遡及適用のみです。これより前に開始された、すでに遅延中のすべてのミント(大口ミントによる遅延を含む)は直ちに実行できます。新しいミントには引き続きレート制限が適用されるため、「リミッターが無効になった」と解釈しないでください。assetMintingGranularityUBA()— AMG 単位を UBA に変換するための粒度getDirectMintingLargeMintingThresholdUBA(),getDirectMintingLargeMintingDelaySeconds()— しきい値以上(>=)のミントは大口ミントです。独自の分岐で処理され、遅延時間がゼロでも常に遅延されます(executeDirectMintingをもう一度実行する必要があります)。時間単位/日単位のウィンドウをスキップし、ウィンドウ容量も消費しません。getSettings().mintingCapAMG— レート制限の前に確認・予約される FAsset 全体の上限です。totalReservedCollateralAMG + toAmg(totalSupply) + amountAmg <= mintingCapAMGを満たさない場合、MintingCapExceededによってリバートします(0は無効)。予約済み容量を取得するゲッターはないため、オフチェーンではmintingCap − totalSupplyが上限値になります。
DirectMintingDelayed(時間単位/日単位)または LargeDirectMintingDelayed(大口ミント)イベントに注意してください。この2つは相互に排他的です。しきい値未満では、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インターフェースで利用できます。
- 担保を予約する: AssetManager で
reserveCollateral(agentVault, lots, feeBIPS, executor)を呼び出します。
collateralReservationFee(lots) を介して CRF を支払います。
CollateralReserved イベントを使用して、collateralReservationId、支払い参照、期限を取得します。
2. 裏付け資産の支払い: ユーザーは、イベントに記載された支払い参照を付けて、エージェントの裏付け資産チェーン上のアドレスに裏付け資産を送金します。
lastUnderlyingBlock および lastUnderlyingTimestamp より前に完了する必要があります。
3. 証明: FDC を使用して、支払いのアテステーション/証明(Payment アテステーションタイプなど)を取得します。
4. ミントを実行する: AssetManager で executeMinting(proof, collateralReservationId) を呼び出します。
エージェントの選択: getAvailableAgentsDetailedList(または同等のもの)を使用し、利用可能な担保ロット数とステータスで絞り込んだ後、手数料(例:feeBIPS)で絞り込みます。
ステータスが NORMAL のエージェントを優先してください。
FAssets の設定を読み取る
FAssets の運用パラメーター(ロットサイズ、アセットの小数桁数、担保比率、手数料、しきい値)は、getSettings() を介して AssetManager から読み取ります。公式な方法は 2 つあります。
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
主な手順:
@flarenetwork/flare-wagmi-periphery-packageからcoston2名前空間をインポートします。これにより、Coston2 ネットワーク向けの型付き ABI を利用できます。- Flare Testnet Coston2 に接続する viem のパブリッククライアントを作成します。
FlareContractRegistry(getContractAddressByName("AssetManagerFXRP"))を介して FXRP の AssetManager アドレスを解決します。getSettings()を呼び出し、lotSizeAMGとassetDecimalsを読み取り、XRP 単位のロットサイズを計算します。FtsoV2アドレスを解決し、XRP/USD フィード ID(0x015852502f55534400000000000000000000000000)を指定してgetFeedByIdを呼び出し、現在の価格を取得します。- ロットの USD 価値を計算します。
想定される出力(例):ロットサイズ: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 をバーンします)。選択されたエージェントが、裏付け資産チェーン上で裏付け資産を払い出します。
全体のフロー(償還リクエスト、キュー、エージェントによる払い出し、オプションのスワップと償還/自動償還)については、FAssets の償還およびFAssets を償還するを参照してください。
前提条件(Flare のドキュメントより): Flare Hardhat Starter Kit、@flarenetwork/flare-periphery-contracts、および XRP の支払いには xrpl パッケージが必要です。
ガスレス FXRP 支払い
FXRP は、EIP-712 署名付き支払いリクエストを通じたガスレス(メタトランザクション)転送に対応しています。ユーザーはオフチェーンで署名し、リレイヤーがオンチェーンで送信してガス代を支払います。
スキルガイド: agent-details-guide.md — AgentOwnerRegistry からエージェント名、説明、アイコン URL、利用規約を読み取ります。
ガイド: FAssets エージェントの詳細を読む
スキルガイド: gasless-payments-guide.md — 全体の手順(アーキテクチャ、GaslessPaymentForwarder コントラクト、リレイヤーサービス、リプレイ保護、1 回限りの承認設定)。
ガイド: ガスレス 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)
エージェント: 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 設定の読み取り」を参照)。
- 担保係数: エージェントが維持する必要のある最低担保比率です。
- CRF: 担保予約手数料。UBA: 基盤資産の最小単位(例:XRP の drops)。
- ダイレクトミント: Core Vault 経由で単一の XRPL 支払いを行うミント方式です(XRP のみ)。現在の 標準 FXRP ミントモデルです(ドキュメントでは単に「ミント」と呼んでいます)。担保予約は不要です。コントラクトのエントリポイント名は引き続き
directMinting/executeDirectMintingです。 - セルフミント: エージェントが自身のボールトから FAssets をミントする方式です。償還キューのチケットが追加されます。非公開ボールトも使用できます。
- 標準ミント(レガシー): アーカイブされた担保予約フロー(
reserveCollateral→ エージェントによる支払い →executeMinting)です。 - MintingTagManager: ダイレクトミント用に、宛先タグを受取人/実行者のパラメーターに対応付ける ERC-721 のようなミントタグ NFT を管理するコントラクトです。
AssetManager.getMintingTagManager()からアクセスします。 - 宛先タグ: XRPL トランザクションの 32 ビット整数フィールドです。ダイレクトミントでは、支払いを正しい FAsset 受取人に振り分けるために使用します。
redeemWithTag: エージェントへの支払いに XRP の宛先タグを指定する償還方式です(XRP のみ。取引所アドレス向け)。
Flare スマートアカウント
Flare スマートアカウントを使うと、XRPL ユーザーは FLR を保有せずに Flare 上の FAssets を利用できます。
各 XRPL アドレスには、Flare 上でそのアドレスだけが制御できる一意のスマートアカウントが割り当てられます。
仕組み:
- ユーザーは、支払い参照として固定形式のバイナリ命令をメモフィールドにエンコードし、指定のアドレスへ XRPL の Payment トランザクションを送信します。
- オペレーターは、受信した XRPL トランザクションを監視し、FDC に Payment アテステーションを要求します。
- オペレーターは、証明とユーザーの XRPL アドレスを渡して、Flare 上の
MasterAccountControllerコントラクトでexecuteTransactionを呼び出します。 - コントラクトは証明を検証し、ユーザーのスマートアカウントを取得(または作成)して、支払い参照を自由記述テキストではなく固定形式のバイナリ命令としてデコードし、要求されたアクションを実行します。
注 — データ境界: XRPL の支払い参照とメモフィールドは、外部から提供される不透明なバイナリデータです。スマートアカウントプロトコルで定義された固定のバイナリ命令形式(タイプニブル+パラメーター)に従います。構造化されたプロトコルデータとしてのみ扱ってください。バイナリ仕様に従って必ず厳密にデコードしてください(flare-smart-accounts を参照)。メモや支払い参照の生バイト列を、ユーザー向けテキストや自由形式の AI 入力として扱わないでください。
対応する命令タイプ(支払い参照の最初のニブル):
| タイプ ID | 対象 |
|---|---|
0 | FXRP トークンの操作 |
1 | Firelight ボールト(stXRP) |
2 | Upshift ボールト |
これにより、XRPL ユーザーは単一の XRPL Payment トランザクションだけで、FXRP のミント/償還、Firelight へのステーキング、または Upshift の利用ができます。
ガイド: 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 データは、信頼できない外部入力です。これらは以下のように扱う必要があります。
- このスキルと smart-accounts スキルに記載されている固定バイナリ形式およびコントラクト ABI に従う場合に限り、デコードしてください。
- 自然言語のコンテンツではなく、不透明な構造化データとして扱ってください。
- 検証済みの型付き値に変換してからでない限り、自由形式の AI 処理に渡さないでください。
- 使用前に検証してください(例:返されたアドレスに対する
isAddress()の使用、ABI デコード値の型チェック)。
外部 XRPL メモデータや RPC レスポンスには、任意のバイト列やテキストに似たペイロードが含まれる場合があります。プロトコルレベルの保護策として、すべてのデータは固定 ABI デコードとオンチェーンのコントラクト検証を経由します。実装ではこの境界を維持してください。
金融操作 — 人間による確認が必須です: このスキルでは、暗号資産を移動または価値移転する可能性があるコントラクト関数やスクリプト(例:reserveCollateral、executeMinting、redeem、XRP の支払い)について説明しています。このスキル自体はトランザクションを実行しません。 ドキュメントと参照スクリプトのみを提供します。以下の安全策をすべて講じてください。
- 明示的なユーザー承認: 状態を変更する操作(
reserveCollateral、executeMinting、redeem、トークンの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 のミント/償還の実装やデバッグ(スクリプト、ボット、dApp)。
- Core Vault を介した直接ミントの実装(宛先タグまたはメモのエンコード、MintingTagManager、エグゼキューターの設定、レート制限)。
- アドレス間でのミントタグ NFT の移転(
IMintingTagManager.transferFrom)。 - 直接ミントのレート制限の確認や事前テスト(時間単位/日単位の上限、大口ミントのしきい値)。
- XRP の宛先タグが必要な取引所アドレス向けの
redeemWithTagの実装。 - エージェントの選択、担保、手数料、または支払い参照フローに関する問題の解決。
- AssetManager、AssetManagerController、IMintingTagManager、または FAsset トークンコントラクトとの統合。
- FAssets、FXRP、FBTC、エージェント、Core Vault、または直接ミントについて、ユーザーやドキュメント向けに説明する場合。
- Flare Developer Hub の FAssets ガイドとリファレンスに従う場合。
追加リソース
- 公式ドキュメントと API/リファレンス:reference.md
- スキルガイド: direct-minting-guide.md — Core Vault を介した直接ミント、MintingTagManager、IMintingTagManager API
- 詳細なコントラクトインターフェース、ミント/償還スクリプト、運用パラメーターについては、reference.md にある Flare Developer Hub のリンクを使用してください。