--- GA: G-W3D79QQKQ3 tags: Blockchain --- # Blockchain Wallet [ToC] ## 初衷 目前有整理一個區塊鏈錢包的概念,旨在幫助理解錢包、帳號的基本概念。內容以中文為主,先介紹比特幣的狀況。 在耳熟能詳的各種鏈,包含但不限於比特幣、以太坊,有些鏈「僅有『帳號』、不存在『錢包』」的概念,有的鏈正好相反,有的鏈兩者都有。在操作區塊鏈時,不能理解為什麼會這樣子,所以把釐清的過程整理成這一份文件,希望有助於理解及釐清錢包概念。 本文尚未撰寫完成,有新的內容會再更新上來,歡迎回饋及共筆// ## 中英文詞彙對照 本文將使用以下的中、英文詞彙: - 帳號: Account - 錢包: Wallet - 地址: Address - 位元: Bit - 位元組: Byte ## 帳號與錢包 在現實生活中,存在著帳號(銀行帳號,銀行幫你保管貨幣)與錢包(隨身攜帶紙鈔、硬幣)。 在公有區塊鏈的`加密貨幣`[^加密貨幣] ,與現實生活中不同的是,帳號與錢包是具有`綁定`[^綁定]關係的。 [^加密貨幣]: 加密貨幣: 英文 Cryptocurrency,常常用複數 Cryptocurrencies,又譯密碼貨幣,密碼學貨幣。 [加密貨幣 - Wiki](https://zh.wikipedia.org/wiki/加密貨幣) [^綁定]: 綁定: 綑綁設定。在本文意思是彼此之間有個約束、束縛的關係,是可以被設定、被規劃的。 ### 區塊鏈帳號 ==(以 Bitcoin address 為例)== 公鑰目前是使用 256 個 `位元`[^位元]的橢圓加密演算法,若選用更多位元的演算法帳號會更長。 [^位元]: 位元(Bit):是電腦基本的儲存單位,一位元可以表示兩種狀態,即 0 與 1。在二進制系統提到這個概念。 [Bit - Wiki](https://en.wikipedia.org/wiki/Bit), [二進制 - Wiki](https://zh.wikipedia.org/zh-tw/二进制) [^位元組]: 位元組(Byte):表示用於編碼單個字元所需要的位元數量,也作為網際網路(Word Wide Web)傳輸資料的基本單位。現今 1 位元組 等於 8 位元。歷史上位元組長度曾不是 8 位元(這就有關於硬體與軟體設計的歷史故事了)。 [^字元]: 字元(Charactor): [字元 Wiki](https://zh.wikipedia.org/zh-tw/字符_(计算机科学)) [^長度_64_字元]: 長度 64 字元:文中是以 16 進制(Hex)表示方式,表示一個 16 進制需要 4 位元組( $2^4 = 16$),256 位元以 Hex 表示,會是長度 $256/4=64$ 字元 1. 私鑰(Private Key): - 長度: 256 位元(32位元組),也就是`長度 64 字元`[^長度_64_字元] - 比特幣中的私鑰是使用 [SHA-256](https://en.wikipedia.org/wiki/SHA-2) 演算法隨機生成 32 `bytes`[^位元組](256 bits)的隨機數 - 你可以一次產生`私鑰` 、 `公鑰` 對 2. 公鑰(Public Key) : - 長度: 264 位元(33位元組),也就是長度 66 字元 - 比特幣中的公鑰是使用 SECP256K1 演算法,基於私鑰計算而成 - 組合方式是 XY - X: 增加前綴 1 位元組,0x02 代表偶數;0x03 代表基數 - Y: 原公鑰長度 32 位元組 - 也可以根據 `私鑰` 產生 `公鑰` 對 3. 公鑰雜湊(Public Key Hash) - 長度: 160 位元(20 位元組),也就是長度 40 字元 - Hash 演算法具有壓縮功能。使用 RIPEMD-160 壓縮成 160 位元 - 以四位為一組,變成 40 位的十六進制,也就是 20 bytes 4. 比特幣錢包地址 (Bitcoin address) - 長度: 長度 34 字元 - 添加前綴(版本)及後綴(校驗),組合方式是 ABC - A: 增加前綴一位(1 位元組):目前是 `1` - B: 原公鑰雜湊(20 位元組) - C: 增加後綴四位(4 位元組):對 `公鑰雜湊` 做兩次 SHA256 取前四位 - 長度: 200字元(25 位元組),也就是長度 50 字元 - 這是你的 Bitcoin address - 因為 50 字元太長了,故再採用 Base58Check 編碼 - 具有大小寫 - 去除 `0OIl` 字元 - 適合人類閱讀與使用 - 長度: 34 字元 - 為何你會看到有人的 Bitcoin address 會是長度 26~34 之間?因為省略了 Bitcion address 開頭是 0 的字元 我們總結一下, Bitcoin address 是這樣子被生成的: 私鑰(Private Key) -> 公鑰(Public Key) -> 公鑰雜湊(Public Key Hash) -> 錢包地址 (Wallet address) ```graphviz digraph nodestyling { node [color=lightblue2 style=filled] node [shape=egg] "私鑰(Private Key)" -> "公鑰(Public Key)" -> "公鑰雜湊(Public Key Hash)" -> "錢包地址 (Wallet address)" } ``` > 注意,非對稱加密演算法,具有單向、不可逆的特性 ### 何謂錢包 - 現金錢包: 裝鈔票、硬幣 - 電子錢包: 悠遊卡、公車卡 - 區塊鏈錢包: [以太坊錢包](https://ethereum.org/zh-tw/wallets/) ### 貨幣存哪兒? - `區塊鏈錢包` 存的不是 `貨幣`,存的是 `密鑰` ,也就是 `公鑰` 或 `地址` 對應的 `私鑰` - 為了方便說明,本篇後續內容皆使用 `區塊鏈錢包地址` 一詞 - `貨幣` 存在你的 `密鑰` 上 - 生活中: `貨幣` 存在銀行的帳號上(也就是存摺上的 `銀行帳號` 上) - 區塊鏈: `貨幣` 存在區塊鏈的帳號上(也就是前述 `區塊鏈錢包地址` 上) ### 查詢餘額 - 生活中: 通過銀行帳號,向銀行查詢該 `銀行帳號` 有多少貨幣 - 區塊鏈: 通過錢包地址,向區塊鏈查詢該 `區塊鏈錢包地址` 有多少貨幣 ### 多個私鑰與多個錢包 - 如果私鑰丟了,該私鑰的貨幣就無法再被使用了; 如果私鑰被盜,貨幣就會是別人的了 - ### Read more > A bitcoin address is like bank account number and a bitcoin wallet is like a bank account. > [What is the difference between a bitcoin address and a bitcoin wallet?](https://www.quora.com/What-is-the-difference-between-a-bitcoin-address-and-a-bitcoin-wallet) ### Read more: EIP - [EIP: Ethereum Improvement Proposal - eips.ethereum.org](https://eips.ethereum.org) - [All EIPs - eips.ethereum.org](https://eips.ethereum.org) ### Read more: BIP - [BIP: Bitcoin Improvement Proposal](https://github.com/bitcoin/bips) - [BIP-39: Mnemonic code for generating deterministic keys](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) - [BIP-32: Hierarchical Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) - [BIP-43: Purpose Field for Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0043.mediawiki) - [BIP-44: Multi-Account Hierarchy for Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) ### Read more: Bitcoin - [Bitcoin Wiki](https://en.bitcoin.it/wiki/Main_Page) - [Base58Check encoding - Bitcoin Wiki](https://en.bitcoin.it/wiki/Base58Check_encoding) - [第四章 密鑰和地址 - Cypherpunks Taiwan 密碼龐克](https://cypherpunks-core.github.io/bitcoinbook_2nd_zh/第四章.html) - [Technical background of version 1 Bitcoin addresses](https://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses) - [Base58 Encode, Decode, and Validate](http://lenschulwitz.com/base58) ## 以太坊的帳號、錢包概念 (comming soon) ## Metamask 的帳號、錢包概念 (comming soon) ## References ### HackMD - [文件:用註腳,俐落收納資料 - @hackmd/blog-tw - HackMD](https://hackmd.io/@hackmd/blog-tw/https%3A%2F%2Fhackmd.io%2F%40hackmd%2Ffootnote#fnref1) - [Graphviz 筆記 - @RintarouTW/愚千慮の筆記本 - HackMD](https://hackmd.io/@RintarouTW/愚千慮の筆記本/%2F%40RintarouTW%2FGraphviz_%25E7%25AD%2586%25E8%25A8%2598) - [Graphviz 練習中遇到的問題 - @catkitchen721/graphviz-problem - HackMD](https://hackmd.io/@catkitchen721/graphviz-problem)