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

关于Phantom钱包助记词生成密钥对的标准及技术问询

Phantom钱包助记词生成Solana密钥对的标准疑问

我正在做一个Solana区块链相关项目,想了解Phantom钱包从助记词生成密钥对采用的标准。

我当前的实现是用BIP39把助记词转成种子,再取种子前32字节创建密钥对,代码如下:

const mnemonic = "sample mnemonic phrase...";
const seed = bip39.mnemonicToSeedSync(mnemonic, ""); // (mnemonic, password)
const keypair = Keypair.fromSeed(seed.slice(0, 32));

这种方式大部分情况正常,但用Phantom生成的助记词时,得不到正确的公钥。我怀疑Phantom用了不同的标准(比如BIP32、BIP44或SLIP39)或者不同的推导路径。

请问:

  1. Phantom钱包采用什么标准或方法将助记词转换为种子?
  2. Phantom钱包如何从种子推导密钥对?是否使用了特定的推导路径?
  3. 是否存在需要在代码中考虑的额外密码或盐?

问题解答
  1. 助记词转种子的标准
    Phantom完全遵循BIP39标准生成种子,和你当前用的bip39.mnemonicToSeedSync逻辑一致,没有自定义转换规则。

  2. 密钥对的推导路径
    Phantom用BIP44推导路径生成Solana密钥对,具体路径为m/44'/501'/0'/0'。你之前的代码直接取种子前32字节,相当于使用了根路径,没有走BIP44的子密钥推导流程,这就是公钥不匹配的原因。

修正后的代码示例:

const mnemonic = "your phantom mnemonic phrase";
const seed = bip39.mnemonicToSeedSync(mnemonic, "");
// 用bip32库推导子私钥
const root = bip32.fromSeed(seed);
const child = root.derivePath("m/44'/501'/0'/0'");
// 从子私钥生成Solana密钥对
const keypair = Keypair.fromSecretKey(child.privateKey);
  1. 额外密码或盐
    Phantom生成种子时,默认不使用额外密码或盐(除非你创建钱包时主动设置了密码)。如果你的Phantom钱包没设密码,mnemonicToSeedSync第二个参数传空字符串是正确的;如果设了密码,需要将密码传入该参数才能生成正确种子。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:22:15