一、區塊鏈技術入門

第一章

跳過前期區塊鏈介紹等廢話

聲明:我知道hash值是16進制的,所有不應該有g以后的字母,但是我都是亂按鍵盤的,所以請哥哥姐姐們不要在意!

第五課:使用非對稱加密技術確定所有權

一、私鑰

核心:如何在不泄露所有權的情況下證明所有權:非對稱加密

const yourAdress = "2A39cbA2390fDe"
const yourPraviteKey = "GJKGTOUHKJHuiTyihotr"
Hash(Hash(fun("GJKGTOUHKJHuiTyihotr")))   ->  "2A39cbA2390fDe"  #私鑰可以推地址,而地址不能推私鑰

二:交易的處理流程

交易發起者簽名后廣播至相鄰節點→相鄰節點驗證是否有效→繼續廣播

1.對交易簽名簽名

hash('
     {"fromAddress":"2A39cbA2390fDe",
     "toAddress":"3aDF789cdjkLcRf",
     "sum":"0.8btc"
     }'
    )  -> "8aDb23CDEa6"  #對一個交易進行hash運算產生交易摘要

sign("8aDb23CDEa6","GJKGTOUHKJHuiTyihotr") -> "sd7854hctgf9" 
#用私鑰對交易摘要進行簽名,返回簽名信息,該操作通常在離線環境下完成

2.簽名后廣播

簽名后廣播(交易信息 + 簽名信息)至相鄰節點 ,相鄰節點驗證后保存到本地,然后繼續廣播

#驗證過程:
即:verify("sd7854hctgf9","3aDF789cdjkLcRf") -> "8aDb23CDEa6"

if(verify("sd7854hctgf9","3aDF789cdjkLcRf")
   == hash('
     {"fromAddress":"2A39cbA2390fDe",
     "toAddress":"3aDF789cdjkLcRf",
     "sum":"0.8btc"
     }'
    )):
    #寫入賬本,繼續廣播
 else:
    # 啥都不做

三.補充

  1. 關于隱私:地址和自然人的對應關系不是公開的
  2. 關于安全:私鑰只有自己知道

第六課:使用區塊鏈結構高效驗證數據

一、問題

由于數據是分布式存儲的,如果單個節點篡改數據,如何驗證數據真實?

二、方法:驗證賬本的hash值

Hash 函數:Hash(原始信息) = 摘要信息

  • 同樣的原始信息使用同一個哈希函數總能得到同樣的摘要信息
  • 原始信息的微小變動會使摘要信息面目全非
  • 無法從摘要信息逆推出原始信息

三、具體解決方案:

info_need_verify = Hash(Hash(blockFatherId,blockFatherInfo,time),blockId,blockInfo,timenow) = "7875Agc"
#即對上一個區塊的Hash值,當前區塊id,當前區塊的賬本信息,時間戳共4個參數進行hash運算得到hash值
#只需對info_need_verify進行校驗即可,效率賊高!
#由于每個區塊的info_need_verify都含有上一個區塊的信息,可以依次向前驗證

第七課:使用工作量證明進行挖礦

一、記賬的規則

  • 一段時間內只有一個人可以記賬成功
  • 通過解決密碼學難題(pow)競爭獲得唯一記賬權
  • 其他節點復制記賬結果
  • 記賬可以獲得比特幣獎勵,即對記賬的激勵

二、工作量證明

# 普通的記賬過程
Hash(Hash(blockFatherId,blockFatherInfo,time),blockId,blockInfo,timenow) = "7875Agc"
#加入工作量證明的記賬過程
 #通過在Hash函數里面加入隨機數參數增加難度,要求生成前x位為0的Hash值。x越大,難度越高。
 #簡單來說,該過程沒有任何技巧可言,如果希望盡快找到解,除堆積算力外沒有其他方法
const x = 24  #根據目前參與挖礦的算力的大小選擇合適的x設定挖礦難度
Hash(Hash(blockFatherId,blockFatherInfo,time,random()),blockId,blockInfo,timenow,random()) = "0" * x +"495CD6FH"

完成上述過程后:

  1. 收集廣播中還沒有被記錄到賬本的交易
  2. 驗證收集的交易的有消息
  3. 添加一筆"fromAddress" == Null & "toAddress" == yourself 的交易,作為挖礦的獎勵

三、工作量證明的計算量到底有多大

Hash值為16進制的字符串,則1個為0的概率為1/16,如果需要前x位同時為0,概率為(1/16)^x

第八課:共識機制

一、為什么節點要遵守協議?

  • 節點的工作量只有在其他節點認可的時候才是有效的

二、如何解決分叉問題?

在產生一個新的區塊時,第二個節點挖到礦時還沒有覆蓋超過50%的節點

(信息的傳播是需要時間的,離得越近傳播的越快)

  • 每個節點獨立選擇,在選擇是同時將另外一個區塊作為備胎
  • 每個正常的節點都會選擇延長最長鏈,且只認可最長鏈(所以在短的鏈上面繼續挖礦單純浪費算力)

第九課:p2p網絡的節點如何連接

  • 節點會記住連接信息,即連接過一次后,節點會保存這部分連接的信息
  • 節點加入后會向相鄰的節點廣播,相鄰節點會繼續向他們的相鄰節點廣播
  • 節點加入后會向鄰居節點索要其連接信息,即節點之前相互引薦
  • 若節點加入時沒有任何已知節點可以相連,則會連接至種子節點(網絡內保存活躍的節點),然后重復上述3條

第十課:智能合約的革命性

一、背景:

比特幣的智能合約編程是圖靈不完備的,基于比特幣的區塊鏈開發需要下載比特幣的源碼,然后在其中修改加密算法、共識機制等,相對復雜且局限。

二、以太坊:

下一代智能合約和去中心化應用平臺,類似android、ios等

特點:

  • 支持高級語音編程(智能合約)
  • 每15s出一個區塊,更快的區塊確認時間,更多的每秒交易量
  • tulingwanb無總量限制(比特幣的上限是2100萬)

三、智能合約

  • 以太坊上的程序,是代碼和數據(狀態)的集合,是消息驅動的
  • Code is Law,其執行像法律一樣,執行不受任何人的干擾
  • (準)圖靈完備

第十一課:不一樣的區塊鏈-EOS

一、背景

以太坊的局限性:交易的確認時間和交易的吞吐量很小(TPS)

二、EOS:Enterprise Operation System

致力于打造可以承載商業級區塊鏈的平臺,但是共識機制是DPOS,不是真正意義的去中心化。

特點:

  • 使用石墨烯技術提高TPS

    石墨烯技術:跟石墨烯本人沒有關系,只是將共識機制改為了DPOS,交易確認速度更快,

    TPS已經接近MySql的量級。
    
  • 有完整的賬號系統,即有字符串形式的賬號作為地址,而不是一串"2A39cbA2390fDe"。

  • 在鏈上的讀寫操作無需消耗代幣,但是需要抵押代幣來獲得資源,再用資源去進行操作。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。