P2sh

在區塊鏈之外儲存腳本(智能合約)

  • March 15, 2016

我正在關注 Andreas Antonopoulos 的“掌握比特幣”,以了解比特幣的實施。

關於交易的章節中,他指出了 P2SH 交易的一些優點:

  1. 複雜的腳本被交易輸出中較短的指紋所取代,從而使交易更小。
  2. 腳本可以編碼為地址,因此發送者和發送者的錢包不需要復雜的工程來實現 P2SH。
  3. P2SH 將建構腳本的負擔轉移給接收者,而不是發送者。
  4. P2SH 將長腳本的數據儲存負擔從輸出(在 UTXO 集中)轉移到輸入(儲存在區塊鏈上)。
  5. P2SH 將長腳本的數據儲存負擔從目前時間(付款)轉移到未來時間(花費時間)。
  6. P2SH 將長腳本的交易費用成本從發送者轉移到接收者,接收者必須包含長贖回腳本才能使用它。

關於第 4 項,它對我來說仍然不是最理想的。

想像一下,我有一家公司,為了從客戶那裡支付款項,我還必須獲得至少 2 個其他合作夥伴中的 1 個的簽名。我的腳本看起來像:

2 <My PubKey> <Partner 1's PubKey> <Partner 2's PubKey> 3 OP_CHECKMULTISIG

因此,對於我想花費的每一筆收款,我scriptSig都必須用上面的腳本加上 2 個簽名來膨脹<sig1> <sig2>

想像一下,我將有數千個這樣的交易,這會使區塊鏈膨脹,可能會降低網路的處理能力。

我想知道:有沒有辦法將這些腳本作為“腳本錢包”中的“賬戶”而不是將其儲存在區塊鏈中?

當需要驗證時,我可以簡單地從“錢包”中檢索這個腳本並檢查交易。

怎麼可能?

首先,是的,您是正確的,因為每次您從同一個 p2sh 地址消費時,您都在指定散列到該地址的腳本。是的,如果您從同一個地址花費多次,那您是正確的,這將是非常低效的,因為您每次都必須顯示腳本並且腳本可能很長。

然而,在比特幣中,重複使用地址並不安全。每個 p2sh 地址都應該使用一次,而不是像上面的場景那樣多次。在這種情況下,它根本不是低效或次優的。也就是說,我想像 segwit 之類的東西可以用來在帶外儲存腳本,但這將是一個重大而復雜的改變,收益不大。

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