今天小編給大家分享的是php構(gòu)建區(qū)塊鏈的方法,相信很多人都不太了解,為了讓大家更加了解,所以給大家總結(jié)了以下內(nèi)容,一起往下看吧。一定會(huì)有所收獲的哦。
在瀘州等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供成都做網(wǎng)站、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制開(kāi)發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),成都營(yíng)銷(xiāo)網(wǎng)站建設(shè),外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè),瀘州網(wǎng)站建設(shè)費(fèi)用合理。區(qū)塊鏈
區(qū)塊鏈(Blockchain)是借由密碼學(xué)串接并保護(hù)內(nèi)容的串連交易記錄(又稱(chēng)區(qū)塊),是分布式數(shù)據(jù)存儲(chǔ)、點(diǎn)對(duì)點(diǎn)傳輸、共識(shí)機(jī)制、加密算法等計(jì)算機(jī)技術(shù)的新型應(yīng)用模式。
php構(gòu)建一個(gè)區(qū)塊鏈(含源碼)
我們要用PHP編程語(yǔ)言構(gòu)建區(qū)塊鏈,區(qū)塊鏈本身就是一個(gè)非常簡(jiǎn)單的概念,它是一個(gè)非常簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),數(shù)字貨幣是很復(fù)雜,但區(qū)塊鏈不是,它們復(fù)雜的原因是共識(shí)算法,挖礦機(jī)制和運(yùn)行在他們之上的一切,但區(qū)塊鏈本身是很容易理解的,在你真正了解區(qū)塊鏈?zhǔn)侨绾喂ぷ鞯闹埃阈枰朗裁?,你需要知道什么是哈希hash?它們是如何工作的?
哈?;旧鲜悄撤N數(shù)據(jù)的數(shù)字簽名,例如可以拍一部電影,可以hash它并得到一個(gè)數(shù)字簽名;可以拿一封電子郵件,可以把它hash并得到一個(gè)數(shù)字簽名;還可以拿一個(gè)字,也可以hash它,你可以拿任何數(shù)據(jù),然后hash它,你都可以得到一個(gè)hash值。它只是對(duì)該數(shù)據(jù)進(jìn)行數(shù)字簽名。
這個(gè)hash哈希實(shí)際上是如何工作的?讓我們深入了解下。
我們將在PHP中構(gòu)建區(qū)塊鏈,這將非常簡(jiǎn)單,如果你懂一點(diǎn)兒編程,你也可以用另一種語(yǔ)言來(lái)做,如果你不懂編程,我想你仍然能夠大致理解它是如何工作的,所以讓我們來(lái)談?wù)劰ash。
list 2: ".md5(serialize($list2)); ?>
正如你所看到的,我們有兩個(gè)列表,我們有兩個(gè)包含a、b、c的列表,這是數(shù)據(jù),這是我們?cè)噲Dhash的字符串,讓我們看看我們從列表1和2中得到什么樣的數(shù)字簽名。
輸出結(jié)果:
list 1: ec10e0c7a344da191700ab4ace1a5e26 list 2: ec10e0c7a344da191700ab4ace1a5e26
你可以看到,當(dāng)我們得到這兩個(gè)哈希字符串或數(shù)字簽名,這兩個(gè)是相同的。
如果我現(xiàn)在改變list1中的內(nèi)容,例如:
list 2: ".md5(serialize($list2)); ?>
現(xiàn)在我在運(yùn)行它:
list 1: 97f4361000fdba1732a50f1771c9d830 list 2: ec10e0c7a344da191700ab4ace1a5e26
你可以看到我們得到了完全不同的數(shù)字簽名,所以如果我只是做一個(gè)小的修改,我只是干預(yù)數(shù)據(jù),我試圖改變這個(gè)列表中的任何東西,我將得到完全不同的數(shù)字簽名,這是區(qū)塊鏈技術(shù)的基礎(chǔ),因?yàn)閰^(qū)塊鏈?zhǔn)且粋€(gè)塊的列表,基本上是一個(gè)由區(qū)塊組成的鏈表和每個(gè)塊保持前一個(gè)塊的數(shù)字簽名,并且下一個(gè)塊的數(shù)字簽名是基于當(dāng)前塊的數(shù)字簽名,所以它們總是關(guān)聯(lián)在一起,下一個(gè)簽名將基于當(dāng)前簽名而當(dāng)前簽名是基于以前的簽名,所以如果你改變過(guò)去的任何東西,你會(huì)打破所有的簽名,他們將看起來(lái)完全不同。
如何編碼
讓我們實(shí)際進(jìn)入我們的區(qū)塊鏈編碼,我們需要做的第一件事是談?wù)撐覀兊腂lock類(lèi),在這種情況下,我們的塊將非常簡(jiǎn)單,它只包含三個(gè)東西,它將包含在該塊中發(fā)生的交易列表,它將包含先前的哈?;驍?shù)字簽名的前一個(gè)塊,它也將包含哈希的本身,這個(gè)哈希將基于交易和以前的哈希,所以如果任何人改變?nèi)魏螙|西在前一塊,數(shù)字簽名的當(dāng)前塊將改變,并改變下一個(gè)塊的數(shù)字簽名。
使用你喜歡的IDE重新生成空的PHP項(xiàng)目,我在本地主機(jī)環(huán)境中使用XAMPP。
現(xiàn)在創(chuàng)建一個(gè)新的文件block.php,并在其中放入下面的代碼片段。
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)建另一個(gè)名為index.php的文件,并使用block.php類(lèi)來(lái)創(chuàng)建一些塊。
index.php
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 "
Block 1: ".$block1->getBlockHash(); echo "
Block 2: ".$block2->getBlockHash(); ?>
輸出結(jié)果:
Genesis Block: d9c559b57e148b19802d8e70555f0303 Block 1: 29e9e5a309aae81243fdf73112253c74 Block 2: fbff8f664f6b4069bf7288cb1b86cb3a
請(qǐng)看當(dāng)前哈希將基于以前的哈希,如果你改變了任何先前的交易,你的所有數(shù)字簽名將生效,例如,在genesisTransaction中,我改變了11到12,它將輸出完全不同的,如:
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 "
Block 1: ".$block1->getBlockHash(); echo "
Block 2: ".$block2->getBlockHash(); ?>
輸出結(jié)果:
Genesis Block: d9c559b57e148b19802d8e70555f0303 Block 1: 29e9e5a309aae81243fdf73112253c74 Block 2: fbff8f664f6b4069bf7288cb1b86cb3a
你可以看到任何一個(gè)交易的變化,在一個(gè)塊中的任何一個(gè)數(shù)據(jù)將傳播和改變未來(lái)的區(qū)塊鏈中所有的數(shù)字簽名,這就是區(qū)塊鏈的工作原理,因?yàn)槿绻腋淖兞耸裁?,每個(gè)人都會(huì)看到我的數(shù)字簽名完全不同于其他人,所以這意味著我在欺騙別人。就如同我告訴每個(gè)人,嘿,一個(gè)人給了我很多比特幣,這里是區(qū)塊鏈,請(qǐng)每個(gè)人確認(rèn)下。每個(gè)人將查看它并說(shuō)清楚,我們知道這個(gè)區(qū)塊鏈無(wú)法確認(rèn)這一點(diǎn),因?yàn)槲覀冇凶约喊姹镜膮^(qū)塊鏈,數(shù)字簽名會(huì)是完全不同,所以這不行。
我希望你能理解通過(guò)它們的數(shù)字簽名將區(qū)塊的哈希鏈接在一起的這一基本概念。在你的PHP中實(shí)現(xiàn)這個(gè)例子吧。
以上就是php構(gòu)建區(qū)塊鏈的方法的簡(jiǎn)略介紹,當(dāng)然詳細(xì)使用上面的不同還得要大家自己使用過(guò)才領(lǐng)會(huì)。如果想了解更多,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道哦!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。