跳转到内容

Aptos 错误码

本页面收录了 Aptos 区块链中常见的错误,并尽可能解释了如何解决这些错误.与所有软件一样,代码本身才是错误处理的最终权威来源,因此这里未必涵盖所有条目.本表旨在帮助你解决那些最常见,最易误解或最容易遇到的错误.

这些错误的来源请参见:

欢迎通过 Pull Request 补充你遇到的错误.如果你不知道如何解决该错误,可以将 Action 列留空.

这意味着交易的最大可能 gas 消耗大于交易发送者(或手续费支付者)账户中的 APT 余额.要解决此问题,请尝试降低 max gas amount,并重新提交.

例如,如果 max gas amount 为 1000 gas 单位,gas unit price 为 100 octas,则账户所需的总 APT 为 0.00100000 APT(1000 * 100 / 100000000).默认值通常为 200000 gas 单位,这将需要 0.20000000 APT.如果你遇到此问题,请联系你的钱包服务商.

这意味着交易消耗的 gas 超过了发送者为该交易指定的最大 gas 数量,导致交易中止.要解决此问题,请尝试增加 max gas amount,并重新提交交易.

这意味着交易中的序列号已被该账户使用并提交到区块链.要向区块链提交新交易,请使用新的序列号重新提交.

如果应用不需要同一发送者按顺序执行,可考虑 无序交易,它使用 nonce 而不是序列号.

此错误仅在模拟时出现,表示提交的序列号大于账户的下一个序列号.请减小序列号后重试.

这表示 无序交易 重用了仍保留在链上 nonce 历史中的 (sender, nonce) 对.请选择新的随机 u64 nonce,或等到旧 nonce 被垃圾回收(上一笔交易过期后超过 100 秒).

Error含义可能的解决方法
LOOKUP_FAILED所调用的函数在当前网络上不存在检查链上依赖项的版本是否一致
UNKNOWN_VALIDATION_STATUS默认值不应为有效.N/A
INVALID_SIGNATURE交易签名无效.使用新签名重新提交交易
INVALID_AUTH_KEY账户认证密钥无效.使用新签名重新提交交易,检查账户与认证密钥是否匹配且未被轮换
SEQUENCE_NUMBER_TOO_OLD序列号过旧.使用账户中更新的序列号重新提交交易
SEQUENCE_NUMBER_TOO_NEW序列号过新.将序列号降低为账户的下一个序列号
INSUFFICIENT_BALANCE_FOR_TRANSACTION_FEE账户余额不足以支付交易指定的 max_gas.余额需大于 max_gas_amount * gas_unit_price 才能继续.为账户充值更多 APT 以支付 gas 费用
TRANSACTION_EXPIRED交易已过期.提交一个过期时间更晚的新交易
SENDING_ACCOUNT_DOES_NOT_EXIST发送账户不存在.AIP-115 之后,缺少 Account 资源不再会以这种方式失败;GET /accounts/{address} 会返回默认值而不是 404.该状态码仅为兼容性保留.
REJECTED_WRITE_SET此写集交易因不满足要求而被拒绝.N/A
INVALID_WRITE_SET此写集交易无法应用于当前状态.N/A
EXCEEDED_MAX_TRANSACTION_SIZE原始交易中 program 字段长度超过最大限制.交易过大,无法作为单笔交易提交;如果是包发布,请拆分为多个包
UNKNOWN_SCRIPT此脚本不在允许列表中.N/A
UNKNOWN_MODULE交易尝试发布新模块.N/A
MAX_GAS_UNITS_EXCEEDS_MAX_GAS_UNITS_BOUND交易提交的最大 gas 单位数超过了 VM 的最大限制.将交易中的 max gas amount 降低到 gas schedule 的最大值以下
MAX_GAS_UNITS_BELOW_MIN_TRANSACTION_GAS_UNITS交易提交的最大 gas 单位数不足以覆盖交易的固有成本.将 max gas amount 提高到 gas schedule 的最小值以上
GAS_UNIT_PRICE_BELOW_MIN_BOUND交易提交的 gas 单价低于 VM 设置的最小 gas 单价.将 gas unit price 提高到 gas schedule 的最小值以上
GAS_UNIT_PRICE_ABOVE_MAX_BOUND交易提交的 gas 单价高于 VM 设置的最大 gas 单价.将 gas unit price 降低到 gas schedule 的最大值以下
INVALID_GAS_SPECIFIERgas specifier 格式错误(不是有效标识符)或不是被接受的 gas specifier.N/A
SENDING_ACCOUNT_FROZEN发送账户被冻结.N/A
UNABLE_TO_DESERIALIZE_ACCOUNT无法反序列化账户 blob.N/A
CURRENCY_INFO_DOES_NOT_EXIST找不到 currency info.N/A
INVALID_MODULE_PUBLISHER账户无权限发布模块.N/A
NO_ACCOUNT_ROLE发送账户没有角色.N/A
BAD_CHAIN_ID交易的 chain_id 与链上发布的不一致.确认你的 chain ID 与网络的 chain ID 一致
SEQUENCE_NUMBER_TOO_BIG序列号过大,若执行交易将溢出.N/A
BAD_TRANSACTION_FEE_CURRENCYgas 货币未注册为 TransactionFee 货币.N/A
FEATURE_UNDER_GATING请求的功能仅适用于未来 Aptos 版本,当前版本不可用.N/A
SECONDARY_KEYS_ADDRESSES_COUNT_MISMATCH二级签名者地址数量与二级公钥数量不一致.检查 multi-agent 或 multi-ed25519 的二级签名者地址与二级公钥是否匹配
SIGNERS_CONTAIN_DUPLICATES签名者中存在重复,包括发送者和所有二级签名者.移除所有重复签名者
SEQUENCE_NONCE_INVALID交易中的 sequence nonce 无效(过新,过旧或已被使用).N/A
CHAIN_ACCOUNT_INFO_DOES_NOT_EXIST访问链特定账户信息时出错.N/A
MODULE_ADDRESS_DOES_NOT_MATCH_SENDER模块发布者不是最终持有该模块的账户.确认 Move 合约中的模块地址与交易发送者一致
ZERO_SIZED_STRUCT报告结构体字段数为零.N/A
DUPLICATE_MODULE_NAME发送者尝试在一笔交易中发布两个同名模块.确认每个模块名称唯一
BACKWARD_INCOMPATIBLE_MODULE_UPDATE发送者尝试发布不兼容的模块更新.确认新发布的模块未破坏向后兼容性
CYCLIC_MODULE_DEPENDENCY更新后的模块引入了循环依赖(如 A 依赖 B,B 也依赖 A).检查要发布模块的依赖关系是否存在循环
INVALID_FRIEND_DECL_WITH_SELF不能将模块自身声明为 friend.确认要发布的模块没有将自身声明为 friend
INVALID_FRIEND_DECL_WITH_MODULES_OUTSIDE_ACCOUNT_ADDRESS不能将账户地址外的模块声明为 friend.确认所有 friend 都在同一账户地址下
INVALID_FRIEND_DECL_WITH_MODULES_IN_DEPENDENCIES不能将依赖的模块声明为 friend.检查要发布模块的 friend 声明
CYCLIC_MODULE_FRIENDSHIP更新后的模块引入了循环 friend 关系(如 A friend B,B 也 friend A).检查要发布模块的 friend 声明
INVALID_PHANTOM_TYPE_PARAM_POSITIONphantom 类型参数被用于非 phantom 位置.确认 phantom 类型仅用于泛型
LOOP_MAX_DEPTH_REACHED循环嵌套过深.检查是否存在多层嵌套循环
TYPE_RESOLUTION_FAILURE验证后链接断裂导致类型解析失败.N/A
RESOURCE_DOES_NOT_EXIST试图访问账户下不存在的资源.检查合约,必要时修改以处理不存在的资源
RESOURCE_ALREADY_EXISTS试图在账户下创建已存在的资源.检查合约,必要时修改以处理已存在的资源
UNKNOWN_STATUS保留状态,表示未知 vm status.此值为 std::u64::MAX,但无法进行模式匹配,因此需硬编码.N/A
LINKER_ERROR可能是函数尚未在链上发布,或因账户地址,模块名,函数名错误导致调用无效函数.如果本地有源码但尚未发布到链上,本地不会报错.原因较多,请检查账户地址,模块名,函数名是否正确且已发布
FAILED_TO_DESERIALIZE_ARGUMENT反序列化参数时触发的错误,可能由以下校验导致:1)嵌套或解包结构体数量超过限制(含 vector),最大深度为 10.2)嵌套结构体超过最大深度.3)构造函数序列化参数包含多余数据.4)反序列化 utf8 但 struct_constructors 被禁用.5)字符串参数过长.6)utf8 的 BCS 反序列化失败.N/A
GAS_PAYER_ACCOUNT_MISSING代付交易缺少手续费支付账户.确认手续费支付者存在且作为签名者被包含
NONCE_ALREADY_USED无序交易重用了仍保留在链上 nonce 历史中的 (sender, nonce) 对.使用新的随机 u64 nonce 提交.详见 AIP-123.
EMPTY_PAYLOAD_PROVIDED非多签交易的可执行负载为空.包含有效的入口函数或脚本。空可执行负载仅在部分多签流程中有效。
TRANSACTION_EXPIRATION_TOO_FAR_IN_FUTURE过期时间过远.无序交易的过期时间最多只能是未来 60 秒.缩短过期时间;无序交易请保持在 60 秒以内
Error含义
INVALID_ARGUMENT调用方指定了无效参数(HTTP: 400).
OUT_OF_RANGE输入或计算结果超出范围(HTTP: 400).
INVALID_STATE系统当前状态不允许执行该操作(HTTP: 400).
UNAUTHENTICATED请求未认证,因缺失,无效或过期的认证令牌(HTTP: 401).
PERMISSION_DENIED客户端权限不足(HTTP: 403).
NOT_FOUND指定资源未找到(HTTP: 404).
ABORTED并发冲突,如读-改-写冲突(HTTP: 409).
ALREADY_EXISTS客户端尝试创建的资源已存在(HTTP: 409).
RESOURCE_EXHAUSTED超出 gas 或其他配额(HTTP: 429).
CANCELLED客户端取消请求(HTTP: 499).
INTERNAL内部错误(HTTP: 500).
NOT_IMPLEMENTED功能未实现(HTTP: 501).
UNAVAILABLE服务当前不可用.重试可能解决问题(HTTP: 503).
Error含义可能的解决方法
EACCOUNT_ALREADY_EXISTS账户已存在.N/A
EACCOUNT_DOES_NOT_EXIST账户不存在.先创建账户
ESEQUENCE_NUMBER_TOO_BIG序列号超过 u64 最大值.提供更小的序列号
EMALFORMED_AUTHENTICATION_KEY提供的认证密钥长度无效.检查认证密钥,应为 32 字节向量
ECANNOT_RESERVED_ADDRESS地址为保留地址,无法创建账户.N/A
EOUT_OF_GAS交易超出分配的最大 gas.增加 max gas amount
EWRONG_CURRENT_PUBLIC_KEY当前公钥不正确.确认公钥与账户匹配
EINVALID_PROOF_OF_KNOWLEDGE轮换密钥时,证明拥有公钥的 proof of knowledge 无效.检查轮换密钥时的 proof of knowledge 是否有正确签名
ENO_CAPABILITY调用方没有基于数字签名的能力调用此函数.确认你拥有被调用函数的能力
EINVALID_ACCEPT_ROTATION_CAPABILITY调用方没有来自其他账户的有效轮换能力授权.确认被轮换的账户正确
ENO_VALID_FRAMEWORK_RESERVED_ADDRESS要创建的地址不是 Aptos framework 的有效保留地址.N/A
EINVALID_SCHEME创建账户时,指定的 scheme 只能为 ED25519_SCHEME(0) 或 MULTI_ED25519_SCHEME(1).确认交易签名方式正确
EINVALID_ORIGINATING_ADDRESS如果期望的 originating address 与链上的 originating address 不同,则中止交易.确认你正在轮换正确账户的密钥
ENO_SUCH_SIGNER_CAPABILITY给定地址下不存在 signer capability.确认地址是否正确
Error含义可能的解决方法
ECOIN_INFO_ADDRESS_MISMATCH初始化 coin CoinType 时,账户地址与模块部署者不一致.使用与创建 coin 的账户相同的 CoinType 创建 coin.
ECOIN_INFO_ALREADY_PUBLISHEDCoinType 已初始化为 coin.N/A
ECOIN_INFO_NOT_PUBLISHEDCoinType 尚未初始化为 coin.先用 CoinType 创建 coin 后再使用
ECOIN_STORE_ALREADY_PUBLISHED账户已为 CoinType 注册 CoinStore.N/A
ECOIN_STORE_NOT_PUBLISHED账户尚未为 CoinType 注册 CoinStore.先为该账户注册 CoinType
EINSUFFICIENT_BALANCE余额不足,无法完成交易.转账金额减少,或先获取更多代币
EDESTRUCTION_OF_NONZERO_TOKEN不能销毁非零余额代币.N/A
EZERO_COIN_AMOUNT代币数量不能为零.不要对零数量代币进行销毁或其他操作
EFROZENCoinStore 已冻结,无法存取代币.该账户对此代币被冻结,请联系代币所有者
ECOIN_SUPPLY_UPGRADE_NOT_SUPPORTED不能将代币总供应量升级为不同实现.N/A
ECOIN_NAME_TOO_LONG代币名称过长.代币名称需小于等于 32 个字符
ECOIN_SYMBOL_TOO_LONG代币符号过长.代币符号需小于等于 10 个字符
Error含义
EALREADY_HAS_BALANCE该代币已有余额,无法初始化.
ECOLLECTIONS_NOT_PUBLISHED该账户下没有任何 collection.
ECOLLECTION_NOT_PUBLISHED在创建者账户中找不到 collection.
ECOLLECTION_ALREADY_EXISTScollection 已存在.
ECREATE_WOULD_EXCEED_COLLECTION_MAXIMUM超过 collection 最大允许的 token_data 数量.
EINSUFFICIENT_BALANCE代币余额不足.
EINVALID_TOKEN_MERGE不能合并两个 token_id 不同的代币.
EMINT_WOULD_EXCEED_TOKEN_MAXIMUM超过 token data 最大允许数量.
ENO_BURN_CAPABILITY没有销毁能力.
ETOKEN_DATA_ALREADY_EXISTSTokenData 已存在.
ETOKEN_DATA_NOT_PUBLISHEDTokenData 未发布.
ETOKEN_STORE_NOT_PUBLISHEDTokenStore 不存在.
ETOKEN_SPLIT_AMOUNT_LARGER_THAN_TOKEN_AMOUNT拆分代币数量大于其本身数量.
EFIELD_NOT_MUTABLE字段不可变.
ENO_MUTATE_CAPABILITY无权修改.
ENO_TOKEN_IN_TOKEN_STORETokenStore 中不存在该代币.
EUSER_NOT_OPT_IN_DIRECT_TRANSFER用户未开启直传功能.
EWITHDRAW_ZERO不能提取 0 个代币.
ENFT_NOT_SPLITABLE不能拆分仅有 1 数量的代币.
ENO_MINT_CAPABILITY没有铸造能力
ECOLLECTION_NAME_TOO_LONGcollection 名称过长.
ENFT_NAME_TOO_LONGNFT 名称过长.
EURI_TOO_LONGURI 过长.
ENO_DEPOSIT_TOKEN_WITH_ZERO_AMOUNT不能存入数量为 0 的代币.
ENO_BURN_TOKEN_WITH_ZERO_AMOUNT不能销毁 0 个代币.
EWITHDRAW_PROOF_EXPIRES提取凭证已过期.
EOWNER_CANNOT_BURN_TOKEN代币所有者不可销毁该代币.
ECREATOR_CANNOT_BURN_TOKEN代币创建者不可销毁该代币.
ECANNOT_UPDATE_RESERVED_PROPERTYToken 合约的保留字段,用户不可修改.
EURI_TOO_SHORTURI 过短.
ETOKEN_OFFER_NOT_EXISTToken offer 不存在.