解读比特币的可扩展性方案:隔离见证( 三 )
Alice希望给Bob转账一些btc , Bob有支持隔离见证的钱包软件而她没有 。 他们显然只能用标准形式的交易 , 但Bob希望使用SegWit来减少手续费 。
这时候 , Bob可以创建一个包含了SegWit脚本的P2SH地址、Alice会把这个地址当成一个普通的P2SH地址 , 因此可以直接向这个地址转账而没有任何问题 。 但Bob可以使用SegWit交易来使用这个输出 , 并获得手续费折扣(下文我们会解释SegWit交易的手续费的新的定价方式) 。
这就是SegWit交易的两种类型P2WSH和P2WPKH在P2SH内实现的方式 。
P2SH(P2WPKH)
想在P2SH交易中实现一笔P2WPKH交易 , Bob需要使用其公钥创建一个见证程序 。 然后把结果哈希、转码成一个地址:
第一个数值是版本号 , 而第二个数值是20字节的公钥哈希值 。 这个脚本先做SHA256哈希运算 , 再做RIPEMD160运算 , 就可得到一个20字节的哈希值 。
这个P2WPKH见证程序的HASH160结果:
转化成一个地址:
发送给这个地址的输出的锁定脚本 , 看起来也就跟一个普通的P2SH地址的脚本没啥区别:
那么Bob花费输出的时候 , 交易的结构会像这样:
在一开始 , 我们创建的赎回脚本(也就是那个见证程序)会经过一次哈希计算 , 如果结果符合锁定脚本中的哈希值 , 这个脚本就会得到执行 , 程序会验证放在witness字段的签名 。
P2SH(P2WSH)
P2WSH脚本也可以用P2SH来实现 。 我们考虑上面所说的2-5多签名钱包的例子 。 所有的步骤都跟P2SH(P2WPKH)没什么区别:
首先 , 创建一个见证程序:
第一个数值是版本号 , 第二个数值是32位的SHA256哈希值 , 对应于我们的签名脚本 。 然后我们拿这个见证程序的HASH160哈希值转成一个普通的P2SH地址 。 要使用发往这个地址的输出时 , 我们需在scriptSig字段公布这个见证程序 , 在witeness字段提供完整的多签名脚本 。
隔离见证的好处
梳理清楚技术的部分之后 , 我们就可以理解隔离见证的主要优点了 。
交易熔融性漏洞
SegWit解决的一个关键问题就是比特币交易的“熔融性” , 也即比特币交易的ID是哈希值这一点所带来的问题 。 我们详细说一下 。
在以往的比特币交易中 , 签名是放在交易的输入部分的 , 第三方可以更改签名且不会让交易失效 。 这使得第三方可以在完全不更改交易的“关键”字段(比如输入、输出、转账的数量)的前提下更改交易的ID(也就是交易的哈希值) 。 这样一来 , 交易还是有效的 , 含义也还是一样的 , 但是有了另一个ID , 这可以用来执行另一种攻击 , 比如DoS攻击(拒绝服务式攻击) 。
SegWit解决了这个问题 , 因为所有的签名都是放在交易外面的 , 因此签名的变动不会导致交易的哈希值变动 , 也就不会影响交易的ID 。 隔离见证还引入了一个专门的标识符 , 叫做“wtxid”:它是交易和整个witness部分的哈希值 , 所以如果一笔交易在传播时没有附带任何witness数据 , 交易ID(txid)就等于wtxid 。
这个解决方案使得我们可以创建一系列前后相继的未确认交易 , 而无需担心任何风险 , 这对闪电网络这样的协议来说是非常重要的 。 (译者注:这里的意思可能是 , 如果不解决交易熔融性问题 , 支付通道的参与者就无法快速检索对手有没有把一笔过时的通道交易上链 , 因为同样内容的交易可能会以完全不同的ID出现) 。
网络和存储的扩展
Witness数据往往是交易数据中占比最大的一部分 。 在使用多签名脚本的交易中 , witness最多可能占据交易数据量的75% 。 感谢SegWit , 签名的传输变成了一个可选项:只有节点想要验证交易时 , 才需要请求这些数据 。 而没有支持SegWit的SPV(简易支付验证)客户端和节点也无需下载额外的数据 , 可以节省硬盘空间 。
- 比特币|买小众低端品牌笔记本,还不如二手一线品牌高配置,有道理吗?
- 鲸鱼|以太坊鲸鱼注资小型山寨币
- 腾讯|以太坊鲸鱼注资小型山寨币
- 电子商务|天天查|价值1亿美元的加密货币被黑客盗取
- 以太坊|币圈小将:以太坊合并之后,矿工们将何去何从?
- 扫地机器人|加密货币崩溃迫使矿工在直播拍卖期间出售数百张显卡,千万别买
- “ 人在币圈混,三天饿九顿。?”
- 联想Yoga|馔玉返扑、溢彩存真——联想YOGA Pro 14s 2022全解读
- 虚拟货币7个月蒸发2万亿美元,“马斯克们”终结15万人暴富梦
- 蜗牛是动物界中的“爱神”,其在交配过程中会释放“丘比特之箭”
