比特币以及区块链是为了创建一种去中心化的金融机制,通过哈希运算达成共识

重要的数据结构:

type block ={
	hash:string  //这个区块的唯一hash标识符,从这个区块中的所有数据计算哈希值而来
	phash:string  //这个区块的上一个区块hash值
	time:number  //创建这个区块的时间戳
	bits:number  //让这个区块有效的最大的hash数值,当计算出来的hash值小于这个数,就算这个区块有效
	nonce:numver  //随机数,仅需修改这个随机数,就能让计算的hash值产生剧烈变化,从而随机碰撞出小于bit的有效hash值
}

其中bit的数值会随着全网算力的增加而减少,为什么呢?因为随着算力增加,计算出符合要求hash值的速度越快,而中本聪设计之时就规定了要让挖出这个有效hash值的时间在十分钟左右。因此,算力增加,需要让计算的难度增加才能让挖出一个区块的时间保持在十分钟,所以要让挖矿的难度增加,所以仅需让bit减小,就能让碰撞到有效hash值的概率减小,也就能让时间保持在十分钟左右了。

每条链就是数据结构中链条的节点,通过phash连接上一个节点,hash让下一个节点连接。上面的这些数据是较为重要的数据信息,除了这些,还可能包括交易数据等等,让这个区块中承载这些数据,一旦这个区块有效,就会发送到区块链的主链当中,用户就能从主链中获取数据,拿到这个有效的区块,自行计算哈希值是否有效,如果有效,自己的链也会承认这个区块。这样每个人都能拿到每个区块中的所有交易记录,并且确保不会被篡改

怎么保证不会被篡改的呢?除了各个用户的电脑运行的比特币程序计算这个哈希值的有效性以外,各个用户都会采用区块链网络中节点最多的链,也就被称为主链,一旦你篡改链上的数据,别人通过运算得知你的区块链并不有效,就不会在你的这条链上添加区块,因此你的这条分支的链就不会增加,而主链保证了所有链上的区块都是有效的,才能源源不断的添加在这个链上,并成为了最长的一条链,因此程序才会承认最长的那条链为真正有效的链

但如果你的算力足够强大,超过整个区块链算力的一半,这样自行快速挖出比主链长的区块链,并在超过之前修改区块中的数据,也能达成让你的这条链成为主链,并被大家承认的目的,这样的攻击被称为51%攻击,只不过是理论,现实达到还是很困难的

reference

https://www.youtube.com/watch?v=5hgdekVZb3A