国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

從0編寫區(qū)塊鏈:用python解釋區(qū)塊鏈最基本原理

這篇具有很好參考價值的文章主要介紹了從0編寫區(qū)塊鏈:用python解釋區(qū)塊鏈最基本原理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

人工智能和區(qū)塊鏈誕生至今已經(jīng)有了十幾年,當(dāng)這些技術(shù)出現(xiàn)時,人們都說他們會改變世界,但至今為止,這兩項(xiàng)技術(shù)對現(xiàn)實(shí)的影響依然有限。從技術(shù)上看人工智能的原理其實(shí)是從大量數(shù)據(jù)中尋找規(guī)律或模式,但區(qū)塊鏈的技術(shù)原理是什么呢?在我看來區(qū)塊鏈的原理一直處于云里霧里,有很多近乎玄學(xué)的解釋將其籠罩,有人從經(jīng)濟(jì)學(xué)解釋,有人從社會學(xué)解釋,從”人文“角度解釋的區(qū)塊鏈總是過于夸大其詞,這些說法中往往又包含不良用心。

由此我想去蕪存真,我們不用關(guān)心區(qū)塊鏈如何”改變世界“,我們就從純技術(shù)角度去探討,其實(shí)區(qū)塊鏈和人工智能一樣,從技術(shù)的角度看去,他們都有著極為美妙的設(shè)計(jì)思想,這些設(shè)計(jì)的美妙就像唐詩宋詞,就像畢加索的話,如果我們沒有去欣賞它的美,那豈不可惜。相比于人工智能,我認(rèn)為區(qū)塊鏈在技術(shù)上更容易被普通人觸碰,因?yàn)榍罢咝枰罅康臄?shù)據(jù)和算力,而后者只要我們掌握其技術(shù)原理就能參與其中,不需要太高的硬件門檻。

話不多說,我們看看如何用python代碼把最基本的區(qū)塊鏈原理編寫出來。首先我們看區(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu),它包含三部分信息,一是用于標(biāo)志自己的id,它是一個整數(shù),第二個是用于記錄前一個區(qū)塊的id,也是一個整數(shù),由于區(qū)塊用于記錄信息,因此它還包含一個字段,我們用history來表示,這個字段用來記錄當(dāng)前發(fā)生了的信息,區(qū)塊鏈最大的作用就是讓這段信息可驗(yàn)證而且不可更改,我們先看數(shù)據(jù)結(jié)構(gòu)的定義,先創(chuàng)建文件block.:

class Block:
    def __init__(self):
        self.id = None
        self.history = None
        self.parent_id = None

接下來我們看看區(qū)塊如何行成”鏈“,同時如何記錄信息。假設(shè)我們想要記錄這么一個事件:張三想跟李四用一百塊買三條魚,李四收到一百塊后給了張三三條魚”,那么我們可以使用下面代碼用區(qū)塊鏈進(jìn)行記錄,創(chuàng)建main.py,然后給出如下代碼:

from block import *

block_A = Block()
block_A.id = 1
block_A.history = '張三想要三條魚'

block_B = Block()
block_B.id = 2
block_B.parent_id = block_A.id
block_B.history = '張三跟李四買三條魚'

block_C = Block()
block_C.id = 3
block_C.parent_id = block_B.id
block_C.history = '張三給李四一百塊'

block_D = Block()
block_D.id = 3
block_D.parent_id = block_B.id
block_D.history = '李四收到張三一百塊'

block_E = Block()
block_E.id = 3
block_E.parent_id = block_B.id
block_E.history = '李四給張三三條魚'

從代碼上看不同區(qū)塊之間通過parent_id形成了前后連接關(guān)系,這就是區(qū)塊鏈中的“鏈”,但現(xiàn)在還有一個嚴(yán)重問題,那就是信息可以更改,假設(shè)張三想來著,他把block_E里面的history改成李四給張三兩條魚,然后找李四算賬那怎辦,或者李四想賴賬,把block_D中的history改成“李四收到張三五十塊”,然后又找張三要錢,那怎么辦。

為了確保信息不被更改,我們需要對每個區(qū)塊的內(nèi)容進(jìn)行加密或者哈希,因此上面代碼修改如下:

# This is a sample Python script.

# Press ?R to execute it or replace it with your code.
# Press Double ? to search everywhere for classes, files, tool windows, actions, and settings.

from block import *
import hashlib
import json

block_A = Block()
block_A.id = 1
block_A.history = '張三想要三條魚'

block_B = Block()
block_B.id = 2
block_B.parent_id = block_A.id
block_B.history = '張三跟李四買三條魚'
block_B.parent_hash = hashlib.sha256(json.dumps(block_A.__dict__).encode('utf-8')).hexdigest()

block_C = Block()
block_C.id = 3
block_C.parent_id = block_B.id
block_C.history = '張三給李四一百塊'
block_C.parent_hash = hashlib.sha256(json.dumps(block_B.__dict__).encode('utf-8')).hexdigest()

block_D = Block()
block_D.id = 4
block_D.parent_id = block_C.id
block_D.history = '李四收到張三一百塊'
block_D.parent_hash = hashlib.sha256(json.dumps(block_C.__dict__).encode('utf-8')).hexdigest()

block_E = Block()
block_E.id = 5
block_E.parent_id = block_B.id
block_E.history = '李四給張三三條魚'
block_E.parent_hash = hashlib.sha256(json.dumps(block_D__dict__).encode('utf-8')).hexdigest()

有了哈希,如何任何一個區(qū)塊被修改,那么當(dāng)前區(qū)塊和后續(xù)區(qū)塊的哈希都得修改,例如李四把block_C的history改成“張三給李四五十塊”,那么我們看到李四必須要把block_C到block_E的哈希全部改了,如果這條鏈很長的話,李四改起來就非常吃力。同時為了確保信息的可靠性,
張三和李四需要把上面的區(qū)塊鏈發(fā)送給其他一百個人進(jìn)行存儲,這樣一來張三或李四想要賴賬那就更加困難,因?yàn)橛幸话賯€見證者。

區(qū)塊鏈信息記錄的特點(diǎn)是只增不刪,因此張三想要賴賬的話,他只能在上面基礎(chǔ)上再增加一個區(qū)塊,也就是block_F, 里面的history寫上了“張三收到李四兩條魚”,然后將這個區(qū)塊發(fā)給其他100個人,為了防止隨意添加區(qū)塊造成信息混亂的情況,在區(qū)塊鏈中有一個專門的角色負(fù)責(zé)將新增的區(qū)塊添加到現(xiàn)有的區(qū)塊鏈上,這個角色拿到區(qū)塊數(shù)據(jù)后,,在不考慮parent_hash字段的情況下將數(shù)據(jù)序列化,接著找到一個特定字符串,這個字符串必須滿足給定要求,那就是它與區(qū)塊序列化的數(shù)據(jù)合并后,算出來的哈希值必須以5個0開頭,我們從代碼上看看這是什么意思:


#proof-of-work
block_F = Block()
block_F.id = 6
block_E.parent_id = block_E.id
block_E.history = '李四給張三三條魚'
#注意我們這里沒有設(shè)置parent_hash字段
block_F_serialized = json.dumps(block_F.__dict__).encode('utf-8')
print(block_F_serialized)
for i in range(10000000):
    proof_of_work = str(i).encode('utf-8')
    result = hashlib.sha256(block_F_serialized + proof_of_work).hexdigest()
    if result[:5] == '00000': #哈希結(jié)果只有以5個0開頭才能添加區(qū)塊到公鏈
        print(proof_of_work)
        print(result)
        break 
    #找到特定字符串后獲取回報,所謂挖礦就是干這個事情

上面代碼運(yùn)行后所得結(jié)果為:

b'{"id": 6, "history": null, "parent_id": null, "parent_hash": null}'
b'553448'
0000034ba1dabbf794212082b47a6bcc98cb33eed86d363993270ca58e243bb9

也就是說特定字符串內(nèi)容為"553448",它能使得新區(qū)塊內(nèi)容和它結(jié)合后算出來的哈希以5個0開頭,專門負(fù)責(zé)給區(qū)塊查找這種字符串的角色就叫“礦工”,這個查找過程就叫挖礦,一旦找到這個特定字符串后他就能獲取回報,也就是加密貨幣。

現(xiàn)在我們實(shí)現(xiàn)了數(shù)據(jù)的修改很困難,同時區(qū)塊的添加也需要付出一定成本,但假設(shè)李四就是拼了老命也想把以前記錄的信息修改掉,并為此愿意付出一切代價,假設(shè)當(dāng)前區(qū)塊鏈有1000個數(shù)據(jù)塊,他想修改第一個塊記錄的信息,于是他修改了后面999個數(shù)據(jù)塊的數(shù)據(jù),但原始數(shù)據(jù)被其他人掌握著,因此他自己修改的數(shù)據(jù)就不會被采納。由于區(qū)塊鏈數(shù)據(jù)被分布存儲在不同地方,于是在某項(xiàng)地方數(shù)據(jù)可能會被修改,這樣就會出現(xiàn)數(shù)據(jù)不一致的情況,區(qū)塊鏈還有一個重要任務(wù)就是在這種情況下達(dá)成共識。

同時當(dāng)有新的區(qū)塊需要加入公鏈時,我們需要將新增區(qū)塊通過廣播的方式通知所有人,于是就有個問題,那就是有些人較早獲得通知,有些獲得通知較晚,更有可能你會同時收到多個消息,假設(shè)現(xiàn)在公鏈上最后一個消息編號為5,此時你同時收到了兩個消息東邊發(fā)來的消息為history:王五想跟李四買一斤蝦;西邊發(fā)來的消息為history:李六想跟張三買兩條魚,那么我們應(yīng)該將哪個消息作為編號6呢,此時的做法是先等等,如果過了一會西邊發(fā)來了5條消息,同時東邊只發(fā)來2條消息,那么就把消息少的拋棄,將消息多的經(jīng)過處理后添加到公鏈。

通過選擇數(shù)據(jù)多的添加到公鏈有個好處就是讓數(shù)據(jù)的修改變得幾乎不可能,例如李四辛辛苦苦花了半小時修改了999個區(qū)塊,然后想要廣播給其他人,但是很可能這段時間內(nèi)有10000個新區(qū)塊生成,于是他修改的999個區(qū)塊就會被丟棄掉,這樣他就無法進(jìn)行任何修改。這個過程其實(shí)涉及到非常復(fù)雜的分布式計(jì)算理論,我們無法簡單使用代碼實(shí)現(xiàn)。

區(qū)塊鏈的設(shè)計(jì)思想非常偉大,它集合了很多智慧的結(jié)晶,例如加密算法,分布式算法,心理學(xué),經(jīng)濟(jì)學(xué)等,由于它跨越領(lǐng)域太多,這也是它特別“玄學(xué)”的原因,我們后面僅從技術(shù)的角度進(jìn)行思考,看看區(qū)塊鏈采用的算法原理,同時也逐步探討如何基于區(qū)塊鏈的基礎(chǔ)上進(jìn)行應(yīng)用開發(fā)。文章來源地址http://www.zghlxwxcb.cn/news/detail-431678.html

到了這里,關(guān)于從0編寫區(qū)塊鏈:用python解釋區(qū)塊鏈最基本原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 區(qū)塊鏈實(shí)戰(zhàn):用python編寫最簡單的比特幣區(qū)塊鏈本地測試框架

    區(qū)塊鏈實(shí)戰(zhàn):用python編寫最簡單的比特幣區(qū)塊鏈本地測試框架

    比特幣本身并不是特別復(fù)雜,中本聰?shù)陌灼挥惺撟笥摇?可從該鏈接下載(有各種語言版本):Bitcoin: A Peer-to-Peer Electronic Cash System 但是,真正投入使用的比特幣系統(tǒng)實(shí)際上非常復(fù)雜,包含諸多因素,涉及諸多細(xì)節(jié),甚至對一個手續(xù)費(fèi)機(jī)制研究幾天還云里霧里。 如何有效地

    2024年02月05日
    瀏覽(21)
  • 如何用Rust語言構(gòu)建一個基本的區(qū)塊鏈應(yīng)用,并用實(shí)際案例來演示區(qū)塊鏈的工作原理和應(yīng)用

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) 在區(qū)塊鏈領(lǐng)域,已經(jīng)出現(xiàn)了很多種不同的方案,從最原始的比特幣到現(xiàn)如今的基于分布式數(shù)據(jù)庫的各類公鏈系統(tǒng)等等。這些方案都采用了區(qū)塊鏈技術(shù),用來解決“去中心化”、“可追溯”和“安全”的問題。雖然各有千秋,但是作為一名合格的

    2024年02月10日
    瀏覽(33)
  • 《區(qū)塊鏈原理與技術(shù)》學(xué)習(xí)筆記(四) ——以太坊的基本架構(gòu)、賬戶模型和智能合約

    《區(qū)塊鏈原理與技術(shù)》學(xué)習(xí)筆記(四) ——以太坊的基本架構(gòu)、賬戶模型和智能合約

    《區(qū)塊鏈原理與技術(shù)》學(xué)習(xí)筆記 第四部分 三、以太坊 1. 以太坊簡介 1.1 以太坊發(fā)展的階段 1.2 以太坊與比特幣對比 2. 以太坊的基本架構(gòu)及原理 2.1 基本概念 2.2 狀態(tài)轉(zhuǎn)移 2.3 基本架構(gòu) 3. 賬戶模型與轉(zhuǎn)賬 3.1 賬戶模型 4. 智能合約 4.1 合約賬戶與數(shù)據(jù)存儲 4.2 驅(qū)動智能合約 以太坊

    2024年02月13日
    瀏覽(59)
  • 區(qū)塊鏈行業(yè)名詞解釋大全

    區(qū)塊鏈(Blockchain):是一種去中心化的賬本,所有交易都被記錄在區(qū)塊中,這些區(qū)塊按順序連接在一起,形成一個不可篡改的鏈條。 加密貨幣(Cryptocurrency):是一種數(shù)字資產(chǎn),使用加密技術(shù)來保護(hù)其安全性和匿名性。比特幣和以太坊是最著名的加密貨幣。 智能合約(Smart Co

    2024年02月08日
    瀏覽(26)
  • 又一個基于 GPT-4 編寫、解釋代碼的工具,誕生了!

    又一個基于 GPT-4 編寫、解釋代碼的工具,誕生了!

    作者:JackTian 來源:公眾號「杰哥的IT之旅」 ID:Jake_Internet 鏈接:又一個基于 GPT-4 編寫、解釋代碼的工具,誕生了! 上周,Open AI 團(tuán)隊(duì)正式宣布:GPT-4 來了! GPT-4 的出現(xiàn),隨后 Microsoft 的多個產(chǎn)品就集成了 GPT-4。 緊接著基于 Open AI 公司發(fā)布的 GPT-4 編寫、編輯和討論代碼新一

    2023年04月18日
    瀏覽(21)
  • 用最清晰的語言解釋區(qū)塊鏈

    用最清晰的語言解釋區(qū)塊鏈

    我去翻閱區(qū)塊鏈相關(guān)資源時,發(fā)現(xiàn)我是如此的笨拙,在那些高深莫測的詞根下我竟然練字都不認(rèn)了,經(jīng)過不懈的努力我想吧我總結(jié)出關(guān)于區(qū)塊鏈相關(guān)的最基礎(chǔ)知識跟大家用最直白的話語翻譯出來,希望能幫到大家 中心化和去中心化的解釋: 舉個栗子,大家大多數(shù)都有銀行卡

    2024年02月12日
    瀏覽(12)
  • 解釋區(qū)塊鏈技術(shù)的應(yīng)用場景和優(yōu)勢。

    區(qū)塊鏈技術(shù)是一種分布式賬本技術(shù),其應(yīng)用場景和優(yōu)勢如下: 應(yīng)用場景: 金融和銀行業(yè):區(qū)塊鏈可以用于貨幣交易、借貸和金融結(jié)算等方面,從而提高交易速度和安全性。 物流和供應(yīng)鏈管理:區(qū)塊鏈可以幫助實(shí)現(xiàn)物流信息的全程跟蹤和驗(yàn)證,從而提高供應(yīng)鏈的透明度和可追

    2024年02月04日
    瀏覽(29)
  • 解釋區(qū)塊鏈技術(shù)的應(yīng)用場景和優(yōu)勢

    區(qū)塊鏈技術(shù)是一種分布式數(shù)據(jù)庫技術(shù),用于存儲和傳輸數(shù)字資產(chǎn)(如加密貨幣)的信息。它通過將交易記錄分散保存到節(jié)點(diǎn)網(wǎng)絡(luò)中的多個節(jié)點(diǎn)上,從而保證了數(shù)據(jù)的安全性和透明度。區(qū)塊鏈技術(shù)的核心是基于密碼學(xué)技術(shù)的算法,通過這些算法保證了數(shù)據(jù)的完整性和安全性。除

    2024年02月03日
    瀏覽(21)
  • 〖Python網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)④〗- 代理的基本原理

    訂閱:新手可以訂閱我的其他專欄。免費(fèi)階段訂閱量1000+ ????????????????python項(xiàng)目實(shí)戰(zhàn) ???????????????? Python編程基礎(chǔ)教程系列(零基礎(chǔ)小白搬磚逆襲) 說明:本專欄持續(xù)更新中,目前專欄免費(fèi)訂閱,在轉(zhuǎn)為付費(fèi)專欄前訂閱本專欄的,可以免費(fèi)訂閱付費(fèi)專欄,

    2023年04月08日
    瀏覽(20)
  • 〖Python網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)?〗- 協(xié)程基本原理

    訂閱:新手可以訂閱我的其他專欄。免費(fèi)階段訂閱量1000+ ????????????????python項(xiàng)目實(shí)戰(zhàn) ???????????????? Python編程基礎(chǔ)教程系列(零基礎(chǔ)小白搬磚逆襲) 說明:本專欄持續(xù)更新中,訂閱本專欄前必讀關(guān)于專欄〖Python網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)〗轉(zhuǎn)為付費(fèi)專欄的訂閱說明 作者

    2024年02月16日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包