[英]How to get proper public address from mnemonic phrase for Solana?
我正在尝试在我的 react-native 测试项目中使用solana-web3.js为 Solana 钱包获取正确的公共地址
import { Keypair} from '@solana/web3.js';
import * as bip39 from 'bip39';
import * as bip32 from 'bip32';
const derivePath = "m/44'/501'/0'/0'";
const mnemonic = "...12 word phrase"
const seed: Buffer = yield bip39.mnemonicToSeed(mnemonic);
// also tried to slice seed.slice(0, 32);
const derivedSeed = bip32.fromSeed(seed).derivePath(derivePath).privateKey;
const keypair = Keypair.fromSeed(derivedSeed);
const publicKey = keypair.publicKey.toString();
我采用了应该用于 Phantom 钱包的派生路径(并且可以在 Solflare 钱包中选择)但问题是 - 我没有获得与这些浏览器钱包相同的公钥。
那么我在上面的代码中可能在哪里出错?
更新:当我使用 'ed25519-hd-key' lib 而不是 'bip32' 来获取衍生种子问题时消失了。
import * as ed25519 from 'ed25519-hd-key';
const derivedSeed = ed25519.derivePath(derivePath, seed.toString('hex')).key;
对我来说工作变体:
import nacl from 'tweetnacl';
import * as bip39 from 'bip39';
import { derivePath } from 'ed25519-hd-key';
const web3 = require('@solana/web3.js')
const seed = await bip39.mnemonicToSeed(mnemonic);
const seedBuffer = Buffer.from(seed).toString('hex');
const path44Change = `m/44'/501'/0'/0'`;
const derivedSeed = derivePath(path44Change, seedBuffer).key;
keypair = new web3.Account(nacl.sign.keyPair.fromSeed(derivedSeed).secretKey);
您应该使用“m/501'/0'/0'”路径
我已经尝试过您的相同操作,一切看起来都不错,但是...我无法理解solana-keygen
是如何生成该公共地址的,因为如果我在solana-keygen
给我的助记符上使用此脚本进行回测,我不能获得相同的地址...一些建议? 如果有人想尝试这是solana-keygen
给我的:
mnemonic = "title spell imitate observe kidney ready interest border inject quiz misery motor"
address = 'nsaayLiawKPiui9fWYCpRdYkdKeqj2fNn9u8LjauEkn'
我无法理解他们使用哪种算法。
请不要为这个钱包提供资金。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.