比特币发布之后,人们才认识到有区块链,所以要先了解比特币。
比特币的设计初衷以及解决的问题是:在一个互不信任且匿名的网络环境中,通过非对称加密、哈希函数、签名等一系列手段解决人与人之间的信任问题。
对称加密:加密和解密是同一个密钥
非对称加密:两个密钥,一个公开一个私有,公钥和私钥。
注册成为比特币用户时,系统会随机生成一个私钥,私钥会生成一个公钥,公钥又会生成一个地址,私钥是使用相应地址上的比特币的唯一标识,一旦丢失,账户的比特币都无法使用。随机数->私钥->公钥->钱包地址。由公钥得到的是钱包账户,私钥得到的是钱包密码。
对交易进行哈希得到摘要,用私钥对摘要进行签名。签名分2步:1.得到摘要,2私钥+摘要进行签名。
哈希函数程序员都知道,相同的对象进行哈希运算得到的数是一样的,无法回推。
公有链:即任何人可以无任何限制的加入这条区块链并获取其中的所有数据。比特币和以太坊
联盟链:针对某些群体进行有限开放,且加入后所有权限不同,内设专门的记账节点和普通节点等。
私有链:个人或少数群体的本地区块链。
比特币不是一个硬币或者虚拟货币,他指的是一个比特币网络,比特币网络是什么意思,比如火山网络,大家去火山购买云服务,参与到了火山云,是使用它。而比特币是大家参与了挖矿或者参与了比特币的网络,就成为了比特币网络中的一员。那我要是不挖矿了我那些数据呢?
交易:
身处比特币网络的A发出一笔交易请求后(这里的交易请求什么意思?我觉得得学到智能合约那才能明白,此刻先不管,就是一个交易,而比特币网络的作用就是记录这笔交易,记账),会向比特币网络播报,大家会争夺记账权。这个争夺记账权的结果就是将区块记录在区块链上。那区块是什么?区块的结构
merkle根:由区块体的数据两两哈希得出的最后哈希值,一个数据变动都会引起树根哈希的变动,因此可以保证交易信息和数据不被篡改,哈希的特性。
这里是由A对交易信息和数据进行计算,得出merkle。
矿工们争夺的是,随机数与区块头的得出哈希值,得到满足难度的哈希256位,就是挖矿成功。难度指的是前n位是0。
每个假如比特币系统的矿工们不必要保存所有区块体,太大了200G,只要保存区块头和部分区块体。
交易过程:
1.发起者在自己的钱包创建一笔包含一定数量的比特币的交易,进行哈希,生成数字摘要,并用自己的私钥进行加密签名,将交易信息、签名信息广播到比特币网络。其他人只要通过发起者的地址(公钥)就可以校验真实性。“账号abc给账号efg转100个比特币”。签名就是密文的意思。
2.矿工收到一条条讯息,验证校验,对”上一个区块的Hash“+"交易清单"+”随机数“进行sha256签名。因为交易记录要同步到全球需要一些时间,挖矿的速度不可以太快,因此比特币有一个”难度系数“
3.挖矿成功后,向所有比特币用户广播这个生成好的取款,其他矿工开始验证,其他矿工必须放下手中的工作进行验证:1.随机数对不对,就是哈希一下很简单。2.父区块是否有效,其实就是自己的最后一个区块,一致就有效。如果自己没有存全部的区块,3.确认交易,
余额检查:追朔法,一笔交易里会说明自己的金额来源。
先将B的签名通过公钥解密,然后再对比交易内容,相同就说明是B发出的,然后再检查10000的真实性。但实际可能需要校验好多比交易。
当验证无误后,就会把这个区块往自己本地存储的区块链上添加,就可以继续挖矿了。后续的父区块的值就是之前的值。
一致性:如何保持用户存储的一致性。挖的慢,如果有2个快的同时,就会创建分支,先暂时根据自己认为对的挖矿,直到下一个区块产生,以最长连为原则,如果还以短 的,那他挖的结果不会被别人认。
双重支付:谁先挖矿成功就哪个生效。