【区块链】GO语言区块链项目——超级账本
區塊鏈的應用:版權保護
區塊鏈用于版權保護的方式:
把文章內容存在第三方數據庫,用文章內容生成一個哈希,把哈希寫入到區塊鏈。
取數據的時候(需要溯源的時候),去區塊鏈把哈希值取下來,然后用哈希尋址找到所對應的數據,這樣把源數據取回來。
如何做到版權保護?這是法律層面的。
我們可以做數據對比,或者如果不做數據對比的話,直接提交,因為可以溯源,誰提交的早,版權就是誰的。
來看一個區塊鏈的Demo
簡單了解一下什么是哈希
https://anders.com/blockchain/block.html
當改變一個區塊中的值之后,后面所有的區塊都失效了。后面的區塊需要重新挖礦,才重新有效。
因此,如果想要修改其中一個區塊,需要花很高的成本。
分布式存儲:每個節點看做一個賬本,每個節點存儲的數據都是一樣的。假設一共有100個人,如果只改變其中一兩個人的數據是沒有用的,因為剩下的另外97個人還保存著數據的備份,這樣就保證了數據的安全性。
因此,想要攻擊一個區塊鏈,就要攻擊其51%以上的節點。代價相當高。
提問:是每一筆交易都產生一個區塊嗎?
回答:不是。比特幣的區塊,每10分鐘更新一次。一個區塊中包含很多筆交易。
每一次轉賬,都會產生一筆交易。但是,并不是每一步交易都會產生一個區塊。
簡單了解一下區塊鏈
https://blockchaindemo.io/每一個區塊的組成如下圖:
Nounce表示在本區塊上剛好滿足區塊難度的隨機數,挖礦就是尋找nounce值的過程。
模擬演示區塊鏈產生的過程
安裝完成后,直接輸入blockchain
輸入bc查看區塊
挖礦,添加一個新的區塊
現在,我們擁有兩個區塊。可以看到,后一個區塊中包含前一個區塊的哈希值。
挖礦的時候存在競爭的問題。
當一個人挖礦成功之后,會給所有的節點發送一個廣播。其余節點接收到廣播之后,會驗證新產生的數據正不正確,如果正確,就把新的數據放進下一個區塊當中。
猜數字的人就是礦工。猜數字的過程就是找隨機數。
現在我們遇到的問題是,假設100人參與。a,b兩個人幾乎同時猜中這個數字,一部分人在驗證a的結果,另一部分人在驗證b的結果,于是產生了分叉。
如果過了一段時間,a又挖出了新的區塊,那么a的鏈會延長,成為最長的鏈。
以太坊合約的開發
solidity寫好的類,在部署之后,會產生(new)一個真實的合約的實例對象。
下圖中,右上角可以選擇合約的地址。
- 部署到公網Main Ethereun Network需要花錢,開發的過程中沒有必要部署到公鏈上。
- 測試網絡Kovan Test Net的原理和公網是一樣的。開發的過程中,有很多渠道可以獲取到測試幣,用于測試。開發成功、能夠使用之后,可以部署到公網。
切換網絡之后,就可以部署合約了。
合約的地址,從面向對象的角度來講,相當于是存儲空間的地址。
有了地址之后,前端可以通過web3.js提供的API,獲取合約的實例對象。
下面我們來部署一個簡單的和約。
點擊Create之后,會詢問是否確認支付。點擊Submit。
提交成功之后,返回給你一個實例的地址。
如果想要在web前端操作這個和約中的內容,需要通過這個地址,找到你的和約。
點擊查看區塊的相關信息,包括:
看到如下信息
- 其中,Input Data是將源碼轉化為十六進制之后的結果。
- 可以這樣理解:向區塊鏈上部署和約的過程就是一個交易。
- 寫入數據是交易(因為需要礦工驗證、需要區塊鏈的存儲空間,因此需要花手續費)
- 取數據不是交易,不需要手續費。
私有鏈
私有鏈,可以部署在私有網絡中(局域網),可以在自己的局域網中進行測試。開發測試完成之后,在提交到公鏈。
如何搭建私有鏈?
一種理解是,聯盟鏈和私有鏈都可以看作是私有鏈。當部署一個和約的時候,是真的需要每一臺電腦執行挖礦的命令。剛才在測試鏈上部署的時候,是確實有人在挖礦,有節點在做驗證。在自己的私有鏈上部署和約的時候,就需要自己執行挖礦命令了。
也可以搭建一個以太坊的聯盟鏈。
什么是聯盟鏈?
比如一共100家銀行,其中10家銀行獨立建立了聯盟鏈,所有人都可以訪問聯盟鏈中的數據,但是要確認聯盟鏈的數據是否有效,僅由著10家銀行來確定。
關于公鏈
公鏈的應用場景,大部分還是代幣。實際上,一般的企業級的產品,都不算真正的“去中心化”,而是“去中介”,應該說是半去中心化。或者是使用聯盟鏈。而且,如果一個公司開發一個產品,這個公司也一定不希望這個產品是完全去中心化的。
超級賬本
我們要講的超級賬本,就屬于聯盟鏈。聯盟鏈可以被簡單的理解為私鏈。
超級賬本Hyperledger白皮書
Fabric是自己建一個網絡,建成的網絡是自己的私有鏈(聯盟鏈)。
在超級賬本中,我們用Go語言,或者Java語言,來創建類。
在比賽中,用超級賬本開發產品的相對來說比較多。以太坊因為需要花費gas,因此成本有些大。
總結
以上是生活随笔為你收集整理的【区块链】GO语言区块链项目——超级账本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java字节码操作】JavaAssis
- 下一篇: 【Java类加载机制】深入加载器