PHP程式設計師如何基於位元幣開發各種相關功能

2021-09-13 11:06:04 字數 2724 閱讀 9116

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

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

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

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

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

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

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

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

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

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

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

顯然乙個交易的確認數越多,意味著攻擊者篡改交易的可能性越小。在位元幣 中的應用當中,交易的接收者通常需要在六個確認之後,才可以將該筆 交易視為成功。

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

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

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

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

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

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

第一章 位元幣概述

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

第二章 hi,位元幣

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

第三章 使用rpc訪問位元幣網路

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

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

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

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

第六章 離線構造裸交易

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

PHP程式設計師開發位元幣入門簡介

linuxapachemysqlphp 位元幣教程。在本簡介中,我們假設你擁有apache和php的gnu linux伺服器,並且你希望從web應用程式與位元幣網路進行互動。我們假設你有一些位元幣的知識和php經驗。雖然這是為php編寫的,但同樣的原則適用於其他語言。有關其他語言的資訊,請參閱相關的...

PHP如何開發位元幣詳解

當我們談到位元幣時,其實在不同的場景下有不同的指代。位元幣首先是一種數字加密貨幣,使用者可以通過位元幣網路進行 位元幣轉賬或商品結算,就和傳統的貨幣一樣 不過位元幣是基於密碼學技術的虛擬化貨幣,它沒有實體,僅僅隱含在從傳送方到接收方的交易中,接收方必須使用其持有的金鑰來 消費收到的位元幣。匯智網 事...

如何面試php程式設計師,如何面試PHP程式設計師

乙個包含中英文的字串如何獲得它的自然長度 看看ta是否有encoding的知識和意識 問一問什麼是orm,有時候會問這個詞的英文全稱是什麼,問問ta對於orm有什麼個人的看法?看看ta學習細不細,有沒有技術判斷,php開發人員應該知道什麼時候使用orm 問一問假如ta要自己去實現乙個framewor...