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

Solana JS/Node.js 如何从本地密钥对获取账户实现空投

两个报错的根因
  • 第一个Keypair.fromSeed报错原因:fromSeed方法只接收长度为32位的Uint8Array类型的原始种子作为入参,你直接传入了助记词字符串,类型不匹配所以报错。助记词不能直接作为种子传入,需要先通过BIP39协议推导转换为对应字节数组的种子。
  • 第二个requestAirdrop报错原因:该方法第一个入参要求是PublicKey类的实例,你直接传入了base58格式的公钥字符串,方法内部调用toBase58方法时找不到对应实现,所以抛出to.toBase58 is not a function错误。另外你的代码没有捕获异步异常,所以同时触发了未处理Promise拒绝的警告。
正确实现方案

分两种常见场景,按需选择即可:

场景1:你持有钱包的助记词,需要导入生成密钥对

首先需要安装额外的依赖处理助记词推导:

npm install bip39 ed25519-hd-key @solana/web3.js

对应导入代码逻辑:

const web3 = require("@solana/web3.js");
const bip39 = require("bip39");
const { derivePath } = require("ed25519-hd-key");

// 助记词替换成你自己的
const MNEMONIC = "raw present ... 你完整的助记词";
// Solana默认的派生路径,如果你用的是其他钱包的自定义路径需要对应修改
const DERIVATION_PATH = "m/44'/501'/0'/0'";

(async () => {
  try {
    // 1. 助记词转种子
    const seed = await bip39.mnemonicToSeed(MNEMONIC);
    // 2. 派生对应路径的密钥
    const derivedSeed = derivePath(DERIVATION_PATH, seed.toString('hex')).key;
    // 3. 生成Keypair实例
    const myKeypair = web3.Keypair.fromSeed(derivedSeed);
    console.log("导入的钱包公钥:", myKeypair.publicKey.toBase58());

    // 4. 连接devnet发起空投
    const connection = new web3.Connection(web3.clusterApiUrl('devnet'), 'confirmed');
    const airdropSignature = await connection.requestAirdrop(
      myKeypair.publicKey,
      web3.LAMPORTS_PER_SOL
    );
    await connection.confirmTransaction(airdropSignature);
    console.log("空投成功,交易哈希:", airdropSignature);
  } catch (err) {
    console.error("操作失败:", err);
  }
})();

场景2:你使用solana CLI生成的本地文件系统钱包(默认存储路径为~/.config/solana/id.json)

直接读取钱包文件的字节数组生成Keypair即可,不需要额外依赖:

const web3 = require("@solana/web3.js");
const fs = require("fs");
const path = require("path");
// 替换为你的钱包json文件实际路径
const WALLET_PATH = path.resolve(process.env.HOME, ".config/solana/id.json");

(async () => {
  try {
    // 1. 读取钱包文件生成Keypair
    const walletSecretKey = JSON.parse(fs.readFileSync(WALLET_PATH, "utf-8"));
    const myKeypair = web3.Keypair.fromSecretKey(Uint8Array.from(walletSecretKey));
    console.log("导入的钱包公钥:", myKeypair.publicKey.toBase58());

    // 2. 连接devnet发起空投
    const connection = new web3.Connection(web3.clusterApiUrl('devnet'), 'confirmed');
    const airdropSignature = await connection.requestAirdrop(
      myKeypair.publicKey,
      web3.LAMPORTS_PER_SOL
    );
    await connection.confirmTransaction(airdropSignature);
    console.log("空投成功,交易哈希:", airdropSignature);
  } catch (err) {
    console.error("操作失败:", err);
  }
})();

内容的提问来源于stack exchange,提问作者Boommeister

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:45:07