Address

如何從標準 WIF 生成原生 Segwit 地址和 P2SH Segwit 地址?

  • June 4, 2018

我可以有從標準 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))
  • 通過提供見證程序編碼成 bech32bc ,作為人類可讀的部分和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

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