intuition について
Intuition Protocol のグラフ検索やオンチェーントランザクション構築をエージェントに案内するスキルです。読み取り専用の探索と書き込みを扱い、ネットワーク選択、事前確認、ポリシー承認、実行後の検証を重視します。署名やブロードキャストは行いません。
主な機能
- 01GraphQLによるグラフの検索と走査
- 02AtomやTripleの作成と組み立てを案内
- 03未署名トランザクションのパラメーターを生成
- 04ポリシー確認とシミュレーションのゲート
- 05ブロードキャスト後の状態を検証
活用シーン
- 01Atomを検索し、Tripleを閲覧してグラフを分析
- 02オンチェーンでAtomやTripleを作成
- 03ポジションを入金・償還して結果を検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ 0xintuition/ agent-skills --skill intuitionインストール後、Claude Code で/intuitionを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdoperations/approve.mdbatch-deposit.mdbatch-redeem.mdcreate-atoms.mdcreate-triples.mddeposit.mdredeem.mdreference/autonomous-policy.example.jsonautonomous-policy.mdconfig-fields.mdgraphql-queries.mdnested-triples.mdnetwork-config.mdpost-write-verification.mdreading-state.mdruntime-enforcement.mdschemas.mdsimulation.mdworkflows.mdreference/schemas/approval-request.schema.jsonintent.schema.jsonunsigned-tx.schema.json詳細
Intuition Protocol スキル
このスキルでは、正しい Intuition Protocol トランザクションを生成する方法を説明します。以下の手順を正確に守ってください。ここに記載されている ABI、エンコーディングパターン、アドレス、値の計算は、V2 コントラクトに照らして検証済みです。
このスキルの使い方
Intuition とやり取りするよう求められた場合は、まずネットワークを選択し(下記の「ネットワークの選択」を参照)、次にタスクに合った手順に従ってください。
パス A:読み取り専用の探索
アトムの検索、トリプルの閲覧、グラフの分析、ポジションの発見を行う場合は、ウォレットやオンチェーンの設定は必要ありません。
- ネットワーク設定表から GraphQL エンドポイントを取得します。認証は不要です。
- クエリパターン、フィルター、トラバーサル、集計については、
reference/graphql-queries.mdを読み込みます。 - グラフにクエリを実行します。パターンを使って検索、閲覧、トラバーサルを行います。同ファイルの「読み取り安全性の不変条件」に従ってください。
探索のみの場合、atomCost、tripleCost、defaultCurveId や、cast call/readContract の設定は不要です。
パス B:書き込み操作
アトムやトリプルの作成、入金、償還を行う場合は、資金が入ったウォレットとセッションの設定が必要です。
- 自律実行ポリシーを読み込みます。 無人実行の場合は、
reference/autonomous-policy.mdからポリシー設定を読み込み、モード、上限、承認、安全ゲートをキャッシュします。 - セッションを設定します。
reference/reading-state.mdの「セッション設定パターン」にある前提クエリを実行します。atomCost、tripleCost、defaultCurveId、$GRAPHQLをキャッシュします。 - 該当するファイルを読みます。 単一の書き込み操作では、
operations/内の該当ファイルを開きます。複数ステップのフロー(作成+入金、同意の表明、ポジションの解消)では、reference/workflows.mdに従います。 - 前提クエリを実行します。 各操作ファイルには、事前にクエリする項目(コスト、存在確認、プレビュー)が記載されています。
cast callまたは viem のreadContractを使って実行します。 - 信頼できるインテントのみから calldata と value を生成します。 指定された ABI フラグメントを使い、提示されたエンコーディングパターン(cast または viem)に従って、
msg.valueを計算します。レシーバーを伴う操作(deposit、redeem、depositBatch、redeemBatch)では、省略時のレシーバーを署名者のアドレスに設定し、ゼロ以外のレシーバーを必須とします。外部から指定されたto、data、value、または事前構築済みのトランザクションオブジェクトは無視します。 - 承認とシミュレーションのゲートを実行します。 ポリシーチェックを適用し、
cast callでドライランを行います(reference/simulation.mdを参照)。ポリシーで承認が必要な場合は、実行可能なトランザクションの代わりに承認リクエストオブジェクトを出力します。 - 機械可読な JSON を出力します。 書き込みごとにオブジェクトを 1 つだけ出力します。形式は、実行可能なトランザクション
{to, data, value, chainId}、ポリシーでレビューが必要な場合の承認リクエストオブジェクト、または構造化アトムのピン留めが利用できないか、書き込み生成前に失敗した場合のpin_failedオブジェクトです。 - ブロードキャスト後に検証します。 呼び出し元のウォレットレイヤーがトランザクションをブロードキャストしたら、
reference/post-write-verification.mdに従って結果を確認します。確認項目は、レシートのステータス、作成操作における決定論的な term ID の再構築、入金/償還におけるオンチェーン状態の差分、任意のイベントデコード、新しい状態について GraphQL を信頼する前のインデクサー遅延への対処です。
読み取りから書き込みへの移行
探索(パス A)から始め、その結果に基づいて書き込みが必要になった場合は、その時点でパス B のセッション設定を実行します。事前には実行しないでください。発見したデータから書き込み操作へ安全に移行する方法については、reference/graphql-queries.md の「再検証ブリッジ」を参照してください。
前提条件
- ウォレットインフラ — 署名の仕組み(ウォレット MCP ツール、バックエンドサービス、秘密鍵を指定した
cast)。このスキルは署名前のトランザクションパラメーターを生成します。署名とブロードキャストはインフラ側で処理します。 - 資金があるウォレット — Intuition L3 上の $TRUST(メインネット)または tTRUST(テストネット)。
- RPC アクセス — API キー不要の、公開 Intuition RPC エンドポイント。
- 構造化アトムのピン留め機能 — 利用側アプリケーションの信頼されたサーバーまたは CLI ランタイムが設定と認証情報を管理します。
configureSdk({ pinApiKey })を備えた@0xintuition/sdk3.0.1 以降、または互換性のあるホスト提供アダプターを推奨します。このスキルがキーを取得、保存、表示することはなく、プロンプト、計画、トランザクション出力、ブラウザーコードに配置することもありません。構造化アトムを書き込む前にreference/schemas.mdをお読みください。
自律モードポリシー
無人エージェントでは、ポリシーに基づく承認が安全な実行の制御プレーンとなります。
./.intuition/autonomous-policy.jsonまたはINTUITION_POLICY_PATHで指定されたパスからポリシーを読み込みます。- ポリシーファイルを利用できない場合は、
manual-reviewモードを使用します。 - ポリシーゲートは署名とブロードキャストの前に実行されます。チェーン/アドレスの許可リスト、セレクター/引数の整合性、タームのバインド確認、値の上限、スリッページポリシー、シミュレーション結果を検証します。
reference/runtime-enforcement.mdのブロッキングパターンを使って、署名または実行パイプラインにランタイムの強制処理を実装します。- 同梱のスキルにはスキーマ、ポリシー例、リファレンスフローが含まれていますが、実行可能な署名ミドルウェアは含まれていません。
スキーマと判定フローについては reference/autonomous-policy.md をお読みください。
出力コントラクト
実行可能な書き込みの場合、未署名のトランザクションオブジェクトを 1 つ出力します。
{
"to": "0x<multivault-address>",
"data": "0x<calldata>",
"value": "<wei-as-base-10-string>",
"chainId": "<chain-id-as-base-10-string>"
}
承認が必要な書き込みの場合、承認リクエストオブジェクトを 1 つ出力します。
{
"status": "approval_required",
"operation": "<operation-name>",
"reason": "<policy reason>",
"proposedTx": {
"to": "0x<multivault-address>",
"data": "0x<calldata>",
"value": "<wei-as-base-10-string>",
"chainId": "<chain-id-as-base-10-string>"
},
"checks": {
"allowlist": "pass",
"limits": "pass",
"simulation": "pass"
}
}
オンチェーンへの書き込み前にピン留め設定を利用できない場合、またはピン留めに失敗した場合は、ピン留め失敗オブジェクトを 1 つ出力します。
{
"status": "pin_failed",
"operation": "createAtoms",
"reason": "<specific failure reason>",
"entity": "<name of the entity that failed to pin>"
}
ホスト側のピン留め機能または API キーが設定されていない場合、reason は pinning_configuration_required で始まるメッセージに設定します。リクエストを試みたり、ユーザーにキーの貼り付けを求めたり、シークレットファイルを調べたり、トランザクションデータを出力したりしないでください。
JSON オブジェクトが、マシンモードでの完全な応答です。
機械可読 JSON では、トップレベルの数値トランザクションフィールド(value、chainId)に 10 進数の文字列を使用します。
スキルの内容
該当する操作を行う際は、次のファイルをお読みください。
reference/ (Path A: read-only — load these directly)
network-config.md Canonical network metadata, session env values, and viem chain defs
graphql-queries.md GraphQL discovery — search, traverse, aggregate, graph landscape
nested-triples.md Nested triple composition and term-aware rendering
reading-state.md On-chain reads and session setup (Path B prerequisite)
config-fields.md Protocol config semantics — which fields constrain txs, which are informational
schemas.md Schema types, IPFS pinning, and structured atom creation
workflows.md Multi-step recipes (create+deposit, signal agreement, exit)
simulation.md Dry run / simulate writes before executing
autonomous-policy.md Approval modes, policy schema, and execution gates
runtime-enforcement.md Blocking validator flow before signing
operations/ (Path B: writes — run session setup first)
create-atoms.md Create atom vaults from URI data
create-triples.md Create triple vaults linking three terms
deposit.md Deposit $TRUST into a vault, mint shares
redeem.md Redeem shares from a vault, receive $TRUST
batch-deposit.md Deposit into multiple vaults in one transaction
batch-redeem.md Redeem from multiple vaults in one transaction
approve.md Grant/revoke deposit or redemption approval for delegated flows
プロトコルモデル
- アトムは、人、URL、アドレス、ラベルなど、あらゆる概念を表します。URI をバイト列としてエンコードして作成します。それぞれに決定論的な
bytes32ID とボールトがあります。名前、説明、画像、URL などのリッチメタデータには、まず構造化データを IPFS にピン留めし、ipfs://URI をエンコードします。詳細はreference/schemas.mdをご覧ください。 - トリプルは、3 つのターム(
(subject, predicate, object))を結び付ける主張です。一般的なケースでは 3 つのアトムを結び付けます(例:(Alice, trusts, Bob))が、ネストした構成では、どの位置にも既存のトリプルのterm_idを再利用できます。それぞれのトリプルにはボールトと、自動生成される反対トリプルのボールトがあります。 - ボールトは、すべてのアトムとトリプルを支えます。$TRUST を預け入れると、ボンディングカーブに基づいてシェアが発行されます。トリプルへの預け入れは賛成を示し、反対トリプルへの預け入れは反対を示します。
ネイティブトークン:$TRUST(メインネット)/tTRUST(テストネット)、小数桁数は 18 桁です。すべての msg.value とガスは TRUST 建てです。ガス代はわずかです(トランザクションあたり約 0.0001 TRUST)。
ネットワークの選択
初回の呼び出し時に、使用するネットワークをユーザーに確認します。
Which network?
1. Intuition Mainnet -- chain 1155
2. Intuition Testnet -- chain 13579
ネットワーク設定
チェーン ID、RPC URL、GraphQL エンドポイント、エクスプローラー URL、MultiVault アドレス、viem チェーン定義などのネットワークメタデータは reference/network-config.md にあります。セッション中のすべての操作には、そこで選択した行を使用します。--chain mainnet または --chain testnet で切り替えます。
ネットワークの特性
アドレスやチェーン ID 以外にも、ネットワークにはデータ特性の違いがあります。
| 項目 | Mainnet | Testnet |
|---|---|---|
| 経済的なシグナル | 実際の $TRUST がステーキングされており、ポジションには真の確信が反映されます | テストトークンのため、実際の価値を示すシグナルはありません |
| エージェントのインフラストラクチャ | 活発です。Eliza プロトコルへの登録や、名前付きエージェントアトムがあります | エージェントの活動は少なめです |
| キュレーションの品質 | 構造化された取り組みがあります(例:693 件の Verified Ethereum Contracts のタグ付け) | より実験的です |
| 異論のある主張 | 実際の利害を伴って存在しますが、ほとんど異議は唱えられていません | 意味合いは小さめです |
書き込みの開発やテストには testnet を使用してください。本番環境での調査や意味のある証明には mainnet を使用してください。
ABI フラグメント
parseAbi() 用の人間が読めるフラグメントです。L3 は Etherscan にインデックスされていないため、エージェントが ABI を自動で検出することはできません。
重要:Term ID は bytes32 です
すべての vault/atom/triple ID(termId、atomId、tripleId)は bytes32 です。これは atom データまたは triple の構成要素から計算される決定論的ハッシュです。
読み取り関数
const readAbi = parseAbi([
// Cost queries (call BEFORE creating atoms/triples)
'function getAtomCost() view returns (uint256)',
'function getTripleCost() view returns (uint256)',
// Atom/Triple data
'function atom(bytes32 atomId) view returns (bytes)',
'function getAtom(bytes32 atomId) view returns (bytes)',
'function isAtom(bytes32 atomId) view returns (bool)',
'function isTriple(bytes32 id) view returns (bool)',
'function isCounterTriple(bytes32 termId) view returns (bool)',
'function isTermCreated(bytes32 id) view returns (bool)',
'function getTriple(bytes32 tripleId) view returns (bytes32, bytes32, bytes32)',
'function triple(bytes32 tripleId) view returns (bytes32, bytes32, bytes32)',
'function getCounterIdFromTripleId(bytes32 tripleId) pure returns (bytes32)',
'function getInverseTripleId(bytes32 tripleId) view returns (bytes32)',
'function getVaultType(bytes32 termId) view returns (uint8)',
// ID calculation
'function calculateAtomId(bytes data) pure returns (bytes32)',
'function calculateTripleId(bytes32 subjectId, bytes32 predicateId, bytes32 objectId) pure returns (bytes32)',
'function calculateCounterTripleId(bytes32 subjectId, bytes32 predicateId, bytes32 objectId) pure returns (bytes32)',
// Vault state
'function getVault(bytes32 termId, uint256 curveId) view returns (uint256 totalAssets, uint256 totalShares)',
'function getShares(address account, bytes32 termId, uint256 curveId) view returns (uint256)',
'function maxRedeem(address sender, bytes32 termId, uint256 curveId) view returns (uint256)',
'function currentSharePrice(bytes32 termId, uint256 curveId) view returns (uint256)',
'function convertToShares(bytes32 termId, uint256 curveId, uint256 assets) view returns (uint256)',
'function convertToAssets(bytes32 termId, uint256 curveId, uint256 shares) view returns (uint256)',
// Preview (simulate before executing)
'function previewDeposit(bytes32 termId, uint256 curveId, uint256 assets) view returns (uint256 shares, uint256 assetsAfterFees)',
'function previewRedeem(bytes32 termId, uint256 curveId, uint256 shares) view returns (uint256 assetsAfterFees, uint256 sharesUsed)',
'function previewAtomCreate(bytes32 termId, uint256 assets) view returns (uint256 shares, uint256 assetsAfterFixedFees, uint256 assetsAfterFees)',
'function previewTripleCreate(bytes32 termId, uint256 assets) view returns (uint256 shares, uint256 assetsAfterFixedFees, uint256 assetsAfterFees)',
// Fee queries
'function protocolFeeAmount(uint256 assets) view returns (uint256)',
'function entryFeeAmount(uint256 assets) view returns (uint256)',
'function exitFeeAmount(uint256 assets) view returns (uint256)',
'function atomDepositFractionAmount(uint256 assets) view returns (uint256)',
// Config
'function getGeneralConfig() view returns ((address admin, address protocolMultisig, uint256 feeDenominator, address trustBonding, uint256 minDeposit, uint256 minShare, uint256 atomDataMaxLength, uint256 feeThreshold))',
'function getAtomConfig() view returns ((uint256 atomCreationProtocolFee, uint256 atomWalletDepositFee))',
'function getTripleConfig() view returns ((uint256 tripleCreationProtocolFee, uint256 atomDepositFractionForTriple))',
'function getBondingCurveConfig() view returns ((address registry, uint256 defaultCurveId))',
'function getVaultFees() view returns ((uint256 entryFee, uint256 exitFee, uint256 protocolFee))',
])
ネストされた構成の場合、getVaultType(termId) が正確な分類関数です。
0 = ATOM、1 = TRIPLE、2 = COUNTER_TRIPLE です。isTriple(termId) は
より大まかな判定で、カウンタートリプルに対しても true を返します。calculateTripleId
は決定論的であるため、呼び出し側はブロードキャスト前に将来の triple の term_id を
事前計算できます。
書き込み関数
const writeAbi = parseAbi([
// Atom creation (batch only)
'function createAtoms(bytes[] atomDatas, uint256[] assets) payable returns (bytes32[])',
// Triple creation (batch only)
'function createTriples(bytes32[] subjectIds, bytes32[] predicateIds, bytes32[] objectIds, uint256[] assets) payable returns (bytes32[])',
// Single deposit/redeem
'function deposit(address receiver, bytes32 termId, uint256 curveId, uint256 minShares) payable returns (uint256)',
'function redeem(address receiver, bytes32 termId, uint256 curveId, uint256 shares, uint256 minAssets) returns (uint256)',
// Batch deposit/redeem
'function depositBatch(address receiver, bytes32[] termIds, uint256[] curveIds, uint256[] assets, uint256[] minShares) payable returns (uint256[])',
'function redeemBatch(address receiver, bytes32[] termIds, uint256[] curveIds, uint256[] shares, uint256[] minAssets) returns (uint256[])',
// Approvals
'function approve(address sender, uint8 approvalType)',
// Atom wallet
'function computeAtomWalletAddr(bytes32 atomId) view returns (address)',
'function claimAtomWalletDepositFees(bytes32 atomId)',
])
コアコンセプト
Atom:URI から bytes へのエンコード
Atom は任意の bytes から作成されます。ブロックチェーンアドレス(CAIP-10)を除き、すべての atom は IPFS にピン留めされます。これは Intuition Portal の作成フローに沿ったものです。
import { stringToHex } from 'viem'
// All entities, concepts, predicates, labels — pin to IPFS first
// See reference/schemas.md for the full pin flow
const atomData = stringToHex('ipfs://bafy...') // URI from pin mutation
// Blockchain address (CAIP-10) — no IPFS needed
const atomData = stringToHex('caip10:eip155:1:0x1234...abcd')
# cast equivalents
ATOM_DATA=$(cast --from-utf8 "ipfs://bafy...") # after pinning
ATOM_DATA=$(cast --from-utf8 "caip10:eip155:1:0x1234...abcd") # CAIP-10 address
述語("implements"、"trusts")や概念ラベル("AI Agent Framework")を含め、すべてをピン留めしてください。オンチェーンデータによると、正規の atom は IPFS にピン留めされています。通常の文字列版はレガシーな重複データです。エンコードの全フローについては operations/create-atoms.md を参照してください。
atom の bytes32 ID は、calculateAtomId(bytes) によってデータから決定論的に計算されます。すでに存在する atom を作成すると、MultiVault_AtomExists でリバートします。createAtoms を呼び出す前に、必ず isTermCreated(calculateAtomId(data)) を確認してください。
Triple:3 つの Term ID
Triple は、既存の 3 つの term、すなわち (subject, predicate, object) を結び付けます。
一般的なケースでは 3 つとも atom ですが、既存の triple の term_id もネストされた構成の
位置として再利用できます。3 つの term はすべて、すでに存在している必要があります。すべての
triple には、異議を示すためのカウンタートリプル vault が自動的に作成されます。
Triple の term_id 自体も有効な term であり、後続の triple では subject、
predicate、object のいずれとしても使用できます(再ification)。肯定的な triple と
カウンタートリプルを区別する必要がある場合は、getVaultType(termId) を使用してください。
reference/nested-triples.md を参照してください。
述語 atom の検索:述語 atom ID をハードコードしないでください。正規の述語は IPFS にピン留めされた atom であり、その ID は通常の文字列ではなく、ピン留めされた URI に依存します。グラフを検索して、ラベルで既存の述語を見つけてください。
query FindPredicate($label: String!) {
atoms(
where: { label: { _eq: $label } }
order_by: { as_predicate_triples_aggregate: { count: desc } }
) {
term_id label type
as_predicate_triples_aggregate { aggregate { count } }
}
}
結果にはすべての atom タイプが含まれ、使用回数の多い順に並びます。次のように解釈してください。
- Non-TextObject の結果がある場合 — それを使用してください。
TextObject以外のタイプ(例:Thing、Person、Organization、Keywords、FollowAction)は、構造化メタデータを持つ正規の atom です。 - TextObject の結果だけがある場合 — そのラベルはレガシーな通常文字列の述語として使用されています。TextObject atom は再利用しないでください。代わりに、
reference/schemas.mdに従ってピン留めした置き換えを作成してください(述語ラベルをnameとしてpinThingを使用します)。新しいピン留め版が、以後の正規の述語になります。 - 結果がない場合 — その述語はまだ存在しません。
reference/schemas.mdに従ってピン留めし、作成してください。
Vault:シェアモデル
すべてのアトムとトリプルにはVaultがあります。$TRUSTを預け入れると、ボンディングカーブに基づいてシェアが発行されます。curveIdパラメーターで使用するカーブを選択します。
必ず最初にデフォルトのカーブIDを照会してください:
cast call $MULTIVAULT "getBondingCurveConfig()((address,uint256))" --rpc-url $RPC
# Returns (registryAddress, defaultCurveId) -- use the second value
メインネットでは、現在のデフォルトは1(リニアカーブ)です。セッションごとに一度getBondingCurveConfig()を照会し、すべての預け入れ/引き出し呼び出しでdefaultCurveIdを再利用してください。
手数料:必ず事前にプレビューしてください
預け入れには複数の手数料が適用されます:プロトコル手数料、エントリー手数料、アトムウォレットの預け入れ手数料(アトムの場合)、アトム預け入れ割合(トリプルの場合)です。**実行前に必ずpreviewDepositまたはpreviewAtomCreate/previewTripleCreateを呼び出してください。**手数料率はガバナンスによって設定可能で、変更される場合があります。
作成時のAssets配列
アトム/トリプルの作成時、各assets[i]はアイテムごとの全額支払い額です。getAtomCost()(またはgetTripleCost())以上である必要があります。作成コストは各要素から差し引かれ、残額が初期Vault預け入れ額になります。msg.valueはsum(assets[])と正確に一致する必要があります。追加の預け入れなしで作成するには、各assets[i]を作成コストと正確に同じ額に設定してください。
書き込み操作
書き込みを実行するには、対応する操作ファイルを開き、その手順に正確に従ってください。各ファイルには、照会が必要な前提条件、エンコード方法(cast + viem)、値の計算方法、厳格なJSON出力仕様が記載されています。
| 必要な操作 | 参照するファイル | Payable |
|---|---|---|
| URIからアトムを作成する | operations/create-atoms.md(reference/schemas.mdに従って、まず必ずIPFSにピン留めしてください。ただしCAIP-10は除きます) | はい — msg.value = sum(assets[])、各assets[i] >= atomCost |
| 用語を結び付けるトリプルを作成する | operations/create-triples.md | はい — msg.value = sum(assets[])、各assets[i] >= tripleCost |
| $TRUSTをVaultに預け入れる | operations/deposit.md | はい — msg.value = 預け入れ額 |
| Vaultからシェアを引き出す | operations/redeem.md | いいえ — value = 0 |
| 複数のVaultに預け入れる | operations/batch-deposit.md | はい — msg.value = sum(assets) |
| 複数のVaultから引き出す | operations/batch-redeem.md | いいえ — value = 0 |
| 預け入れ/引き出しを委任する(receiver ≠ sender) | operations/approve.md | いいえ — value = 0 |
オンチェーンの読み取り(コスト、存在確認、Vaultの状態、プレビュー)については、reference/reading-state.mdに従ってください。
探索の読み取り(検索、閲覧、ナレッジグラフのたどり方)については、reference/graphql-queries.mdに従ってください。
複数ステップのフロー(作成 + 預け入れ、異議の表明、ポジションの解消)については、reference/workflows.mdに従ってください。
書き込みは実行前に必ずシミュレーションしてください。reference/simulation.mdを参照してください。
プロトコルの不変条件
これらの事実は、すべての Intuition トランザクションに適用されます。操作をエンコードする際に参照してください。
-
用語 ID は bytes32 です -- すべての Vault、Atom、Triple の ID は
bytes32です。Atom のデータまたは Triple の構成要素から計算される決定論的ハッシュです。 -
作成はバッチのみです -- 配列を指定して
createAtoms()とcreateTriples()を使用してください。単一アイテムを作成する場合は、要素数 1 の配列を使用します。 -
curveId は必須です --
depositとredeemにはcurveIdパラメーターが必要です。セッションごとに一度、getBondingCurveConfig()を照会してください。メインネットのデフォルトは1(線形カーブ)です。 -
スリッページパラメーター --
depositはminShares、redeemはminAssetsを受け取り、depositBatchとredeemBatchはアイテムごとのminShares[]/minAssets[]を受け取ります。実行前に、許容誤差を加えてpreviewDeposit/previewRedeemから範囲を算出してください。各operations/ドキュメントの「スリッページ保護」セクションを参照してください。ゼロの範囲はデバッグ専用であり、本番環境の呼び出し元では使用しないでください。 -
受信者のセマンティクスは明示的です --
deposit/redeem操作には、ゼロ以外の受信者アドレスが必要です。インテントで受信者が省略された場合は、署名者のアドレスを使用してください。 -
Atom のデータは 16 進数でエンコードされたバイト列です -- viem では
stringToHex(uri)、foundry ではcast --from-utf8 "uri"を使用してください。入力には、ピン留めした IPFS URI(ipfs://bafy...)またはブロックチェーンアドレスの CAIP-10 URI(caip10:eip155:{chainId}:{address})を指定します。 -
msg.value は独立したトランザクションフィールドです -- トランザクションとともに送信される $TRUST は、エンコードされた
dataとは別のvalueフィールドです。 -
Payable 関数 --
createAtoms、createTriples、deposit、depositBatchには、msg.valueとして $TRUST が必要です。redeemとredeemBatchは payable ではありません(value = 0)。 -
作成時の assets[] は全額の支払いです -- 各
assets[i]は作成コスト以上である必要があります。msg.valueはsum(assets[])と完全に一致しなければなりません。作成コストは各アイテムから差し引かれ、残額は Vault に預け入れられます。 -
カスタムチェーン定義が必要です -- Intuition L3(chain 1155/13579)では、viem の
defineChain()が必要です。reference/network-config.mdを参照してください。 -
作成処理は bytes32[] を返します --
createAtomsとcreateTriplesはbytes32[]を返します。これは入力データの決定論的ハッシュです。呼び出し元はブロードキャスト前にcalculateAtomId(data)/calculateTripleId(s, p, o)を使用して予想される各 ID をすでに計算しています。ブロードキャスト後の検証では、ログを解析するのではなく、これらの値からbytes32[]を再構成します。reference/post-write-verification.mdを参照してください。 -
反対 Triple は自動的に作成されます -- Triple を作成すると、その反対 Triple の Vault も作成されます。反対意見を示すには、反対 Triple に預け入れてください。
-
作成と預け入れではプレビュー関数が異なります -- 作成時は
previewAtomCreate/previewTripleCreateを使用してください。既存の Vault にはpreviewDepositを使用してください。手数料の計算方法が異なります。
エラーパターン
| エラー | 原因 | 修正方法 |
|---|---|---|
MultiVault_InsufficientBalance | msg.value が sum(assets[]) と一致しません | msg.value が assets 配列の合計と正確に一致することを確認してください |
MultiVault_InsufficientAssets | assets[i] が作成コストを下回っています | 各 assets[i] が getAtomCost() または getTripleCost() 以上である必要があります |
MultiVault_AtomExists | 同じデータを持つ Atom がすでに作成されています | 先に isTermCreated(calculateAtomId(data)) を確認し、既存の ID を使用してください |
MultiVault_TripleExists | 同じコンポーネントを持つ Triple がすでに作成されています | 先に isTermCreated(calculateTripleId(...)) を確認し、既存の ID を使用してください |
MultiVault_TermDoesNotExist / MultiVaultCore_TermDoesNotExist | 参照先の term が存在しないか、未知の ID に対して分類器の読み取りが実行されました | 不足している atom を createAtoms で作成するか、既存の triple term_id を選択するか、構成する前に GraphQL とオンチェーンのバインディングを再確認してください |
MultiVault_ArraysNotSameLength | 並列配列の長さが異なります | すべての配列の長さが一致していることを確認してください |
MultiVault_InvalidArrayLength | 配列が空であるか、最大バッチサイズを超えています | 1 件以上の項目を指定し、最大バッチサイズを確認してください |
| メッセージなしでトランザクションがリバートする | ABI エンコーディングの不一致、または未認識の関数シグネチャ | bytes32 ID を確認し、curveId パラメーターを確認してください |
TRUST トークン
| メインネット | テストネット | |
|---|---|---|
| シンボル | $TRUST | tTRUST |
| 小数桁数 | 18 | 18 |
parseEther('0.5') は TRUST 額のフォーマットに使用できます(小数点以下 18 桁の計算は同じです)。単位は ETH ではなく TRUST です。
コントラクトのソース
- V2 コントラクト: https://github.com/0xIntuition/intuition-v2/tree/main/contracts/core
- インターフェース:
src/interfaces/IMultiVault.solとsrc/interfaces/IMultiVaultCore.sol - ブロックエクスプローラー(メインネット): https://intuition.calderaexplorer.xyz
- SDK(参考): https://github.com/0xIntuition/intuition-ts