Address
如何從標準 WIF 生成原生 Segwit 地址和 P2SH Segwit 地址?
我可以有從標準 WIF 生成本地 Segwit 地址的步驟嗎?以及從同一個 WIF 生成 P2SH Segwit 地址的步驟?
這兩種格式有何不同,為什麼有兩種?我看到P2SH版本兼容舊客戶端,不是原生Segwit地址嗎?
wif -> 私鑰
- 使用 base58-decode 將 base58 字元串轉換為字節
- 剝離第一個字節(網路字節)和最後 4 個字節(校驗和)。剩下的才是關鍵
- 驗證 sha256(sha256(network byte || key)) 的前 4 個字節是否等於校驗和
- 如果密鑰以
0x01
(壓縮)結尾,則刪除最後一個字節。你留下了私鑰私鑰 -> 公鑰
- 將私鑰轉換為整數
- 與 secp256k1 生成器點相乘,得到曲線上的 Point(x,y)。這是你的公鑰
- 以壓縮格式對您的公鑰進行編碼。字節
0x03
(如果 y 為奇數)或0x02
(如果 y 為偶數)後跟 x 作為 256 位整數公鑰 -> P2WPKH 地址
- 創建見證程序 = ridemd160(sha256(public key))
- 通過提供見證程序編碼成 bech32
bc
,作為人類可讀的部分和0
見證版本公鑰 -> P2SH-P2WPKH 地址
- 創建見證程序 = ridemd160(sha256(public key))
- 創建兌換腳本 =
0x0014<witness program>
= 見證版本 + push20 + 見證程序- 計算 hash160 = ridemd160(sha256(script))
- 在雜湊之前加上版本字節
0x05
- 計算校驗和 = sha256(sha256(版本字節 || scripthash ))
- Base58-encode(版本字節 || scripthash || 校驗和的前 4 個字節)
這兩種格式有何不同,為什麼有兩種?我看到P2SH版本兼容舊客戶端,不是原生Segwit地址嗎?
老客戶端無法發送到隔離見證地址,但他們可以發送到 P2SH 地址並擴展至 P2SH-P2WPKH