首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Solana钱包地址生成机制

Solana钱包地址生成机制
EN

Stack Overflow用户
提问于 2022-01-14 10:08:12
回答 3查看 1.4K关注 0票数 -1

我想开发索拉纳,但是.我喜欢了解我在做什么。我看了一下文档,我无法理解solana-keygen是如何工作的。我非常努力地从同样的记忆中复制同样的公共演讲,但似乎没有什么效果。有人知道地址是如何产生的吗?如果您有私钥,则无需使用@solana/web3库即可获得公共密钥。

代码语言:javascript
运行
复制
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,上传递所有可能的参数,但是在这个过程中我似乎遗漏了一些东西。

EN

回答 3

Stack Overflow用户

发布于 2022-06-14 15:13:56

var bip39 = require('bip39');

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

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

从助记符中获得主种子:

masterSeed = bip39.mnemonicToSeedSync(seedPhrase, passPhrase);

获取派生的Solana地址种子:

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;

注意:若要在浏览器中运行此操作,请按以下方式使用browserify:

例如:

创建一个文件,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标记中。

票数 1
EN

Stack Overflow用户

发布于 2022-01-26 03:51:59

其实我以前也遇到过同样的问题。我现在还没搞清楚。但我用另一种方法来解决问题。基本上,我使用solana-keygen recover 'prompt://?key=0/0' -o file.json将键盘恢复为json。然后打开文件,将私钥复制回代码,并使用let secretKey = Uint8Array.from(private key)进行解压缩。您可以从我的博客https://medium.com/@lianxiongdi/solana-web3-tutorial-2-connect-your-web3-program-to-wallet-39b335f4b4b中找到详细信息。

票数 0
EN

Stack Overflow用户

发布于 2022-11-05 14:24:55

您的问题是,solana-keygen new不使用ed25519HdKey派生路径,它只是从种子中分割出32个字节,然后从种子中生成键盘。别担心,我和你一样遇到了同样的麻烦。

代码语言:javascript
运行
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70708923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档