P2sh

P2SH 完全兌換腳本儲存在哪裡?

  • November 29, 2018

pay-to-script-hash/P2SH 完全贖回腳本的大小可以達到 520 字節。澄清一下,在被披露/花費之前,贖回腳本是否儲存在花費者/Bob 的錢包或其他地方?

開發者指南說:

“當 Bob 想要花費輸出時,他會在簽名腳本中提供他的簽名以及完整的(序列化)贖回腳本。” (<https://bitcoin.org/en/developer-guide#p2sh-scripts>)

在此處輸入圖像描述

Soroushjp 說:

“贖回腳本本身僅在支出交易期間顯示、與贖回腳本雜湊核對並進行評估。” (<http://www.soroushjp.com/2014/12/20/bitcoin-multisig-the-hard-way-understanding-raw-multisignature-bitcoin-transactions/>)

Antonpuolous 說:

“P2SH 將長腳本的數據儲存負擔從輸出(在 UTXO 集中,因此會影響記憶體)轉移到輸入(僅儲存在區塊鏈上)。” (2014:133)

(這個問題問的幾乎一樣:P2SH 腳本是在哪裡寫的?

(就贖回腳本的位置而言,“在區塊鏈之外儲存腳本(智能合約)”這個問題存在意想不到的關係。)

這是一個工作範例,為回答您的問題奠定了基礎:

  1. 愛麗絲想付錢給鮑勃,所以她向鮑勃索要地址。
  2. Bob 想要接收到 P2SH 地址的付款。
  3. 所以 Bob 創建了redeemScript,然後使用它來創建redeemScript 雜湊,然後將其編碼為P2SH 地址。
  4. Bob 將 P2SH 地址提供給 Alice,Alice 支付。
  5. 一段時間後,鮑勃想把這些比特幣花給查理。
  6. Bob 使用輸入創建交易,其 scriptSig 包含他之前創建的redeemScript。

現在回答您的問題:Bob 在為 Alice 創建 P2SH 地址以及將比特幣花給 Charlie 時需要知道兌換腳本。正如您所建議的那樣,他可以將redeemScript 一直儲存在他的錢包中,或者他可以根據錢包中的其他數據按需重新生成它,或者他可以將其儲存在外部——但是,沒有其他人會自動為他儲存它直到他將其用於支付給查理時,它才會成為區塊鏈的一部分。

我相信比特幣核心做的很簡單,並將整個兌換腳本儲存在其錢包中,用於使用addmultsigaddressRPC 創建的地址。

可能有一些錢包使用 BIP45 之類的東西必要時從 HD 錢包種子的對/組合中重新生成 P2SH 地址。

在某些情況下,BitPay Cosign 可能會將 P2SH 地址的儲存外部化,儘管我真的不確定。

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