区块链-1 了解
**區塊鏈概念**</br>
區塊鏈技術用區塊去記錄流水賬。(比特幣的第一個區塊--創世區塊)
支付寶的相護寶是用了螞蟻的區塊鏈技術。
**區塊鏈的優點**</br>
去中心化,更安全
**分布式系統**</br>
通過互聯網來維護一個公共的賬本,由兩個以上節點組成一個整體,節點獨立,節點能相互通信。
?
區塊鏈所有節點如何達成共識?通過算法:</br>
共識算法:工作量證明(PoW)--代理權益證明(DPoS)--PBFT(拜占庭容錯)</br>
行業組織:比特幣基金會--以太坊基金會--block.one(EOS)--Hyperledger(Linux基金會)(專注企業的應用)
https://www.hyperledger.org/about/members ?可以看到很多大企業加入
**主流幣區塊瀏覽器**</br>
btc.com
etherscan.io
eosx.io
**如何驗證交易雙方**</br>
私鑰---只有發起人知道</br>
公鑰---用私鑰運算得出,單向加密,無法解密</br>
加密計算的在線網站:1024tools.com/hash</br>
交易簽名:跟手寫簽名一樣,“數字簽名”用于提供交易真實的證明。不同的是“數字簽名”對每一筆交易都是唯一的。</br>
**錢包**</br>
生成鑰匙對、賬戶名;查看余額、轉賬;使用去中心化應用
**如何發送和記錄交易**</br>
轉賬信息+私鑰簽名進行廣播式的發送,快速傳遍全網,各個節點拿公鑰進行核對驗證。
驗證后存儲到分布式賬本中。
**驗證交易**</br>
沒有中心機構,由誰來驗證交易;礦工:專門用來驗證交易并維護賬本的節點。</br>
礦工把交易分組成一個區塊
**新區塊決出**</br>
求解新區塊方法:工作量證明(Proof of Work),PoW是解決一個特定的數字問題,費時費力工作量大,但別人容易驗證。</br>
*PoW*三要素:
隨機數(nonce):一個隨機數字,用于參與哈希運算,直到哈希值滿足前幾位是0,這個隨機數就可以確定了。
哈希(hash):一個固定長度的文本,是哈希運算的結果。
交易(Tx):真實的轉賬信息。
**挖礦的回報**
一個比特幣新區塊獎勵12.5個BTC。
**比特幣的發行**新比特幣被發送到采礦成功的礦工(Coinbase)。總共2100萬枚。</br>
**緩釋機制**網絡自動調整難度,區塊哈希的0位數增加,每21萬個區塊,獎勵減半。</br>
**區塊的實現**
```
class Block{
? ? var index=0
? ? var timeStamp=Date()
? ? Var preHash=""
? ? var nonce=0
? ? var hash=""
? ? var key:String{
? ? ? ? get{
? ? ? ? ? ? return "\(self.index)\(self.timeStamp)\(self.preHash)\(self.nonce)"
? ? ? ? }
? ? } ?
}
```
Hash的算法選擇有很多種</br>
比如SHA1算法
```
extesnsion String{
? ? function sha1()->String{
? ? ? ? let task=Process()
? ? ? ? task.launchPath="/usr/bin/shasum"
? ? ? ? task.arguments=[]
? ? ? ? let inputPipe=Pipe()
? ? ? ? .....
? ? }
}
```
?
**區塊鏈結構**</br>
區塊的容器(按區塊高度排列)</br>
每一個區塊包含上一個區塊的哈希</br>
每一個區塊哈希滿足前幾位是0(網絡難度自動調整)</br>
創世區塊的哈希為0</br>
```
區塊鏈
class Blockchain{
? ? var blocks=[Block]()
? ? init(_genesis:Block){
? ?
? ? }
? ? func add(block:Block){
? ? ? ? if blocks.isEmpty{
? ? ? ? ? ? block.preHash="0"
? ? ? ? ? ? 本區塊的哈希計算
? ? ? ? }else{
? ? ? ? ? ? block.preHash=blocks.last!.hash
? ? ? ? ? ? block.index=blocks.count
? ? ? ? ? ? //本區塊的哈希計算
? ? ? ? }
? ? ? ? blocks.append(block)
? ? ? ? print("完成添加新區塊!")
? ? }
? ? func genHash(for block:Block)->String{
? ? ? ? var hash=block.key.sha1()
? ? ? ? //算出哈希,第一位是0,如果沒算出來,就把隨機數遞增
? ? ? ? while !hash.hasPrefix("0"){
? ? ? ? ? ? block.nonce+=1
? ? ? ? ? ? hash=block.key.sha1()
? ? ? ? }
? ? ? ? return hash;
}
}
let block1=Block()
let blockchain=Blockchain(block1)
```
**同時挖到比特幣算誰的**</br>
同一時間挖到同一個區塊的可能性是存在的。每個節點收到新區塊的時間不一樣,可以產生分支,在經歷過多次分治后,切換到最長的那條。
比特幣一般是等6個新區塊后,就穩定下來了。
短分支中的交易被退回到”待確認交易池“,等待稍后處理。
*偽造新區塊發布*很容易被驗證,不正確的哈希會被忽略。
*更改區塊中的交易*,會導致整體區塊哈希值變化,要想這個區塊被網絡承認,必須重新計算。
由于后續區塊包含前一個區塊的哈希,以此類推,后續所有的都要重新計算。---51%算力攻擊
**比特幣如何匿名**
*天生匿名性*由于交易雙方只有公鑰公開,不需要任何個人或組織信息。
但公鑰就是化名,因為賬本公開,可輕松找到一個公鑰的交易歷史。仔細分析這些交易元數據,依然可以追蹤相關資金的使用情況。
?
使用密碼學技術創建一個安全的賬本,讓交易無須通過第三方進行。</br>
加密貨幣的使用遠比法幣簡單,通過創造一種加密貨幣,代表任何資產,比如代表一美元,代表一桶石油等等。從而實現一個全球化的、實時的、可靠的、超低運行費用、而且可以匿名的交易系統。
降低對中心化的依賴。
總結
- 上一篇: 没有期刊申请清华博士_清华大学不再硬性要
- 下一篇: 计算机网络 高层实验,清华大学计算机网络