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