我們為Alice 引入了一種新穎的方式,允許Bob 使用她的UTXO/硬幣,而無需向Bob 提供她的私鑰。愛麗絲簽署鮑勃的公鑰,從而將支出的權力委託給鮑勃。委託有很多用例。例如,用戶可以授權應用代表她花錢。或者,首席財務官希望部門負責人發放撥給該部門的資金。
代表團
之前,我們開發了一種方法 愛麗絲簽署任意消息 在使用她的交易中 比特幣私鑰. 為了讓代表團工作, 該消息只是Bob 的公鑰. 通過簽署Bob 的密鑰,Alice 將使用她的硬幣的權力委託給Bob。
當Alice 想要委託時,她首先將資金鎖定到以下合約中。
她使用自己的私鑰簽署Bob 的公鑰,即 所有者簽名 在第6 行。她遞上部分簽名的 交易 給鮑勃。 Bob 添加了他的簽名 (委託簽名 在第6 行)到交易並廣播它以花費鎖定的資金。第10 行驗證Bob 的公鑰已簽名²並因此得到Alice 的授權。第13 行檢查Bob 的簽名。
請注意,委託不會創建任何鏈上交易,這只發生在Bob 實際花費 UTXO.
如果Alice 想自己花費UTXO,她可以簡單地通過簽署她自己的公鑰來委託給自己。因此,她可以在Bob 移動硬幣之前撤銷委託。
委託與多重簽名
與Alice 和Bob 之間傳統的2-of-2 多重簽名相比,上述合約可以委託給任何人(例如,委託給Charlie 或Dave),即使在創建UTXO 之後也是如此。受託人是事先未確定的,以後可以隨意選擇,而多簽必須事先知道所有受託人,以後不能更改。委派更加靈活。
多次委託
在Alice 委託給Bob 之後,Bob 委託給Charlie,Charlie 再次委託給Dave,以此類推。
以下修改後的合約允許多次委託。
基本上,Alice 簽署Bob 的公鑰,Bob 簽署Charlie 的公鑰,…… 第13 行驗證簽名,從而像以前一樣驗證委託。只有最後一位代表必須簽署才能在18 號線消費硬幣。
***
筆記:
[1] 替代簽名算法,例如 拉賓簽名 也可以使用。由於重複使用比特幣密鑰,我們在這裡選擇ECDSA 是因為它的簡單性。
[2] 筆記 Oracle.verifyData() 用途 SIGHASH_NONE 內部,所以Bob 可以花在他想要的任何輸出上。
觀看:CoinGeek 紐約演講、比特幣智能合約和計算
比特幣新手?查看CoinGeek 的 初學者的比特幣 部分,了解更多關於比特幣(中本聰最初設想)和區塊鏈的終極資源指南。