Solana文档Hello World示例使用弃用函数及编译报错问题
问题解决步骤
1. 修复await语法错误
报错SyntaxError: await is only valid in async functions and the top level bodies of modules有两种可行解决方式:
方式一:将代码包裹在async函数中
把所有用到await的逻辑放到一个async函数内,再调用该函数执行:
const { Connection, PublicKey, LAMPORTS_PER_SOL } = require("@solana/web3.js"); async function main() { const connection = new Connection("https://api.devnet.solana.com", "confirmed"); const publicKey = new PublicKey("你的钱包公钥"); // 请求SOL空投 const airdropSignature = await connection.requestAirdrop(publicKey, 2 * LAMPORTS_PER_SOL); console.log(`空投签名:${airdropSignature}`); // 其他需要await的操作也放在这个函数里 } main().catch(err => console.error(err));
方式二:将文件改为ES模块
- 把文件后缀从
.js改为.mjs,或者在项目根目录的package.json中添加"type": "module"配置 - 修改后即可在文件顶层直接使用
await:
import { Connection, PublicKey, LAMPORTS_PER_SOL } from "@solana/web3.js"; const connection = new Connection("https://api.devnet.solana.com", "confirmed"); const publicKey = new PublicKey("你的钱包公钥"); const airdropSignature = await connection.requestAirdrop(publicKey, 2 * LAMPORTS_PER_SOL); console.log(`空投签名:${airdropSignature}`);
2. 修复connection.confirmTransaction弃用问题
confirmTransaction旧用法已被废弃,推荐使用以下两种替代方案:
方案一:使用waitForTransaction(适配空投场景)
这是确认空投交易最直接的方式:
// 在async函数内执行 await connection.waitForTransaction(airdropSignature, { commitment: "confirmed" }); console.log("空投已确认");
方案二:使用confirmTransaction新语法
如果坚持使用该方法,需传入规范的配置对象:
// 旧写法(已弃用) // await connection.confirmTransaction(airdropSignature); // 新写法 await connection.confirmTransaction({ signature: airdropSignature, commitment: "confirmed" });
关于官方示例更新
Solana官方Hello World示例确实存在版本滞后问题,随着@solana/web3.js版本迭代,API会持续变更,官方文档更新通常存在一定延迟。你可以通过查看@solana/web3.js的npm包文档或GitHub仓库更新日志,获取最新API用法。
内容的提问来源于stack exchange,提问作者quantum_onion
相关产品推荐
相关产品推荐

