比特币时间戳详解(比特币原理详解)

静香

比特币时间戳详解(比特币原理详解)


区块链中的时间戳是什么


                
为了防止双花问题,系统会给每一个区块的交易信息都自动加上时间戳,给它打上时间烙印,这个时间你花了多少钱,花了就是花了,已经记录上了,不能再用它买别的东西了。
具体怎么记录的呢?其实还是通过计算,把时间戳和区块上的其他交易信息,通过复杂的计算,得出一个加密数值,这个加密数值叫作“哈希值”,每一个新区块都包含前一个区块的哈希值,由此形成一条区块链。
所以我们说:比特币系统,实际上是一个层层嵌套、永不停歇的、非常强大的时间戳
系统,它利用的是时间戳,保证每一个区块按照时间顺序链接成“链”(也就是区块链)。
从这里我们这样理解,时间戳,字面意思是给区块打上时间印记,它的实际作用在于:为之后计算哈希值提供一个重要参数,是计算和核对过程中一个必不可少、非常重要的信息。
最后,我们总结本节的内容。本节主要介绍了两个名词:UTXO和时间戳,这两个概念呢,是解决“双花问题”的重要手段,能够保证比特币可以在没有第三方机构的情况下,不被多次使用。

bitcoin mining详解


                
mining总共可以分为两种,一种是: Solo Mining ;一种是: Pool Mining
  
如下图所示,solo miner 使用 bibtcoind 来从网络上面来拿到新的交易。 通过使用 getblockquantemplate  这个RPC命令去定期轮询 bitcoind 来获取新的交易。
                                          
挖矿的时候,首先去构造一个80字节的块头结构。 之后遍历块头中的nonce字段来生成与其对应的hash值。
  
挖矿的时候,我们需要两个点,一个是去构造coinbase,另一个是回填块头结构的nonce值。当块头结构构造好之后,就会返回给client端。
  
上述过程也就是去折腾80字节的块头结构:
                                          
这种挖矿的形式就是我每一个人贡献我自己的算力,然后大家的算力加起来,合成一个矿池,现在由我矿池统一挖矿,挖到块之后,按照大家算力的百分比分成。
  
上面我们提到了,挖矿就是折腾那80字节,现在我们具体看看怎么折腾。
  
4 字节的nVersion字段,这个我们可以认为它是不变的,为什么这么说,因为这个字段只有在进行升级时候才会改变,平时没事也不升级啊。
  
32字节的hashPrevblockquan字段,这个是不变的,它是由前一个区块确定的,你没办法改变它。
  
4字节的nBits字段,这个也基本是不变的,它由全网的算力决定,每2016个块才会进行一次难度调整,调整的算法是固定的。
  
上述三个字段我们基本认为不会变,也就是在构造80字节的块头的时候,和你们没什么大的关系。
  
4字节的nTime,这个字段是可变的,但悲哀的是,蹦跶的范围不大,理论上是允许后一个区块的区块时间略早于前一个区块时间,所以看到你的“父亲”出生的比你晚不必要惊讶,全网太大了,网络稍微有点延迟,这个东西也没办法避免,一般来说,矿工会直接使用机器当前时间戳。
  
4字节的nNonce,这个字段好好唠唠,一个字节8位,4字节32位,所以,它能提供2的32次方的寻址范围。在CPU和GPU的挖矿时代,这个字段也就足够用了,所以当时候都是去迭代遍历这个nNonce字段,算出来复合要求的值,回去填充块头。但是随着算力的提升,4GB的寻址肯定不够用了,怎么办呢?
  
32自己的hashMerkleRoot字段,merkle tree具体的作用就不在这里展开说明了,该字段是矿工构造的coinbase加上这个块打包进来的所有交易,算出来的一个32字节的hash‘值,只要包括coinbase字段在内的所有交易有任何风吹草动,该字段都会不一样。32字节啊,也就是说提供了2的256次方的寻址可能,目前世界上现存的所有算力全部加起来也算不完吧,如果量子计算落地,另当别论。
  
综上所述,挖矿流程我们可以简单总结如下:

比特币机制研究


                

现今世界的电子支付系统已经十分发达,我们平时的各种消费基本上在支付宝和微信上都可以轻松解决。但是无论是支付宝、微信,其实本质上都依赖于一个中心化的金融系统,即使在大多数情况这个系统运行得很好,但是由于信任模型的存在,还是会存在着仲裁纠纷,有仲裁纠纷就意味着不存在 不可撤销的交易 ,这样对于 不可撤销的服务 来说,一定比例的欺诈是不可避免的。在比特币出来之前,不存在一个 不引入中心化的可信任方 就能解决在通信通道上支付的方案。
   比特币的强大之处就在于:它是一个基于密码学原理而不是依赖于中心化机构的电子支付系统,它能够允许任何有交易意愿的双方能直接交易而不需要一个可信任的第三方。交易在数学计算上的不可撤销将保护 提供不可撤销服务 的商家不被欺诈,而用来保护买家的 程序化合约机制 也比较容易实现。

  

假设网络中有A, B ,C三个人。
   A付给B 1比特币 ,B付给C 2比特币 ,C付给A 3比特币
   如下图所示:

                                                                                  

  

为了刺激比特币系统中的用户进行记账,记账是有奖励的。奖励来源主要有两方面:

  

比特币中每一笔交易都会有手续费,手续费会给记账者

  

记账会有打包区块的奖励,中本聪在08年设计的方案是: 每10分钟打一个包,每打一个包奖励50个比特币,每4年单次打包的奖励数减半,即4年后每打一个包奖励25个比特币,再过四年后就奖励12.5个比特币... 这样我们其实可以算出比特币的总量:

                                          

  

要说明打包的记录以谁为准的问题,我们需要引入一个知名的 拜占庭将军问题 (Byzantine failures)。拜占庭将军问题是由莱斯利·兰伯特提出的点对点通信中的基本问题。含义是在存在消息丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的。

  

假设有9个互相远离的将军包围了拜占庭帝国,除非有5个及以上的将军一起攻打,拜占庭帝国才能被打下来。而这9个将军之间是互不信任的,他们并不知道这其中是否有叛徒,那么如何通过远距离协商来让他们赢取战斗呢?

  

口头协议有3个默认规则:
   1.每个信息都能够被准确接收
   2.接收者知道是谁发送给他的
   3.谁没有发送消息大家都知道
   4.接受者不知道转发信息的转发者是谁
   将军们遵循口头规则的话,那就是下面的场景:将军1对其他8个将军发送了信息,然后将军2~9将消息进行转达(广播),每个将军都是消息的接受者和转发者,这样一轮下来,总共就会有9×8=72次发送。这样将军就可以根据自己手中的信息,选择多数人的投票结果行动即可,这个时候即便有间谍,因为少数服从多数的原则,只要大部分将军同意攻打拜占庭,自己就去行动。
   这个方案有很多缺点:
   1.首先是发送量大,9个将军之间要发送72次,随着节点数的增加,工作量呈现几何增长。
   2.再者是无法找出谁是叛徒,因为是口头协议,接受者不知道转发信息的转发者是谁,每个将军手里的数据仅仅只是一个数量的对比:

                                          

这里我们假设有3个叛徒,在一种最极端的情况下即叛徒转发信息时总是篡改为“不进攻”,那么我们最坏的结果就如上图所示。将军1根据手里的信息可以推出要进攻的结论,却无法获知将军里面谁是叛徒。
   这样我们就有了方案二:书面协议。

  

书面协议即将军在接受到信息后可以进行签字,并且大家都能够识别出这个签字是否是本人,换种说法就是如果有人篡改签字大家可以知道。书面协议相对比口头协议就是增加了一个认证机制,所有的消息都有记录。一旦发现有人所给出的信息不一致,就是追查间谍。
   有了书面协议,那么将军1手里的信息就是这样的:

                                          

可以很明显得看出,在最坏的一种情况——叛徒总是转发“不进攻”的消息之下,将军7、8、9是团队里的叛徒。
   这个方案解决了口头协议里历史信息不可追溯的问题,但是在发送量方面并没有做到任何改进。

  

  

                                          

在我们的示例中,比特币系统里的每个用户发起了一笔交易,都会通过自己的私钥进行签名,用数学公式表示就是:

  

所以之前的区块就变成了这样:

                                          

这样每一笔交易都由交易发起者通过私钥进行数字签名,由于私钥是不公开的,所以交易信息也就无法被伪造了。

  

如书面协议末尾所说的那样,书面协议未能解决信息交流过多的问题。当比特币系统中存在上千万节点的时候,如果要互相广播验证,请求响应的次数那将是一个非常庞大的数字,显然势必会造成网络拥堵、节点处理变慢。为了解决这个问题,中本聪干脆让整个10分钟出一个区块,这个区块由谁来打包发出呢?这里就采用了工作量证明机制(PoW)。工作量证明,说白了就是解一个数学题,谁先解出来数学题,谁就能有打包区块的权力。换在拜占庭将军的例子中就是,谁先做出数学题,谁就成为将军们里面的总司令,其他将军听从他发号的命令。
  

  

                                          

首先,矿工会将区块头所占用的128字节的字符串进行两次sha256求值,即:

  

这样求得一个值Hash,将其与目标值相比对,如果符合条件,则视为工作量证明成功。
   工作量证明成功的条件写在了区块链头部的 难度数 字段,它要求了最后进行两次sha256运算的Hash值必须小于定下的目标值;如果不是的话,那就改变区块头的 随机数 (nonce),通过一次次地重复计算检验,直到符合条件为止。

  

此外, 比特币有自己的一套难度控制系统,使得比特币系统要在全网不同的算力条件下,都保持10分钟生成一个区块的速率。这也就意味着:难度值必须根据全网算力的变化进行调整。难度调整的策略是由最新2016个区块的花费时长与期望时长(期望时长为20160分钟即两周,是按每10分钟一个区块的产生速率计算出的总时长)比较得出的,根据实际时长与期望时长的比值,进行相应调整(或变难或变易)。也就是说,如果区块产生的速率比10分钟快则增加难度,比10分钟慢则降低难度。

  

PoW其实在比特币中是做了以下的三件事情。

  

这样可以防止一台高性能机器同时跑上万个节点,因为每完成一个工作都要有足够的算力。

  

有经济奖励就会加速整个系统的去中心化,也鼓励大家不要去作恶,要积极地按照协议本来的执行方式去执行。(所以说,无币区块链其实是不可行的,无币区块链一定导致中心化。)

  

也就是说,每个节点都不能以自身硬件条件去控制出快速度。现在的比特币上平均10分钟出一个块,性能再好的机器也无法打破这个规则,这就能够保证 区块链是可以收敛到共同的主链上的 ,也就是我们所说的共识。

  

综上,共识只是PoW三个作用中的一点,事实上PoW设计的作用有点至少有这么三种。

  

默克尔树的概念其实很简单,如图所示

                                                                                  

  

  

                                          

这样,我们区块的结构就大致完整了,这里分成了区块头和区块体两部分。

  

区块链的每个节点,都保存着区块链从创世到现在的每一区块,即每一笔交易都被保存在节点上,现在已经有几百个GB了。
   每当比特币系统中有一笔新的交易生成,就会将新交易广播到所有的节点。每个节点都把新交易收集起来,并生成对应的默克尔根,拼接完区块头后,就开始调整区块头里的随机数值,然后就开始算数学题

  

将算出的result和网络中的目标值进行比对,如果是结果是小于的话,就全网广播答案。其他矿工收到了这个信息后,就会立马放下手里的运算,开始下一个区块的计算。
   举个例子,当前A节点在挖38936个区块,A挖矿节点一旦完成计算,立刻将这个区块发给它的所有相邻节点。这些节点在接收并验证这个新区块后,也会继续传播此区块。当这个新区块在网络中扩散时,每个节点都会将它作为第38936个区块(前一个区块为38935)加到自身节点的区块链副本中。当挖矿节点收到并验证了这个新区块后,它们会放弃之前对构建这个相同高度区块的计算,并立即开始计算区块链中下一个区块的工作。
   整个流程就像下一张图所展示的这样:

                                                                                  

  

简单来说,双花问题是一笔钱重复花了两次。具体来讲,双花问题可分为两种情况:
   1.同一笔钱被多次使用;
   2.一笔钱只被使用过一次,但是通过黑客攻击或造假等方式,将这笔钱复制了一份,再次使用。
   在我们生活的数字系统中,由于数据的可复制性,使得系统可能存在同一笔数字资产因不当操作被重复使用的情况,为了解决双花问题,日常生活中是依赖于第三方的信任机构的。这类机构对数据进行中心化管理,并通过实时修改账户余额的方法来防止双重支付的出现。而作为去中心化的点对点价值传输系统,比特币通过UTXO、时间戳等技术的整合来解决双花问题。

  

UTXO的英文全称是 unspent transaction outputs ,意为 未使用的交易输出 。UTXO是一种有别于传统记账方式的新的记账模型。
   银行里传统的记账方式是基于账户的,主要是记录某个用户的账户余额。而UTXO的交易方式,是基于交易本身的,甚至没有账户的概念。在UTXO的记账机制里,除了货币发行外,所有的资金来源都必须来自于前面某一个或几个交易。任何一笔的交易总量必须等于交易输出总量。UTXO的记账机制使得比特币网络中的每一笔转账,都能够追溯到它前面一笔交易。
   比特币的挖矿节点获得新区块的挖矿奖励,比如 12.5 个比特币,这时,它的钱包地址得到的就是一个 UTXO,即这个新区块的币基交易(也称创币交易)的输出。币基交易是一个特殊的交易,它没有输入,只有输出。
   当甲要把一笔比特币转给乙时,这个过程是把甲的钱包地址中之前的一个 UTXO,用私钥进行签名,发送到乙的地址。这个过程是一个新的交易,而乙得到的是一个新的 UTXO。
   这就是为什么有人说在这个世界上根本没有比特币,只有 UTXO,你的地址中的比特币是指没花掉的交易输出。
   以Alice向Bob进行转账的过程举例的话:

                                          

UTXO 与我们熟悉的账户概念的差别很大。我们日常接触最多的是账户,比如,我在银行开设一个账户,账户里的余额就是我的钱。
   但在比特币网络中没有账户的概念,你可以有多个钱包地址,每个钱包地址中都有着多个 UTXO,你的钱是所有这些地址中的 UTXO 加起来的总和。
   中本聪发明比特币的目标是创建一个点对点的电子现金,UTXO 的设计正可以看成是借鉴了现金的思路:我们可能在这个口袋里装点现金,在那个柜子角落里放点现金,在这种情况下不存在一个账户,你放在各处的现金加起来就是你所有的钱。
   采用 UTXO 设计还有一个技术上的理由,这种特别的数据结构可以让双重花费更容易验证。对比一下:


比特币算法原理


                
比特币算法主要有两种,分别是椭圆曲线数字签名算法和SHA256哈希算法。

椭圆曲线数字签名算法主要运用在比特币公钥和私钥的生成过程中,该算法是构成比特币系统的基石。SHA-256哈希算法主要是运用在比特币的工作量证明机制中。

比特币产生的原理是经过复杂的运算法产生的特解,挖矿就是寻找特解的过程。不过比特币的总数量只有2100万个,而且随着比特币不断被挖掘,越往后产生比特币的难度会增加,可能获得比特币的成本要比比特币本身的价格高。

比特币的区块由区块头及该区块所包含的交易列表组成,区块头的大小为80字节,由4字节的版本号、32字节的上一个区块的散列值、32字节的 Merkle Root Hash、4字节的时间戳(当前时间)、4字节的当前难度值、4字节的随机数组成。拥有80字节固定长度的区块头,就是用于比特币工作量证明的输入字符串。不停的变更区块头中的随机数即 nonce 的数值,并对每次变更后的的区块头做双重 SHA256运算,将结果值与当前网络的目标值做对比,如果小于目标值,则解题成功,工作量证明完成。

比特币的本质其实是一堆复杂算法所生成的一组方程组的特解(该解具有唯一性)。比特币是世界上第一种分布式的虚拟货币,其没有特定的发行中心,比特币的网络由所有用户构成,因为没有中心的存在能够保证了数据的安全性。

你对比特币的认识可能都是错的!请重新认比特币


                
比特币(Bitcoin)的概念最初由中本聪在2008年11月1日提出,并于2009年1月3日正式诞生 。
  
根据中本聪的思路设计发布的开源软件以及建构其上的P2P网络。比特币是一种P2P形式的虚拟的加密数字货币。点对点的传输意味着一个去中心化的支付系统。
  
与所有的货币不同,比特币是依据特定算法,通过大量的计算产生,比特币经济使用整个P2P网络中众多节点构成的分布式数据库来确认并记录所有的交易行为,并使用密码学的设计来确保货币流通各个环节安全性。P2P的去中心化特性与算法本身可以确保无法通过大量制造比特币来人为操控币值。基于密码学的设计可以使比特币只能被真实的拥有者转移或支付。这同样确保了货币所有权与流通交易的匿名性。
    
比特币与其他虚拟货币最大的不同,是其总数量非常有限,具有极强的稀缺性。
  
比特币的趋势:
  
比特币是一种去中心化的点对点的电子现金系统,从出世到现在,已经10年有余。比特币现在的价格在1万美元徘徊,很多人觉得价格已经太高了,现在买不划算。但事实上,尽管比特币已经走了10年,它仍然像腹中胎儿,很多少并不知道比特币的存在。
  
比特币还没有成长为婴儿孩童,还有巨大的成长空间,它的前景是广阔的。不妨下一个十年,我们再来看比特币究竟到达了怎样的高度。越来越多的人将会知道比特币,人人都需要比特币,比特币的交易需求会极为旺盛。
  
比特币是庞氏骗局吗?:
  
首先庞氏骗局是对金融领域投资诈骗的称呼,是金字塔骗局(Pyramid scheme)的始祖。很多非法的传销集团就是用这一招聚敛钱财的,这种骗术是一个名叫查尔斯·庞兹的投机商人“发明”的。庞氏骗局在中国又称“拆东墙补西墙”“空手套白狼”。简言之就是利用新投资人的钱来向老投资者支付利息和短期回报,以制造赚钱的假象进而骗取更多的投资。
  
想让全世界知道你对比特币技术完全无知,最好的方法有:一是使用郁金香泡沫作比喻,二是说比特币是一种庞氏骗局。一个人喜欢这么说,大多是因为在对一件自己不了解的事物做出断言前,根本没有能力去做一些基础研究。
  
当你了解比特币背后的技术和它被发明的原因,或许就会发现比特币完全不是旁氏骗局。好了,让我们抽丝剥茧地来做一个分解。有人说,庞氏骗局是一种欺骗性的投资骗局,承诺高回报率,对投资者来说风险很小。
    
中本聪最初发布的比特币白皮书,大概有八页那么长,相当有技术性,但消化起来也不是特别困难。其中没有提到任何关于比特币“投资”的回报,它甚至没有提到比特币的价格。
  
它简单地解决了计算机科学中最古老的问题之一,即拜占庭将军的问题,从而确立了它在这个过程中的价值。比特币的价值主张从来都不是利润驱动,在最初的几年里持有比特币被认为是“正当的”。
  
比特币绝对不是一项机密,它是世界上最开放的技术之一。它是开源的,任何人都可以查看代码,任何人都可以为代码做出贡献,任何人都可以自动运行软件并参与到网络中。所有比特币交易的 历史 ,对世界上任何一个人来说都是可见的。
  
比特币不产生回报,但比特币的价格与稀缺性,导致了其与人们的需求直接相关,这种需求不是强加给别人的。比特币的最大支持者也不会四处询问你有多少钱,然后蛊惑你去投资更多的比特币。加入比特币网络的新用户,不会用新资金去为老用户提供资金。可以毫不客气地说,宣传比特币是庞氏骗局的人,大都懒于去认真研究理解比特币的真正价值。
  
区块链是什么:
  
区块链是一个信息技术领域的术语。从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。基于这些特征,区块链技术奠定了坚实的“信任”基础,创造了可靠的“合作”机制,具有广阔的运用。
  
区块链起源于比特币,2008年11月1日,一位自称中本聪的人发表了《比特币:一种点对点的电子现金系统》一文 ,阐述了基于P2P网络技术、加密技术、时间戳技术、区块链技术等的电子现金系统的构架理念,这标志着比特币的诞生。两个月后理论步入实践,2009年1月3日第一个序号为0的创世区块诞生。几天后2009年1月9日出现序号为1的区块,并与序号为0的创世区块相连接形成了链,标志着区块链的诞生 。
    
虚拟货币是不是骗局?:

更多交易所入口

一站式注册各大交易所、点击进入加密世界、永不失联,币安Binance/欧易OKX/GATE.IO芝麻开门/Bitget/抹茶MEXC/火币Huobi

点击进入 永不失联

目录[+]