Address-Generation
生成比特幣地址 JS 一步一步的“無效地址”錯誤
我正在遵循 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
您將所有內容散列為十六進製字元串。但是,這不是散列內容的正確方法。它們都應該被雜湊為字節(即原始數據),而不是十六進製字元串。