Script

是否有可能保護交易免受與其他 utxos 的雙重支出?

  • June 27, 2020

我是比特幣腳本的新手,我想知道是否可以使用來自一個 utxo 的資金來“確保”其他 utxo 不會被雙花(直到閃電網路拯救我們所有人)。假設我在帶有 pubkey pubKey1 的 utxo 中有 0.1比特幣,還有 10 個比特幣我將發送到一個輸出腳本,該腳本會執行以下操作:

  1. 如果 nLocktime 大於 X,請驗證堆棧是否包含與某些pubKeyHash2匹配的簽名。
  2. 否則,驗證堆棧是否包含:<sig1> <payload1> <sig2> <payload2>,這樣<payload1>!= <payload2>,並且<sig1>匹配pubKey1 + <payload1>,並且<sig2>匹配pubKey1 + <payload2>

即在 nLocktime 過去之前,任何可以找到pubKey1的 2 個不同簽名(兩個不同的有效負載)的人都可以贏得 10 btc 獎品。

這將極大地激勵我永遠不要使用pubKey1的私鑰簽署兩個交易(或任何兩個有效負載) 。我顯然可以冒險,通過發布兩次交易來雙花 0.1 btc,並立即嘗試自己領取 10 btc 獎金,但是一旦我發布了兩次雙花交易,礦工就會試圖拿走所有 10 btc對他們自己(並且可能忽略任何試圖在不向他們提供 100% 費用的情況下獲得一小部分獎金的交易)。

我看不到目前的操作碼如何允許這種腳本 - 我什至找不到“OP_CHECKLOCKTIME”(僅找到“OP_CHECKLOCKTIMEVERIFY”),並且“OP_CHECKSIG”對來自事務的數據而不是任意有效負載進行操作在堆棧中。

你怎麼看?這可以在未來實施嗎?這可以在其他加密貨幣中實現嗎?當您不想等待單個區塊確認時,這可能很有用,例如在 ATM 中。

這是一個創造性的想法,但我看到了一個巨大的問題:

雖然它可以阻止惡意雙花,但它通過使參與的交易“嘗試或死亡”來做到這一點。惡意雙花會受到懲罰,但正常的交易失敗也會受到懲罰。

考慮一下如果使用者使用這種技術進行付款會發生什麼,但無論出於何種原因,他們將費率設置得太低。現在他們的交易很長一段時間都不會確認,實際上它可能永遠不會確認是否有足夠的交易量支付更高的費率。

因此,現在擁有該交易中使用的任何 UTXO 的可憐使用者可能永遠無法再次嘗試使用它,因為這樣做會使他們的其他“保險”UTXO 面臨被索賠的風險。這顯然是一個巨大的問題。

我認為它甚至可能會激勵其他節點和礦工審查交易傳播/確認,以期在以後看到相互衝突的交易。

任何實現這一點的錢包都必須嚴格執行不重用地址的政策。否則,成功完成“被保險人防雙花”交易後,使用者儲存在保險地址的BTC仍然存在風險!攻擊者可以向發送原始付款的地址發送少量 BTC,然後一個簡單的錢包實現可能會使用該新 UTXO 作為新付款的輸入。這將創建第二個有效簽名,可用於索賠保險 UTXO。


另一個問題:我們應該期望接收付款的服務會想要使用它,但使用者不會(這樣做只會花費他們更多的 tx 費用,畢竟)。為什麼這是一個問題?

考慮一下如果您到達需要此類交易的零售商會發生什麼:您將必須創建一個與您擁有的其他一些 UTXO 相關的“保險”UTXO。為了使該保險 UTXO 生效,*您必須等待確認!*所以現在我們仍然在等待確認。

我認為建立未經確認的保險 UTXO 沒有多大意義,如何阻止某人雙重花費保險 UTXO?這與我們最初遇到的“問題”相同。無限地創建保險 UTXO顯然不是一個好的解決方案。

或者,使用者可以提前準備並獲得保險 UTXO 的確認,但他們的動機是什麼?為了安撫零售商,如果出現問題,是否有失去保險 UTXO 的風險?


也許我在批評中遺漏了一些東西,所以我很想看看更聰明的人是否可以看到它可以工作(或不能)的方式。好主意,反正。

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