區(qū)塊鏈技術

定義

BTC密碼學原理

Hash

z = hash(x)

  • 哈希碰撞

    如果x != y晋被,但hash(x) == hash(y) 代表碰撞

  • collision resistance

    如果z = hash(x)铺罢,由于x和z的取值范圍很大朝刊,那么 x != y 可以大概率推出 hash(x) != hash(y) 。

  • hiding
    hash不可逆半等,并且x的取值非常大,無法通過枚舉和算法呐萨,根據(jù)z反推出x

  • Puzzle friendly

    加入過z的范圍是256位的十六進制數(shù)

    要求hash x后的z滿足前200位都是零杀饵,保證z的取值范圍足夠小

    那么礦工只能通過不斷的改變x算hash值,來證明自己的算力

    而無法通過z的取值范圍反推x

    這叫puzzle friendly

簽名

一對公私鑰對谬擦,通過私鑰簽名切距,來代表這筆交易是用戶發(fā)生。

礦工通過公鑰驗證簽名的合法性惨远,如果驗證通過谜悟,則代表交易合法

BTC數(shù)據(jù)結構

Hash pointer

通過數(shù)據(jù)塊的hash值來構成鏈表的指針關聯(lián)话肖,而不是通過內(nèi)存地址來代表指針的值

btc-hash-pointer

通過hash關聯(lián)數(shù)據(jù)塊,可以達到葡幸,礦工很難對中間的某一塊數(shù)據(jù)進行數(shù)據(jù)篡改最筒,因為一旦篡改,會使得hash值改變蔚叨,那么后續(xù)的所有數(shù)據(jù)塊的hash值都會改變床蜘,再加上挖礦的難度非常大,因此篡改數(shù)據(jù)變成了一項幾乎不可能完成的任務

Merkle Tree

btc-markle-tree

區(qū)塊鏈的每個區(qū)塊的數(shù)據(jù)域只保存hash值

把交易組成一顆樹蔑水,通過hash指針關聯(lián)

Merkle proof

交易是放在Markle tree的data塊

全節(jié)點保存整個區(qū)塊鏈的數(shù)據(jù)

輕結點只保留區(qū)塊塊頭的信息

發(fā)生交易的數(shù)據(jù)要求證明交易是否已經(jīng)在區(qū)塊鏈上

全節(jié)點會把區(qū)塊鏈中包含交易的Merkle tree路徑上的hash值發(fā)給輕結點

輕結點通過從底到上的運算hash值邢锯,最終得到塊頭的hash值,并比較

來確定交易是否已經(jīng)在鏈上

去中心化

  • 貨幣由誰發(fā)行

    通過挖礦發(fā)行

  • 發(fā)行多少

    每發(fā)布21萬區(qū)塊搀别,區(qū)塊獎勵減半

  • 如何解決double spend問題

    通過hash指針丹擎,指明交易的資金來源

  • 共識機制

    • POW

      相信大部分結點都是好結點

      每個節(jié)點都去找尋nonce

      找到了nonce則獲得記賬權,并發(fā)布區(qū)塊

      其他大部分結點去驗證區(qū)塊的合法性歇父,并添加到區(qū)塊鏈中國

      繼續(xù)挖礦

      • 問題:

        • 合法區(qū)塊被拒絕

          由于大部分結點都會接收合法區(qū)塊蒂培,并繼續(xù)往下挖

          這會讓這個區(qū)塊存在于最長合法鏈

        • 分叉攻擊

          黑客可以通過分叉攻擊,把花出去的錢回滾掉

          除非黑客擁有超過半數(shù)以上的算力

          否則庶骄,這個新的分叉不會成為最長合法鏈

  • 激勵機制

    • 挖出區(qū)塊的結點獲得出塊獎勵
    • 引入交易費

UTXO

unspend transaction output

區(qū)塊中的交易的每一塊資金毁渗,要么不花,要么全部花出

UTXO記錄哪些區(qū)塊是還沒有花出去的

維護這樣一個數(shù)據(jù)結構单刁,是為何快速判斷一個交易的合法性和避免double spend 攻擊

網(wǎng)絡

  • 一個結點要加入網(wǎng)絡灸异,先要知道一個種子結點
  • 通過種子結點告知自己網(wǎng)絡中有哪些結點
  • 結點之間通過TCP協(xié)議傳輸數(shù)據(jù)
  • 結點需要離開不需要任何操作,其他結點一定時間沒有收到離開結點的消息羔飞,則會自動把它剔除
  • 消息通過隨機選擇鄰居結點發(fā)送
  • 如果結點發(fā)現(xiàn)消息處理過了肺樟,則不會再往外發(fā)送
  • 如果同一來源金額有兩個消費,則先到優(yōu)先
  • 區(qū)塊大小限制1M以內(nèi)

BTC挖礦難度

通過計算交易塊的SHA-256是否達到nonce的要求

H(block header) <= target

target越小逻淌,難度越大

出塊時間要維持在10min

通過以下公式調(diào)整難度

target = target * actual time/expected time

分叉

如果挖礦協(xié)議改變么伯,有可能造成分叉

硬分叉

升級的礦工,認可新特性和舊特性卡儒,會挖出一條鏈

沒有升級的礦工田柔,不認可新特性,會挖出另外一條鏈

軟分叉

升級的礦工骨望,認可新特性硬爆,不認可舊特性

沒有升級的礦工認可新特性和舊特性

最終都升級后,它們會合成一條鏈

ETH概述

ETH針對出塊時間擎鸠、共識協(xié)議缀磕、反ASIC芯片的mining puzzle對BTC作出改進,和增加了去中心化的合約

ETH賬號

通過賬號,記錄賬戶金額和計數(shù)器

計數(shù)器用來防止重放攻擊

  • 外部賬號:使用公私鑰來產(chǎn)生袜蚕,存有賬戶余額和計數(shù)器
  • 合約賬號:不通過公私鑰產(chǎn)生糟把,存有余額,計數(shù)器牲剃、代碼和數(shù)據(jù)

數(shù)據(jù)會發(fā)生變化遣疯,但是代碼是不可篡改的

ETH數(shù)據(jù)結構

Patricia tree

eth-tired-tree

Merkle Patricia tree

根結點保存整棵樹的hash值

用于Merkle proof

Modified Patricia tree

引入版本控制,每次修改一小部分的賬號颠黎,形成新的Patricia tree

ETH賬號樹

通過Modified Patricia tree存儲

ETH交易樹和收據(jù)樹

通過Merkel Patricia tree存儲

通過bloom過濾器另锋,定位收據(jù)的位置,用于更復雜的查詢功能

ETH GHOST協(xié)議

ETH出塊降低到15s狭归,BTC出塊10min夭坪,這導致很多礦工在相近時間挖出區(qū)塊

為了補償?shù)貌坏匠鰤K獎勵的其他成功挖出區(qū)塊的礦工,適當?shù)慕o出補償

提出了GHOST協(xié)議

eth-ghost
  • 每個挖出的區(qū)塊可以最多包含兩個叔父區(qū)塊过椎,并得到額外的1/32的出塊獎勵
  • 叔父根據(jù)隔了多少代遞減得到獎勵室梅,最多個7代
  • 只認第一個叔父區(qū)塊

反ASIC挖礦算法

基本版

eth-gen-memort

ASIC芯片擅長計算hash

但如果加入訪問內(nèi)存,則可以抑制計算能力

通過引入一個巨大無比的內(nèi)存數(shù)組

以一個seed疚宇,一個接一個的計算hash值

每次進行hash時亡鼠,必須隨機的包含三個hash值

這強迫挖礦時,必須多次訪問內(nèi)存

問題:Merkle proof時敷待,輕結點無法存入這么大的內(nèi)存

改進版

eth-asic

維護一個16M的隨機數(shù)組

通過16M的隨機數(shù)據(jù)hash 256次间涵,得到1G的數(shù)據(jù)

挖礦時需要多次訪問1G的數(shù)組

權益證明POS

通過所占權益,進行投票榜揖,達成共識

預挖礦

給ETH開發(fā)者預留一部分貨幣勾哩,等數(shù)據(jù)貨幣成熟后,則可以有錢起來

挖礦難度

eth-diffculty

PH為父區(qū)塊難度

x是調(diào)整難度系數(shù)

難度炸彈是一個指數(shù)函數(shù)举哟,用于限制POW思劳,發(fā)展POS

難度炸彈如果塊數(shù)大于三千萬,則會成為指數(shù)增長

歷史上妨猩,ETH回退了一次難度系數(shù)

智能合約

通過代碼實現(xiàn)合約

代碼在區(qū)塊鏈上一旦發(fā)布不可篡改

寫代碼時要注意重入攻擊和數(shù)字計算溢出問題

外部賬號通過調(diào)用智能合約代碼潜叛,實現(xiàn)智能合約的買入和賣出

ref:
https://blog.nowcoder.net/n/30cbdb37108b4d93b3a5a93b8226ae31

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
禁止轉載,如需轉載請通過簡信或評論聯(lián)系作者壶硅。
  • 序言:七十年代末威兜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子庐椒,更是在濱河造成了極大的恐慌牡属,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扼睬,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機窗宇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門措伐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人军俊,你說我怎么就攤上這事侥加。” “怎么了粪躬?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵担败,是天一觀的道長。 經(jīng)常有香客問我镰官,道長提前,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任泳唠,我火速辦了婚禮狈网,結果婚禮上,老公的妹妹穿的比我還像新娘笨腥。我一直安慰自己拓哺,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布脖母。 她就那樣靜靜地躺著士鸥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谆级。 梳的紋絲不亂的頭發(fā)上烤礁,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音哨苛,去河邊找鬼鸽凶。 笑死,一個胖子當著我的面吹牛建峭,可吹牛的內(nèi)容都是我干的玻侥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼亿蒸,長吁一口氣:“原來是場噩夢啊……” “哼凑兰!你這毒婦竟也來了?” 一聲冷哼從身側響起边锁,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤姑食,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后茅坛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體音半,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡则拷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了曹鸠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煌茬。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖彻桃,靈堂內(nèi)的尸體忽然破棺而出坛善,到底是詐尸還是另有隱情,我是刑警寧澤邻眷,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布眠屎,位于F島的核電站,受9級特大地震影響肆饶,放射性物質(zhì)發(fā)生泄漏改衩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一抖拴、第九天 我趴在偏房一處隱蔽的房頂上張望燎字。 院中可真熱鬧,春花似錦阿宅、人聲如沸候衍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛉鹿。三九已至,卻和暖如春往湿,著一層夾襖步出監(jiān)牢的瞬間妖异,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工领追, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留他膳,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓绒窑,卻偏偏與公主長得像棕孙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子些膨,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容