参考教程:北大肖臻老师
记账(挖矿)过程
BlockChain演示
记账(挖矿)就是盘算Nonce(随机数)的过程,让Nonce匹配给定的Hash值,Hash值前面的0越多,则阐明难度越大
- 雷同数据天生的哈希值稳固,差别数据哈希值差别
- 哈希加密算法不可逆,知道数据可以推出哈希值,但知道哈希值无法推出源数据内容(非对称加密)
- /*
- 判断生成的Hash值是否符合难度
- */
- function isValidHashDifficulty(hash, difficulty){
-
-
- for(var i = 0, b = hash.length; i < b; i++){
-
-
- if(hash[i] != '0'){
-
-
- break;
- }
- }
- return i >= difficulty;
- }
- /*
- 通过不断测试Nonce来找到符合条件的Hash值
- */
- let nonce = 0;
- let hash;
- let input;
- let difficulty = 3;
- while(!isValidHashDifficulty(hash, difficulty)){
-
-
- nonce = nonce + 1;
- input = index + previousHash + timestamp + data + nonce;
- hash = CryptoJS.SHA256(input)
- }
复制代码 好比如今有一笔生意业务须要写入区块中,那么当前分布式网络节点就会去盘算“生意业务数据+一些其他数据+Nonce”的哈希值,若算出的哈希值(00asdjkh213jk)不匹配难度(假设难度为3),那么让Nonce加1,继承盘算哈希值,直到哈希值满意难度为止,好比000sajdh213hiuh
硬分叉 & 软分叉
共识算法
PoW(Proof of Work)
工作量证明,GHOST协议
PoS(Proof of Stake)
股权证明,Casper协议
Comparison Between BTC & ETH
出块时间
- BTC的出块时间约莫是10分钟产生一个新区块
- BTC出块时间慢,生意业务服从低,若利用BTC作为付出工具,则转账的BTC最多大概须要10分钟才华到账(被确认),由于每一笔生意业务都是记载在区块里的,只有当记载该笔生意业务的区块被挖出且被全网节点确认之后才算正当,此时转账才是有用的
- BTC固然出块时间慢,但恰是较长的出块时间包管了BTC体系的稳固性。
- ETH的出块时间约莫是10秒钟产生一个新区块
- ETH出块时间快,生意业务服从高。
- ETH出块时间固然块,但存在肯定程度上的不稳固性。试想两个算力差别的节点A与B(A:10,B:100),若在ETH体系中,当B挖出新区块并广播全网节点时,A大概还未挖出新区块,当B新挖出的区块得到全网确认后继承挖下一个新区块时,A大概才挖出新区块,但此时显然A挖出的新区块就被扬弃了,如许有算力上风的节点会越来越有上风,造成肯定程度的中央化。
生意业务对象
比特币
BitCoin(BTC),非图灵完备
暗码学原理
BTC用到了暗码学中的哈希和署名
哈希(Hash)
三个性子:Collision resistance(防止哈希碰撞)、Hiding(根据哈希无法推出原输入值)、Puzzle Friendly(Difficult to Solve but Easy to verify)
- MD5:不安全,可以人为制造Hash Collision
- SHA-256(Secure Hash Algorithm)
对称加密 & 非对称加密
Symmetrical Encryption & Asymmetric Encryption
- 对称加密:单密钥。通讯双方商定一个共同的密钥,在传输信息时用密钥加密,汲取方收到时再用密钥解密。但密钥的分发过程较繁琐,且轻易被窃听。
- 非对称加密:密钥对(公钥和私钥)。每个通讯节点都拥有一对公钥和私钥,公钥可公开,私钥存于当地。当发送方给某一汲取方发送信息时,用汲取方的公钥对信息举行加密,汲取方收到信息后用自己生存在当地的私钥举行解密。
署名(Signature)
验证生意业务的真实性,便是否由“本人”发出
- 当某节点发起一笔转账生意业务时,用自己的私钥给生意业务署名,而后发布到区块链上等候矿工打包生意业务。当矿工打包生意业务时,需验证这笔生意业务是否简直由该节点发出,以是须要用该节点的公钥去验证这笔生意业务的源头真实性。
数据结构
哈希指针
后一个块的哈希指针指向前一个块,当某个块被窜改时,厥后的全部块都会被改动
Merkle Tree
默克尔树(实在就是把二叉树的指针改成哈希指针)
- Block:Block Header + Block Body
- Block Header
- version
- hash of previous block header
- merkle root hash
- target
- nonce
- Block Body
- 全节点(Full Node):生存整个区块的内容
- 轻节点(Light Node):只生存Block Header
- Merkle Proof
协议
双花攻击
女巫攻击
共识
Consensus
实现
UTXO
Unspent Transaction Output
- 每笔生意业务都需满意Input = Output,以是要知道某一地点的账户余额,只需查询UTXO中,转入该地点的生意业务额总量
- 例子:Coinbase => A(10),A(10) => B(4) + A(6)
- 那么此时UTXO中生存的条目就是“未耗费的输出”,即A(10) => B(4) + A(6),此时对UTXO中的生意业务输出举行查询即可得知A和B地点的余额
Six Confirmation
当前块挖出后收到简直以为One Confirmation,厥后紧跟的一个块挖出后得到的是Two Confirmation,BTC筹划当前块在Six Confirmation后被窜改的大概性才很低(由于大概有恶意节点分叉攻击,恶意构造最长链覆盖主链)
挖矿难度
挖矿:Hash(Block Header) <= Target
- d i f f i c u l t y = d i f f i c u l t y _ 1 _ t a r g e t t a r g e t _ n o w difficulty = \frac{difficulty\_1\_target}{target\_now} difficulty=target_nowdifficulty_1_target
难度调解
2016个区块调一次
- T a r g e t = T a r g e t ∗ A c t u a l T i m e E x p e c t e d T i m e Target = Target * \frac{Actual Time}{Expected Time} Target=Target∗ExpectedT
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |