我正在嘗試生成狗狗幣地址。生成的地址與 RPC-API getnewaddress生成的有效狗狗幣地址具有相同的長度和相同的長度,但它們不起作用。它們無效。
以下是步驟:
- 來自 secp256k1 的公鑰
- 將 SHA256,然后 RIPEMD-160 應用于 SHA256 的結果
- 在 RIPEMD-160 結果的開頭添加 0x1E(狗狗幣版本)
- 將 SHA256 兩次應用于校驗和哈希的加密公鑰
- 將校驗和哈希的前 4 個位元組(8 個字符)添加到加密的 pub 密鑰的末尾
- 應用BASE56
這會生成一個以 D 開頭的 34 個字符的地址,看起來非常真實,但沒有一個是有效的。為什么?
use strict;
use warnings;
use Digest::SHA qw(sha256);
use Crypt::PK::ECC;
use Crypt::RIPEMD160;
use v5.10;
use Bitcoin::Crypto::Base58 qw(
encode_base58
decode_base58
encode_base58check
decode_base58check
);
# Bitcoin Version 0x00
# Dogecoin Version 0x1E
sub append_checksum_and_version {
my ($binstr) = @_;
return (chr(0x1E) . $binstr . substr(sha256(sha256($binstr)), 0, 4));
}
my $pk = Crypt::PK::ECC->new();
$pk->generate_key('secp256k1');
my $public_raw = $pk->export_key_raw('public');
my $encrypted_pubkey = Crypt::RIPEMD160->hash(sha256($public_raw));
say "Private Key: " . unpack "H*", $pk->export_key_raw('private');
say "Dogecoin Address: " . encode_base58(append_checksum_and_version($encrypted_pubkey));
輸出:
Dogecoin Address: DGRHFUwqvzh8VBFR1gAhRFVbM476bATZVK Dogecoin Address: DEvMuu6PbQLDQE72aofFzxk5c8AmzRZos9 Dogecoin Address: DM1zqiW5ZPb1MD8hP1sxtBsPkQAofFTRTw
也許校驗和計算不正確?即使我對位元幣使用 0x00 而不是 0x1E。位元幣地址也無效。
uj5u.com熱心網友回復:
結果發現少了一個位元組。
return (chr(0x1E) . $binstr . substr(sha256(sha256($binstr)), 0, 4));
必須更換為
return (chr(0x1E) . $binstr . substr(sha256(sha256(chr(0x1E) . $binstr)), 0, 4));
0x1E(狗狗幣)或0x00 (位元幣)的版本位元組必須包含在校驗和的雙 sha256 計算中。
use strict;
use warnings;
use Digest::SHA qw(sha256);
use Crypt::PK::ECC;
use Crypt::RIPEMD160;
use Bitcoin::Crypto::Base58 qw(encode_base58 decode_base58 encode_base58check decode_base58check);
use v5.10;
# Version byte: Bitcoin 0x00, Dogecoin 0x1E
sub cv {
my ($binstr) = @_;
return (chr(0x1E) . $binstr . substr(sha256(sha256(chr(0x1E) . $binstr)), 0, 4));
}
my $pk = Crypt::PK::ECC->new()->generate_key('secp256k1');
my $dogecoin_address = encode_base58(cv(Crypt::RIPEMD160->hash(sha256($pk->export_key_raw('public')))));
say "Dogecoin Address: " . $dogecoin_address;
提供有效地址:
Dogecoin Address: DR61RhFNCkswmDx6JjLyVPSoq51gBtxxjK
Dogecoin Address: DFFV4xa9Ph2LUXaKbyxMtViHFhu9e9h88J
Dogecoin Address: DAk4ZbSoWnhpt2exkEevG2j93CVEL7g5Fu
更新:
如果您想從 pubkey 生成 Dogecoin 的 wifkey。主網版本位元組為 0x9E (狗狗幣)和0x80(位元幣)
sub toWifKey {
my ($binstr) = @_;
return (chr(0x9E). $binstr . substr(sha256(sha256(chr(0x9E) . $binstr)), 0, 4));
}
my $wifkey = encode_base58(toWifKey($pk->export_key_raw('private')));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425557.html
