Bitcoind
為什麼 bitcoind 無法辨識我地址的未壓縮版本?
我有一個代表壓縮公共地址的地址,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個字節……私鑰應該是一樣的!它們不應該可以互換嗎?這是否意味著我將無法花費將硬幣發送到去/未壓縮地址?
壓縮和未壓縮的密鑰完全分開處理。發送到壓縮點地址的資金將無法用於錢包中具有未壓縮密鑰的客戶。
也就是說,雖然
mfjsW5m8CL5EazGBvjutZ4dgJwd6AjHM11
和n2HCyN8GWPuc8CrwbiiBASCS7iWku3Ke8S
擁有相同的私鑰,但它們被視為完全獨立於比特幣網路。理想情況下,它們會被同等對待,但中本聰最初並未考慮壓縮 ECDSA 密鑰,它只是客戶端最近添加的(可能是 sipa)。