<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Bitcoin | Chia-An Lee</title><link>https://calee0219.github.io/tag/bitcoin/</link><atom:link href="https://calee0219.github.io/tag/bitcoin/index.xml" rel="self" type="application/rss+xml"/><description>Bitcoin</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><copyright>©</copyright><lastBuildDate>Mon, 09 Aug 2021 07:48:37 +0800</lastBuildDate><image><url>https://calee0219.github.io/media/icon_hu_da05098ef60dc2e7.png</url><title>Bitcoin</title><link>https://calee0219.github.io/tag/bitcoin/</link></image><item><title>Mastering in Bitcoin 讀書筆記</title><link>https://calee0219.github.io/blog/cryptocurrency_mastering_in_bitcoin/</link><pubDate>Mon, 09 Aug 2021 07:48:37 +0800</pubDate><guid>https://calee0219.github.io/blog/cryptocurrency_mastering_in_bitcoin/</guid><description>&lt;p&gt;
&lt;/p&gt;
&lt;h2 id="ch1--ch2"&gt;Ch1 / Ch2&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ch3-比特幣客戶端"&gt;Ch3 比特幣客戶端&lt;/h2&gt;
&lt;p&gt;以
為主&lt;/p&gt;
&lt;p&gt;也可以到
直接選擇 binary file 執行&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;下載並切換版本&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Download&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/bitcoin/bitcoin.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; bitcoin
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 檢查版本 &amp;amp; 切換&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git tag
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git checkout &lt;span class="o"&gt;{&lt;/span&gt;tag&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;自動產生相關檔案
&lt;code&gt;./autogen.sh&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;參數設定&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure --help
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure &lt;span class="o"&gt;{&lt;/span&gt;需要的參數&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;之後軟體會檢查所需要的相關軟體，若沒有，會中途中止，安裝完後重跑即可
過程中可能會遇到一些 bug，可以先到
參考需要安裝的東西&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;編譯與安裝&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo make install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="開啟"&gt;開啟&lt;/h3&gt;
&lt;p&gt;安裝完後，應該會有 &lt;code&gt;bitcoind&lt;/code&gt;, &lt;code&gt;bitcoin-cli&lt;/code&gt; 等指令可以用&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用 &lt;code&gt;which bitcoind&lt;/code&gt; 可以查看安裝位置&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitcoind&lt;/code&gt;: 開啟服務&lt;/li&gt;
&lt;li&gt;在 &lt;code&gt;~/.bitcoin/bitcoin.conf&lt;/code&gt; 修改設定檔
&lt;ul&gt;
&lt;li&gt;用戶名 &amp;amp; 密碼
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;rpcuser&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;bitcoinrpc
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;rpcpassword&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2XA4DuKNCbtZXsBQRRNDEwEY2nM6M4H9Tx5dFjoAVVbK
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;其他設定參數
&lt;code&gt;bitcoind --help&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitcoind --daemon&lt;/code&gt;: 在後台執行&lt;/li&gt;
&lt;li&gt;第一次運行時，會同步區塊，至少會有 122GB 以上，可能需要 2 天的時間下載區塊&amp;hellip;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/Lz3S2OR.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="json-rpc-api"&gt;JSON-RPC API&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;bitcoin 提供 json-rpc api&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitcoin-cli help&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitcoin-cli getinfo&lt;/code&gt;: 獲得基本資訊 (網路節點，錢包，區塊數據&amp;hellip;)
&lt;ul&gt;
&lt;li&gt;version, protocolversion, walletversion: 版本&lt;/li&gt;
&lt;li&gt;balance: 錢包餘額&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="錢包設定及加密"&gt;錢包設定及加密&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;在生成密鑰或其他指令前，需要先對錢包加密
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bitcoin-cli encryptwallet {密碼}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;解鎖錢包
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bitcoin-cli walletpassp {密碼} {時間/秒}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="備份"&gt;備份&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bitcoin-cli backupwallet {檔名}&lt;/code&gt;: 匯出成可以匯入的檔案&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitcoin-cli importwallet {檔名}&lt;/code&gt; (需要是錢包解鎖的狀態)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitcoin-cli dumpwallet {檔名}&lt;/code&gt;: 將錢包匯出成人看得懂的明文&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="地址--交易"&gt;地址 &amp;amp; 交易&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bitcoin-cli getnewaddress&lt;/code&gt;: 產生新的 address&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitcoin-cli getreceivedbyaddress {地址} 0&lt;/code&gt;: 若有匯錢進來，可以檢查匯入的錢&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitcoin-cli listtransactions&lt;/code&gt;: 列出所有交易&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitcoin-cli listaddressbyaccount &amp;quot;&amp;quot;&lt;/code&gt;: 列出所有地址&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitcoin-cli getbalence&lt;/code&gt;: 列出錢包總額&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitcoin-cli gettransaction {txid}&lt;/code&gt;: 列出 txid 的交易明細&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="區塊"&gt;區塊&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bitcoin-cli getblock {區塊的 hash}&lt;/code&gt;: 查看這個 block 的內容&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ch4-密鑰-地址-錢包"&gt;Ch4 密鑰-地址-錢包&lt;/h2&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/zeXOX07.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="密鑰"&gt;密鑰&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;$1$ ~ $2^{256}$&lt;/li&gt;
&lt;li&gt;生成方法：密碼學安全隨機源取出一串隨機字串 -&amp;gt; sha256 -&amp;gt; 檢查是否小於 $n-1$&lt;/li&gt;
&lt;li&gt;256 bit，但可以用不同的表示法
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/8gjTSqB.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;base58check-&amp;gt;hex: &lt;code&gt;sx base58check-decode ...&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;hex-&amp;gt;base58check: &lt;code&gt;sx base58check-encode {hex} {prefix}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="公鑰"&gt;公鑰&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;用 ECC (橢圓曲線) 從私鑰生成&lt;/li&gt;
&lt;li&gt;公鑰 = 私鑰 * G&lt;/li&gt;
&lt;li&gt;G: 生成點，bitcoin 的生成點是固定的&lt;/li&gt;
&lt;li&gt;secp256k1 標準的橢圓曲線&lt;/li&gt;
&lt;li&gt;$y^2=(x^3+7)$ over $F_p$&lt;/li&gt;
&lt;li&gt;$y^2\mod p = (x^3+7)\mod p$&lt;/li&gt;
&lt;li&gt;$p = 2^{256}-2^{32}-2^9-2^8-2^7-2^6-2^4-1$&lt;/li&gt;
&lt;li&gt;無窮點對 (0)&lt;/li&gt;
&lt;li&gt;加法定義$P_1=P_2+P_3$&lt;/li&gt;
&lt;li&gt;$K=k*G$
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/nT8sxsu.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;格式
&lt;ul&gt;
&lt;li&gt;非壓縮型
&lt;ul&gt;
&lt;li&gt;prefix: 04&lt;/li&gt;
&lt;li&gt;K = 04xy&lt;/li&gt;
&lt;li&gt;520bit: 8 + 256 + 256&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;壓縮型
&lt;ul&gt;
&lt;li&gt;prefix: 02 / 03&lt;/li&gt;
&lt;li&gt;有 x，有曲線方程式，可算出 y&lt;/li&gt;
&lt;li&gt;解方程式時，y 有平方 =&amp;gt; 有兩解 =&amp;gt; 用 02 / 03 區別奇偶&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;壓縮格式公鑰產生的地址會與非壓縮的不一樣&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;=&amp;gt; 現在的協定多以非壓縮為主&lt;/li&gt;
&lt;li&gt;but 應該還是要能支援非壓縮&lt;/li&gt;
&lt;li&gt;WIF (錢包導入格式) 應該要標示出私鑰產生的公鑰是否為壓縮格式 (基本上就是要說明這把私鑰最終產生的地址應該要是哪一個)&lt;/li&gt;
&lt;li&gt;壓縮格式私鑰:
&lt;ul&gt;
&lt;li&gt;私鑰 + &amp;lsquo;01&amp;rsquo;&lt;/li&gt;
&lt;li&gt;用來表示這個私鑰的 address 是用壓縮格式公鑰產生的&lt;/li&gt;
&lt;li&gt;事實上會比私鑰長 XD&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;WIF
&lt;ul&gt;
&lt;li&gt;使用壓縮格式導出私鑰時，永遠只用 WIF 壓縮格式 (K or L 前綴 (因為經過 Base58Check 格式作為最終輸出格式))&lt;/li&gt;
&lt;li&gt;使用非壓縮，導出時使用 WIF 格式 (5 前綴)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="地址"&gt;地址&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;hash160 / double hash&lt;/li&gt;
&lt;li&gt;address = RIPEMD160(SHA256(K))&lt;/li&gt;
&lt;li&gt;經過 base58check 編碼呈現&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/lc2hEYS.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Base58: base64 去掉易混淆單字 ex. O, 0, I, l&amp;hellip;&lt;/li&gt;
&lt;li&gt;Base58Check: Base58 + error check&lt;/li&gt;
&lt;li&gt;$checksum = sha256(sha256(prefix+data))$ (data 是公鑰哈希，而不是純公鑰)&lt;/li&gt;
&lt;li&gt;只取前四個 bit
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/7xU5Ory.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;prefix
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/lIX7xIr.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="比特幣錢包"&gt;比特幣錢包&lt;/h3&gt;
&lt;p&gt;錢包是私鑰的容器&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;非確定性錢包：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;隨機生成 n 個私鑰，每個只使用一次&lt;/li&gt;
&lt;li&gt;需要整份備份&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;確定性種子錢包&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;單向離像方程式&lt;/li&gt;
&lt;li&gt;公共種子&lt;/li&gt;
&lt;li&gt;種子可以產生所有錢包裡的私鑰，因此只要備份種子就好了&lt;/li&gt;
&lt;li&gt;輔助記憶詞彙
&lt;ul&gt;
&lt;li&gt;易於記憶&lt;/li&gt;
&lt;li&gt;種子對應確定性錢包的隨機數&lt;/li&gt;
&lt;li&gt;BIP0039
&lt;ol&gt;
&lt;li&gt;生成 128~256 位 (2^&amp;hellip;) 的隨機數&lt;/li&gt;
&lt;li&gt;用 sha256 hash，取前幾位，生成 check bit&lt;/li&gt;
&lt;li&gt;num + check bit&lt;/li&gt;
&lt;li&gt;把數字分解成 11 位不同的集合 (11 bit 切一組，切成 n 組)，與預先定義好的字典做對應&lt;/li&gt;
&lt;li&gt;生成 12 ~ 24 個 word 的助記碼
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/KoQcb3F.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;分層性錢包 (HD 錢包)
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/bz9ljMP.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BIP0032 標準&lt;/li&gt;
&lt;li&gt;母鑰匙生成子鑰匙&lt;/li&gt;
&lt;li&gt;樹狀結構&lt;/li&gt;
&lt;li&gt;建立公共密鑰的序列而不需要訪問相對的私鑰&lt;/li&gt;
&lt;li&gt;每筆交易發行不同的公鑰&lt;/li&gt;
&lt;li&gt;從種子產生 HD
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/FE5SOSD.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
![](
=150x)&lt;/li&gt;
&lt;li&gt;CKD (child key derivation)&lt;/li&gt;
&lt;li&gt;三個主要元素：
&lt;ul&gt;
&lt;li&gt;母私鑰&lt;/li&gt;
&lt;li&gt;鏈碼 (256bit)&lt;/li&gt;
&lt;li&gt;索引號 (index, 32bit)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;母公鑰 + 鏈碼 + 索引號 =&amp;gt; HMAC-sha512 =&amp;gt; 分成兩個 256 bit
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/K9fqChd.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;子密鑰無法 trace back 母密鑰&lt;/li&gt;
&lt;li&gt;子密鑰在沒有鏈碼下，也無法 trace 兄弟密鑰&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="擴展鑰匙-extending-key"&gt;擴展鑰匙 (extending key)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;鑰匙 + 鏈碼&lt;/li&gt;
&lt;li&gt;兩種
&lt;ul&gt;
&lt;li&gt;密鑰 + 鏈碼
&lt;ul&gt;
&lt;li&gt;可以衍生出子密鑰&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;公鑰 + 鏈碼
&lt;ul&gt;
&lt;li&gt;可以衍生出子公鑰&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;也是用 Base58Check 表示
&lt;ul&gt;
&lt;li&gt;512 or 513 bit&lt;/li&gt;
&lt;li&gt;前綴 &amp;lsquo;xprv&amp;rsquo; or &amp;lsquo;xpub&amp;rsquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="硬化子密鑰"&gt;硬化子密鑰&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;擴展公鑰可以衍生出所有鏈碼，只要有某一個子私鑰洩漏，就會從被洩露的子私鑰開始，得到所有私鑰 =&amp;gt; 不夠安全&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;子私鑰 &amp;amp; 母鏈碼 可以推測母私鑰！！&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;hardened derivation
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/eFRP2OW.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;索引號&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;32 bit&lt;/li&gt;
&lt;li&gt;正常衍生: $0$ ~ $2^{31-1}$&lt;/li&gt;
&lt;li&gt;強化衍生: $2^{31}$ ~ $2^{32-1}$&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="高級私鑰--地址"&gt;高級私鑰 &amp;amp; 地址&lt;/h3&gt;
&lt;p&gt;BIP0038: 使用另一個 key + AES 對私鑰加密&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;前綴: 6P&lt;/li&gt;
&lt;li&gt;用 AES + key 轉換回前綴為 5 的 base58check 格式&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="p2sh--多重簽名地址"&gt;P2SH &amp;amp; 多重簽名地址&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;P2SH: Pay-to-Script Hash&lt;/li&gt;
&lt;li&gt;P2SH 地址: 前綴 3&lt;/li&gt;
&lt;li&gt;收益者不是地址所有人，而會是交易雙方&lt;/li&gt;
&lt;li&gt;目前常用在 多重簽名地址 script
&lt;ul&gt;
&lt;li&gt;script 需要多個簽名來證明所有權&lt;/li&gt;
&lt;li&gt;N 個密碼中，至少需要 M 個來簽，才能證明所有權&lt;/li&gt;
&lt;li&gt;詳細放在 ch5&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="靚號地址"&gt;靚號地址&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;地址中有指定的 pattern
&lt;ul&gt;
&lt;li&gt;ex. iloveyou&amp;hellip;&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;用不斷的 hash 密鑰，直到找到符合 pattern 的密鑰&lt;/li&gt;
&lt;li&gt;如果特定 pattern 夠長，可以增加地址比對時的安全性&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="紙錢包"&gt;紙錢包&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;將地址印在紙上，通常會配合 BIP0038 地址加密&lt;/li&gt;
&lt;li&gt;可多次存入，但最好一次性提取，避免產生找零地址 (?)&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/1XjdFPz.jpg" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ch5-交易"&gt;Ch5 交易&lt;/h2&gt;
&lt;h3 id="交易生命週期"&gt;交易生命週期&lt;/h3&gt;
&lt;h2 id="ch6-比特幣網路"&gt;Ch6 比特幣網路&lt;/h2&gt;
&lt;h2 id="ch7-區塊鏈"&gt;Ch7 區塊鏈&lt;/h2&gt;
&lt;h3 id="簡介"&gt;簡介&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;包含交易訊息由後向前有序連接
&lt;ul&gt;
&lt;li&gt;flat file&lt;/li&gt;
&lt;li&gt;LevelDB (Google)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;每一塊都指向前一塊
&lt;ul&gt;
&lt;li&gt;垂直的 stack&lt;/li&gt;
&lt;li&gt;創世區塊為最底塊&lt;/li&gt;
&lt;li&gt;高度代表該區塊與創世區塊之間的距離&lt;/li&gt;
&lt;li&gt;頂端添加新區塊&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;區塊識別
&lt;ul&gt;
&lt;li&gt;區塊頭做 SHA256 兩次&lt;/li&gt;
&lt;li&gt;利用區塊頭的父區塊 hash 值識別父區塊&lt;/li&gt;
&lt;li&gt;可以從最新的區塊一路往回追溯至創世區塊，形成區塊鏈&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;分岔
&lt;ul&gt;
&lt;li&gt;每個區塊僅有一父區塊，但可能暫時擁有多個子區塊&lt;/li&gt;
&lt;li&gt;多個區塊幾乎同時被礦工挖出時發生&lt;/li&gt;
&lt;li&gt;解決方法後面會詳細說明&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;安全性
&lt;ul&gt;
&lt;li&gt;若要竄改一區塊內容則必須重新計算該區塊 hash 值，接著更新子區塊頭的父區塊 hash 值，一直更新到最新的區塊為止，如此的計算資源龐大不易成功&lt;/li&gt;
&lt;li&gt;差不多六個區塊後可被竄改的機會非常低&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="區塊結構"&gt;區塊結構&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;包含交易訊息的資料結構
&lt;ul&gt;
&lt;li&gt;區塊頭
&lt;ul&gt;
&lt;li&gt;80 bytes&lt;/li&gt;
&lt;li&gt;區塊識別&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;區塊主體
&lt;ul&gt;
&lt;li&gt;大小可變&lt;/li&gt;
&lt;li&gt;紀錄交易&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;平均每筆交易至少 250 bytes&lt;/li&gt;
&lt;li&gt;平均每個區塊至少 500 個交易
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/CjidmkR.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="區塊頭"&gt;區塊頭&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;父區塊 hash 值
&lt;ul&gt;
&lt;li&gt;用於指向父區塊&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Merkle root
&lt;ul&gt;
&lt;li&gt;可有效總結區塊中所有交易的資料結構&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Nonce、難度目標、時間戳記與挖礦相關，會在之後說明
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/0FLk3tN.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="區塊識別"&gt;區塊識別&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;區塊頭 hash 值
&lt;ul&gt;
&lt;li&gt;32 bytes&lt;/li&gt;
&lt;li&gt;SHA256 兩次區塊頭所得的數位指紋&lt;/li&gt;
&lt;li&gt;唯一明確的識別一個區塊&lt;/li&gt;
&lt;li&gt;第一個比特幣區塊頭 hash 值&lt;/li&gt;
&lt;li&gt;&lt;code&gt;000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;區塊高度
&lt;ul&gt;
&lt;li&gt;創世區塊高度為零&lt;/li&gt;
&lt;li&gt;每增加一個區塊高度加一&lt;/li&gt;
&lt;li&gt;並不一定是唯一識別，在區塊鏈分岔時同一高度有多個區塊&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;兩者並不包含在區塊中，在節點接收區塊時計算並儲存，便於查詢檢索&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="創世區塊"&gt;創世區塊&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;2009 年創建&lt;/li&gt;
&lt;li&gt;所有區塊的祖先&lt;/li&gt;
&lt;li&gt;編入比特幣客戶端程式中，確保創世區塊不會改變，並從此建構區塊鏈&lt;/li&gt;
&lt;li&gt;
中可以看到創世區塊詳細內容&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="區塊的連接"&gt;區塊的連接&lt;/h3&gt;
&lt;p&gt;比特幣的完整節點是從創世節點到最新節點的一個本地副本，當接收到一個新區塊時，需驗證然後接到現有區塊上&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;檢查傳入的區塊頭並尋找父區塊
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/YTpywFx.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="merkle-tree"&gt;Merkle tree&lt;/h3&gt;
&lt;p&gt;區塊中包含的所有交易以 Merkle tree 形式呈現&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;hash 二元平衡樹&lt;/li&gt;
&lt;li&gt;用於快速歸納和檢驗大規模數據完整性&lt;/li&gt;
&lt;li&gt;快速驗證區塊中的交易是否存在&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="建立方法"&gt;建立方法&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;hash 方法採用 double-SHA256&lt;/li&gt;
&lt;li&gt;由葉節點建立到根節點&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;將所有元素做 double-SHA256 後放入葉節點&lt;/li&gt;
&lt;li&gt;串聯兩節點的 hash 值做 double-SHA256 生成父節點&lt;/li&gt;
&lt;li&gt;重複步驟 2 直到剩下一個節點為止，此點即為 Merkle root&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/uaRcghh.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;若葉節點個數為奇數則將最後一筆交易重複一次，以維持偶數個葉節點&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/JpKEPLm.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 id="驗證交易存在"&gt;驗證交易存在&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;綠色為要驗證的交易對應的節點&lt;/li&gt;
&lt;li&gt;藍色為 Merkle 路徑&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/7Lis8PB.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;若要驗證交易是否存在可以參考 Merkle tree 建立方法，將 Merkle 路徑與該交易依序做 hash 生成藍色虛線的節點，最終比較 Merkle root 是否相同，即可得知該交易是否存在於區塊中&lt;/p&gt;
&lt;h4 id="效率"&gt;效率&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;時間複雜度 ${O(log\ n)}$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/UUb0RXT.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="簡單支付驗證-spv"&gt;簡單支付驗證 (SPV)&lt;/h3&gt;
&lt;p&gt;利用 Merkel tree 驗證交易，SPV 不下載交易紀錄和區塊，僅保存區塊頭，利用 Merkle 路徑驗證交易存在&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Merkel 區塊
&lt;ul&gt;
&lt;li&gt;區塊頭&lt;/li&gt;
&lt;li&gt;Merkel 路徑&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ch8-挖礦與共識"&gt;Ch8 挖礦與共識&lt;/h2&gt;
&lt;h3 id="簡介-1"&gt;簡介&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;挖礦
&lt;ul&gt;
&lt;li&gt;增加比特幣&lt;/li&gt;
&lt;li&gt;保護比特幣系統安全&lt;/li&gt;
&lt;li&gt;提供算力獲取比特幣&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;礦工
&lt;ul&gt;
&lt;li&gt;驗證每筆交易並記錄到區塊鏈中&lt;/li&gt;
&lt;li&gt;平均 10 分鐘挖出一個新的區塊&lt;/li&gt;
&lt;li&gt;得到新幣獎勵和手續費&lt;/li&gt;
&lt;li&gt;工作量證明&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;發行
&lt;ul&gt;
&lt;li&gt;預計發行到 2140 年，上限為 2100 萬個&lt;/li&gt;
&lt;li&gt;每隔 210000 塊 (大約 4 年)，新區塊挖出獎勵減半&lt;/li&gt;
&lt;li&gt;2009 / 01 獎勵 50 比特幣&lt;/li&gt;
&lt;li&gt;2012 / 11 獎勵 25 比特幣&lt;/li&gt;
&lt;li&gt;2016 / 07 獎勵 12.5 比特幣&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="比特幣經濟學和貨幣創造"&gt;比特幣經濟學和貨幣創造&lt;/h4&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/dEiBmbL.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;抗通膨
&lt;ul&gt;
&lt;li&gt;總量有限&lt;/li&gt;
&lt;li&gt;發行速度遞減&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;通縮貨幣
&lt;ul&gt;
&lt;li&gt;貨幣供需不平衡所導致增值&lt;/li&gt;
&lt;li&gt;隨時間增長有愈來愈強的購買力&lt;/li&gt;
&lt;li&gt;是否會有隱藏未知的經濟風險&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="去中心化共識"&gt;去中心化共識&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;沒有經過明確的投票或固定達成共識的時間&lt;/li&gt;
&lt;li&gt;異步互動更新&lt;/li&gt;
&lt;li&gt;每個全節點依據綜合標準對每個交易進行獨立驗證&lt;/li&gt;
&lt;li&gt;通過完成工作量證明演算法的驗算，礦工將交易紀錄獨立打包進新區塊&lt;/li&gt;
&lt;li&gt;每個節點獨立的對新區塊進行檢驗並加入區塊鏈&lt;/li&gt;
&lt;li&gt;每個節點對區塊鏈進行獨立選擇，在工作量證明機制下選擇累計工作量較大的區塊&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="交易的獨立檢驗"&gt;交易的獨立檢驗&lt;/h3&gt;
&lt;p&gt;收到一個交易時先驗證交易，有效交易繼續傳播，無效則丟棄&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/qZJY7Ez.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;詳細可參考
、
、
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;隨時間可能會有所改變，為處理惡意攻擊或要使交易更多樣化而放寬&lt;/li&gt;
&lt;li&gt;收到交易後對全網廣播前先驗證，並以接收順序建立交易池&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="挖礦節點"&gt;挖礦節點&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;接收驗證交易並在新區塊中整合&lt;/li&gt;
&lt;li&gt;隨時監聽新區塊，若有人已經打包出新區塊則放棄，繼續打包下一個區塊&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="整合交易至區塊"&gt;整合交易至區塊&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;在接收到新節點時，將交易池中已打包的交易移除&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="交易塊齡礦工費和優先級"&gt;交易塊齡、礦工費和優先級&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;塊齡為 UTXO 被記錄到區塊前所經過的區塊數&lt;/li&gt;
&lt;li&gt;按照礦工費排序，優先將高礦工費的交易打包&lt;/li&gt;
&lt;li&gt;優先級
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Priority = Sum (Value of input * Input Age) / Transaction Size&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果區塊有足夠空間，則高優先級的交易將不需礦工費&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="鑄幣交易-coinbase"&gt;鑄幣交易 (coinbase)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;打包出新區塊的獎勵&lt;/li&gt;
&lt;li&gt;沒有輸入，不消耗 UTXO&lt;/li&gt;
&lt;li&gt;輸出到礦工地址&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="coinbase-獎勵與礦工費"&gt;coinbase 獎勵與礦工費&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;GetBlockValue&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt; &lt;span class="nf"&gt;GetBlockValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;nHeight&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int64_t&lt;/span&gt; &lt;span class="n"&gt;nFees&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int64_t&lt;/span&gt; &lt;span class="n"&gt;nSubsidy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;COIN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;halvings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nHeight&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;Params&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;SubsidyHalvingInterval&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//210000 blocks
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;halvings&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;nFees&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;nSubsidy&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;halvings&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;nSubsidy&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;nFees&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;礦工費
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Total Fees = Sum(Inputs) Sum(Outputs)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="鑄幣交易結構"&gt;鑄幣交易結構&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;普通交易
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/uvLAOYc.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;鑄幣交易
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/symOzly.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="coinbase-數據"&gt;coinbase 數據&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;不包含 scriptSig 以 coinbase 取代，最小 2 bytes 最大 100 bytes&lt;/li&gt;
&lt;li&gt;除了開始的幾個 bytes 外，礦工可以任意填充其他部分&lt;/li&gt;
&lt;li&gt;創世區塊中的 coinbase&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;The Times 03/Jan/2009 Chancellor on brink of second bailout for banks&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;利用 coinbase 實現 extra nonce 功能，標示挖出的礦池&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="構造區塊頭"&gt;構造區塊頭&lt;/h3&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/rL9fO9l.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="建構區塊"&gt;建構區塊&lt;/h3&gt;
&lt;p&gt;藉由修改 nonce 值重複計算區塊頭 hash 值，直到符合難度條件&lt;/p&gt;
&lt;h4 id="工作量證明算法"&gt;工作量證明算法&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;hash 輸入長度任意，輸出長度固定且對於不同字串輸出幾乎不會相同，可作為數位指紋&lt;/li&gt;
&lt;li&gt;有意選擇輸入並生成一個特定 hash 值幾乎不可能&lt;/li&gt;
&lt;li&gt;礦工藉由修改 nonce 直到區塊頭 hash 值足夠小&lt;/li&gt;
&lt;li&gt;可藉由統計估算礦工工作量&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="難度表示"&gt;難度表示&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;難度位、bits&lt;/li&gt;
&lt;li&gt;前 1 byte 為冪次後為係數&lt;/li&gt;
&lt;li&gt;&lt;code&gt;target = coefficient * 2^(8 * (exponent – 3))&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;範例：難度位的值為 0x1903a30c&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;target = 0x03a30c * 2^(0x08 * (0x19 0x03))
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;=&amp;gt; target = 0x03a30c * 2^(0x08 * 0x16)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;=&amp;gt; target = 0x03a30c * 2^0xB0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;=&amp;gt; target = 0x0000000000000003A30C00000000000000000000000000000000000000000000
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="難度目標與難度調整"&gt;難度目標與難度調整&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;維持 10 分鐘生成一個區塊&lt;/li&gt;
&lt;li&gt;每個完整節點自動調整
&lt;ul&gt;
&lt;li&gt;每 2016 個區塊的時間與 20160 分鐘比較來調整難度&lt;/li&gt;
&lt;li&gt;&lt;code&gt;New Difficulty = Old Difficulty * (Actual Time of Last 2016 Blocks / 20160 minutes)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;每次調整幅度最高為 4 倍，平衡算力和難度巨大差異&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;難度與交易量和金額無關&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="成功建構區塊"&gt;成功建構區塊&lt;/h3&gt;
&lt;p&gt;算出符合條件的特定 nonce 值後立即發給相鄰節點，其他節點驗證通過後在發送出去，同時放棄打包同高度的區塊立即開始打包下一塊&lt;/p&gt;
&lt;h3 id="檢驗新區塊"&gt;檢驗新區塊&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;每個節點獨立驗證
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/ayJn4gL.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h3 id="區塊鏈的組裝與選擇"&gt;區塊鏈的組裝與選擇&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;將區塊集合至最大工作量證明的鏈上&lt;/li&gt;
&lt;li&gt;節點維護的區塊
&lt;ul&gt;
&lt;li&gt;連接到主鏈&lt;/li&gt;
&lt;li&gt;分支或備用鏈&lt;/li&gt;
&lt;li&gt;孤兒區塊&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;兩區塊在短時間內被挖出，節點可能會以相反的順序接收接收，造成孤兒區塊&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="區塊練的分岔"&gt;區塊練的分岔&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;區塊不同時間抵達節點導致不同副本不一致&lt;/li&gt;
&lt;li&gt;每個節點延長最大工作量的鏈&lt;/li&gt;
&lt;li&gt;最終可以收斂到一致的狀態&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;礦工幾乎同時挖到區塊，各自廣播出去形成分支&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/sNF9v5t.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;其中一條鏈先挖到下一區塊&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/g9cOp4R.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;重新共識收斂為同一主鏈&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/wvgC3DQ.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="挖礦與算力競賽"&gt;挖礦與算力競賽&lt;/h3&gt;
&lt;p&gt;極富競爭性並且算力以指數及成長
CPU ${\rightarrow}$ GPU ${\rightarrow}$ FPGA ${\rightarrow}$ ASIC&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/tOpvaLA.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/14WoJbH.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 id="隨機值升位方案"&gt;隨機值升位方案&lt;/h4&gt;
&lt;p&gt;算力增加使得難度增加，所需的隨機值不足&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;早期可以透過修改時間戳解決，但移動太多會變成無效區塊&lt;/li&gt;
&lt;li&gt;利用 coinbase 交易可以在 coinbase script 裡寫入任意值，進而改變 Merkel root 作為額外隨機值來源&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="礦池"&gt;礦池&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;礦工合作組成
&lt;ul&gt;
&lt;li&gt;集合算力&lt;/li&gt;
&lt;li&gt;分享獎勵&lt;/li&gt;
&lt;li&gt;減少不確定性&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;設定較低的難度
&lt;ul&gt;
&lt;li&gt;評估各礦工算力&lt;/li&gt;
&lt;li&gt;算出來的解並不一定滿足新區塊要求&lt;/li&gt;
&lt;li&gt;有時產出符合的區塊可以一起分潤&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="共識攻擊"&gt;共識攻擊&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;51% 攻擊
&lt;ul&gt;
&lt;li&gt;算力過大，30% 以上就有威脅&lt;/li&gt;
&lt;li&gt;至多可影響最近 10 個區塊&lt;/li&gt;
&lt;li&gt;實現雙花或拒絕他人交易&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;防禦
&lt;ul&gt;
&lt;li&gt;等待 6 個以上區塊確認&lt;/li&gt;
&lt;li&gt;第三方等多方認證簽名&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在算力以指數及增加的現今要達成攻擊難上加難&lt;/p&gt;</description></item><item><title>加密貨幣 相關資源連結</title><link>https://calee0219.github.io/blog/cryptocurrency_resources/</link><pubDate>Mon, 09 Aug 2021 07:48:37 +0800</pubDate><guid>https://calee0219.github.io/blog/cryptocurrency_resources/</guid><description>&lt;h2 id="影片"&gt;影片&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&amp;lt;- 比較偏寫程式的&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="書"&gt;書&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="網站"&gt;網站&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="論壇--blog"&gt;論壇 &amp;amp; Blog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="交易所"&gt;交易所&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="線上錢包"&gt;線上錢包&lt;/h2&gt;
&lt;p&gt;私鑰還是存在自己的機器上比較安全吧 XDD&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="簡報"&gt;簡報&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>區塊鏈簡述</title><link>https://calee0219.github.io/blog/cryptocurrency_blockchain_intro/</link><pubDate>Mon, 09 Aug 2021 07:48:37 +0800</pubDate><guid>https://calee0219.github.io/blog/cryptocurrency_blockchain_intro/</guid><description>&lt;p&gt;
&lt;/p&gt;
&lt;h2 id="緣起"&gt;緣起&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;想要有一個去中心化的制度&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="特徵"&gt;特徵&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;分散式架構&lt;/li&gt;
&lt;li&gt;寫帳
&lt;ul&gt;
&lt;li&gt;以前的交易是以物易物&lt;/li&gt;
&lt;li&gt;=&amp;gt; 金錢作為有公信力的價值衡量&lt;/li&gt;
&lt;li&gt;=&amp;gt; 電子金融時代，變成紀錄交易資訊 (寫帳)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;分散式需要解決的問題
&lt;ul&gt;
&lt;li&gt;雙花
&lt;ul&gt;
&lt;li&gt;同一筆錢被同時拿來買兩樣東西&lt;/li&gt;
&lt;li&gt;第三方驗證的方式，會先確認這筆錢沒有被花過才能拿來作交易&lt;/li&gt;
&lt;li&gt;分散式架構較難做這個驗證&lt;/li&gt;
&lt;li&gt;解決方法：
&lt;ul&gt;
&lt;li&gt;用 voting 的方式&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;覆寫
&lt;ul&gt;
&lt;li&gt;解決方式：
&lt;ul&gt;
&lt;li&gt;要改變帳本資訊時，需要找到 hash 的衝突 =&amp;gt; 困難&lt;/li&gt;
&lt;li&gt;就算找到一個衝突，還需要把之後的 chain 的衝突 =&amp;gt; 超困難&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Crypto currency (密碼貨幣)
&lt;ul&gt;
&lt;li&gt;用 hash function 串接資料&lt;/li&gt;
&lt;li&gt;Avalanche Effect 雪崩效應&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;應用
&lt;ul&gt;
&lt;li&gt;FinTech&lt;/li&gt;
&lt;li&gt;智能合約&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="名詞"&gt;名詞&lt;/h2&gt;
&lt;h3 id="pow"&gt;PoW&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;用來解決雙花，覆寫問題&lt;/li&gt;
&lt;li&gt;雙花
&lt;ul&gt;
&lt;li&gt;讓寫帳需要花到一些算力 =&amp;gt; 花一些時間&lt;/li&gt;
&lt;li&gt;寫帳時間 &amp;raquo; 資訊擴散時間&lt;/li&gt;
&lt;li&gt;=&amp;gt; 雙花時，還沒可以寫帳時，就已經收到這筆錢被雙花的資訊了&lt;/li&gt;
&lt;li&gt;(理論上還是沒辦法完全解決)&lt;/li&gt;
&lt;li&gt;如果有人可以掌控一部分的網域，是可能可以控制資訊的擴散&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;覆寫
&lt;ul&gt;
&lt;li&gt;每個人手上都會有一個差不多的大帳本 =&amp;gt; 某人想要複寫帳本時，會發現 99% 人的帳本都跟他的不一樣&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="區塊鏈的架構"&gt;區塊鏈的架構&lt;/h2&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h2 id="區塊鏈的應用"&gt;區塊鏈的應用&lt;/h2&gt;
&lt;h3 id="金融交易"&gt;金融交易&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;交易驗證
再做交易驗證時，需要做基本兩件事情
&lt;ul&gt;
&lt;li&gt;用公鑰確認交易資訊確實為交易發出者提出的&lt;/li&gt;
&lt;li&gt;確認交易未被雙花&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;加入 panding pool&lt;/li&gt;
&lt;li&gt;選擇有利的 chain 做連結&lt;/li&gt;
&lt;li&gt;PoW&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="智能合約"&gt;智能合約&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;由程式碼控制與理解的合約&lt;/li&gt;
&lt;li&gt;可用在 資產 or 業務流程 or &amp;hellip;&lt;/li&gt;
&lt;li&gt;程式碼對合約會有相同的理解
&lt;ul&gt;
&lt;li&gt;不會誤解&lt;/li&gt;
&lt;li&gt;不會產生&lt;strong&gt;一中各表&lt;/strong&gt;的狀況&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;對外部資料的看法一致&lt;/li&gt;
&lt;li&gt;部會因為合約的多次更迭而有所混淆
&lt;ul&gt;
&lt;li&gt;人類可能記憶遺忘&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;嚴格執行共同協定&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="自動化--去中心化"&gt;自動化 &amp;amp; 去中心化&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;沒有第三方 (銀行) 控制權
&lt;ul&gt;
&lt;li&gt;e.g. 我們根本不知道銀行的黃金夠不夠支援他的貸款 -&amp;gt; 泡沫化&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;用戶可以從外部檢驗&lt;/li&gt;
&lt;li&gt;透明度高
&lt;ul&gt;
&lt;li&gt;利益雙方資訊對等&lt;/li&gt;
&lt;li&gt;失去隱私&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;彈性
&lt;ul&gt;
&lt;li&gt;可客製化合約&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="其他資源"&gt;其他資源&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="各-crypto-currency-差別"&gt;各 crypto currency 差別&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;感謝台大前輩們的贊助
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="z-cash"&gt;
&lt;/h3&gt;
&lt;h3 id="g-coin"&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;跟 Bitcoin 一樣是 UTFO 架構&lt;/li&gt;
&lt;li&gt;G-Coin 比 Bitcoin 較不去中心化&lt;/li&gt;
&lt;li&gt;比 Bitcoin 更好寫智能合約&lt;/li&gt;
&lt;li&gt;用可信任的單位作為 Oracle&lt;/li&gt;
&lt;li&gt;n 個 Oracle 要有 m 個人同意： n of m&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="區塊鏈的瓶頸與未來"&gt;區塊鏈的瓶頸與未來&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;加密技術的優化
Bitcoin 的設計之初，並沒有想要特別去隱藏什麼，但是當區塊鏈的技術越用越廣的今天，是否會有應用希望能在上面做到 MAC then hash，又或者可以將 private key 放在上面卻能讓人僅將它拿來做驗證，而無法存取到&lt;/li&gt;
&lt;li&gt;隱私性
雖然說目前無法從 public key (address) trace 到賬戶擁有者，但似乎還是可以由一層層的轉帳過程中，找到最後獲利的人，是否可以增加隱私性，完全無法讓人 trace 到賬戶擁有者呢？&lt;/li&gt;
&lt;li&gt;IO query
我們知道，系統的整體性能，主要取決於網絡或數據存儲的I/O性能，網絡I/O優化空間不大，但是本地數據存儲的I/O是可以優化的。比如，比特幣選擇的是谷歌的LevelDB，據說這個資料庫讀寫性能很好，但是很多功能需要開發者自己實現。目前，困擾業界的一個重大問題是，加密貨幣交易處理量遠不如現在中心化的支付系統（銀行等），除了I/O，需要全方位的突破&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="block-chain-security"&gt;Block Chain Security&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;隱私不完善問題&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;Prevent sybil attack (女巫攻擊)&lt;/li&gt;
&lt;li&gt;歷史案例
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;竄改挖礦協定&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="相關論文"&gt;相關論文&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>比特幣簡介</title><link>https://calee0219.github.io/blog/cryptocurrency_bitcoin_intro/</link><pubDate>Mon, 09 Aug 2021 07:48:37 +0800</pubDate><guid>https://calee0219.github.io/blog/cryptocurrency_bitcoin_intro/</guid><description>&lt;h2 id="技術資源"&gt;技術資源&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="簡介"&gt;簡介&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Satoshi Nakamoto (中本聰)&lt;/li&gt;
&lt;li&gt;確認交易發動者
&lt;ul&gt;
&lt;li&gt;PKC&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;POW&lt;/li&gt;
&lt;li&gt;Ｄifficulity + hashing
&lt;ol&gt;
&lt;li&gt;把前面的 Block hash 放入&lt;/li&gt;
&lt;li&gt;執行交易&lt;/li&gt;
&lt;li&gt;寫帳: 做 POW 的人把前面的 Block + 寫帳資訊 做 hash&lt;/li&gt;
&lt;li&gt;若其中有人 hash 到協定，產生一個 BLock (並獲得獎勵)，做出 bloadcase 給其他人我的 hash value&lt;/li&gt;
&lt;li&gt;產生很多 Block 的同時，也可能會有多筆分枝，當 Block 後面連到 6 個 Chain 時，就代表成功了 (其它支鏈應該要被捨棄)&lt;/li&gt;
&lt;li&gt;每兩個禮拜更新一次 hashing 困難度&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;使用技術
&lt;ul&gt;
&lt;li&gt;RSA&lt;/li&gt;
&lt;li&gt;ECC&lt;/li&gt;
&lt;li&gt;Digital Signature
&lt;ul&gt;
&lt;li&gt;資料完整性 (Integrity)&lt;/li&gt;
&lt;li&gt;身份鑑別性 (Authentication)&lt;/li&gt;
&lt;li&gt;不可否認性 (Non-Repudiation)I&amp;rsquo;m&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ECDSA Signing 簽章 / 驗章&lt;/li&gt;
&lt;li&gt;SHA256&lt;/li&gt;
&lt;li&gt;Merkle Tree / Hash Tree&lt;/li&gt;
&lt;li&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://i.imgur.com/LPRRQgB.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;尋找 nounce 就是挖礦的動作&lt;/li&gt;
&lt;li&gt;double hash256&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;挖到：
&lt;ul&gt;
&lt;li&gt;最長鍊&lt;/li&gt;
&lt;li&gt;後面最少跟五個 block&lt;/li&gt;
&lt;li&gt;=&amp;gt; 6 confirmations&lt;/li&gt;
&lt;li&gt;10 分鐘一個 block&lt;/li&gt;
&lt;li&gt;-&amp;gt; 最少需要 60 分鐘才能知道有沒有 pay (挖到)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="密碼學部分"&gt;密碼學部分&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="merkle-tree"&gt;Merkle Tree&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="bitcoin-and-cryptocurrency-technologies"&gt;Bitcoin and Cryptocurrency Technologies&lt;/h2&gt;
&lt;p&gt;
&lt;/p&gt;</description></item></channel></rss>