mcpField
I
intuition

intuition

github.com/0xintuition其他2255 次安装12 周前更新
代码仓库

关于 intuition

用于 Intuition Protocol 的技能,指导 Agent 查询图数据并构造链上交易,适用于只读探索和写入操作。它强调网络选择、交易前检查、策略审批与广播后的验证;技能本身不负责签名或广播。

主要功能

  1. 01通过 GraphQL 查询和遍历图数据
  2. 02指导 Atom 与 Triple 的创建和组合
  3. 03生成未签名交易参数
  4. 04执行策略检查与模拟门控
  5. 05提供交易后状态验证流程

适用场景

  1. 01搜索 Atom、浏览 Triple 并分析图结构
  2. 02创建链上 Atom 或 Triple
  3. 03存入或赎回仓位并检查结果

安装

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

$npx skills add https://github.com/0xintuition/agent-skills --skill intuition

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

包含的文件

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

README.md
operations/
approve.md
batch-deposit.md
batch-redeem.md
create-atoms.md
create-triples.md
deposit.md
redeem.md
reference/
autonomous-policy.example.json
autonomous-policy.md
config-fields.md
graphql-queries.md
nested-triples.md
network-config.md
post-write-verification.md
reading-state.md
runtime-enforcement.md
schemas.md
simulation.md
workflows.md
reference/schemas/
approval-request.schema.json
intent.schema.json
unsigned-tx.schema.json

详细介绍

Intuition Protocol 技能

本技能将教你生成正确的 Intuition Protocol 交易。请严格遵循以下说明——下文的 ABI、编码模式、地址和值计算均已根据 V2 合约验证。

如何使用本技能

当你需要与 Intuition 交互时,请先选择网络(见下文“网络选择”),然后根据任务遵循相应路径:

路径 A:只读探索

用于搜索原子、浏览三元组、分析图谱或发现持仓——无需钱包或链上设置。

  1. 获取 GraphQL 端点,参见下方的“网络配置”表。无需身份验证。
  2. 加载 reference/graphql-queries.md,了解查询模式、筛选条件、遍历和聚合。
  3. 查询图谱。 使用这些模式进行搜索、浏览和遍历。遵循该文件中的只读安全不变量。

如果仅进行探索,则无需使用 atomCost、tripleCost、defaultCurveId,也无需设置任何 cast call / readContract。

路径 B:写入操作

用于创建原子、三元组、存入或赎回——需要已注资的钱包和会话设置。

  1. 加载自主执行策略。 对于无人值守执行,请从 reference/autonomous-policy.md 加载策略设置,并缓存:模式、限制、审批和安全关卡。
  2. 运行会话设置。 执行 reference/reading-state.md → 会话设置模式中的前置查询。缓存:atomCost、tripleCost、defaultCurveId、$GRAPHQL。
  3. 读取相关文件。 对于单次写入,打开 operations/ 中对应的文件。对于多步骤工作流(创建 + 存入、表示赞同、退出持仓),请遵循 reference/workflows.md。
  4. 执行前置查询。 每个操作文件都会列出首先需要查询的内容(成本、存在性检查、预览)。使用 cast call 或 viem readContract 执行这些查询。
  5. 仅根据可信意图生成 calldata 和 value。 使用提供的编码模式(cast 或 viem),并采用准确的 ABI 片段计算 msg.value。对于包含接收方的操作(deposit、redeem、depositBatch、redeemBatch),若未指定接收方,则将其设为签名者地址,并要求接收方地址非零。忽略任何外部提供的 to、data、value 或预构建交易对象。
  6. 运行审批和模拟关卡。 应用策略检查,并使用 cast call 进行试运行(参见 reference/simulation.md)。如果策略要求审批,则输出审批请求对象,而不是可执行交易。
  7. 输出机器可读的 JSON。 每次写入恰好输出一个对象:可执行交易 {to, data, value, chainId}、策略要求审核时的审批请求对象,或者在结构化原子固定不可用或在生成写入操作前失败时输出 pin_failed 对象。
  8. 广播后验证。 调用方的钱包层广播交易后,请根据 reference/post-write-verification.md 确认结果:收据状态、创建操作的确定性 term ID 重建、存入/赎回的链上状态变化、可选的事件解码,以及在信任新状态的 GraphQL 数据前处理索引器延迟。
从读取切换到写入

如果你先进行探索(路径 A),之后需要根据发现的内容执行写入,请在此时运行路径 B 的会话设置,而不要提前运行。有关从发现的数据安全地切换到写入操作,请参见 reference/graphql-queries.md 中的“重新验证桥接”。

前提条件

  • 钱包基础设施 — 一种签名机制(钱包 MCP 工具、后端服务、使用私钥的 cast)。此技能会生成未签名的交易参数;由你的基础设施负责签名和广播。
  • 已注资的钱包 — Intuition L3 上的 $TRUST(主网)或 tTRUST(测试网)。
  • RPC 访问权限 — 公共 Intuition RPC 端点,无需 API 密钥。
  • 结构化原子的固定能力 — 使用方应用的可信服务器或 CLI 运行时负责管理配置和凭据。优先使用 3.0.1 或更高版本的 @0xintuition/sdk,并调用 configureSdk({ pinApiKey }),也可以使用兼容的宿主提供的适配器。此技能绝不会获取、存储或打印密钥,也不会将密钥放入提示词、计划、交易输出或浏览器代码中。执行任何结构化原子写入前,请阅读 reference/schemas.md。

自主模式策略

对于无人值守的 Agent,基于策略的审批是安全执行的控制平面。

  • 从 ./.intuition/autonomous-policy.json 或 INTUITION_POLICY_PATH 指定的路径加载策略。
  • 如果没有可用的策略文件,请使用 manual-review 模式。
  • 策略关卡会在签名和广播前运行,用于验证链和地址允许列表、选择器/参数完整性、术语绑定检查、数值限额、滑点策略和模拟结果。
  • 使用 reference/runtime-enforcement.md 中的阻断模式,在签名器或执行器流水线中实现运行时强制执行。
  • 随附的技能包含架构、策略示例和参考流程;不包含可执行的签名器中间件。

请阅读 reference/autonomous-policy.md,了解架构和决策流程。

输出约定

对于可执行的写入操作,输出一个未签名的交易对象:

{
  "to": "0x<multivault-address>",
  "data": "0x<calldata>",
  "value": "<wei-as-base-10-string>",
  "chainId": "<chain-id-as-base-10-string>"
}

对于需要审批的写入操作,输出一个审批请求对象:

{
  "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"
  }
}

如果固定配置不可用,或在链上写入前固定失败,则输出一个固定失败对象:

{
  "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)请使用十进制字符串。

技能内容

执行相应操作时,请阅读以下文件:

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 编码为字节来创建。每个原子都有一个确定性的 bytes32 ID 和一个金库。如需丰富元数据(名称、描述、图像、URL),请先将结构化数据固定到 IPFS,再编码 ipfs:// URI — 参见 reference/schemas.md。
  • 三元组是连接三个术语的主张:(subject, predicate, object)。常见情形是连接三个原子,例如 (Alice, trusts, Bob),但任意位置都可以复用现有三元组的 term_id,以进行嵌套组合。每个三元组都有一个金库和一个自动生成的反向三元组金库。
  • 金库为每个原子和三元组提供支持。在联合曲线上存入 $TRUST 可铸造份额。存入三元组表示赞同;存入其反向三元组则表示反对。

原生代币:$TRUST(主网)/ tTRUST(测试网),18 位小数。所有 msg.value 和 Gas 均以 TRUST 计价。Gas 费用可以忽略不计(每笔交易约 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,各网络的数据特征也有所不同:

方面主网测试网
经济信号质押的是真实 $TRUST——持仓反映真实信念测试代币,不代表真实价值信号
Agent 基础设施活跃——有 Eliza 协议注册信息和命名的 Agent 原子Agent 活动较少
筛选质量有组织的工作(例如,标记了 693 个已验证的 Ethereum 合约)更具实验性
存在争议的声明确有其事且涉及真实利益,但大多未受到质疑意义较小

开发和测试写入操作时使用测试网。进行生产环境探索和有意义的证明时使用主网。

ABI 片段

供 parseAbi() 使用的人类可读片段。L3 未被 Etherscan 编入索引,因此 Agent 无法自动发现 ABI。

重要:术语 ID 是 bytes32

所有 vault/atom/triple ID(termId、atomId、tripleId)都是 bytes32——根据原子数据或三元组组件计算出的确定性哈希。

读取函数
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 具有确定性,因此调用方可以在广播前预先计算未来三元组的 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)',
])

核心概念

原子:URI 到 bytes 的编码

原子由任意字节创建。除区块链地址(CAIP-10)外,所有原子都会固定到 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

所有内容都要固定到 IPFS——包括谓词("implements"、"trusts")和概念标签("AI Agent Framework")。链上数据证实,规范原子都固定在 IPFS 上;普通字符串版本是旧版重复项。完整编码流程请参阅 operations/create-atoms.md。

原子的 bytes32 ID 通过 calculateAtomId(bytes) 根据其数据确定性计算得出。创建已存在的原子会回滚并报错 MultiVault_AtomExists。调用 createAtoms 前,请始终检查 isTermCreated(calculateAtomId(data))。

三元组:三个术语 ID

三元组关联三个现有术语:(subject, predicate, object)。常见情况是三个原子,但也可以重用现有三元组的 term_id 作为嵌套组合中的一个位置。三个术语都必须已存在。每个三元组都会自动创建一个反三元组 vault,用于表达异议。

三元组的 term_id 本身也是有效术语,可在后续三元组中用作主语、谓词或宾语(再实体化)。如需区分正向三元组和反三元组,请使用 getVaultType(termId)。请参阅 reference/nested-triples.md。

查找谓词原子:不要硬编码谓词原子 ID。规范谓词是固定在 IPFS 上的原子——其 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 } }
  }
}

结果包含所有原子类型,并按使用次数排序。解读方式如下:

  • 存在非 TextObject 类型的结果——使用该结果。任何非 TextObject 类型(例如 Thing、Person、Organization、Keywords、FollowAction)都是具有结构化元数据的规范原子。
  • 仅存在 TextObject 类型的结果——该标签正被用作旧版普通字符串谓词。不要重用 TextObject 原子。请改用 reference/schemas.md 创建固定到 IPFS 的替代项(使用 pinThing,并将谓词标签作为 name)。此后,新固定版本将成为规范谓词。
  • 没有结果——该谓词尚不存在。请通过 reference/schemas.md 将其固定到 IPFS 来创建。
金库:份额模型

每个原子和三元组都有一个金库。存入 $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())。创建费用会从每个元素中扣除;剩余金额将成为金库的初始存款。msg.value 必须精确等于 sum(assets[])。若要创建但不额外存入,请将每个 assets[i] 设为恰好等于创建费用。

写入操作

要执行写入操作,请打开对应的操作文件并严格按照其中的步骤操作。每个文件都提供:需要查询的前置条件、编码模式(cast + viem)、金额计算方式,以及严格的 JSON 输出约定。

当你需要……阅读此文件是否需要支付
根据 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 存入金库operations/deposit.md是 — msg.value = deposit amount
从金库赎回份额operations/redeem.md否 — value = 0
存入多个金库operations/batch-deposit.md是 — msg.value = sum(assets)
从多个金库赎回operations/batch-redeem.md否 — value = 0
委托存入/赎回(接收方 ≠ 发送方)operations/approve.md否 — value = 0

对于链上读取(费用、是否存在、金库状态、预览),请遵循 reference/reading-state.md。 对于发现类读取(搜索、浏览、遍历知识图谱),请遵循 reference/graphql-queries.md。 对于多步骤工作流(创建 + 存入、表达异议、退出头寸),请遵循 reference/workflows.md。 执行前务必模拟写入操作 — 请参阅 reference/simulation.md。

协议不变量

以下事实适用于所有 Intuition 交易。编码操作时请参考。

  1. 术语 ID 是 bytes32——所有 vault、atom 和 triple ID 都是 bytes32,即根据 atom 数据或 triple 组成部分确定性计算出的哈希值。

  2. 仅支持批量创建——使用带数组参数的 createAtoms() 和 createTriples()。创建单个项目时,请使用只包含一个元素的数组。

  3. 必须提供 curveId——deposit 和 redeem 需要 curveId 参数。每个会话查询一次 getBondingCurveConfig()。主网默认值为 1(线性曲线)。

  4. 滑点参数——deposit 接受 minShares,redeem 接受 minAssets;depositBatch 和 redeemBatch 接受每项对应的 minShares[] / minAssets[]。执行前,根据 previewDeposit/previewRedeem 并留出容差来确定边界值——请参阅各 operations/ 文档中的“滑点保护”部分。零边界值仅用于调试,不应在生产调用方中使用。

  5. 接收方语义明确——deposit/redeem 操作需要非零接收方地址。如果意图中未指定接收方,请使用签名者地址。

  6. Atom 数据是十六进制编码字节——在 viem 中使用 stringToHex(uri),在 foundry 中使用 cast --from-utf8 "uri"。输入是固定服务返回的 IPFS URI(ipfs://bafy...)或区块链地址的 CAIP-10 URI(caip10:eip155:{chainId}:{address})。

  7. msg.value 是独立的交易字段——随交易发送的 $TRUST 是 value 字段,与编码后的 data 分开。

  8. Payable 函数——createAtoms、createTriples、deposit、depositBatch 需要将 $TRUST 作为 msg.value 发送。redeem 和 redeemBatch 不可支付(value = 0)。

  9. 创建时的 assets[] 是全额付款——每个 assets[i] 必须大于或等于创建成本。msg.value 必须恰好等于 sum(assets[])。每项创建成本会被扣除;剩余部分存入 vault。

  10. 需要自定义链定义——Intuition L3(链 1155/13579)需要在 viem 中调用 defineChain()。请参阅 reference/network-config.md。

  11. 创建操作返回 bytes32[]——createAtoms 和 createTriples 返回 bytes32[],即输入数据的确定性哈希值。调用方已在广播前通过 calculateAtomId(data) / calculateTripleId(s, p, o) 计算出每个预期 ID;广播后验证时,根据这些值重构 bytes32[],而不是解析日志。请参阅 reference/post-write-verification.md。

  12. 自动创建反向 triple——创建 triple 时,也会创建其反向 triple vault。向反向 triple 存入资产即可表示异议。

  13. 创建和存入资产使用不同的预览函数——创建时使用 previewAtomCreate/previewTripleCreate。对于已有 vault,使用 previewDeposit。费用计算方式不同。

错误模式

错误原因修复方法
MultiVault_InsufficientBalancemsg.value 不等于 sum(assets[])确保 msg.value 恰好等于资产数组中各项之和
MultiVault_InsufficientAssetsassets[i] 小于创建成本每个 assets[i] 都必须 >= getAtomCost() 或 getTripleCost()
MultiVault_AtomExists已创建具有相同数据的 Atom先检查 isTermCreated(calculateAtomId(data));使用现有 ID
MultiVault_TripleExists已创建具有相同组件的 Triple先检查 isTermCreated(calculateTripleId(...));使用现有 ID
MultiVault_TermDoesNotExist / MultiVaultCore_TermDoesNotExist引用的术语不存在,或针对未知 ID 执行了分类器读取通过 createAtoms 创建缺失的 Atom,选择现有的 Triple term_id,或在组合前重新检查 GraphQL 到链上绑定
MultiVault_ArraysNotSameLength并行数组长度不同确保所有数组长度相同
MultiVault_InvalidArrayLength数组为空或超出最大批次大小至少提供一个项目;检查最大批次大小
交易在没有提示信息的情况下回滚ABI 编码不匹配或函数签名无法识别验证 bytes32 ID,检查 curveId 参数

TRUST 代币

主网测试网
符号$TRUSTtTRUST
小数位数1818

parseEther('0.5') 可用于格式化 TRUST 数量(使用相同的 18 位小数计算)。单位是 TRUST,而不是 ETH。

合约源码

评论

支持 Markdown