区块链期末复习3:跨链原子交换其他加密货币
参考教材:《区块链:技术驱动金融》
一、跨链原子交换(不可分割的交叉链互换)
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.狗币
卖点是有趣幽默,而非技术创新。