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

Solana web3.js连接本地/devnet调用createMint报Uint8Array类型错误

Next.js调用Solana createMint报Uint8Array类型错误排查

问题背景

搭建用于测试的小型Next React应用,验证可在自身账户铸造NFT的JS脚本,开发参考Solana SPL Token官方文档的非同质化代币创建示例。已知testnet网络连接超时无法使用,尝试两种方式创建Connection实例后,调用createMint函数均触发报错。

Connection实例创建代码

const connection = new Connection(
  clusterApiUrl('devnet'),
);

const connection = new Connection(
  "http://127.0.0.1:8899",
);

createMint调用代码

let mint = await createMint(
  connection,
  mintRequester,           // 支付账户
  mintRequester.publicKey, // 铸币权限账户
  null,                    // 冻结权限账户
  0,                       // 代币小数位,NFT固定配置为0
);

具体报错信息

Unhandled Runtime Error

TypeError: unexpected type, use Uint8Array
Source

scripts/mint.ts (48:4) @ async*_callee$

  46 | 
  47 |   let mint = await createMint(
> 48 |     connection,
     |    ^
  49 |     mintRequester,           // payer
  50 |     mintRequester.publicKey, // mint
  51 |     null,                    // freeze

解决方案

这个报错和Connection实例的创建逻辑无关,核心是Solana生态依赖版本兼容、Next.js运行环境适配问题,按以下步骤修复即可:

  • 统一Solana相关依赖版本,解决版本错配导致的类型判断错误
    旧版本@solana/spl-token内部直接基于Buffer做类型校验,和高版本/跨大版本@solana/web3.js返回的Uint8Array格式公钥、链上数据不兼容,直接安装经过验证的稳定版本组合:
    npm uninstall @solana/web3.js @solana/spl-token
    npm install @solana/web3.js@1.91.7 @solana/spl-token@0.4.6
    
  • Next.js 13+ App Router环境下,在运行铸造逻辑的脚本顶部添加'use client'声明,避免服务端组件运行时缺少Web端Buffer/Uint8Array的polyfill支持,触发类型错误。
  • 校验传入参数类型:mintRequester必须是通过Keypair.generate()生成的合法签名keypair实例,不能传入普通对象、仅含publicKey的残缺对象作为payer参数。
  • 额外注意:使用本地http://127.0.0.1:8899节点前需要提前启动本地solana test-validator;devnet默认公共节点不稳定时可以替换为第三方公开devnet RPC地址,不需要纠结Connection本身的初始化写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:15:43