关于比特币的一些疑问，比如挖矿块链等等？
很显然你查阅的资料完全不靠谱。 1，挖矿不是把CPU贡献出来合并在网络上所有节点的交易单。打包交易是非常非常容易的事情，根本用不着那么多CPU。那么烧CPU或者说挖矿的本质是干吗呢？简单说就是竞争一个打包交易并且上传到区块链的权利，而烧CPU比谁算力高是在所有人身份都是不明的情况下最公平的方法。飞行棋你玩过吧，扔出6的人可以走出大本营对吧，挖矿性质和这个差不多，只不过要求扔100个骰子扔出100个6。结果不是某个中心节点会验证，而是谁先扔出来，把扔出来的东西做个视屏发到网上说“你们看我扔出来了”，大家验证过看没错你是扔出来了，你运气比较好，这个主席就你当吧，于是你可以上传新的区块，加入你打包的交易，然后获得一笔费用奖励你扔了那么多次骰子。 从原理上说的话，是所有的人算哈希函数，哈希函数Y=H(X)有个性质是你输入Y永远猜不到X是啥。然后大家规定说我们只认Y小于某个值的区块，于是每个人都开始用穷举法试各种X，直到试出一个X把这个放到他们区块开头。然后，哈希函数还有个性质是虽然通过Y猜X无限难，但是有了X求Y非常快，于是大家可以用哈希函数去验证他的结果，如果对了就接受，就这么简单。 2，理论上来讲，所有记录保存在所有节点那里，你没听错，就是从第一笔交易到现在的交易，到现在为止超过100G的记录，理论上来讲应该保存在所有节点。 至于每10分钟一个区块，是指之前扔骰子的难度设置为大概全网的人都一起扔的话，差不多每十分钟会有一个走狗屎运的家伙扔到。这个难度会根据区块产生的速度每几个月调整一次，但是尽量控制在大约10分钟有人算出来一个。 3，数据存在在所有节点。节点和节点之间不会有冲突吗？这个问题问得很好——的确会，但是不大。 首先，区块链里每个区块是用哈希函数链接起来的，简单来说，就是任何一丁点改变都会导致哈希校验通不过，然后后面的都要改，这是超出任何人计算能力的。所以，100多G的数据里，除了最新的几个区块可能会有区别，其他的都是一样的，因为有一点差别就会导致你要重写后面的所有区块，否则通不过校验。 其次，虽然每个节点在最新的区块判断上会有差别，但是有个原则是，每个人都只接受最长的链。也就是说，如果有节点之间存在不一致，那么也最多是在最后几个区块不一致，而且，通常是网络延迟造成的，如果这些链放在一起，只有最长的链是有效的。 当然，网络里也可能有不止一个同样是最长的链存在，这个叫分叉，假设两条链前面的区块都一样，就最后3块不一样，这个就是深度3的分叉。这种情况是可能出现的，这是因为之前我说的那个扔骰子的游戏没有一个中心节点来判定谁获胜了——运气好投出100个6的人要自己把证据广播出去，而如果两个人同时丢出来了，由于网络延迟有的人听到了这个有的人听到的那个，这就可能导致分叉。这并没有关系，大家继续往他们认为是最长链的那条上加区块，如果这次又有两个人同时投出来，就再分叉。这个分叉不会无限继续下去，因为同时扔出来的概率会越来越低。 这就是一般比特币的交易要延迟一小时才能确认，因为交易所在的区块如果刚刚放在链上，很可能由于这种分叉而被丢弃。但是如果等一小时它后面加了6个区块了它还在链上，那么它就已经被所有的节点接收了无法修改了。 说了一大堆，其实最简单的回答应该是—— 数据会不一致，会有冲突。 但是，排除最新的6个区块，所有的节点拥有的数据是一致没有冲突的。