想尝试一下,用比较通俗的语言能不能将比特币这个系统的运行说明白。
先用一个比喻的说法,比特币是一个公开的,分布式的,不可篡改的记账系统。
具体一点就是说这个系统由能成为节点的计算机组成的。每个计算机都有一套账本,所谓的账本就是记账系统,它这个记账系统是由一个一个区块连接组成的,区块就是包含交易记录的一个数据结构。
ok,这是常见的一种比喻的说法。我们来说说实际的到底是什么样子?,首先这个所谓的系统就是,一套软件,这台计算机装了那台计算机装了多台计算机都装了,然后互相之间联网,就组成了这套系统。
那这套系统是怎么运行的呢?
我们先说一个简版,把大概的内容概括一下,在这个系统之中,如果各个节点(计算机)之间进行转账,那就发生各种各样的交易,每十分钟,大家就记录这些交易,那么因为每个人记的不一定相同,要维护这个账本的统一性,所以要指定以某一个人的记录为准,那怎么确定以谁为准呢?这里面系统就会有一个哈希值,让大家计算,谁最先计算出来这个哈希值的节点就有这个记账权,他记的帐就会经过大家认认证后,最后就变成大家公认的账本,大家把这个帐本接到大家各自电脑里那个成串儿的主账本上,而最先算出这个哈希值的记账的节点,会得到一定数量比特币的奖励。
ok,这是概括的描述,接下来我们要比较详细的描述他怎么运行,但在描述之前要,了解两个密码学的概念。
一是公钥和私钥 二是哈希运算。
公钥和私钥展现出来就是一大串代码,看着像乱码,实际上起到密码的作用,一般讲私钥是系统随机生成的,高手也可以自己设制,然后私钥推导出公钥,公钥经过一系列的计算就能变成你的地址。 公钥和私钥是互相唯一匹配的,公钥可以把原文加密就变成密文,然后用私钥可以解开,私钥也可以将原文加密,然后用公钥解开。
哈希运算可实现一种效果,就是把一串数据在经过哈希运算后,它都会变成固定长度的一段代码。在比特币系统中都是把数据转换为哈希值,但是是不管多长的数据,都会变成等长的哈希值。输入值变化那么哈希值就一定变化,由哈希值推导不出输入值。哈希值前面的零越多代表它越小,那么出现这个哈希值的结果的概率就越小。
ok再回到整个系统,我们详细的讲讲他是怎么运作的,首先讲在这个系统中,我们发生各种各样的转账和交易,这里面转的是比特币吗?实际上在整个比特币系统里没叫比特币的东西,只有一串代码utxo 未花费交易输出,它就是锁定脚本加上一个数值,该数值就是比特币的值,而锁定脚本是由收款人的公钥构成。
那所谓的转账或者交易过程是具体是什么呢?实际上就是,一个utxo里面公钥对应的私钥的持有者用私钥把utxo锁定脚本解开,然后要把这个数字给谁的话就是用接收方的公钥作为锁定脚本再把这个数值锁定。在这种情况下,只有接收方用私钥能解锁这个数值。这过程就是一个交易。
在比特币系统里,时时刻刻发生这样的交易,比特币系统规定每十分钟记一次帐,具体记账怎么运行的?如果你是一个全节点,那你可以在交易池里,在众多交易数据里选出一些交易让它的大小小于1m,这是目前一个区块规定的上限。这些选出的交易就是你要记的账,然后你要构建这个区块的区块头,包括版本号,上一个区块的哈希(所以才成为链,因为它每个区块上下都有联系),merkle tree,时间戳 难度目标值,还有nonce 难度目标值是系统给出的,那所谓算力竞争争夺,记账权具体要做什么呢?就是要算nonce值 ,nonce就是一个随机数,它要满足一个条件,就是把nonce和区块头其他数据一起进行哈希,得出的哈希值要小于等于难度目标值。难度目标值是一个64位的字符串儿,目前的难度目标值已经达到了前18位都是零,据说要进行亿万次的计算才能有可能出现比18个零还要小的结果。 所以各个节点都展开竞争开始算这个数,谁第一个算出来,然后该节点就向全网广播,让其他节点知道他已经算出来了,其他节点的会验算他算的对不对,检查他这个区块里面的交易是不是真的,如果各种检验都没问题,那其它节点就把这个区块放到自己电脑里面的账本里,就把它确认为主链。而算出nonce那个节点会得到系统的奖励即获得一定数量的比特币。而与此同时,比特币系统里的交易时刻在进行者,然后其他节点也随时打包其他交易,准备争夺下一个区块的记账权。
这大体上就是比特币系统运行的一个真实过程。
网友评论