BTC-分叉

分叉(fork):原来由一条链变为了两条链。

造成原因:有可能是两个节点差不多同时挖到了一个区块,然后同时发布出去,这时候就会造成临时性的分叉(state fork);forking attack(deliberate fork);比特币的协议发生了改变,要修改比特币协议需要进行软件升级,在一个去中心化的系统里,升级软件的时候没有办法保证所有的软件都升级节点,大部分节点升级了软件,少数节点因为种种原因没能升级,这种时候也会造成分叉,叫protocol fork。根据对协议修改的内容的不同。可以进一步分为硬分叉(hard fork)和软分叉(soft fork)。

hard fork:如果对比特币协议增加一些新的特性,扩展一些新的功能,那些没有升级软件的旧的节点是不认可这些特性的,认为这些特性是非法的。例:比特币中的区块大小限制(block size limit)把1M修改为4M,更新的节点挖出的区块是4M,但会被旧节点认为是非法的,旧节点就不会按照这个区块进行挖矿。这种分叉是永久性的,只要旧节点不更新软件,这种分叉就不会消失。必须要所有的节点都更新了软件,系统才不会出现永久性的分叉。
在这里插入图片描述

soft fork:对比特币协议加入一些限制,加入限制之后原来合法的交易或者合法的区块,在新的协议中变得不合法,就引起软分叉。假如把block size limit 1M改为0.5M。系统中只要有半数以上算力的节点更新了软件,这个系统就不会出现永久性的分叉。
在这里插入图片描述
旧节点一直做无用功,挖出来的块不被其它的节点认可,但是其它节点挖出的块旧节点是认可的(最长合法链),所以旧节点挖出的块就会一直被丢弃。 这种分叉不会一直持续,因为旧的节点挖的分叉的链会被丢弃。
实际中可能出现软分叉的情况:给某些目前协议中没有规定的域增加一些新的含义,赋予他们一些新的规则。

比特币历史上一个著名的软分叉例子:P2SH(Pay to Script Hash)。支付的时候不是支付给一个public key的哈希,而是付给一个赎回脚本的哈希redeem Script。

关于P2SH,以下转自知乎:https://zhuanlan.zhihu.com/p/54955876

什么是 P2SH
P2SH 是和比特币地址紧密相关的。

先说说什么是 P2SH 地址。比特币地址就是一个长长的字符串,但是比特币地址是分不同类型的,常见的有两类:Pay-to-PubKeyHash (P2PKH) 和 Pay-to-ScriptHash (P2SH) 。

P2PKH 是最为常见的比特币地址类型,英文全称的意思是”向公钥哈希支付“,这种类型的地址是以1打头,例如,1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2 。

P2SH 是一种比较新的地址类型。英文全称的意思是”向脚本哈希支付“,这种类型的地址是以3打头的,例如,3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy 。

P2PKH 和 P2SH 两类地址的主要差别是,资金的转出条件不同。注意,转出指的是当发送方把比特币转入到地址上之后,接收方再把币转给其他人的这个行为。P2PKH 地址中的钱如果要转出,只需要提供公钥和私钥签名即可,形式比较固定。而 P2SH 中的资金要想转出,转出条件就可以很自由的进行设置。具体来讲,转出条件就是要写到一个赎回脚本(redeem script)中,P2SH 中的 S 代表赎回脚本。

以上就是 P2SH 的基本含义了。

P2SH 的运行逻辑
P2SH 跟传统方式的最大区别是把设置转出条件的人从发送者变成接收者。这句话非常的不好理解,下面我们来详细介绍一下其中的逻辑。

还是先从 P2PKH 说起,这种传统的方式下,转出条件设置者是比特币的发送者。具体过程是这样:发送者在拿到接收者地址之后,要构建一个交易,转出条件是在交易中的上锁脚本中规定的。详细过程在比特币脚本中有介绍。接收者如果要转出地址中的币,就需要满足上锁脚本中的转出条件。

再来聊 P2SH ,这种新的方式下,转出条件是由接收者来设置。具体过程是这样:

接收者先来构建一个赎回脚本,里面的内容就是转出条件。注意,转出条件在 P2PKH 条件下是由发送者来写到上锁脚本中的。 接收者运算赎回脚本的哈希,这个哈希值就是一个 P2SH 类型的比特币地址,并把这个哈希值发送给发送者。 发送者构建交易,但是这次的交易输出不再有上锁脚本,而是变成了赎回脚本的哈希。具体转出条件是什么,发送者是不知道的,也没有必要知道。 接收者收到币之后,如果想花费这些币就必须去满足赎回脚本中的转出条件。例如,如果设置了适当的转出条件,就可以来实现多重签名。

以上就是一个 P2SH 的地址从生成到接收币再到转出币的整个过程。

P2SH 的意义
P2SH 的思路是在 BIP16 中提出的,目的就是用来实现更为复杂的交易,增加了比特币的可编程货币的特性。

P2SH 最知名的一个应用就是来实现多重签名。就像前面讨论过的,如果接收者在赎回脚本中添加适当的转出条件,就可以把脚本哈希变成一个多重签名地址。比特币一旦转入这个地址就需要多个数字签名才能转出。多重签名机制使得支付通道和闪电网络成为可能,而这些都离不开 P2SH 这种机制。

所以说 P2SH 是有非常强的现实意义的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值