跳转到内容

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,并重新提交交易.

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

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

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发送账户不存在.先创建账户再重新发送交易
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
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 不存在.