You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Privy Solana嵌入式钱包与Anchor框架集成时初始化程序报错:Cannot read properties of undefined (reading '_bn')

Privy Solana嵌入式钱包与Anchor框架集成时初始化程序报错:Cannot read properties of undefined (reading '_bn')

看起来你在把Privy的Solana嵌入式钱包和Anchor框架集成时遇到了初始化程序的问题,这个Cannot read properties of undefined (reading '_bn')错误确实挺让人头疼的,我来帮你一步步排查~

首先,从错误栈和日志来看,报错发生在创建anchor.Program的那一行,_bn是Solana PublicKey对象的内部属性,说明某个和PublicKey相关的变量在Anchor内部处理时变成了undefined,咱们从以下几个方向排查:

1. 检查Privy钱包地址的类型处理

你的代码里把solanaWallet.address用new PublicKey()重新包装了一次,但要确认Privy返回的solanaWallet.address本身是不是已经是PublicKey实例了——如果是的话,重复调用构造函数可能会导致内部属性异常。可以修改钱包适配器的publicKey部分:

const walletAdapter = {
  publicKey: solanaWallet.address instanceof PublicKey 
    ? solanaWallet.address 
    : new PublicKey(solanaWallet.address),
  signTransaction: (tx) => solanaWallet.signTransaction(tx), // 用箭头函数绑定上下文
  signAllTransactions: async (transactions) => {
    return Promise.all(transactions.map(tx => solanaWallet.signTransaction(tx)));
  },
};

2. 确保Provider的publicKey有效

虽然日志里显示wallet id是_PublicKey2对象,但还是建议在创建Provider后加一行日志,确认provider本身的publicKey属性是否存在:

console.log("Provider publicKey:", provider.publicKey);

Anchor在创建Program时会依赖provider的publicKey,如果这个属性意外变成undefined,就会触发类似的_bn读取错误。

3. 验证IDL与Program ID的匹配性

日志里IDL看起来结构完整,但要确认:

  • IDL里的程序名称(name: 'rps_game')和你部署在Devnet上的程序名称完全一致
  • PROGRAM_ID字符串是正确的部署地址,没有拼写错误
    你可以尝试用Anchor CLI做简单验证(如果本地有环境的话):
anchor verify <你的PROGRAM_ID>

4. 检查签名方法的上下文绑定

Privy的钱包方法(比如signTransaction)可能需要正确的上下文才能正常工作,直接引用方法可能会导致this丢失,进而引发内部错误。刚才的代码示例里已经把signTransaction改成了箭头函数,这样可以确保调用时上下文正确绑定到solanaWallet对象。

5. 尝试简化Program初始化逻辑

有时候手动传递provider可能会有隐藏问题,可以试试用Anchor全局provider来创建Program:

anchor.setProvider(provider);
// 改用全局provider创建Program
const rpsProgram = new anchor.Program(
  IDL,
  new PublicKey(PROGRAM_ID),
  anchor.getProvider()
);

你可以先从第1、2步开始排查,这两个是最常见的触发这类错误的原因,调整后再运行看看日志变化~

备注:内容来源于stack exchange,提问作者degenPenguin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 17:23:07