1. 程式人生 > >C#比特幣開發詳解

C#比特幣開發詳解

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

當我們談到比特幣時,其實在不同的場景下有不同的指代。

比特幣首先是一種數字加密貨幣,使用者可以通過比特幣網路進行比特幣轉賬或商品結算,就和傳統的貨幣一樣:

不過比特幣是基於密碼學技術的虛擬化貨幣,它沒有實體,僅僅隱含在從傳送方到接收方的交易中,接收方必須使用其持有的金鑰來消費收到的比特幣。

對於科技從業者而言,比特幣則更多了一層含義:比特幣對應著一種劃時代的數字加密貨幣系統,其內容包含通訊協議、激勵機制、實現程式碼與承載網路等:

事實上,比特幣是數十年來密碼學技術、分散式計算等領域的集大成者,它不是第一個出現的數字貨幣,但無疑是最成功的,一個洞察了人性的虛擬產品。

區塊鏈結構

比特幣是一個專用資料庫,它只儲存一種型別的資料記錄——交易,例如 張三轉給李四幾個幣,或者李四轉給王五幾個幣:

一旦涉及到資金,大家都會變得慎重了。因此交易記錄最好在技術上可以保證是不能篡改的,這樣出了問題可以翻翻老賬,這就要求賬本必須值得信賴。

比特幣採用一種特殊的資料結構區塊鏈/Blockchain來保障交易的不可篡改性,每一個包含一批交易資料的區塊,同時也包含了前一個區塊的指紋:

在比特幣中,一個區塊的指紋是使用密碼學中常見的雜湊函式來實現的。雜湊函式可以將大塊資料壓縮成精簡的表示,而且可以保證如果精簡的表示不同,那麼其對應的原始資料也不同。

例如,在上圖中如果12#區塊被攻擊者篡改,那麼它的雜湊結果將不同於在13#區塊中儲存的其原始指紋,這使得識別篡改的區塊這一任務很容易,或者說篡改的難度很大——攻擊者必須同時修改12#之後的所有區塊才能保證指紋校驗成功。

另一方面,如果攻擊者直接篡改14#區塊(我們假設這是最後一個塊),那麼顯然是可行的,因為它缺乏之後更多區塊的保護。這引入了在比特幣中常用的一個概念:交易的確認數/Confirmations。

交易一旦被確認打包到區塊中,它的確認數就是1,之後每增長一個區塊則確認數加1。例如對於上圖中的標註交易,當鏈增長到14#塊時,該交易的確認數就是3。

顯然一個交易的確認數越多,意味著攻擊者篡改交易的可能性越小。在比特幣中的應用當中,交易的接收者通常需要在六個確認

之後,才可以將該筆交易視為成功。

去中心化機制

與當前流通的任何法幣都不同,比特幣是去中心化的,沒有一箇中央機構來管理比特幣的發行與流通,因此比特幣網路是一個典型的P2P網路,在每個(全)節點上都有完整的區塊鏈資料:

在這樣的分散式計算環境下,如何保證新的交易在各個節點區塊鏈中得以一致的更新,就是經典的分散式一致性問題了——每個節點都有可能提交新的交易,而不同節點提交的交易也可能不相同,到底以哪個節點為準?

解決這種問題的經典方法就是(動態)選舉一個決策者,其他節點複製決策者的行為即可避免節點之間的不一致了。比特幣的解決思路也一樣,不過它採用了一種類似於搶答的機制來動態選擇勝出的節點,由勝出的節點負責出塊並打包交易——所有節點都同時求解同一個問題,最先得到結果的節點獲勝並獲得出塊權利,其他節點則轉而求解下一次出塊的問題:

比特幣給出的問題不可以通過解析方法求解,節點必須在所有的可能結果中暴力嘗試求解,由於勝出的節點可以獲得比特幣獎勵,使得節點旳動機和行為頗為類似於淘金的西部牛仔,因此這一求解過程被稱為挖礦/Mining

理論上每個節點都有獲勝的概率,但顯然,在同樣的時間內,計算力強大的節點會比其他節點嘗試的機會更多,因此獲勝的概率也越大——在這種搶答機制下,算力代替了智力,而這種依賴於暴力求解問題從而達成節點一致性的共識演算法被稱為工作量證明/Proof Of Work

課程內容

本課程適合於希望開發比特幣應用的C#工程師,內容涵蓋比特幣的基本概念、工作原理、應用開發介面、離線金鑰管理、分層確定性錢包以及裸交易等諸多關鍵知識點。

第一章 比特幣概述

主要介紹比特幣的基本概念和核心工作原理。

第二章 Hi,比特幣

這一章主要介紹如何使用現有軟體進行比特幣的操作,例如建立地址、轉賬、查詢餘額、瀏覽區塊等,同時介紹比特幣應用中的核心概念,如錢包、交易、UTXO等。

第三章 使用RPC訪問比特幣網路

這一章主要介紹如何在程式程式碼中利用節點軟體的RPC API介面訪問比特幣網路,進行轉賬、地址建立、查詢餘額等操作,同時給出了一種簡單的在網站中支援比特幣支付的方案。

第四章 自己管理金鑰與地址

這一章主要介紹如何離線管理金鑰與地址,並詳細講解比特幣中的指令碼以及其與地址、身份驗證之間的關係。如果你希望在自己的應用中增加類似於錢包的功能,這部分的內容將讓你收益匪淺。

第五章 使用分層確定性錢包

這一章主要介紹被廣泛使用的分層確定性錢包,並詳細講解如何在程式程式碼中加以應用。如果你需要管理大量的金鑰和地址,那麼分層確定性錢包應該很有幫助。

第六章 離線構造裸交易

這一章主要介紹裸交易的作用,以及如何在程式程式碼中建立裸交易。如果你需要使用第三方節點來廣播你的比特幣交易,那麼裸交易就是你的唯一選擇。

第七章 使用SPV節點

這一章講解NBitcoin的SPV節點實現機制與核心元件。SPV節點是一種輕量的比特幣節點實現,它無須下載完整的區塊,因此非常適合實現手機上的比特幣錢包,或者應用於不希望使用全節點的其他場景。

======================================================================

分享一些比特幣、以太坊、EOS等區塊鏈相關的互動式線上程式設計實戰教程:

  • java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Java程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
  • php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Php程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
  • EOS教程,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智慧合約開發與部署、使用程式碼與智慧合約互動等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
  • java以太坊開發教程,主要是針對java和android程式設計師進行區塊鏈以太坊開發的web3j詳解。
  • python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
  • php以太坊,主要是介紹使用php進行智慧合約開發互動,進行賬號建立、交易、轉賬、代幣開發以及過濾器和交易等內容。
  • 以太坊入門教程,主要介紹智慧合約與dapp應用開發,適合入門。
  • 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
  • ERC721以太坊通證實戰,課程以一個數字藝術品創作與分享DApp的實戰開發為主線,深入講解以太坊非同質化通證的概念、標準與開發方案。內容包含ERC-721標準的自主實現,講解OpenZeppelin合約程式碼庫二次開發,實戰專案採用Truffle,IPFS,實現了通證以及去中心化的通證交易所。
  • C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括賬戶管理、狀態與交易、智慧合約開發與互動、過濾器和交易等。
  • tendermint區塊鏈開發詳解,本課程適合希望使用tendermint進行區塊鏈開發的工程師,課程內容即包括tendermint應用開發模型中的核心概念,例如ABCI介面、默克爾樹、多版本狀態庫等,也包括代幣發行等豐富的實操程式碼,是go語言工程師快速入門區塊鏈開發的最佳選擇。