當我們談到位元幣時,其實在不同的場景下有不同的指代。
位元幣首先是一種數字加密貨幣,使用者可以通過位元幣網路進行 位元幣轉賬或商品結算,就和傳統的貨幣一樣:
不過位元幣是基於密碼學技術的虛擬化貨幣,它沒有實體,僅僅隱含在從傳送方到接收方的交易中,接收方必須使用其持有的金鑰來 消費收到的位元幣。
匯智網
事實上,位元幣是數十年來密碼學技術、分布式計算等領域的集大成者, 它不是第乙個出現的數字貨幣,但無疑是最成功的,乙個洞察了人性的虛擬產品。
位元幣是乙個專用資料庫,它只儲存一種型別的資料記錄 —— 交易,例如 張三轉給李四幾個幣,或者李四轉給王五幾個幣:
一旦涉及到資金,大家都會變得慎重了。因此交易記錄最好在技術上可以保證 是不能篡改的,這樣出了問題可以翻翻老賬,這就要求賬本必須值得信賴。
位元幣採用一種特殊的資料結構區塊鏈/blockchain來保障交易的不可篡改性, 每乙個包含一批交易資料的區塊,同時也包含了前乙個區塊的指紋:
在位元幣中,乙個區塊的指紋是使用密碼學中常見的雜湊函式來實現的。 雜湊函式可以將大塊資料壓縮成精簡的表示,而且可以保證如果精簡 的表示不同,那麼其對應的原始資料也不同。
例如,在上圖中如果12#區塊被攻擊者篡改,那麼它的雜湊結果將不同於在 13#區塊中儲存的其原始指紋,這使得識別篡改的區塊這一任務很容易,或者 說篡改的難度很大 —— 攻擊者必須同時修改12#之後的所有區塊才能保證 指紋校驗成功。
另一方面,如果攻擊者直接篡改14#區塊(我們假設這是最後乙個塊),那麼 顯然是可行的,因為它缺乏之後更多區塊的保護。這引入了在位元幣中常用 的乙個概念:交易的確認數/confirms。
交易一旦被確認打包到區塊中,它的確認數就是1,之後每增長乙個區塊 則確認數加1。例如對於上圖中的標註交易,當鏈增長到14#塊時,該交易的 確認數就是3。
顯然乙個交易的確認數越多,意味著攻擊者篡改交易的可能性越小。在位元幣 中的應用當中,交易的接收者通常需要在六個確認之後,才可以將該筆 交易視為成功。
與當前流通的任何法幣都不同,位元幣是去中心化的,沒有乙個**機構 來管理位元幣的發行與流通,因此位元幣網路是乙個典型的p2p網路,在每個 (全)節點上都有完整的區塊鏈資料:
匯智網
在這樣的分布式計算環境下,如何保證新的交易在各個節點區塊鏈中得以 一致的更新,就是經典的分布式一致性問題了 —— 每個節點都有可能提交 新的交易,而不同節點提交的交易也可能不相同,到底以哪個節點為準?
解決這種問題的經典方法就是(動態)選舉乙個決策者,其他節點複製 決策者的行為即可避免節點之間的不一致了。位元幣的解決思路也一樣, 不過它採用了一種類似於搶答的機制來動態選擇勝出的節點,由勝出的 節點負責出塊並打包交易 —— 所有節點都同時求解同乙個問題,最先得到結果 的節點獲勝並獲得出塊權利,其他節點則轉而求解下一次出塊的問題:
位元幣給出的問題不可以通過解析方法求解,節點必須在所有的可能 結果中暴力嘗試求解,由於勝出的節點可以獲得位元幣獎勵,使得 節點旳動機和行為頗為類似於淘金的西部牛仔,因此這一求解過程被 稱為挖礦/mining。
理論上每個節點都有獲勝的概率,但顯然,在同樣的時間內,計算力強大的 節點會比其他節點嘗試的機會更多,因此獲勝的概率也越大 —— 在這種搶答機制下, 算力代替了智力,而這種依賴於暴力求解問題從而達成節點一致性的共識演算法 被稱為工作量證明/proof of work。
本課程適合於希望開發位元幣應用的php工程師,內容涵蓋位元幣的基本 概念、工作原理、應用開發介面、離線金鑰管理、分層確定性錢包以及 裸交易等諸多關鍵知識點。
第一章 位元幣概述
主要介紹位元幣的基本概念和核心工作原理。
第二章 hi,位元幣
這一章主要介紹如何使用現有軟體進行位元幣的操作,例如建立位址、轉賬、 查詢餘額、瀏覽區塊等,同時介紹位元幣應用中的核心概念,如錢包、交易、utxo等。
第三章 使用rpc訪問位元幣網路
第四章 自己管理金鑰與位址
這一章主要介紹如何離線管理金鑰與位址,並詳細講解位元幣中的指令碼以及 其與位址、身份驗證之間的關係。如果你希望在自己的應用中增加類似於 錢包的功能,這部分的內容將讓你收益匪淺。
第五章 使用分層確定性錢包
這一章主要介紹被廣泛使用的分層確定性錢包,並詳細講解如何在程式** 中加以應用。如果你需要管理大量的金鑰和位址,那麼分層確定性錢包應該 很有幫助。
第六章 離線構造裸交易
這一章主要介紹裸交易的作用,以及如何在程式**中建立裸交易。如果你 需要使用第三方節點來廣播你的位元幣交易,那麼裸交易就是你的唯一選擇。
位元幣PHP離線交易開發包
btctool是乙個基於第三方服務和離線裸交易實現的php位元幣應用開發包,適合不希望部署本地 節點旳php開發者,開發包主要包含以下特性 btctool目前支援的第三方服務包括,並且可以非常簡單進行擴充套件 btctool執行在 php 7.1 環境下,當前版本1.0.0,主要 檔案清單如下 檔案...
位元幣PHP離線交易開發包
btctool是乙個基於第三方服務和離線裸交易實現的php位元幣應用開發包,適合不希望部署本地 節點旳php開發者,開發包主要包含以下特性 btctool目前支援的第三方服務包括,並且可以非常簡單進行擴充套件 btctool執行在php 7.1 環境下,當前版本1.0.0,主要 檔案清單如下 碼檔案...
位元幣PHP離線交易開發包
btctool是乙個基於第三方服務和離線裸交易實現的php位元幣應用開發包,適合不希望部署本地 節點旳php開發者,開發包主要包含以下特性 btctool目前支援的第三方服務包括,並且可以非常簡單進行擴充套件 btctool執行在 php 7.1 環境下,當前版本1.0.0,主要 檔案清單如下 碼檔...