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
相关产品推荐
相关产品推荐

