Wallets

為什麼我的私鑰生成不同的公共地址?

  • February 15, 2022

我正在使用該Javascript程式碼生成三件事:私鑰公鑰公共地址(公鑰的最後 40 個字元):

const EC = require('elliptic').ec;
const ec = new EC('secp256k1');

const key = ec.genKeyPair();
const publicKey = key.getPublic('hex');
const privateKey = key.getPrivate('hex');

console.log();
console.log('Private key: ', privateKey);

console.log();
console.log('Public key (big): ', publicKey);

console.log();
console.log('Public key (shorten): ', publicKey.slice(-40));

儘管該程式碼會生成一個私鑰,但當我將該私鑰導入 Metamask(或其他乙太坊錢包)時,它會創建一個錢包,其公共地址與之前登錄終端的地址不同。

我不知道為什麼會這樣,儘管我對可能性有一些猜測:

  • 從私鑰轉換為公鑰時,我可能會遺漏一些必要的步驟(也許是散列?)
  • 或者當我在控制台上記錄私鑰和公鑰時,每次從密鑰的新實例中記錄

有誰知道它為什麼會發生以及如何解決它?

解決了。該程式碼正在為比特幣而不是乙太坊生成一個有效的公共地址。比特幣和乙太坊都有相同的創建私鑰的過程,但是為了從中生成一個乙太坊公共地址,需要更複雜的步驟,而不是在該程式碼中提供。

引用自:https://ethereum.stackexchange.com/questions/120837