Solana实战Bug记录

Solana实战Bug记录
SoniaChenSolana实战Bug记录
Cross-program invocation with unauthorized signer or writable account
| 问题 | 解决方案 |
|---|---|
| PDA 派生路径不一致 | 统一 seeds 和 signer_seeds |
| Mint Authority 未授权 | 在 CPI 中使用 signer_seeds 显式授权 |
| Metadata 账户约束错误 | 显式指定 Token Metadata Program 地址 |
| Mint Authority 设置错误 | 确保 mint::authority 指向 PDA 并通过签名授权 |
let signer_seeds: &[&[&[u8]]] = &[&[
EtfToken::SEEDS_PREFIX.as_bytes(),
m.as_ref(),
&[ctx.bumps.etf_token_info],
]];
// 需要和创建账户的时候设置的约束一致
-----
#[account(
init_if_needed,
payer = authority,
space = 8 + EtfToken::INIT_SPACE,
seeds = [
EtfToken::SEEDS_PREFIX.as_bytes(),
etf_token_mint_account.key().as_ref()
],
bump,
)]
pub etf_token_info: Account<'info, EtfToken>,
TypeError: anchor.BN is not a constructor
可参考:
最终是手动导入
import { BN } from "bn.js";







