1. 程式人生 > >區塊鏈,技術改變世界

區塊鏈,技術改變世界

    當我認識到區塊鏈的時候,才深刻理解當時在大學寫的第一個例子:Hello,World!,原來是技術改變世界,而不是簡簡單單的一個示例。

    區塊鏈就像一次對全人類經濟層面的入侵,這種入侵,比網際網路的入侵,可能還要徹底,人們開始轉移的,並不是簡單的資訊以及消費習慣,而是對資產的重新認識和選擇。

區塊鏈難理解?這裡有一篇初學者指南

我並不明白為什麼人們會覺得要理解區塊鏈會有點難,而我也想知道為什麼自己並沒有。

那是在 2013 年,我第一次聽說有比特幣這個東西(是的,知道的太晚啦)。我窮得連一個都買不起,看到這兒你也許已經對此文無愛了。

後來,我想要去了解一下它所依賴的底層技術,也就是區塊鏈。 不過因為太忙了,所以遲遲沒有開始(那就並不存在什麼開始不開始了)。


區塊鏈”到底是什麼?

區塊鏈其實是兩個東西:一個是區塊,一個是鏈。說玄虛一點,就是一鏈子的區塊。

因為它是存在於計算機中的東西,所以我們可以釐定它的一個物理形態是啥樣子的,就是數字資訊被分成一個一個區塊然後把這些區塊連結起來。

舉個例子,下圖中的方塊,每一個都表示一個國家,而且每一個都包含了對應國家的城市名稱。

等等,其實還有更多東西來著。這裡的每一個方塊都是一個叫做雜湊的東西。一個雜湊就是一串字元 (比如 “1hi515AHA5H” )。

雜湊是根據方塊裡面所包含的資訊來得到的。U.S.A 的方塊擁有 New York, Los Angeles,還有 Chicago 這幾個城市,所以它的雜湊就是像 “NYLAC” 的東西了 (技術上其實遠非如此,但你理會精要就行了)。


每一個接續的方塊都會包含前一個方塊的雜湊,所以這個就是(強制性的)將它們綁到一起的紐帶。

如果有人擅自篡改了第一個方塊,加入了城市 Boston,那麼新的雜湊就會是 “NYLACB”。

然而後面接續的 India 這個方塊已經存著的雜湊還是 “NYLAC”,這種不匹配就會把鏈條打斷。所以雜湊的目的就是確保沒有人可以篡改區塊。

那如果有人修改了一個方塊的內容,然後把後面的接續方塊的雜湊也一併更新會如何呢? 

這也是有可能的,不過有一件事情我還沒有告訴你。區塊鏈的資料並不只是存在於僅僅一臺計算機裡面。一臺計算機裡面的區塊鏈資料並不能騙到人,因為它會被複制到網路中每一個使用者的計算機裡面去。

如果你加入了一個區塊鏈網路,那麼你的計算機就會去下載這些區塊資料,如果有人篡改了他擁有的版本,整個網路也會考慮佔多數的人的計算機上所擁有的版本才是正確的。

還有一件事,在一個區塊鏈網路中,不僅是資料,就連整個系統的程式都被複制到了所有的電腦中。

大多數網際網路應用都是集中化的,比如 Facebook,她的資料和程式都被放在了她的伺服器上,你的計算機會從 Facebook 的伺服器上獲取到你一個人需要知道的資訊。

但在區塊鏈的世界理,就沒有存在於中心的東西,它依賴的是使用者的計算機來容納自己的程式。這就意味著,如果整個區塊鏈網路中的每一臺電腦都關機了,那麼這個區塊鏈系統就死翹翹了。

公共區塊鏈


這是不是就意味著區塊鏈系統其實就是由一群心懷善意自願讓他們的計算機保持執行的人來組成的呢? 還有這些防篡改的區塊是用來幹嘛的呢?

區塊鏈網路的功效不勝列舉。比特幣是一種資料貨幣和一個支付系統。它所有的防篡改區塊中所儲存的就是全部交易的分類賬。那些貢獻了他們自己的計算機的人被稱為礦工。系統會給他們提供比特幣作為獎勵。

Ethereum 有一項附加功能。它可以承載你的程式碼,從頭開始發展出一個區塊鏈系統。

而要構建一個屬於你自己的系統也許會非常地困難(記住這得看有人為你犧牲他們的計算機執行能力才行哦)。Ethereum 就維護著這些耗損巨大的運算能力,而你則需要為這些計算消耗買單。

區塊鏈應用並不非得是支付系統或者加密貨幣。它可以是任何東西,像是一個社交網路,一個像 LiveEdu 這樣的學習平臺,等等。

私有區塊鏈


Bitcoin,Ethereum 等等這些都是公共區塊鏈的例子,任何人都可以成為其中的一分子。

那如果我們想要有一個私有的區塊鏈網路該如何呢?有些人想要一個私有的區塊鏈是想幹嘛呢?那就來瞧瞧下面的故事吧。

Mark 和 Sara

Mark 已經五個月沒交房租了,當 Sara 找他要的時候,他就說晚點會給她。她付不起律師費,而法院強制執行訴訟就需要 8 個月甚至一年,所以唯一的選擇就是去說服 Mark。

Joe 的生意

Joe 是一個商人,他經常要跟不同的公司做生意。幾個月之前他和一家零售商簽了一份合同,儘管合同條款都已經履約了,可零售商卻拒絕付款。

這幫人利用法律制度中的漏洞來遊說 Joe,想以此達到少付錢的目的。Joe 在這以前就是有這方面經驗的,在某些情況下,他會找法院求助,但這樣做所耗費的時間和金錢卻要損失他自己的利潤。

我們該如何幫助 Sara 和 Joe 呢?

我們是不是能在其他地方解決這個問題呢? 在 Sara 遇到的這種情況中,我們需要讓 Mark  按月支付房租,這其實就是一個基於時間的觸發機制。你的日曆程式使用這樣的觸發器來給你提供預設事件的通知。

在 Joe 遇到的場景中,一旦合約中的條款都滿足了,當事人就得付款,這其實就是一個基於條件的觸發機制。你想想上次從 Amazon 買電子書的時候,是不是得先確認付款了,Amazon 才會把電子書發給你?

重點是,計算機程式會始終如一的執行諸如此類的指令。當你點選著這篇文章,向下滾動,諸如這類的操作,它也會照著執行不誤。為了能幫助到 Sara ,我們需要將合同的條款轉變成程式碼。

Sara 和 Mark 之間所訂立的智慧合同的虛擬碼

If today’s date is 30th and rent is not paid then

Transfer $500 from Mark’s account to Sara’s account

可是我們在哪兒部署這些程式碼呢? 它就應該被部署到所有參與者的計算機上。Sara 的還有 Mark 的銀行都會是這一個私有區塊鏈網路的一部分。

Joe 和 Sara 會簽署一份編碼的協議(也就是智慧合同),然後這份協議會被分發到網路中去,Mark 的和 Sara 的銀行都會有一份拷貝。

在每個月的 30 號,當時鍾跳動到 12 點整,協議好的金額就會從 Mark 的賬戶轉移到 Sara 的賬戶上去。Joe 也開始使用智慧合同來強制讓他的客戶支付協議好的貨款。

Sara 高興了,因為她再也不用去煩心 Mark 會不會如約付房租了。Joe 也高興,因為他也不用找法院要說法了,省下這些精力,他可以繼續發展自己的生意了。

私有區塊鏈只限於業務中涉及到的相關各方,因此 Joe 不會是 Sara 和 Mark 所屬區塊鏈網路的一部分。

前行之路


“區塊鏈”概念已火,雖然大部分人對“區塊鏈”好奇,甚至眼饞,但不少還處於不求甚解的懵逼階段.....

怎麼用 200 行 Go 程式碼寫一個自己的區塊鏈!

只用 200 行 Go 程式碼寫一個自己的區塊鏈

這篇文章就是幫助你使用 Go 語言來實現一個簡單的區塊鏈,用不到 200 行程式碼來揭示區塊鏈的原理!

“用不到 200 行 Go 程式碼就能實現一個自己的區塊鏈!” 聽起來有意思嗎?有什麼能比開發一個自己的區塊鏈更好的學習實踐方法呢?那我們就一起來實踐下!

因為我們是一家從事醫療健康領域的科技公司,所以我們採用人類平靜時的心跳資料(BPM 心率)作為這篇文章中的示例資料。

讓我們先來統計一下你一分鐘內的心跳數,然後記下來,這個數字可能會在接下來的內容中用到。

通過本文,你將可以做到:

  • 建立自己的區塊鏈

  • 理解 hash 函式是如何保持區塊鏈的完整性

  • 如何創造並新增新的塊

  • 多個節點如何競爭生成塊

  • 通過瀏覽器來檢視整個鏈

  • 所有其他關於區塊鏈的基礎知識

但是,對於比如工作量證明演算法(PoW)以及權益證明演算法(PoS)這類的共識演算法文章中將不會涉及。

同時為了讓你更清楚得檢視區塊鏈以及塊的新增,我們將網路互動的過程簡化了,關於 P2P 網路比如“全網廣播”這個過程等內容將在下一篇文章中補上。讓我們開始吧!

設定

我們假設你已經具備一點 Go 語言的開發經驗。在安裝和配置 Go 開發環境後之後,我們還要獲取以下一些依賴:

go get github.com/davecgh/go-spew/spew

spew 可以幫助我們在 console 中直接檢視 struct 和 slice 這兩種資料結構。

go get github.com/gorilla/mux

Gorilla 的 mux 包非常流行, 我們用它來寫 Web handler。

go get github.com/joho/godotenv

godotenv 可以幫助我們讀取專案根目錄中的 .env 配置檔案,這樣我們就不用將 http port 之類的配置硬編碼進程式碼中了。比如像這樣:

ADDR=8080

接下來,我們建立一個 main.go 檔案。之後我們的大部分工作都圍繞這個檔案,讓我開始編碼吧!

匯入依賴

我們將所有的依賴包以宣告的方式匯入進去:


資料模型

接著我們來定義一個結構體,它代表組成區塊鏈的每一個塊的資料模型:


  • Index 是這個塊在整個鏈中的位置。

  • Timestamp 顯而易見就是塊生成時的時間戳。

  • Hash 是這個塊通過 SHA256 演算法生成的雜湊值。

  • PrevHash 代表前一個塊的 SHA256 雜湊值。

  • BPM 每分鐘心跳數,也就是心率。還記得文章開頭說到的嗎?

接著,我們再定義一個結構表示整個鏈,最簡單的表示形式就是一個 Block 的 slice:

var Blockchain []Block

我們使用雜湊演算法(SHA256)來確定和維護鏈中塊和塊正確的順序,確保每一個塊的 PrevHash 值等於前一個塊中的 Hash 值,這樣就以正確的塊順序構建出鏈:


雜湊和生成塊

我們為什麼需要雜湊?主要是兩個原因:

  • 在節省空間的前提下去唯一標識資料。雜湊是用整個塊的資料計算得出,在我們的例子中,將整個塊的資料通過 SHA256 計算成一個定長不可偽造的字串。

  • 維持鏈的完整性。通過儲存前一個塊的雜湊值,我們就能夠確保每個塊在鏈中的正確順序。任何對資料的篡改都將改變雜湊值,同時也就破壞了鏈。

    以我們從事的醫療健康領域為例,比如有一個惡意的第三方為了調整“人壽險”的價格,而修改了一個或若干個塊中的代表不健康的 BPM 值,那麼整個鏈都變得不可信了。

我們接著寫一個函式,用來計算給定的資料的 SHA256 雜湊值:


這個 calculateHash 函式接受一個塊,通過塊中的 Index,Timestamp,BPM,以及 PrevHash 值來計算出 SHA256 雜湊值。

接下來我們就能便攜一個生成塊的函式:


其中,Index 是從給定的前一塊的 Index 遞增得出,時間戳是直接通過 time.Now() 函式來獲得的,Hash 值通過前面的 calculateHash 函式計算得出,PrevHash 則是給定的前一個塊的 Hash 值。

校驗塊

搞定了塊的生成,接下來我們需要有函式幫我們判斷一個塊是否有被篡改。檢查 Index 來看這個塊是否正確得遞增,檢查 PrevHash 與前一個塊的 Hash 是否一致,再來通過 calculateHash 檢查當前塊的 Hash 值是否正確。

通過這幾步我們就能寫出一個校驗函式:


除了校驗塊以外,我們還會遇到一個問題:兩個節點都生成塊並新增到各自的鏈上,那我們應該以誰為準?這裡的細節我們留到下一篇文章,這裡先讓我們記住一個原則:始終選擇最長的鏈。


通常來說,更長的連結串列示它的資料(狀態)是更新的,所以我們需要一個函式能幫我們將本地的過期的鏈切換成最新的鏈:

           

到這一步,我們基本就把所有重要的函式完成了。接下來,我們需要一個方便直觀的方式來檢視我們的鏈,包括資料及狀態。通過瀏覽器檢視 Web 頁面可能是最合適的方式!

Web 服務

我猜你一定對傳統的 Web 服務及開發非常熟悉,所以這部分你肯定一看就會。

藉助 Gorilla/mux 包,我們先寫一個函式來初始化我們的 Web 服務:

             

其中的埠號是通過前面提到的 .env 來獲得,再新增一些基本的配置引數,這個 web 服務就已經可以 listen and serve 了!

接下來我們再來定義不同 endpoint 以及對應的 handler。例如,對“/”的 GET 請求我們可以檢視整個鏈,“/”的 POST 請求可以建立塊。


GET 請求的 handler:


為了簡化,我們直接以 JSON 格式返回整個鏈,你可以在瀏覽器中訪問 localhost:8080 或者 127.0.0.1:8080 來檢視(這裡的 8080 就是你在 .env 中定義的埠號 ADDR)。

POST 請求的 handler 稍微有些複雜,我們先來定義一下 POST 請求的 payload:


再看看 handler 的實現:


相關推薦

區塊技術改變世界

    當我認識到區塊鏈的時候,才深刻理解當時在大學寫的第一個例子:Hello,World!,原來是技術改變世界,而不是簡簡單單的一個示例。    區塊鏈就像一次對全人類經濟層面的入侵,這種入侵,比網際

區塊不能改變世界但這是一個良好的開端

  我看到它的方式,區塊鏈已被完全誇大了。這是一項了不起的技術,值得用於一些重要的應用,但它根本沒有改變世界的潛力,也不能在各個行業普遍使用。   私鑰的問題   區塊鏈技術的最大賣點之一是它能夠保持私密性和安全性。使用者依靠私鑰來提交交換並驗證其身份,這使得這些身份

APICloud · 跨越2018技術改變世界

  在APICloud發展軌跡中, 2018註定是疾速的一年, 更多的風口趨勢和現象級應用背後, 是技術在推動著世界的加速轉動。 APICloud所提供的技術服務,在混合之力的驅動下不斷完善升級,“讓你的App更快的開發和迭代”成為APICloud技術能力的核心導向,以此滲透至開發引擎、模

區塊未來可能改變商業甚至世界

區塊鏈據國外媒體報道,即使諸如比特幣以及以太坊等的熱潮正在消退,但這些數字貨幣的基礎,背後的區塊鏈技術卻依舊生機勃勃。日前《財富》撰文描述了大企業都是如何利用區塊鏈技術的,同時也闡述了為什麽這些各行各業的巨頭無法忽視這種技術。  作為當前最為前沿的創新技術,區塊鏈被視為本屆博鰲亞洲論壇上的一大熱門話題。國內鏈

IG痛失亞軍含淚奪冠獎盃是用區塊技術合成的你知道嗎

當然是假的了,為了吸引大家的到來,我容易嗎。但是IG的五個隊員是區塊鏈的技術合成的。一定是,我堅信。要不然也不會帶給大家如此的驚喜,RNG別看了,你學不會的。就像現在的區塊鏈技術,可以給人類帶來如此的驚喜,同樣的王思聰你別看了,你不需要學。 該概念在中本聰的白皮書中提出,中本聰創造第一個區

世界頂級豪車品牌邁凱倫涉足區塊與WIOT嘗試合作

隨著區塊鏈行業的快速發展,目前已經進入3.0階段,這也為行業落地應用規劃出了更為清晰可行的模式。至今,區塊鏈技術應用已不只僅僅侷限於數字貨幣交易所,諸如汽車行業、物聯網路、交易結算、社交媒體等領域都開始應用區塊鏈技術。   前段時間,汽車品牌福田正式推出了區塊鏈+供應鏈專案,

區塊技術發展現狀制約因素和發展方向

轉自: 作者:大聖2017 連結:https://www.jianshu.com/p/0186822510c8 區塊鏈在3.0時代的10大發展方向 區塊鏈1.0以比特幣為代表,是可程式設計的數字貨幣; 區塊鏈2.0以以太坊為代表,從單純支援資產交易到對“世界狀態”可程

技術人再不懂區塊你就OUT了?漫畫版

“這幾天區塊鏈技術無意中被徐小平“忽悠”的更加紅火了,蹭著區塊鏈的大火,今天小編就再給大家普及一

AlterVerse—區塊遊戲+VR+開放世界神作還是大雜燴?

當下網際網路最火的什麼? 區塊鏈,VR。 當今最受追捧的遊戲模式是什麼? 全開放世界。 那麼,AlterVerse: Disruption,作為一款融合了區塊鏈和VR技術的開放世界遊戲,究竟會是一款神作還是一鍋大雜燴呢?SpiderStore 帶你走進這款遊戲。 坎坷的誕

區塊支付系統開發區塊應用技術開發

區塊鏈支付系統是目前區塊鏈技術的一個應用領域,也是目前區塊鏈發展的一個方向。傳統的支付系統主要是用於電商行業,就像我們現在使用的某付寶某微等等都是屬於第三方支付,他們能夠解決商家和使用者之間不信任的因素,因此在電商行業都是得到了一定地位的。但是傳統的支付系統也有一定的弊病。首先是它的穩定性難以保證,目前市面上

未來的幾年區塊將怎麼改變電子商務?

區塊鏈時代已經來臨,Bitcoin trading的底層技術區塊鏈將被應用於很多不同的領域,這是一篇介紹區塊鏈應用的基本原理的好文,非常值得閱讀,特別是對於剛接觸區塊鏈的朋友們。區塊鏈技術是第四次工業革命中最具顛覆性的創新技術。世界上還沒有見過比區塊鏈技術更強大的技術,它可能

haitongz ||思考改變世界技術世界更美好

可以手動強制不進行 RPM/DEB 的依賴性關係檢查嗎? RPM 可以。使用 --nodeps 輔助引數,則安裝過程將不理會依賴性關係限制,強制安裝目標包,如: # rpm -i --nodeps package_a.rpm DEB 可以。使用— force-depen

正如雲是由無數小水滴組成的一樣真正改變世界不一定是那些看起來高科技的企業也不一定是世界500強而是那些普普通通的人。

新人 守護 雲計算大會 王堅 傳輸 不一定 想想 站點 人事管理 從雪域高原來到秦巴山區,轉眼已是12年。這期間,吳磊守著兩條靜靜的鋼軌。 吳磊說,他不怕守,因為,“1999年,18歲應征入伍就是邊防戰士,只不過那個時候在日喀則,守的是國境,守的是國家安全,現在守的是鐵路,

了解區塊從挖礦開始

lan rst height 4.3 qq群 規格 image 初始 哪些 2014年那一陣,花了些錢,買了4塊R9 290X顯卡組裝了一個臺式機,準備挖萊特幣,由於家人的反對,一直沒有開機,後來嫌占地方(買不到大電源,買了兩個電源,因此得用大機箱,這樣一來,標準idc機櫃

評蔡文勝區塊10問數字貨幣不等於區塊套路韭菜不要太明顯

時機 數據對比 face 商業模式 們的 而已 貨幣 更多 fork 昨天上午,一則蔡文勝、薛蠻子、帥初等人對區塊鏈進行討論的微信聊天記錄開始在網絡傳播。在聊天對話中,蔡文勝、帥初、慕巖、陳偉星、沈波、易理華、點付大頭、FBG周碩基等人就區塊鏈領域的多個問題發表了自己的觀點

蔡文勝和美圖布局區塊能有一個好未來嗎?

智能 時間 停止 有一個 服務商 log 康斯坦丁 企業 顯示 2月22日,美圖公司公告公司董事變更,羅寶文於今日辭去公司獨立非執行董事、提名委員會及薪酬委員會成員職務,以投入更多時間專註於她的其他工作承諾。同時,公司任命張首晟教授為獨立非執行董事、提名委員會及薪酬委員會成

話說區塊它真的不是比特幣

局限 天發 新的 class bsp 接下來 通過 nbsp 去年 好像是去年吧,2017年,隨著比特幣的大火,各種數字貨幣出現了,顯卡價格飆升了,區塊鏈技術傳的神乎其神了。看到網上凡是和區塊鏈沾邊的股價,都跟吃了火藥一樣往上沖,仿佛這些就能和比特幣這幾年的發展一樣,從幾十

區塊工作證明(POW)代碼+原理 golang版剖析

區塊鏈 以太坊 工作證明 POW 實現機制 介紹在之前的文章中,我們構建了一個非常簡單的數據結構,這是塊鏈數據庫的本質。 而且我們可以用它們之間的鏈式關系向它添加區塊:每個區塊與前一個鏈接。 唉,然而在現實中添加一個區塊添加到鏈是艱巨的工作。工作證明塊鏈的一個關鍵思想是,必須通過工作證明才

區塊技術棧概述

區塊鏈 比特幣 區塊鏈 本質: 一種記賬方法 術語: 節點: 每個節點維護著自己的一個賬本 維護原則: 獨立記賬,節點間記賬的內容保持一致 共識算法: 節點間保持一致的方法 挖礦: 各節點為爭搶打包數據的權力的行為,掙得權力打包數據可獲得獎勵