自定义程序错误(Custom Program Error)0x1 是在Solana上与SPL代币或去中心化应用交互时最常见的错误代码之一。它会在代币铸造、流动性池创建、权限放弃或代币转账过程中,出现在钱包弹窗(如Phantom、Solflare或Backpack)以及Solscan的程序日志中。
虽然提示信息 Program log: Error: custom program error: 0x1 看起来很晦涩,但其根本原因非常简单:资金不足(在Solana官方SPL Token程序规范中,0x1 对应 0x1: InsufficientFunds)。
理解为什么您的钱包在显示有原生SOL余额的情况下仍会提示资金不足,将有助于您修复错误并顺利完成交易。
错误 0x1 的技术含义
在Solana系统程序和SPL Token程序中,每当一条指令试图从一个没有足够原生SOL的账户扣款以完成请求的操作时,就会抛出错误代码 0x1。
至关重要的一点是,在Solana上,一笔交易需要原生SOL用于两个独立的用途:
- 交易处理费: 支付给验证者用于处理指令的微量网络费用(通常为0.000005 SOL)。
- 账户租金豁免押金(Rent Exemption): 在验证者内存中初始化新账户(如关联代币账户ATA、元数据账户或流动性池金库账户)所需的一项一次性押金(通常每个账户约0.002至0.005 SOL)。
如果您的钱包中刚好有0.001 SOL,您确实有足够的SOL支付交易处理费,但交易仍会因 0x1 错误而失败,因为您的余额不足以支付开设新账户所需的租金押金。
官方错误代码映射记录在Solana程序错误规范中。
发生错误 0x1 的常见场景
场景 1:创建SPL代币或流动性池
当创建代币或上线流动性池时,交易会同时初始化多个新账户(Mint账户、元数据账户、OpenBook市场账户、金库账户)。如果您的钱包缺少足够的SOL来支付所有账户的租金押金,整个原子交易将被回滚并提示 0x1。
场景 2:将代币转账至新钱包
如果接收方钱包尚未针对发送的代币初始化关联代币账户(ATA),转账交易必须先创建该ATA。如果您的钱包缺少用于开设接收方ATA所需的约0.002 SOL租金,交易将失败并提示 0x1。
场景 3:放弃权限或锁定流动性
即使放弃权限或锁定LP代币属于状态更新,网络优先费、计算预算费和临时金库分配仍需要最小的SOL安全余量。
修复 Custom Program Error 0x1 的步骤指南
请按照以下简单步骤解决错误 0x1:
步骤 1:检查您的原生SOL余额
打开您的钱包插件。检查您的原生 SOL 余额(而非Wrapped SOL或SPL代币)。确保您查看的是主SOL余额。
步骤 2:补充SOL安全余量
为您的钱包充值原生SOL。我们建议根据您计划进行的操作保持以下最小SOL安全余量:
- 创建代币: 钱包中保持至少 0.02 SOL 至 0.05 SOL。
- 创建流动性池: 钱包中保持至少 0.5 SOL 加计划注入的种子SOL数量。
- 放弃权限: 钱包中保持至少 0.01 SOL。
- 普通代币转账: 钱包中保持至少 0.005 SOL。
步骤 3:重新尝试交易
补充SOL余额后,刷新网页以获取全新的区块哈希(Blockhash),重新连接钱包,然后再次执行交易。
错误 0x1 排错汇总表
| 尝试进行的操作 |
错误0x1的根本原因 |
解决方案 |
| 铸造代币 |
缺少用于元数据和Mint账户租金的SOL |
向钱包余额补充0.02 SOL |
| 创建流动性池 |
缺少用于金库和DEX市场费用的SOL |
充值SOL以覆盖手续费和种子资金 |
| 转账代币 |
缺少用于创建接收方ATA的SOL |
向发送方钱包补充0.005 SOL |
| 放弃权限 |
缺少用于网络和优先费用的SOL |
向钱包余额补充0.01 SOL |
在钱包中保留适量的原生SOL安全余量,可以有效防止 0x1 错误,确保在Solana上顺畅、无阻地进行代币操作。