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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:55:29