本章源代碼地址:[https://github.com/daleboy/blockchain1]
# 文件一:block.go
在區塊鏈中,存儲有效信息的是區塊。比如,比特幣區塊存儲的有效信息,就是比特幣交易信息,交易信息也是所有加密貨幣的本質。除此以外,區塊還包含了一些技術信息,比如版本,當前時間戳和前一個區塊的哈希。這里我們只存儲關鍵的技術信息:時間戳、前一個區塊的哈希,本區塊的哈希。

本區塊的哈希是將區塊的所有數據(不包括自身的哈希數據)轉為二進制連接起來后,通過哈希運算計算出來。

這里,有幾個go語言點注意:
(1)變量簡要創建方法
省略var,直接創建變量并賦值,在變量后面跟冒號和等號完成:
timestamp:=\[\]byte(strconv.FormatInt(b.Timestamp,?10))
strconv.FormatInt函數:用于將整型數據轉換成指定進制并以字符串的形式返回,其原型是:
unc FormatInt(i int64, base int) string
(2)類型轉換
這里是將時間戳整數轉為10進制并以字符串的形式返回。
整形不能直接強制轉換為二進制,而字符串可以。所以這里用strconv包進行轉換。
strconv包功能強大,可以實現幾乎我們所需要的任何數據類型轉換。
注意,SetHash是對Block類型定義的一個方法,通過引用調用,因為需要改變實例本身。
接下來,我們需要創建區塊。

注意,Block結構的實例化方法:

我們是直接使用var的方式構建Block,實際上也可以用new來創建結構體的實例。
接下來需要一個函數,創建創始區塊:

# 文件二:blockchain.go
接下來是區塊鏈的定義與創建

這里比較簡單,只需要注意,我們無論是創建有創始區塊的區塊鏈還是給區塊鏈添加一個區塊,均需要返回區塊鏈的指針,以供調用者繼續使用。
# 文件三:main.go
在此執行文件中,完成檢驗

要注意,一個文件夾下的所有文件必須使用同一個包名。
運行結果:

- 重要更新說明
- linechain發布
- linechain新版設計
- 引言一
- 引言二
- 引言三
- vs-code設置及開發環境設置
- BoltDB數據庫應用
- 關于Go語言、VS-code的一些Tips
- 區塊鏈的架構
- 網絡通信與區塊鏈
- 單元測試
- 比特幣腳本語言
- 關于區塊鏈的一些概念
- 區塊鏈組件
- 區塊鏈第一版:基本原型
- 區塊鏈第二版:增加工作量證明
- 區塊鏈第三版:持久化
- 區塊鏈第四版:交易
- 區塊鏈第五版:實現錢包
- 區塊鏈第六版:實現UTXO集
- 區塊鏈第七版:網絡
- 階段小結
- 區塊鏈第八版:P2P
- P2P網絡架構
- 區塊鏈網絡層
- P2P區塊鏈最簡體驗
- libp2p建立P2P網絡的關鍵概念
- 區塊鏈結構層設計與實現
- 用戶交互層設計與實現
- 網絡層設計與實現
- 建立節點發現機制
- 向區塊鏈網絡請求區塊信息
- 向區塊鏈網絡發布消息
- 運行區塊鏈
- LineChain
- 系統運行流程
- Multihash
- 區塊鏈網絡的節點發現機制深入探討
- DHT
- Bootstrap
- 連接到所有引導節點
- Advertise
- 搜索其它peers
- 連接到搜到的其它peers
- 區塊鏈網絡的消息訂發布-訂閱機制深入探討
- LineChain:適用于智能合約編程的腳本語言支持
- LineChain:解決分叉問題
- LineChain:多重簽名
- libp2p升級到v0.22版本
- 以太坊基礎
- 重溫以太坊的樹結構
- 世界狀態樹
- (智能合約)賬戶存儲樹
- 交易樹
- 交易收據樹
- 小結
- 以太坊的存儲結構
- 以太坊狀態數據庫
- MPT
- 以太坊POW共識算法
- 智能合約存儲
- Polygon Edge
- block結構
- transaction數據結構
- 數據結構小結
- 關于本區塊鏈的一些說明
- UML工具-PlantUML
- libp2p介紹
- JSON-RPC
- docker制作:啟動多個應用系統
- Dockerfile
- docker-entrypoint.sh
- supervisord.conf
- docker run
- nginx.conf
- docker基礎操作整理
- jupyter計算交互環境
- git技巧一
- git技巧二
- 使用github項目的最佳實踐
- windows下package管理工具