Bitcoind

為什麼 bitcoind 無法辨識我地址的未壓縮版本?

  • October 23, 2013

我有一個代表壓縮公共地址的地址,bitcoind 將其辨識為“ismine”:

compressed_address = n2HCyN8GWPuc8CrwbiiBASCS7iWku3Ke8S
compressed_key     = 03c6debc01d8cf1c7eae826b8acb0ba6ff5d37b8d840b2bfc5244cdebab83a6781
> bitcoind  -testnet validateaddress n2HCyN8GWPuc8CrwbiiBASCS7iWku3Ke8S
{
   "isvalid" : true,
   "address" : "n2HCyN8GWPuc8CrwbiiBASCS7iWku3Ke8S",
   "ismine" : true,
   "isscript" : false,
   "pubkey" : "03c6debc01d8cf1c7eae826b8acb0ba6ff5d37b8d840b2bfc5244cdebab83a6781",
   "iscompressed" : true,
   "account" : ""
}

我從壓縮的公鑰中提取 y 值,並從中創建一個地址(使用我為壓縮密鑰編寫的相同函式):

decompressed_key     = 04c6debc01d8cf1c7eae826b8acb0ba6ff5d37b8d840b2bfc5244cdebab83a6781a8b69757635c64ce32eed71115b68174d7241c716b1f76d317c6440635d8bc01
decompressed_address = mfjsW5m8CL5EazGBvjutZ4dgJwd6AjHM11

該地址是有效的,因為如果滿足曲線方程… x, y 值如下:

x = 89951481645973345162937095289811840492311042685266238084455665220379660150657
y = 76311169247456070080081989221882104208438035444189442719121845261776897752065
y * y         = 107822876231389859288843816887520488062823501023166616425651229464214081607136
x * x * x - 7 = 107822876231389859288843816887520488062823501023166616425651229464214081607136

但是,bitcoind 不會將解壓後的地址辨識為“ismine”。

> bitcoind  -testnet validateaddress mfjsW5m8CL5EazGBvjutZ4dgJwd6AjHM11
{
   "isvalid" : true,
   "address" : "mfjsW5m8CL5EazGBvjutZ4dgJwd6AjHM11",
   "ismine" : false
}

沒看懂……兩者唯一的區別就是壓縮了一個key,節省了32個字節……私鑰應該是一樣的!它們不應該可以互換嗎?這是否意味著我將無法花費將硬幣發送到去/未壓縮地址?

壓縮和未壓縮的密鑰完全分開處理。發送到壓縮點地址的資金將無法用於錢包中具有未壓縮密鑰的客戶。

也就是說,雖然mfjsW5m8CL5EazGBvjutZ4dgJwd6AjHM11n2HCyN8GWPuc8CrwbiiBASCS7iWku3Ke8S擁有相同的私鑰,但它們被視為完全獨立於比特幣網路。理想情況下,它們會被同等對待,但中本聰最初並未考慮壓縮 ECDSA 密鑰,它只是客戶端最近添加的(可能是 sipa)。

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