參考教材:《區塊鏈:技術驅動金融》
一、跨鏈原子交換(不可分割的交叉鏈互換)
1.實施步驟
假設Alice要拿1BTC交換Bob的3BCY。Alice作為交易的發起者。
1)Alice創建一個secret(一個隨機數x), 并計算其哈希值 (h(x))
2)Alice創建交易tx1,但并不廣播上鏈。
tx1的輸入是Alice擁有的1BTC,輸出腳本則要求使用方滿足下面兩個條件之一:
A. Alice的簽名以及Bob的簽名
B.? ?secret(即x的值)以及Bob的簽名
也就是說,Bob要想拿走Alice的這一BTC,除了簽上Bob的簽名之外,還需要擁有Alice的簽名或者secret(x)的值。Bob當然拿不到Alice的簽名,所以Bob只有在知道secret(x)的值之后,才能拿走這1BTC。
tx1的輸出腳本可以如下:
<pubkey_Bob>
OP_CHECKSIGVERIFY
OP_DUP
<pubkey_Alice>
OP_CHECKSIG
OP_IF
OP_DROP
OP_I
OP_ELSE
OP_HASH160
<x_hash>
OP_EQUAL
OP_ENDIF
拿走tx1中存儲的這1BTC的交易,需要輸入腳本如下:
<sig_Alice>
<sig_Bob>
或者如下:
<sig_Alice>
<sig_Bob>
?3)Alice利用時間鎖,創建贖回這1BTC的交易tx11.請求Bob對tx11簽名,
這是為了防止Bob不拿走tx1中存儲的1BTC,Alice也無法拿回這筆錢。(因為這筆錢已經被轉到了某個地址,需要借由Bob的簽名和隨機數x才能取出)。
時間鎖可以設置為48h.輸入是tx1中存儲的這1BTC,輸出地址是Alice的地址。只要tx1中的這筆錢在48h內沒有被取走,這筆錢就會轉入Alice的地址,Alice就能成功贖回這筆錢。
4)Bob簽名tx11后(也就是如果tx1中的錢沒有被Bob拿走,Alice可以借由tx11成功贖回鎖在tx1中的錢),tx1廣播上鏈。
5)Bob從Alice發布的tx1中獲得h(x),即隨機數的哈希值。借此創建交易tx2.tx2不廣播上鏈。
tx2的輸入是Bob的3BCY,輸出腳本需要滿足下面兩個條件之一才能把3BCY拿走:
A. Alice的簽名以及Bob的簽名
B.? ?secret(即x的值)以及Alice的簽名
Alice想要拿走這3BCY,當然無法簽上Bob的簽名,只能簽上自己的簽名并提供隨機數x(secret)的值。
只要Alice成功拿走了這3BCY,Bob也就從這筆交易中知曉了隨機數x的值,從而可以拿走Alice存儲在tx1中的1BTC.
6)Bob利用時間鎖,時間設為24h(小于Alice的時間鎖時間就好),創建贖回這3BCY的交易tx22.請求Alice對tx22簽名。
這是為了防止Alice不愿意交換幣,不拿走Bob在tx2中存儲的3 BCY,從而Bob也無法拿走鎖在tx2中的這筆錢,
7)? ?tx2廣播上鏈。
如果兩人都愿意交換,則Alice通過x和自己的簽名從tx2中拿走3BCY后,Bob也就從交易記錄中知曉了x的值,從而可以借助x和自己的簽名從tx1中拿走1BTC,從而完成交換。
如果任一一方反悔,另一方都可以在時間鎖時間到達后,成功贖回自己放在tx1或tx2中的錢。
流程總結:
1)Alice創建secret(x),計算哈希值。(注意這個secret不能提前公布,而哈希值可以公布)
2)Alice把1 BTC放在tx1中,tx1先不廣播上鏈。Bob需要知道secret才能拿走tx1中的這筆錢。
3)Alice用48h時間鎖創建贖回交易tx11,如果tx1中的錢沒有被Bob取走,Alice可以在48h后從tx1中拿回自己的這筆錢。Alice需要請求Bob在tx11上簽名,使之有效。
4)tx1廣播上鏈
5)Bob通過x的哈希值,創建交易tx2,把3 BCY放在tx2中。tx2先不廣播上鏈。Alice需要提供secret才能拿走tx2中的這筆錢。
6)Bob用24h時間鎖創建贖回交易tx22,如果tx2中的錢沒有被Alicce取走,Bob可以在24h后從tx2中拿回自己的這筆錢.Bob需要請求Alice在tx22上簽名,使之有效。
7)tx2廣播上鏈
8)Alice通過自己的簽名和secret從tx2中拿走3 BCY。
9)Bob從上一步的交易記錄中知曉secret的值,通過自己的簽名和secret從tx1中拿走1 BTC。交換成功。
2.圖示
成功拿走Alice在tx1中存儲的1BTC的圖示。
上半部分展示的是輸入腳本是Alice和Bob的簽名的情況;
下半部分展示的是知道隨機數x的值和Bob簽名的情況:
二、兩種簡單的加密貨幣
1.高飛幣
1)兩個規則:
- (造幣):高飛可以隨時創建新幣,且這些新創建的幣都屬于他
- (轉幣):擁有此幣的人可以將它轉給其他人
?對于規則一,高飛將生成一個以前從未生成的唯一貨幣編號(uniqueCoinID),并建立字符串“CreateCoin [uniqueCoinID]”,該字符串與高飛的簽名構成一單位幣。任何人都可以驗證該新幣具有高飛的有效簽名,則該幣為有效幣。
對于規則二,需要匯款人的私鑰簽名,收款人的公鑰。可以借由哈希指針追溯幣的來源,以及最開始是否具有高飛的簽名。
2)致命安全隱患:雙重支付。
在交易規則中,只追溯該幣的來源是否有效,卻沒有檢測該幣是否被花費過。
?2.財奴幣
以高飛幣為基礎創建,解決雙重支付的問題。
1)特點:由財奴負責公布“僅增賬目”(append-only ledger)。
建立一個區塊鏈,每個區塊都包含一次交易(而在比特幣中,每個區塊包含多個交易)。
每個區塊包含交易的ID、交易的內容,以及上一個區塊的哈希指針。
財奴數字簽名是針對最后一個哈希指針(它約束整個結構中的所有數據),并將簽名與區塊一起公布。
注:僅增特性確保財奴不能修改或刪除已經發布的交易,也避免財奴支持雙重支付(因為在區塊鏈中,能看到這筆錢是否被花過)。
2)規則
- (造幣):財奴負責創建幣。相較高飛幣,財奴可以在一次交易中創建多個幣量。
- (轉幣):付幣交易有效,當且僅當:被消耗的幣有效;具有全部所有者的簽名;沒有被雙花;消耗(轉入)的幣值等于產生(轉出)的幣值。
?
3)財奴幣存在的問題:中心化
財奴具有太高的權利,雖然無法改變已有的交易,但可以拒絕為某些人提供服務,不把他們的交易發布在區塊上,讓他們手中的幣花不出去。并且財奴擁有造幣的權利。?
補充:幾種最早的另類幣
?1.域名幣
1)目的:提供一個去中心化的域名系統DNS。
2)基本原則:
-把錄入的數據視為域名或數值對(name/value pairs),域名是全球唯一的
-只有首次錄入某個域名的使用者,才有權限更新這個域名。
2.萊特幣
1)設計理念:通過維護CPU礦工社區,創造出一個用CPU挖礦的分布式體系。(失敗了)
2)采用memory-hard puzzles,每2.5min產生一個區塊。其他的類似比特幣。
?3.狗幣
賣點是有趣幽默,而非技術創新。