【问题标题】:Solana Wallet Address Generation MechanismSolana 钱包地址生成机制
【发布时间】:2022-06-14 23:13:56
【问题描述】:

我希望在 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, 上传递所有可能的参数,但似乎我在此过程中遗漏了一些东西。

【问题讨论】:

标签: wallet solana


【解决方案1】:

其实我之前也遇到过同样的问题。到现在我还是不明白。但我使用另一种方法来解决。基本上我使用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 中找到详细信息。

【讨论】:

    【解决方案2】:

    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 包:

    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 标记中。

    【讨论】:

      猜你喜欢
      • 2022-06-17
      • 2022-07-28
      • 2018-04-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      • 2022-08-03
      • 2012-03-03
      相关资源
      最近更新 更多