1.非对称加密:公钥与私钥
加密与解密需要两把钥匙,一把公钥和一把私钥,由于加密和解密需要两个不同的秘钥,故称为非对称加密。支付的可靠性,就是依靠非对称加密技术。
2.公钥是通过私钥是可以计算出的,私钥是比特币的主人。
3.私钥的格式
原始私钥是32字节,也就是256位2进制数字,换成16进制就是64位长度。
WIF格式:5开头
WIF-compressed格式:K或L开头
官方推荐以WIF-compressed压缩格式作为私钥。
4.椭圆曲线算法
RSA、ECC......
椭圆曲线算法是不可逆的,很容易向一个方向计算,但是不可以向反方向倒推。
5.BASE64、BASE58Check
Base64就是一种基于64个可打印字符表示二进制数据的方法。
6.比特币地址
比特币地址:是26位至34位数字和字母组成的字符串。
私钥==>椭圆曲线==>公钥==>SHA256==>RIPEMD160==>BASE58check==>比特币地址
7.私钥、公钥、比特币地址的关系
private-key===>public-key===>bitcoin address
8.数字签名ECDSA
数字摘要+非对称加密
9.UTXO(unspend transaction outputs)
钱包也有数据库:leveldb
UTXO的最小值为聪,是不可分割的价值单位,一个UTXO只能在一次交易中作为整体被消耗。
未被交易的交易索引:检查inputs中的交易的txn是否在未被支付交易索引中即可。
UTXO1 UTXO2钱包会自动选择unspend transaction outputs
10.流程
发起比特币转账,将交易广播到全网;最近的节点,会进行验证,如果交易信息没有问题,进行全网广播。
挖矿节点接到交易后先将其放进入本地内存池,进行一些基本验证,判断是否属于UTXO。如果验证通过,则将该笔交易放入未确认交易池,等待被打包;如果未通过验证,则被认为是无效交易,直接放弃,不会被打包。
未确认交易池是所有交易数据的集合,这些交易已经被比特币节点验证,但未被确认。
挖矿节点在比拼算力的同时,还需要及时验证每笔交易,更新自己的“未确认交易池”。矿工挖矿前,将从“未确认交易池”中抽取“未确认交易”进行打包。
有时交易不能被及时打包,是因为“未确认交易池”中交易太多,每个区块能记录交易数有限,这就造成了区块链拥堵。
比特币交易验证
比特币协议规定,申报交易时,除了交易金额,转出比特币的一方还必须提供以下数据。
1.上一笔交易的HASH
2.本次交易双方的地址
3.支付方的公钥
4.支付方的私钥生成的数字签名
验证交易是否属实
1.找到上一笔交易,确认支付方的比特币来源
2.算出支付方的公钥的指纹,确认与支付方的地址一致,从而保证公钥属实。【公钥与地址】
3.使用公钥去解开数字签名,保证签名属实,私钥属实。
经过以上三步,就可以认定这笔交易是真实的。
网友评论