[譯]無腳本的腳本:比特幣如何支持沒有智能合約的智能合約

Scriptless Scripts

比特幣的能力是有限的。同時,智能合約可能是資源密集型的。所以即使比特幣一直支持基本的智能合約功能,但這兩者從來都不是天作之合。

但是由 Blockstream 的數(shù)學(xué)家 Andrew Poelstra 帶頭研究的最近一個話題可以幫助解決這個問題。 最近他在 “ Scaling Bitcoin Stanford” 演講中提及的關(guān)鍵內(nèi)容,“無腳本腳本”有可能將某些智能合約完全從比特幣區(qū)塊鏈中移除 - 同時仍然保證比特幣的所有安全性。

比特幣和智能合約

在20世紀(jì)90年代,數(shù)字貨幣大佬 Nick Szabo 首次提出的智能合約基本上是自動執(zhí)行合約。 最典型的是,如果滿足特定的條件,他們會把錢從某人那里匯給某人。 例如,如果有人在播放一首歌曲,這筆錢則會從流媒體機構(gòu)自動支付給藝術(shù)家。

雖然智能合約通常與以太坊等 “第二代” 區(qū)塊鏈有關(guān),但比特幣也一直支持基本的智能合約。 從某種意義上說,任何比特幣交易在技術(shù)上都是一個 “聰明” 的合同:只要提供有效的加密簽名,資金通常就會在該條件下移動。 稍微更先進的智能合約(如多重數(shù)據(jù)和時間鎖定)可用于啟用 Lightning Network 等第二層協(xié)議。

但基于區(qū)塊鏈的智能合約是存在問題的。 首先,這個過程變得越來越復(fù)雜,需要更多的資源來執(zhí)行。 這就存在很大的問題,因為這要求網(wǎng)絡(luò)上的所有節(jié)點都需要執(zhí)行合同 - 而不僅僅是參與合同的各方。

整個網(wǎng)絡(luò)的執(zhí)行也意味著,整個網(wǎng)絡(luò)將確切的知道我的智能合約,完全沒有什什么秘密可言。 此外,這對于可互換性也是不利的。 如果智能合約由于某種原因而不受歡迎,所涉及的資金(在區(qū)塊鏈上公開可見)就會受到破壞。

隨著智能合約變得越來越復(fù)雜,甚至可能成為安全風(fēng)險。 例如,替代軟件的實現(xiàn)可能會使合同的細(xì)節(jié)略微不同,使網(wǎng)絡(luò)上的所有節(jié)點達成一致變得困難起來。 這些智能合約中的潛在缺陷也是公開的,這就給黑客以可乘之機。

但是 Poelstra 等人認(rèn)為,這些問題中的許多問題都可以通過將大量合同移出區(qū)塊鏈來解決。 只有合約涉及的各方才能執(zhí)行這個功能,而不是讓網(wǎng)絡(luò)上的所有節(jié)點都計算出整個智能合約。

問題的關(guān)鍵就在于確保網(wǎng)絡(luò)的其他部分仍然能夠正確執(zhí)行合同的結(jié)果:只有滿足所需條件,才能進行支付。

SCHNORR 簽名

Poelstra 最初開始在 Mimblewimble 協(xié)議的背景下研究 “Scriptless Scripts”(他自己創(chuàng)造的一個短語)。 比特幣的精簡版本提供了更多的隱私和更好的可擴展性,但不支持腳本:在比特幣交易中的代碼位允許最基本的智能合約功能。

所以,Poelstra 想出了如何獲得腳本所提供的實用程序,而不需要在區(qū)塊鏈上使用腳本:Scriptless Scripts。

Scriptless Scripts 的關(guān)鍵在于規(guī)則的加密簽名可以間接地揭示不屬于包含簽名的事務(wù)的一部分。 換句話說,當(dāng)有人簽署驗證一個普通的比特幣交易時,它認(rèn)為一個沒有托管在區(qū)塊鏈上的智能合約仍然忠實地執(zhí)行。

這就使得 Schnorr 簽名成為可能。 這些類型的簽名還沒有在比特幣協(xié)議上實現(xiàn),但是從現(xiàn)在開始的一年左右就可能部署。

Schnorr 簽名允許的簽名:幾個簽名可以在數(shù)學(xué)上組合成一個簽名。 而且,對于這個用例來說重要的是,這個數(shù)學(xué)是“線性的”。這基本上意味著可以對這些簽名執(zhí)行相對直接但非常有表現(xiàn)力的數(shù)學(xué)運算。

簡化之后,它的作用就像這樣:

當(dāng)然,私鑰和簽名實際上只是數(shù)字,后者來自前者。 我們舉個簡單的例子來輔助理解,假設(shè)一個私鑰是 10,從該私鑰導(dǎo)出的 Schnorr 簽名的前半部分為 10000. 另一個私鑰是 15,Schnorr 簽名的后半部分為 15000. 在這個例子中,Schnorr 簽名就是 25000(或10000 + 15000)。發(fā)現(xiàn)了沒有,所謂 Schnorr 簽名就是由兩個人的私鑰生成的 Schnorr 簽名的兩部分之和(有點繞)

而且由于簽名的兩半只是數(shù)字,所以可以在它們之間進行數(shù)學(xué)運算。 例如,在這個簡化的例子中,這兩半之間的差異是5000(或15000-10000)。

當(dāng)然實際比這復(fù)雜的多,但是 Schnorr 簽名線性的特性允許有幾種這樣的數(shù)學(xué)“技巧”。

智能合約

舉個例子:一個人(小明)想聽一位藝術(shù)家(貝多芬)的第七交響曲。 毫無疑問,貝多芬是這首歌曲的所有者,如果(并且只有)貝多芬的簽名被提供給托管該歌曲的服務(wù)器,服務(wù)器才能夠播放這首歌。假設(shè)這個“歌曲簽名”是7000. 那么小明就可以通過支付給貝多芬一個比特幣的歌曲簽名聽歌曲。(他非常想聽這首歌。)

在這個簡單的例子中,小明和貝多芬可以通過做兩件事來使這個交易自動執(zhí)行。 首先,他們創(chuàng)建了一個相當(dāng)普通的比特幣交易,如果小明和貝多芬都提供一半的 Schnorr 簽名來創(chuàng)建一個完整的 Schnorr 簽名,則從小明向貝多芬發(fā)送一個比特幣。 (這一步需要一些額外的安全措施,以確保沒有人破壞這筆交易)

下一步有點復(fù)雜。

現(xiàn)在,貝多芬知道小明一半 Schnorr 簽名的內(nèi)容; 假設(shè)為 8000. 貝多芬當(dāng)然知道自己的歌曲簽名是什么樣的,比如是:7000. 因此,貝多芬很容易可以計算出這兩者之間的差異為:1000. 這就是所謂的適配器簽名。 然后,貝多芬把這個適配器簽名 - 1000 - 交給小明。

下面就是密碼學(xué)的用處所在。

通過修改普通的簽名驗證方法,小明即使不能訪問任何一個簽名,但同樣可以驗證他剛接收到的適配器簽名(1000)的確是貝多芬的 半Schnorr簽名和她的歌曲簽名之間的差異。

現(xiàn)在,在驗證適配器簽名(1000)檢驗出來之后,小明可以將其一半的Schnorr 簽名給予貝多芬,因為一旦貝多芬使用小明的一半簽名來創(chuàng)建完整的簽名并廣播到比特幣網(wǎng)絡(luò)中,那么,貝多芬同時也就自動將她的一半Schnorr簽名(8000)也顯示給小明。

使用貝多芬的 Schnorr 簽名的一半,小明現(xiàn)在可以減去自適應(yīng)簽名:1000. 通過從貝多芬的半Schnorr簽名(8000-1000)減去自適應(yīng)簽名,這時小明就獲得了貝多芬的“歌曲簽名”:7000。OK, 現(xiàn)在他可以聽這首歌了。

換句話說,通過廣播支付貝多芬一個比特幣的交易,貝多芬自動地將這個簽名賣給了這個小明。

總結(jié)

從區(qū)塊鏈的角度來看,交易是相當(dāng)規(guī)范的。 除了“結(jié)算交易”之外,智能合約的任何內(nèi)容都不會記錄在區(qū)塊鏈上。 沒有人會知道一個潛在的合同被執(zhí)行 ,合同相關(guān)的數(shù)據(jù)也不需要由有關(guān)各方以外的任何人計算或存儲。

引用

原文鏈接:Scriptless Scripts


本文由 Copernicus 團隊 冉小龍 翻譯,轉(zhuǎn)載無需授權(quán)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容