BTC网络目前全球有约9400个节点,每有一笔转账发生,都会广播给每个节点。因为各节点各自记账,容易带来数据的不同步(比如顺序不同,缺漏等等)。因此需要定期对各个节点的数据进行同步。BTC采用的方式是每10分钟推举一个节点把过去10分钟的交易打包成一个区块,然后把区块广播给网络中的其它节点,通过这种方式来确保各节点数据的一致性。
这里有一个关键问题,选择哪个节点来打包区块呢?这就涉及到区块链的共识机制(大家需要对推举出来的节点达成共识,如果一部分人认可,一部分人不认可,那就乱套了)。最容易想到的推举方式是抽签,但是,BTC网络是匿名的,黑客容易创建大量的账号来提高被抽到的可能性。抽签不可行的根本原因是它没有门槛,黑客不需要付出代价就能创建大量账号来搞破坏。解决这个问题的核心思想是提升坏人的作恶成本。BTC通过PoW工作量证明(Proof of Work)的方式来解决。顾名思义,如果一个节点想争取打包区块的机会,要付出一定的工作量,并且这种工作量是可以被证明的,是不能弄虚作假的。对于计算机而言,最容易证明的工作量,就是算数学题了。类比于高考通过考试来推举合适的人上大学,BTC通过算数学题来推举出一个合适的节点来负责打包区块。BTC每10分钟就要举行一场考试,每次考试都选出第一名来负责打包和广播区块,从而实现全网不同节点数据的同步。因为这个第一名是靠真本事获得的,全网节点都对这个胜出节点心服口服,从而达成共识。
这道数学题的解题过程是很难的,需要通过不断穷举随机数去尝试,解出来了之后,其他人很容易验证这个解是不是正确的。为了提升穷举随机数的效率,许多硬件厂商选择把算法写到硬件芯片里面,生产出可以高效解题的工具——矿机。矿机需要消耗大量的电力,所以由矿机组成的矿场一般都建设在电费便宜的地方(比如水电站附近)。目前BTC系统每年消耗的电力比丹麦整个国家的耗电量还高。