Wallets
為什麼我的私鑰生成不同的公共地址?
我正在使用該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(或其他乙太坊錢包)時,它會創建一個錢包,其公共地址與之前登錄終端的地址不同。
我不知道為什麼會這樣,儘管我對可能性有一些猜測:
- 從私鑰轉換為公鑰時,我可能會遺漏一些必要的步驟(也許是散列?)
- 或者當我在控制台上記錄私鑰和公鑰時,每次從密鑰的新實例中記錄
有誰知道它為什麼會發生以及如何解決它?
解決了。該程式碼正在為比特幣而不是乙太坊生成一個有效的公共地址。比特幣和乙太坊都有相同的創建私鑰的過程,但是為了從中生成一個乙太坊公共地址,需要更複雜的步驟,而不是在該程式碼中提供。