Solana钱包地址生成机制



我想在Solana上开发,但。。。我喜欢了解我在做什么。我已经看了文档,但我无法了解solana-keygen是如何工作的。我一直在努力从同一个助记符中复制同一个公共地址,但似乎什么都不起作用。有人知道地址是如何生成的吗?如果你有你的私钥,你如何在不使用@solana/web3库的情况下获得公钥。

import * as Bip39 from 'bip39'
import { Keypair } from "@solana/web3.js";
const seed: Buffer Bip39.mnemonicToSeedSync("title spell imitate observe kidney ready interest border inject quiz misery motor")
const derivedSeed = ed25519.derivePath("m/44'/501'/0'/0'", seed.toString('hex')).key;
const keyPair = Keypair.fromSeed(derivedSeed)
console.log(keyPair.publicKey.toString())   

这个代码工作得很好,所以如果我转到https://solflare.com/access并尝试插入mnemonic,我可以看到地址。

但是,事实上,solana-keygen给我返回了这个带有助记符的地址:nsaayLiawKPiui9fWYCpRdYkdKeqj2fNn9u8LjauEkn

这是一个样品钱包。请随意试用此参数。

请不要为这个钱包提供资金

怎么可能得到solana-keygen给我的相同地址?

我试图在ed25519, pbkd2,上传递所有可能的参数,但似乎在这个过程中遗漏了一些内容。

var bip39 = require('bip39');

var ed25519 = require('ed25519-hd-key');

var solanaWeb3 = require("@solana/web3.js");

从助记符中获取主种子:

masterSeed = bip39.mnemonicToSeedSync(seedPhrase, passPhrase);

获取派生的索拉纳地址种子:

var index = 0;var derivedPath = "m/44'/501'/" + index +"'/0'";

const derivedSeed = ed25519HdKey.derivePath(derivedPath, masterSeed.toString('hex')).key;

获取密钥对:

keypair = solanaWeb3.Keypair.fromSeed(derivedSeed);

获取钱包地址和密钥:

walletAddr = keypair.publicKey.toBase58();

secretKey = keypair.secretKey;

注意:要在浏览器中运行此功能,请按如下方式使用browserfy:

例如:

创建一个文件,bip39-input.js:

var bip39 = require('bip39');

创建浏览捆绑包:

browserify bip39-input.js -r bip39 -s bip39 --exclude=./wordlists/english.json --exclude=./wordlists/japanese.json --exclude=./wordlists/spanish.json --exclude=./wordlists/italian.json --exclude=./wordlists/french.json --exclude=./wordlists/korean.json --exclude=./wordlists/czech.json --exclude=./wordlists/portuguese.json --exclude=./wordlists/chinese_traditional.json -o bip39-bundle.js

bip39-bundle.js文件放置在script标记中。

实际上我以前也遇到过同样的问题。到现在我还是不明白。但我使用了另一种方法来解决问题。基本上,我使用solana-keygen recover 'prompt://?key=0/0' -o file.json将密钥对恢复为json。然后打开文件,将私钥复制回代码,并使用let secretKey = Uint8Array.from(private key)进行提取。你可以从我的博客中找到详细信息https://medium.com/@lianxiongdi/solana-web3-tutorial--connect-your-web3-程序-挑战-39b335f4b4b。

您的问题是因为solana-keygen new没有使用ed25519HdKey派生路径,但它只是从种子中截取了前32个字节,然后从中生成密钥对。别担心,在弄清楚这一点之前,我也遇到过和您一样的问题。

import bip39 from 'bip39'
import solanaWeb3, { Keypair } from '@solana/web3.js'
async function getKeyCreatedBySolanaKeygenFromMnemonic(mnemonic, password) {
const pass = ''
const seed = await bip39.mnemonicToSeed(mnemonic, pass)
let derivedSeed = seed.subarray(0, 32);
const kp = Keypair.fromSeed(derivedSeed);
return kp;
}
async function main() {
const mnemonic = "title spell imitate observe kidney ready interest border inject quiz misery motor"
const kp = await getKeyCreatedBySolanaKeygenFromMnemonic(mnemonic);
console.log('Public key derived from solana-keygen new mnemonic:', kp.publicKey.toBase58())
}
main();

输出:solana-keygen公钥新助记符nsaayLiawKPiui9fWYCpRdYkdKeqj2fNn9u8LjauEkn

相关内容

  • 没有找到相关文章

最新更新