區塊鏈技術資源分享
追尋中本聰先生的腳步
?

區塊鏈服務不再被手續費所束縛_支持免費生成UTXO_量子鏈Jordan Earls

Qtum量子鏈聯合創始人Jordan Earls發表技術提案:支持免費生成UTXO

Qtum量子鏈聯合創始人兼首席開發工程師Jordan Earls近日在海外媒體上發布名為:關于在Qtum量子鏈上支持免費生成UTXO的提案——此技術提案將會幫助全球DAPP用戶在不持有token的情況下也能使用DApp服務,吸引更多用戶體驗去中心化應用,不再被手續費所束縛。

區塊鏈服務不再被手續費所束縛_支持免費生成UTXO_量子鏈Jordan Earls

proposal to allow free utxo creation in Qtum?以下為完整譯文

這個超棒的想法從何而來呢?

Qtum采用UTXO模型在使用上有一個明顯的限制,即用戶在鏈上發起任何行為都必須先獲取UTXO。UTXO的獲取并不困難,它可以是大于0的任意值,在用戶無法免費生成UTXO的情況下,UTXO的獲得方式為:

  1. 網絡中的礦工在挖礦交易中把剛獲得的UTXO贈送給你;
  2. 用戶在交易過程中附贈你若干satoshi(QTUM的最小計量單位)。

智能合約通過發起一筆交易來檢查是否花費了UTXO,這種方法不但看起來浪費,更大的限制在于——在沒有UTXO的情況下,即使有用戶代為付費也無法驗證智能合約。

類似問題也會在其他情況下出現,比如你的錢包有多個地址,每個地址都有自己的一組UTXO,對于區塊鏈來說,無法識別這些地址屬于同一個錢包,如果用戶選擇將QRC20 Token發送到某個特定地址,但隨后發現該地址沒有UTXO時,用戶將無法使用QRC20 Token,因為他無法向合約證明他就是該地址的擁有者。對于這個問題的官方解決方案是,向這個特定地址發送任意數量的Qtum(甚至僅僅是一個satoshi),證明擁有UTXO,那么用戶就可以自由提取QRC20代幣或其他東西。

但是這種做法不但浪費了寶貴的UTXO集合的存儲空間,還提高了使用門檻。DApp開發團隊、DApp用戶、Qtum用戶,甚至我自己都意識到這個問題,這無疑是Qtum及其DApp被廣泛使用的一大阻礙。

針對上述問題,我的提議是在比特幣的基礎上進行擴展(雖然還沒有100%驗證可行性)。在比特幣(以及如今的Qtum)網絡中,用戶如要在區塊鏈上驗證簽名,他們必須指定一個TXID和vout值,以指出他們將支出哪一筆UTXO,然后添加簽名來解鎖該UTXO的vout腳本。

有沒有其他方法來驗證公鑰和簽名呢?

我的提議:允許TXID和vout都為0,但使其在其他方面是無限可使用的。為了防止可能出現的重復的交易驗證,所有完整的交易必須包含至少一個TXID不為0的vin。

使用SIGHASH_ANYONECANPAY可能是非常不明智的,因為使用該方法創建的輸入可以在任何交易中不受限制地使用(比如重復使用)。這不會對區塊鏈構成什么實質性的威脅,但對于沒有實際用途的用戶來說可能是一個巨大的安全漏洞。

因此,在使用該功能時,SIGHASH_ANYONECANPAY很可能被禁止。為了提高安全姓,可能需要只對SIGHASH_ALL(默認)簽名方案作允許。否則,任何對交易有深刻了解的人都有能力對交易進行篡改,例如執行另一個智能合約并消耗QRC20余額。

理論上如果允許的話,不引入新的操作碼的做法目前對比特幣或Qtum區塊鏈都不會產生什么不良影響。

Qtum將通過擴展帳戶抽象層來實現這個功能,這樣它就可以運行這些沒有實際作用的vin腳本。它可以驗證模式匹配,從而可以將P2SH或PUBKEYHASH腳本識別并分類為地址,當然還可以將其作為正常腳本執行以驗證簽名。因此,可以使用區塊鏈中從未使用過的地址,構造一個使用并驗證該地址的vin,但不指向UTXO。理論上,這有許多用途。用戶可以使用沒有UTXO的P2SH/Multisig地址,從合約中發送消息,甚至使用Segwit地址。

模式匹配可能是目前最困難實現的,實際上這可能需要額外的操作代碼來簡化。操作碼可以是OP_VOUTBEGINSHERE之類的僅作為模式匹配的標記。

實際案例

一個用戶如果想要使用DApp但是之前從未使用過Qtum,那么在使用DApp之前,他們必須在區塊鏈上注冊一個賬戶。DApp維護人員擁有一個鏈下注冊門戶,允許用戶在DApp上免費注冊。

現如今這是由DApp的維護人員支付鏈上注冊的gas費用來完成的,若實現我的提議,進行優化,那么我們可以實現真正的免費注冊。

新用戶必須有UTXO以證明其身份并完成注冊。他們實際上并不需要任何資金,但要想證明某個地址的所有權,唯一的辦法就是花錢購買UTXO。在本提案實現后,用戶就有可能只用他們的公鑰/私鑰從零開始創建UTXO。

實際的工作流程是,用戶可通過鏈下注冊,證明他們值得DApp網站支付他們的gas費用。然后用戶將他們的地址發送給DApp站點,接著DApp站點會向用戶發送一個部分完成的交易,其組成如下:

輸入:從TXID 0創建用戶地址UTXO。此時還是未簽名的。這是第一個輸入,因此合約代碼中的msg.sender對應用戶地址

輸入:DApp用于支付的UTXO;它是已簽名的并標記為SIGHASH_ALL

輸出:DApp合約執行過程中進行鏈上注冊等工作。由DApp選擇既定的gas費用。

輸出:將剩余資金發送回DApp的找零地址UTXO

用戶將收到該交易并驗證它是否如預期的那樣。他們會檢查DApp合約輸出是否僅僅只是做注冊用,同時還將確保除了找零地址UTXO之外沒有向交易添加其他額外的輸出(將驗證該輸出以確保不存在隱藏合約的執行)。

一旦用戶確定該交易是安全的,用戶將對其第一個輸入進行簽名,并使用SIGHASH_ALL簽名方案來確保不會對交易進行任何篡改。然后,用戶將該交易廣播到區塊鏈(如果用戶并未運行節點,則將交易交給DApp站點廣播)。

一旦交易被執行并確認,用戶的地址將在DApp鏈上完成注冊,即使該地址從未實際收到過Qtum或是在區塊鏈上有任何記錄。

打破UTXO的限制究竟有什么意義

現在許多基于身份驗證提供服務的DApp都在試圖解決這個問題。

用戶可能會使用比特幣、信用卡或其他一些鏈下付款方式向DApp進行注冊付款(以獲取服務),但如果DApp將Qtum(或ETH)發送給該用戶作為支付gas費用的補貼,對用戶來說這筆QTUM在使用上是沒有任何限制的。

用戶可以將這筆QTUM直接提現,或是用于運行其它與該DApp不相關的智能合約,這就違背了DApp為用戶提供服務的初衷,實際上演變成了代幣與法幣的兌換操作。

由于在大多數國家/地區將法幣兌換為加密貨幣都有許多監管規定,DApp可能會遇到嚴重的法律問題,例如匯款許可等等。

通過這種方法,可以很好的解決上述問題,使DApp支付的QTUM僅可用于支付特定智能合約調用的gas費用。 因此,(順便說一下,我不是律師,不要將此作為法律建議)該提案提供了一種在法律允許的條件下用法幣支付特定鏈上交易手續費的解決方案。

另一個更簡單的應用場景是QRC20 Token的發行方代付收發Token的gas費用。在實際應用場景中,用戶可能并不持有QTUM幣,但卻想使用Qtum區塊鏈上的DApps,這時就需要這種代付交易手續費的機制。

雖然在Qtum和以太坊中有各種針對這一問題的解決方案,但它們都不夠完美,有諸多限制。這項提案只是第一步,未來可能還需要更多的工作使這一切成為現實。

量子鏈Jordan Earls

分享到:更多 ()
0
區塊鏈神吐槽
pi幣注冊流程教程圖解中文版

來評論吐槽 搶沙發

評論前必須登錄!

 

區塊鏈資源分享聯系我

區塊鏈資源分享聯系我首頁更多新聞
做滴滴代驾还是开滴滴那个赚钱