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

如何通过Phantom钱包使用web3.js完成Solana SOL转账及报错处理

报错根因

Phantom钱包默认不会向未授权的站点暴露用户公钥,你当前的代码仅检测了钱包是否安装,没有触发连接授权流程,此时provider.publicKey的默认值为null,调用toString()方法就会触发空指针异常。

修复步骤

  1. 调整getProvider方法,新增连接授权逻辑
const getProvider = async () => {
  if ("solana" in window) {
    const provider = window.solana;
    if (provider.isPhantom) {
      console.log("Is Phantom installed?  ", provider.isPhantom);
      // 触发钱包连接弹窗,用户授权后公钥会自动赋值到provider.publicKey
      await provider.connect();
      return provider;
    }
  } else {
    window.open("https://www.phantom.app/", "_blank");
  }
};
  1. 增加空值校验逻辑,避免授权失败等极端场景下的报错:
async function transferSOL() {
  var provider = await getProvider();
  // 新增公钥存在性校验
  if (!provider || !provider.publicKey) {
    console.error("钱包授权失败,请重试");
    return;
  }
  console.log("Public key of the emitter: ",provider.publicKey.toString());
  // 后续原有逻辑保持不变
  // ...
}

额外注意事项

  • 代码中请求空投的逻辑仅适用于Solana开发网测试,主网环境运行时需要删除该段代码
  • 若多次触发连接弹窗后仍拿不到公钥,可检查Phantom钱包是否已经对当前站点拉黑,可在钱包设置的信任站点列表中调整权限

内容的提问来源于stack exchange,提问作者Nancy Moore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:15:03