Address-Generation

生成比特幣地址 JS 一步一步的“無效地址”錯誤

  • November 5, 2017

我正在遵循 Mastering Bitcoin 中概述的比特幣地址創建過程,但是,當我嘗試在設置為 regtest 的 bitcoin-cli 中引用此地址時,它會以無效地址錯誤響應。我正在嘗試編寫一些 JS 來通過 bitcoin-core 包與我的比特幣節點進行互動,但不是只使用所有內置命令,而是自己編寫一些程式碼來鞏固我的理解。

我正在使用以下 npm 包:

const EC = require('elliptic').ec;
const ec = new EC('secp256k1');
const bs58 = require('bs58')
const SHA256 = require("crypto-js/sha256");
const RIPEMD160 = require("crypto-js/ripemd160");

這是我的地址創建功能。

function createNewAddress() {
 // Get the private key
 const privateKey = ec.genKeyPair()
 // Get the public point from the private key
 const publicPoint = privateKey.getPublic();
 // Uncompressed public key
 const uncompressedPK = publicPoint.encode('hex');
 // SHA256 then RIPEMD160, aka HASH160
 const hashedPK = RIPEMD160(SHA256(uncompressedPK).toString()).toString();
 // Prepend the version, here we use 6F got the testnet (we are using regtest)
 const prependedPK = "6F"+hashedPK;
 // Calculate the checksum and take the first 4 btyes
 const checksum = SHA256(SHA256(prependedPK).toString()).toString().substring(0,9);
 // Append the checksum to the end
 const unencodedPK = prependedPK + checksum;
 // Base58Encode the unencodedPK
 const bytes = Buffer.from(unencodedPK, 'hex');
 const bitcoinAddress = bs58.encode(bytes);
 return (bitcoinAddress);
}

這是一個簡單的輸出:mtURXDaisk6ustpeo7LuiZYje9yV31JhBN

您將所有內容散列為十六進製字元串。但是,這不是散列內容的正確方法。它們都應該被雜湊為字節(即原始數據),而不是十六進製字元串。

引用自:https://bitcoin.stackexchange.com/questions/61980