http://8btc.com/thread-29772-1-1.html
之前这个贴说过,签名便是拿私章盖在一串数12345上,那这是串什么数?
了解这点之前,先看一下本来的买卖乙,这儿汇款信息一侧是由签名和公钥B组成,但实际上在比特币里,这部分信息虽是主要的,但并不是悉数,有些附加信息我一开始略掉了,这儿加上,能够看到有数字13524, 47,41,88,ac 等等。。。13524是前一个买卖的总笔画数(哈希值),用于验证花的币所在的前一个买卖是正确的,而47,41之类数字可称为管帐操作流程,比特币中叫做脚本(script)
管帐操作流程是怎样回事?
从安全角度考虑,咱们假定审核这些买卖的管帐(全节点)都是些小学文化的只懂按计算器和验证的人。所以详细怎样验证这些买卖,我不把任务交给管帐,而是要求她们悉数照章办事,这个章程便是管帐操作流程。她们每个人都有一本小册子,里面有80条管帐操作流程,有些很简略便是一步的操作(比方说47),有些较杂乱,有多步的操作(比方说ac)。但无论怎样,她们只需按汇款单上写的操作流程来做就行了
这样做的好处在于,我在汇款单上可自定义操作流程来完成一些扩展的功用,而不需求每次一想完成新功用都要从头给管帐培训(晋级全节点),比方完成多重签名(管帐有必要验证3个签名中的2个才断定买卖合格),比方完成智能合约(管帐有必要收到其他传真才能断定买卖合格),等等。。。
趁便提一下以太坊(Ethereum)。以太坊和比特币的根本区别,就在于这些操作流程上。中本聪规划比特币的时分,特意让这些操作流程极为简略,不能完成很杂乱的功用,他认为一个货币系统的主要功用便是转账,这些管帐不应什么事都做。但以太坊则不同,便是把这套操作流程编的十分繁复,功用十分强大,形成了一整套计算机语言。也便是说以太坊主要是使用区块链来完成非转账的其他功用,那种情况下,就不是汇款单,可能是合同,条款等等,让职工来依据以太坊的操作流程判断合同是否能够执行
当然了,虽然操作流程可随便组合,但在比特币中绝大多数情况下都是只要一种操作流程即P2PKH,也便是验证私钥签名,即本例中的内容
管帐拿到汇款单(买卖乙)后,详细操作流程如下:
第一步,先从付款信息取出要处理的部分:
1. 取那串数字12345和上面的签名部分
2. 取公章B
这两个操作(比特币中代码47和41)是写在付款信息里的,47是指取签名总长47位,而41是指取公钥的总长41位。管帐一看到47就知道是取数字加签名,一看到41就知道是取公钥
第二步费事一些,从前一个买卖(买卖甲)的收款信息里找到怎样验证买卖(依照买卖甲的兑现条件来操作,但能够参考买卖乙的收款信息,操作代码是一样的)
1.数公章B的总笔画数 (a9)
2.取地址B (14 地址B)
3.验证公章B的总笔画数是否等于地址B,不相等则买卖无效 (88)
4.验证那串数字12345上的私章是否和公章B的裂缝符合,不符合则买卖无效 (ac)
这儿的第四步,那串数字12345已跟私章混在一起无法辨认了,管帐需求从头结构这串数字,然后用公章盖上去,再和本来私章盖上去的图像对比,以验证私章的有效性
这串数字12345怎样结构呢?是依据数买卖乙里一切字的总笔画数来结构的
这就出现了一个逻辑问题:要数买卖乙的总笔画数(算哈希),我有必要连付款信息中的这串数字和盖在上面的私章都一起数,那在还没有这串数字和私章的时分,我怎样知道买卖乙里的总笔画数呢?
因而,中本聪是这样规划的:买卖乙的付款信息中先用铅笔填上前一个买卖的收款信息(也便是买卖甲里的金额,地址B,兑现条件),然后来数买卖乙的总笔画数(假定得到12345)
对乙来说,他要盖私章的时分也是用相同方法取得这串数字12345。在他得到了这个总笔画数今后,把付款信息中的铅笔填的内容擦掉,把这个总笔画数写回去并盖上私章,后面紧跟着附上公章
逻辑较好的人会看到这儿的一个问题,即:既然在付款信息一栏里现已有了前一个买卖甲的总笔画数(哈希值)13524,那再把买卖甲的收款信息部分填在这儿再数这部分的笔画数便是不必要的,因为我现已数过了买卖甲的总笔画数了,能够证明本笔买卖和买卖甲一一对应
对此,Talk论坛上2012年也有人质疑过
https://bitcointalk.org/index.ph ... g1123257#msg1123257
Pieter的答复是:去问中本聪(我怀疑是他主观的基于一些不成文的理由,这让他感觉更安全)
Mike的答复是:我猜这是早期版别中完成时的脚本的一种很糟糕的完成方式,后来遗留下来了
能够看到,Pieter向来就对中本聪的规划有意见,所以他现在提出彻底修改比特币的架构,这个主意也是由来已久的了
最后这儿是一张完好的买卖单的一切16进制码,有兴趣的能够自己找找对应的那些操作码大致都在什么地方