Solana JS客户端如何获取已创建Token的引用以再次执行mint操作
错误原因
你触发Error: Non-base58 character错误的核心原因是向PublicKey构造函数传入了非法的公钥格式:你直接复制了控制台打印的PublicKey实例内部调试输出<BN: xxx>,这是公钥对应的大整数表示,不是Solana公钥标准的base58编码字符串。
解决步骤
- 正确存储Token Mint公钥
在你首次创建Token Mint的代码中,不要直接打印SWAB.publicKey,改为调用toBase58()方法获取可持久化存储的标准公钥字符串:
// 输出类似9nRvjYxZ4kLmP2qR3sT5uV7wX9yA1bC3dE5fG7hJ9kL的base58串,把这个串存下来 console.log(SWAB.publicKey.toBase58())
- 重建Token实例的正确代码
用你存储的base58公钥字符串初始化PublicKey,再实例化Token即可:
// 替换为你上一步存储的base58公钥串 const MINT_PUBKEY = '你存下来的base58公钥字符串' let pubKey = new PublicKey(MINT_PUBKEY); let SWAB = new splToken.Token( connection, pubKey, splToken.TOKEN_PROGRAM_ID, fromWindowsWallet )
额外说明(针对新版@spl-token包)
如果你使用的是@solana/spl-token@0.2.0及以上版本,官方已经不推荐使用Token类实例的写法,你可以直接传入mint公钥调用对应的静态方法,不需要提前创建Token实例,比如mint操作可以直接调用mintTo方法:
const { mintTo } = require('@solana/spl-token'); const signature = await mintTo( connection, fromWindowsWallet, new PublicKey(MINT_PUBKEY), // 直接传你存的mint公钥即可 destinationTokenAccount, fromWindowsWallet.publicKey, 100 * 10 ** 2 // 数量乘以你设置的Token精度 );
内容的提问来源于stack exchange,提问作者Boommeister
相关产品推荐
相关产品推荐

