关于比特币的理解

  1. 比特币,bitcoin

      虚拟货币,就如QQ币,可以在网上流转,比特币本身并无任何价值,就如发行的纸币。

      比特币就好比一串数字,这串数字很特殊,你拿到了这串数据,就如拿到了纸币  但是比特币的防伪能力更强,比特币的防伪就是数据加密算法,实现的基本方式就是区块链。

      

      你可以在市场上用N元购买一个比特币,然后转移(支付)给你的供应商,然后供应商获得比特币后可以去市场上兑换,他可能获得N元,也可能获得N+1元或更多,或者更少。这取决于市场

      对货币的需求量,如果大家都不愿意使用比特币,那么它就没了流通的用途,也就是一文不值。 如果使用比特币的人很多,那么货币供不应求,货币增值,就如人民币的增值。

      

      为了稳定汇率,央行会发行更多货币,保证货币不会升值,或者收紧货币发行量,让货币升值。      但是,比特币的产生最开始就通过算法限制了最多产生2100万枚比特币,因此比特币的货币 量是固定的,但是汇率是变化的,因此比特币的升值可能很快,也可能因为流通终止而一文不值,   那么是否可以修改算法,产生更多的比特币来满足市场需求呢?技术上是可以实现的,但是市场是不容许的,正因为大家认可这个比特币的公平性,才保证了货币的价值。如果可以由中央机构随意更改货币的发行,那么比特币就如普通由中央控制发行的货币,就失去了世界流通的价值。


       比特币的一些概念:

       账本、区块、链增长、完全节点、矿池、矿工、钱包、轻钱包、私钥、公钥、数字签名、哈希算法。

      

  1. 技术原理

      首先,有一个中本村的人,设计了一个算法,建了一个系统,一个开源项目。在网络节点(电脑)之间的支付过程,会通知网络中所有的节点(电脑)。为什么会在网络节点之间有支付呢,就如你要通过网络转1000元给你的好友,以前你必须通过银行进行划转交易,后来出来了电子钱包,注意这个钱包不是在银行的,而是在一个虚拟网络中记录了一笔,到底这个钱在哪呢,并不重要了,只要通过网络轻轻一划,那么对方收到了一个信息后,就可以通过这个信息去提取现金(目前是通过银行入帐后再提取)。

       如果我们建立这样一个网络,如果某个人要向网络中另一个人支付一笔钱,只是在网络中记录一笔,而不需要进行实际的货币交易,那么当收款人收到这笔钱时也就只是一个挂帐,但是他可以用来支付给另一个人,只要另一个人愿意接收,就如信用证的背书。这样这笔虚拟的钱就可以在这个网络中流转开来,这就是货币的流通。


       那么谁拥有最先的货币呢,这就是比特币首先要解决的问题,比特币怎么来。在网络建立之初,谁也没有货币,但是作为发起人,可以向另一个网络节点发起一笔支付。这个系统就开始启动,算法开始运作。

       比特币的机制就是一种协议,到底有多合理,等待未来的验证。比特币只在这个网络系统中流通,因此比特币的产生也来源于这个系统,你不可能独立于网络之外产生比特币。

       当系统中有一笔交易发生时,发起者会向所有节点广播(P2P)技术,告诉所有人,我向某某某支付了一笔钱(N比特币),那么所有人就开始在自己的账本上记上一笔。

       这里有个问题,就是节点怎么知道其他所有节点的存在,这还是需要一个“中心服务器”,这个服务器负责记录登录到本网络系统中的所有客户端。客户端一登录,就会下载这个清单到本地。

       所谓“广播”,就是采用P2P技术,直接向所以节点发送交易信息包。这个信息包就一个UDP大小。因为不需要经过中心服务器转发,因此中心服务器的负载并不大,其实广播可能并不是直接P2P方式发送给所有节点,可能只发送一部分,而对于节点,会将收到的信息包转发出去,这就是节点的路由功能,数据包会很快就如流水一样遍历所以节点。

       

       那么为什么要广播交易信息包呢?自己做个支付,为什么还要通知所有人呢,这就是比特币设计的另一个巧妙之处。以往的电子货币无法独立流通,必须由中央控制,因为电子货币的可复制性太强,你可以同时向两个人支付同一个货币,而对方并不清楚这个货币已经支付给了另一个人。采用中央控制,当然可以很容易解决,因为只有通过中央系统才能支付,那么你支付给了这个人,再支付给另一个人时,中央系统就可以发现。但是比特币的设计目标就是要去中心化,就是为了防止某个中央控制着货币的流通,控制货币的发行。

     比特币并不记录比特币凭证本身,而是记录交易过程,当你收到20个比特币,然后支出了15个比特币时,那么系统通过对以往所有的交易进行核算,发现你还有5个比特币。你无法篡改以往的交易记录,因此也就没法凭空增加比特币。

     这里要解决两个问题:

     1)所有以往的交易记录真实性问题。

     2)目前正在发生的交易的真实性问题。

如果黑客可以修改以往的交易记录,那么比特币也就可以凭空制造出来。

如果支付人同时向网络上的另两个人支付仅有的1比特,那么哪笔应该是有效的呢?


所有交易的真实性的保证:采用冗余存储方式,就是网络上的所有节点都保存一个账本,用来记录网络上过往发生的所有交易记录。每发生一笔,就通知所有人记录一笔。

那谁来保证这些账本的一致性呢,就是可能有些节点收到了错误的数据,那么记录也就产生了错误,那么怎么判断谁的账本是最正确的,还有就是如果能确定哪个是最正确的,其他节点怎么保持与这个节点数据一致呢。

这里引入了一个概念“区块链”,

区块:就是一个数据块,就如一个文件。目前设计大约是网络中每10分钟发生的比特币交易记录打包成一个数据包,就是一个数据块,叫区块。

为什么是按照数据块来管理账本呢?我们可以想象,对于过往的交易,如果确定已经正确发生了,那么这些数据就永远不会更改,而且所有的节点中存储的这些账本应该是一致的。那么我们就没有必要每次去验证过往的交易记录是否正确,而只是要把这些账本备份并锁好。怎么锁定呢,这里就引入了“指纹算法”概念:

        对一个数据包进行MD5或SHA1等哈希算法获得一个128位或256位的数据,这个数据就是这个数据包的特征,就如我们的身份证,是唯一的。如果有人更改了这个数据包,哪怕是1bit,重新进行MD5或SHA1算法后获得的哈希码,就会不一样。所以我们只要重新计算一次,就知道这个数据包是否被人更改过。现在网上发布程序也通常采用这种方法,保证发布的程序没有被黑客更改过。如果有人修改了数据包,并且更改了MD5或SHA1码,那么你怎么确定这个数据包是否被更改过呢?这里就引入了“非对称加密算法”,现在最常用的通常就基于RSA加密方法,RSA分私钥和公钥,私钥是发布数据包的作者所拥有的,不对外公开,绝对保密。公钥是对外公开的,谁都可以获取到。当作者发布一个数据包时,先通过RSA私钥加密数据包,然后当我们拿到数据包后,可以用公钥解密还原数据包。这里注意的是私钥加密后,只有对应的公钥才能解密。如果不是该作者发布的数据包,活着数据包被更改,那么用这个公钥解密后获得的数据也必然不正确。这就保证了数据包是从作者的原始数据包,期间肯定没有被黑客更改过。


    最开始,往上没有发生交易,那么所有节点都在等待交易的发生。当有一个节点发出交易通知,那么所有节点都收到通知,然后将交易记录到数据包中,当达到规定时间(如10分钟),那么所有节点(矿工)开始对数据包进行计算,这就是对历史交易数据进行封存和验证的过程。封存是采用如上的对10分钟以来产生的交易记录打包成数据包,并进行哈希算法获得一个封印的MD5码或SHA1码。当然期间还有需要获取随机数来生成一个规定的哈希码(如获得的哈希码前面应该为多少个0,类似0000000012345678)。

     矿工:就是对交易进行验证的网络节点,因为比特币的挖矿程序是已经设定了的,它是由程序猿一开始就编写了规则的,所以矿工计算机就不断地获取随机数,来凑一个合适的SHA1码,要凑这个哈希码,那是非常难的,所以很多人用了大量的GPU来进行大量的计算。谁算的快,最先找到这个合适的,那么谁就赢了,就是挖到了矿,系统就会奖励这个矿工N个比特币。为什么要奖励这些计算机呢,这纯粹就是为了保证系统的运行,如果谁也不对数据的验证负责,那么整个比特币网络系统就是无效的。

    矿工激励机制,正是驱动比特币网络正常运行的核心保障。

    最先算出合适的哈希码的矿工,会向全网广播自己的结果,所以矿工不仅要计算速度快,而且网速也要非常快的。当其他节点(矿工)收到信息后,可以用这个随机数马上就计算出哈希是否正确,从而验证这个矿工发布的信息是否可靠(注意:获得合适的随机数需要很长时间的计算,但是进行哈希码验证则是很快的)。

    交易记录正确性的保证:因为每次交易已经广播给了所有节点,所有节点在收到第一个矿工验证的随机数和哈希码后,如果验证正确,那么就会向发布者确认信息。自己则将这个数据包(10分钟的交易记录)封存。封存的方法就是将前一个区块的哈希码与本数据包及其指纹保存在一个区块中。假设最先算出的那个矿工记录的交易记录有错误(如黑客行为),那么他发布的信息不是被所有人所接受了么?

     因为交易记录广播给了所有人,那么肯定大部分人接收到的交易记录肯定是正确的。当进行哈希验算时,每个人都可以验证挖矿者发布的信息是否有错。要么是自己收到的有错,要么是挖矿者收到的信息有错,怎么判断谁错呢,这就是程序根据概率规定的,如果超过50%认为这个消息不可靠,那么这个数据包包含的交易肯定有错误。所以为了保证自己的数据的正确性(需要正确才能挖到矿),那么我就会选择正确的数据包。

     因此当你是一个挖矿者,如果其中有一个数据包记录了错误的交易记录,那么所有人都会选择放弃你发布的区块信息。这样只有全部正确的那个链条通常得到大家的拥护,也就增长得越快。

     


   从这个验证过程可以看出,交易的真实性,必须等到后续几个区块已经完成之后才能确定。因此通畅比特币交易的完成必须等60分钟以后。


   从中也可以看出,除非你黑了50%以上的比特币系统的节点,否则你无法改变整个系统向真实性的修正的过程。


你可能感兴趣的:(关于比特币的理解)