php構(gòu)建區(qū)塊鏈的方法-創(chuàng)新互聯(lián)

今天小編給大家分享的是php構(gòu)建區(qū)塊鏈的方法,相信很多人都不太了解,為了讓大家更加了解,所以給大家總結(jié)了以下內(nèi)容,一起往下看吧。一定會有所收獲的哦。

在瀘州等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,成都營銷網(wǎng)站建設(shè),外貿(mào)營銷網(wǎng)站建設(shè),瀘州網(wǎng)站建設(shè)費用合理。

區(qū)塊鏈

區(qū)塊鏈(Blockchain)是借由密碼學(xué)串接并保護(hù)內(nèi)容的串連交易記錄(又稱區(qū)塊),是分布式數(shù)據(jù)存儲、點對點傳輸、共識機(jī)制、加密算法等計算機(jī)技術(shù)的新型應(yīng)用模式。

php構(gòu)建一個區(qū)塊鏈(含源碼)

我們要用PHP編程語言構(gòu)建區(qū)塊鏈,區(qū)塊鏈本身就是一個非常簡單的概念,它是一個非常簡單的數(shù)據(jù)結(jié)構(gòu),數(shù)字貨幣是很復(fù)雜,但區(qū)塊鏈不是,它們復(fù)雜的原因是共識算法,挖礦機(jī)制和運行在他們之上的一切,但區(qū)塊鏈本身是很容易理解的,在你真正了解區(qū)塊鏈?zhǔn)侨绾喂ぷ鞯闹?,你需要知道什么,你需要知道什么是哈希hash?它們是如何工作的?

哈希基本上是某種數(shù)據(jù)的數(shù)字簽名,例如可以拍一部電影,可以hash它并得到一個數(shù)字簽名;可以拿一封電子郵件,可以把它hash并得到一個數(shù)字簽名;還可以拿一個字,也可以hash它,你可以拿任何數(shù)據(jù),然后hash它,你都可以得到一個hash值。它只是對該數(shù)據(jù)進(jìn)行數(shù)字簽名。

php構(gòu)建區(qū)塊鏈的方法

這個hash哈希實際上是如何工作的?讓我們深入了解下。

我們將在PHP中構(gòu)建區(qū)塊鏈,這將非常簡單,如果你懂一點兒編程,你也可以用另一種語言來做,如果你不懂編程,我想你仍然能夠大致理解它是如何工作的,所以讓我們來談?wù)劰ash。

<?php
    $list1 = ["a","b","c"];
    $list2 = ["a","b","c"];
    echo "list 1: ".md5(serialize($list1));
    echo "<br/>list 2: ".md5(serialize($list2));
?>

正如你所看到的,我們有兩個列表,我們有兩個包含a、b、c的列表,這是數(shù)據(jù),這是我們試圖hash的字符串,讓我們看看我們從列表1和2中得到什么樣的數(shù)字簽名。

輸出結(jié)果:

list 1: ec10e0c7a344da191700ab4ace1a5e26
list 2: ec10e0c7a344da191700ab4ace1a5e26

你可以看到,當(dāng)我們得到這兩個哈希字符串或數(shù)字簽名,這兩個是相同的。

如果我現(xiàn)在改變list1中的內(nèi)容,例如:

<?php
    $list1 = ["aaa","b","c"]; //Changed
    $list2 = ["a","b","c"];
    echo "list 1: ".md5(serialize($list1));
    echo "<br/>list 2: ".md5(serialize($list2));
?>

現(xiàn)在我在運行它:

list 1: 97f4361000fdba1732a50f1771c9d830
list 2: ec10e0c7a344da191700ab4ace1a5e26

你可以看到我們得到了完全不同的數(shù)字簽名,所以如果我只是做一個小的修改,我只是干預(yù)數(shù)據(jù),我試圖改變這個列表中的任何東西,我將得到完全不同的數(shù)字簽名,這是區(qū)塊鏈技術(shù)的基礎(chǔ),因為區(qū)塊鏈?zhǔn)且粋€塊的列表,基本上是一個由區(qū)塊組成的鏈表和每個塊保持前一個塊的數(shù)字簽名,并且下一個塊的數(shù)字簽名是基于當(dāng)前塊的數(shù)字簽名,所以它們總是關(guān)聯(lián)在一起,下一個簽名將基于當(dāng)前簽名而當(dāng)前簽名是基于以前的簽名,所以如果你改變過去的任何東西,你會打破所有的簽名,他們將看起來完全不同。

如何編碼

讓我們實際進(jìn)入我們的區(qū)塊鏈編碼,我們需要做的第一件事是談?wù)撐覀兊腂lock類,在這種情況下,我們的塊將非常簡單,它只包含三個東西,它將包含在該塊中發(fā)生的交易列表,它將包含先前的哈?;驍?shù)字簽名的前一個塊,它也將包含哈希的本身,這個哈希將基于交易和以前的哈希,所以如果任何人改變?nèi)魏螙|西在前一塊,數(shù)字簽名的當(dāng)前塊將改變,并改變下一個塊的數(shù)字簽名。

使用你喜歡的IDE重新生成空的PHP項目,我在本地主機(jī)環(huán)境中使用XAMPP。

現(xiàn)在創(chuàng)建一個新的文件block.php,并在其中放入下面的代碼片段。

<?php
    class Block{
              private $previousHash;
              private $transactions=[];
              private $blockHash;
              function __construct($previousHash,$transactions){
                             $this->previousHash = $previousHash;
                             $this->transactions = $transactions;
                             $contents = [md5(serialize($transactions)),$previousHash];
                             $this->blockHash = md5(serialize($contents));
              }
              function getPreviousHash(){
                             return $this->previousHash;
              }
              function getTransactions(){
                             return $this->transactions;
              }
              function getBlockHash(){
                             return $this->blockHash;
              }
    }
?>

現(xiàn)在創(chuàng)建另一個名為index.php的文件,并使用block.php類來創(chuàng)建一些塊。

index.php

<?php
    include("block.php");
    $genesisTransaction = ["a sends 11 bitcoins to b","b sends 44 bitcoins to c"];
    $genenisBlock = new Block(0, $genesisTransaction);
    $block1Transaction = ["a sends 11 bitcoins to b","b sends 44 bitcoins to c"];
    $block1 = new Block($genenisBlock->getBlockHash(), $block1Transaction);
    $block2Transaction = ["a sends 11 bitcoins to b","b sends 44 bitcoins to c"];
    $block2 = new Block($block1->getBlockHash(), $block2Transaction);
    echo "Genesis Block: ".$genenisBlock->getBlockHash();
    echo "<br/>Block 1: ".$block1->getBlockHash();
    echo "<br/>Block 2: ".$block2->getBlockHash();
?>

輸出結(jié)果:

Genesis Block: d9c559b57e148b19802d8e70555f0303
Block 1: 29e9e5a309aae81243fdf73112253c74
Block 2: fbff8f664f6b4069bf7288cb1b86cb3a

請看當(dāng)前哈希將基于以前的哈希,如果你改變了任何先前的交易,你的所有數(shù)字簽名將生效,例如,在genesisTransaction中,我改變了11到12,它將輸出完全不同的,如:

<?php
    include("block.php"); 
    $genesisTransaction = ["a sends 12 bitcoins to b","b sends 44 bitcoins to c"]; //changed 11 to 12
    $genenisBlock = new Block(0, $genesisTransaction);
    $block1Transaction = ["a sends 11 bitcoins to b","b sends 44 bitcoins to c"];
    $block1 = new Block($genenisBlock->getBlockHash(), $block1Transaction);
    $block2Transaction = ["a sends 11 bitcoins to b","b sends 44 bitcoins to c"];
    $block2 = new Block($block1->getBlockHash(), $block2Transaction);
    echo "Genesis Block: ".$genenisBlock->getBlockHash();
    echo "<br/>Block 1: ".$block1->getBlockHash();
    echo "<br/>Block 2: ".$block2->getBlockHash();
?>

輸出結(jié)果:

Genesis Block: d9c559b57e148b19802d8e70555f0303
Block 1: 29e9e5a309aae81243fdf73112253c74
Block 2: fbff8f664f6b4069bf7288cb1b86cb3a

你可以看到任何一個交易的變化,在一個塊中的任何一個數(shù)據(jù)將傳播和改變未來的區(qū)塊鏈中所有的數(shù)字簽名,這就是區(qū)塊鏈的工作原理,因為如果我改變了什么,每個人都會看到我的數(shù)字簽名完全不同于其他人,所以這意味著我在欺騙別人。就如同我告訴每個人,嘿,一個人給了我很多比特幣,這里是區(qū)塊鏈,請每個人確認(rèn)下。每個人將查看它并說清楚,我們知道這個區(qū)塊鏈無法確認(rèn)這一點,因為我們有自己版本的區(qū)塊鏈,數(shù)字簽名會是完全不同,所以這不行。

我希望你能理解通過它們的數(shù)字簽名將區(qū)塊的哈希鏈接在一起的這一基本概念。在你的PHP中實現(xiàn)這個例子吧。

以上就是php構(gòu)建區(qū)塊鏈的方法的簡略介紹,當(dāng)然詳細(xì)使用上面的不同還得要大家自己使用過才領(lǐng)會。如果想了解更多,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道哦!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

標(biāo)題名稱:php構(gòu)建區(qū)塊鏈的方法-創(chuàng)新互聯(lián)
文章路徑:http://www.muchs.cn/article4/dhciie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、標(biāo)簽優(yōu)化響應(yīng)式網(wǎng)站、定制開發(fā)、微信小程序用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)