Skip to content
🎉 Welcome to the new Aptos Docs! Click here to submit an issue.
构建Smart Contracts (Move)Error Codes | 错误码

Aptos 中的错误码

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

这些错误的来源请参见:

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

常见错误

INSUFFICIENT_BALANCE_FOR_TRANSACTION_FEE

这意味着交易的最大可能 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。如果你遇到此问题,请联系你的钱包服务商。

OUT_OF_GAS

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

SEQUENCE_NUMBER_TOO_OLD

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

SEQUENCE_NUMBER_TOO_NEW

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

Move 虚拟机(VM)

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

Move 标准库(stdlib)

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)。

Aptos 账户

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。确认地址是否正确

Aptos 代币

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 个字符

Aptos 代币(Token)

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 不存在。