比特币中TxHash为什么会变化?

一直不理解比特币的Tx在被打包确认之前TxHash为什么会发生变化,这次终于找到了依据.

交易可延展性

虽然交易签名后,签名当前不会覆盖经过哈希处理以创建事务哈希的事务中的所有数据。因此,虽然不常见,但网络上的节点可能会以散列无效的方式更改您发送的事务。请注意,这只会更改哈希值; 交易的输出保持不变,比特币将转到他们的预期收件人。然而,这确实意味着,例如,在任何情况下接受一系列确认块数不够的交易是不安全的,因为后来的交易将取决于先前交易的哈希值,并且这些哈希值可以被更改,直到它们在链上被确认为止。

签名可延展性

可延展性的第一种形式是签名本身。每个签名都只有一个DER编码的ASN.1八位位组表示,但OpenSSL不会强制执行此操作,只要签名没有严重错误,它就会被接受。[1]此外,对于每个ECDSA签名(r,s),签名(r,-s(mod N))是同一消息的有效签名。[2]

从块363724开始,BIP66软分叉使得块链中的所有新事务都必须严格遵循DER编码的ASN.1标准。目前仍在努力关闭DER签名中其他可能的延展性。

任何有权访问相应私钥的人都可以更改签名。 这句话的意思是私钥拥有者对同一笔交易反复签名,他们每次签名都不一样,但是都是有效的.

scriptSig Malleability

比特币中使用的签名算法不会签署全部的scriptSig来创建签名。虽然签署整个scriptSig是不可能的 - 签名本身就是签名 - 这意味着可以添加额外的数据,然后再将所需的签名和公钥推送到栈上。比如可以添加OP_DROP,执行效果和完全没有添加一样。

正在考虑防止scriptSig延展性。当前在其scriptSig中具有除数据推送操作之外的任何操作的事务被认为是非标准的并且不会被广播,并且最终该规则可以扩展为强制执行后堆栈具有恰好一个项目。但这样做可能会影响以后对比特币的扩展。

BIP62

BIP_0062是2014年初提出的比特币改进方案,旨在解决延展性问题。它旨在找到所有可能的延展性方法并逐一修复它们。BIP被撤销,因为发现这对于延展性阻止的用例(例如[闪电网络](https://en.bitcoin.it/wiki/Payment_channels)是不够的[4](https://en.bitcoin.it/wiki/Transaction_malleability#cite_note-4) 5 6 BIP文件本身包含作者可以想到的所有延展性方法。

Segwit

隔离见证是对比特币的更新,其目的之一是修复所有形式的可塑性。仅花费segwit输出的交易不易受延展性影响。

比特币的TxHash为什么会发生改变的更多相关文章

  1. IDFA的值什么时候会发生改变

    在何种情况下 , 应用的IDFA值会发生改变? 近期工作中须要获得一个能够唯一地标示每个不同应用的ID,之前的苹果UDID已经不让使用了. 那么我们须要使用新的IDFA来引用.可是在某些情况下这个ID ...

  2. 点击checkbox后,$(this).attr('checked')得到的值不会发生改变

    这两天遇到一个问题,就是在点击checkbox后,$(this).attr('checked')得到的值要么是undefined,要么是checked,同一个表单一直点击却一点都不会发生改变,调试了一 ...

  3. 通过AWS的DHCP自动获取的IP地址是否会发生改变?

    针对您的问题,分析如下:1.在一个VPC内,通过AWS的DHCP自动获取的IP地址,在如何情况下会发生改变?例如我把vpc的内所有100个ec2实例全部关闭,再全部重新打开,是否会发生IP地址变化的情 ...

  4. 单击改变input的边框颜色

    input边框变色   今天布局页面的时候发现设计稿多了一项要求,就是点击input框的时候要求框框变色,以前没有遇到过,平时很多时候都用的:hover这次想着一样吧,看了之后发现不是想要的效果,ho ...

  5. Json解析数据导致顺序改变问题

    json解析的时候,通常顺序会发生改变,如果我们有保持原有顺序的需求的话可以通过如下方式 1.使用fastJson的Feature.OrderedField JSONObject respJson = ...

  6. 解决Android中,禁止ScrollView内的控件改变之后自动滚动 - 转

    问题: 最近在写一个程序界面,有一个scrollVIew,其中有一段内容是需要在线加载的. 当内容加载完成后,ScrollView中内容的长度会发生改变,这时ScrollView会自动下滚,如下图所示 ...

  7. python装饰器中@wraps作用--修复被装饰后的函数名等属性的改变

    Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Python的functools包中提供了一个叫wraps的de ...

  8. nRF52832 改变ATT_MTU提高蓝牙数据发送速率(nRF5_SDK_14.2.0)

    nRF52832 作为一个低功耗蓝牙芯片,其数据发送发送速率一直都偏低(高就不叫低功耗了^_^),作为初学者在网上找了很多资料,终于找到通过修改ATT_MTU来提升发送速率的方法,最快能达到8.2KB ...

  9. 比特币钱包Armory使用指南

    转自:http://news.yibite.com/application/2014/0525/21603.shtml 比特币钱包Armory(https://bitcoinarmory.com/)是 ...

随机推荐

  1. 25个必须记住的SSH命令

      OpenSSH是SSH连接工具的免费版本.telnet,rlogin和ftp用户可能还没意识到他们在互联网上传输的密码是未加密的,但SSH 是加密的,OpenSSH加密所有通信(包括密码),有效消 ...

  2. fireDAC oracle

    copy 4 files to D:\oracleapp\Administrator\product\11.2.0\client_1\BIN setup win 64 bit client .down ...

  3. Spring cloud config-client 爬坑

    配置文件 找不到属性 Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'from' in st ...

  4. SC命令安装window服务

    sc create Styler binpath= "D:\Styler\Styler.exe" start= auto displayname= "Styler&quo ...

  5. zk分布式锁-排它锁简单实现-优化版

    package Lock; import java.util.Collection;import java.util.Collections;import java.util.List;import ...

  6. Common Lisp

    [Common Lisp] 1.操作符是什么? 2.quote. 3.单引号是quote的缩写. 4.car与cdr方法. 5.古怪的if语句. 6.and语句. 7.判断是真假. null 与 no ...

  7. DropDownList控件的使用方法

    1. 使用代码添加数据 <asp:DropDownList ID="DropDownList1" runat="server"> </asp: ...

  8. leetcode 63 不同的路径2

    描述: 从左上角走到右下角,中间可能有若干阻碍: 题目给出一个矩阵,0表示可以走,1表示有障碍. 解决: 思路同第一题,只是如果上面或左边有障碍,自身不一定能走,注意些边界条件即可,复杂度仍是m*n. ...

  9. rabbitmq的简单介绍二

    上一篇博客我们没有介绍完rabbitmq,今天我们接着上一篇的博客继续介绍rabbitmq 这边的博客的内容如下 1.组播,对指定的队列设置关键词,通过关键词来控制消息的分发 2.更加细致的组播 先来 ...

  10. C++ std::thread

    std::thread Defined in header class thread The class thread represents a single thread of execution. ...