Solana测试网React+TypeScript开发NFT交易代码报digest未定义错误
问题解决方案
报错根因
TypeError: Cannot read properties of undefined (reading 'digest') 错误是Chrome浏览器的安全策略限制导致:
Web Crypto API的crypto.subtle接口仅在安全上下文中暴露,安全上下文的判定规则为:
- 访问地址为
localhost/127.0.0.1的HTTP服务 - 所有HTTPS协议的服务
你用局域网IP走HTTP协议访问时,不属于安全上下文,crypto.subtle为undefined,而Solana web3.js/spl-token库的地址计算、哈希校验逻辑会调用crypto.subtle.digest方法,进而触发报错。本地localhost访问符合安全上下文要求,所以运行正常。
修复步骤
- 本地开发阶段优先用
localhost域名访问服务,不要直接用局域网IP地址 - 如果需要局域网内其他设备测试,给本地开发服务开启HTTPS:
如果你用的是Create React App脚手架,启动时添加环境变量即可:
启动后用# Mac/Linux HTTPS=true npm start # Windows set HTTPS=true&&npm starthttps://局域网IP:端口访问,浏览器提示证书风险时选择忽略继续访问即可,此时crypto.subtle可正常调用 - 调用
getOrCreateAssociatedAccountInfo前增加钱包状态校验,避免空指针:if (!wallet.publicKey) { console.log('请先连接钱包') return } toTokenAccount = await mint.getOrCreateAssociatedAccountInfo(wallet.publicKey) - 你当前代码硬编码了测试私钥,生产环境禁止将私钥放在前端代码中,避免资产被盗
- 如果你要实现NFT交易,需要把mint的精度从9改为0,mint数量改为1,mint完成后立即销毁mint权限,当前代码生成的是同质化代币(FT),不符合NFT标准。
内容的提问来源于stack exchange,提问作者Jimitree
相关产品推荐
相关产品推荐

