# 1、絕大多數情形只會用到公鑰
一般除了簽名和驗證簽名的情形下會用到私鑰,其他情形下一般只會用到公鑰,使用公鑰的形式包括公鑰本身,或者公鑰的哈希,而這其中又以使用公鑰哈希為主。
# 2、一個交易的構成
一個交易包括交易ID、輸入和輸出。
所謂輸入,即包含的發送者可花費的幣,不一定是發送者可花費的幣的全部,和發送者的公鑰;
所謂輸出,即接收者接收到的幣,一般包括發送者指定的接收者們接收到的幣和給發送者發送的找零,和接收者的公鑰哈希。
輸入之和等于輸出之和。
輸入:
typeTxInputstruct?{
????Txid?[]byte//前一筆交易的ID
????Vout?int//前一筆交易在該筆交易所有輸出中的索引(一筆交易可能有多個輸出,需要有信息指明具體是哪一個)
????Signature?[]byte//輸入數據簽名
//PubKey公鑰,是發送者的錢包的公鑰,上鏈之前,可以通過簽名驗證檢查此筆交易是否是冒名頂替者發送的
//如果PubKey無法解鎖包含的輸入,也就是說花的是他人的幣,將無法驗證通過,交易無效
//這種機制,保證了用戶無法花費其他人的幣
????PubKey?[]byte
}
輸出:
typeTxOutputstruct?{
????Value?int//輸出里面存儲的“幣”
//鎖定輸出的公鑰(比特幣里面是一個腳本,這里是公鑰)
????PubKeyHash?[]byte
}
# 3、一個區塊鏈的六個核心功能
(1)創建新鏈(同時挖出創始區塊)(一次性工作)
(2)創建交易
(3)挖礦
(4)交易簽名和驗證交易簽名
(5)創建錢包
(6)共識算法
# 4、一個區塊鏈實現的五個核心對象
(1)Blockchain
實現核心功能:創建新鏈、挖礦
(2)Block
(3)Transaction
實現核心功能:創建交易、交易簽名和驗證交易簽名
(4)共識
實現核心功能:共識算法
(5)Wallet
創建錢包
# 5、關于錢包
(1)錢包自行創建,一般是通過客戶端創建,也必須通過可信客戶端創建
(2)一個錢包文件可以有多個錢包地址
(3)錢包創建后保存在本地
(4)錢包文件包含公鑰和密鑰,不上傳網絡,必須自行保管!
# 6、轉賬通過傳遞雙方錢包地址的公鑰哈希進行
轉賬通過傳遞雙方錢包地址的公鑰哈希以及轉賬金額進行,一方面更安全,另一方面公鑰哈希后,數據字節更短(只有32個字節),更節省存儲和帶寬(公鑰有128個字節長,是哈希后的長度的3倍)。
# 7、關于交易簽名
(1)交易必須被簽名,因為這是比特幣里面保證發送方不會花費屬于其他人的幣的唯一方式。
(2)如果一個簽名是無效的,那么這筆交易就會被認為是無效的,因此,這筆交易也就無法被加到區塊鏈中。
(3)簽名實質上是對交易的每一個輸入所引用的輸出的索引對應的輸出的公鑰哈希值進行簽名。
# 8、區塊鏈里面的信息沒有加密
區塊鏈應用了加密技術,但那是用來簽名用。區塊鏈里面保存的信息,從根本上都是明文,不存在加密操作。
- 重要更新說明
- 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管理工具