零基礎學區塊鏈(一)

青蛙要fly發表於2018-04-02

開頭:

最近因為專案需要,都在學習區塊鏈,提到區塊鏈,大家第一反應肯定是比特幣,在我最剛開始學習的時候是去看的比特幣的相關知識。這次先講解大概的概念。後續再寫詳細的技術內容。

零基礎學區塊鏈(一)

用具體的例子來說明:

小A,小B,小C是同一個公司的同事。所以他們每天中午一起吃飯。

1.

每次付錢時候因為大家沒有那麼多零錢,所以就說好了每天先讓一個人幫忙付了飯錢。比如今天是小A付的飯錢,付了24塊。然後回去後再平分,然後明天可能就是小B付了40塊錢再平分。慢慢的,大家覺得這樣也很煩了。說每天都要算賬還錢,還不如一個月統一給一次。

零基礎學區塊鏈(一)

2.

為了記賬方便,大家就先說好,上面的欠錢記錄先放在公司的公用伺服器上面,在伺服器的桌面上新建了一個文字記事本,這樣三個人都可以去訪問新增內容。

零基礎學區塊鏈(一)

3.

但是上面這樣會出現問題,當我們記賬的內容過多的時候,我們會忘記中間某一天到底是誰付的,很正常,一個月哪裡每天的記得住,這時候就存在漏洞了。三個人中的某個人可以去改中間某一天的資料

(假設小B最近手頭比較緊,所以把別人付的飯錢寫成了自己付的,讓別人欠自己錢)。

修改前資料:

小B,小C 需給 小A  24元
小B,小C 需給 小A  30元
小A,小C 需給 小B  10元
小B,小C 需給 小A  10元
......
......
......
小A,小B 需給 小C  22元  (這一條被修改了)
複製程式碼

修改後資料:

小B,小C 需給 小A  24元
小B,小C 需給 小A  30元
小A,小C 需給 小B  10元
小B,小C 需給 小A  10元
......
......
......
小A,小C 需給 小B  22元   (這一條被修改了)
複製程式碼

4.

於是大家想要麼弄個簽名,對寫過的資料進行加密,這樣也就不怕會有上面的情況了。 於是決定用非對稱加密方式來進行加密(PS:學習連結:(白話解釋 對稱加密演算法 VS 非對稱加密演算法)) 這樣,大家用自己的私鑰來對寫的內容加密,然後把自己的公鑰公開,要檢驗的時候就直接可以用相應的公鑰檢視即可,如果可以成功檢視,說明這個內容沒有被修改過。這時候我們不怕內容被改過了。而我們的內容也變成了

asdflkajfkldjfas234ljkjdfs --->(相當於(小B,小C 需給 小A  24元) + 小A的私鑰 )
fdkalsjfasdjl34ljlsdflj --->(相當於(小B,小C 需給 小A  30元) + 小A的私鑰 )
jfldsajfkj1231lk --->(相當於(小A,小C 需給 小B  10元) + 小B的私鑰)
......
......
......

複製程式碼

5.

但是這樣還會有個問題,我修改不行,我直接拷貝全部內容不就可以了。 修改前:

asdflkajfkldjfas234ljkjdfs --->(相當於(小B,小C 需給 小A  24元) + 小A的私鑰 )
fdkalsjfasdjl34ljlsdflj --->(相當於(小B,小C 需給 小A  30元) + 小A的私鑰 ) 
jfldsajfkj1231lk --->(相當於(小A,小C 需給 小B  10元) + 小B的私鑰) <這行被修改,直接替換上面的一行的全部內容>
......
......
......
複製程式碼

修改後:

asdflkajfkldjfas234ljkjdfs --->(相當於(小B,小C 需給 小A  24元) + 小A的私鑰 )
fdkalsjfasdjl34ljlsdflj --->(相當於(小B,小C 需給 小A  30元) + 小A的私鑰 ) 
fdkalsjfasdjl34ljlsdflj --->(相當於(小B,小C 需給 小A  30元) + 小A的私鑰 )  <這行被修改>
......
......
......
複製程式碼

這時候你用公鑰去檢查也是沒有問題的,所以我們單純內容加密不夠,所以我們想到前面加上了日期,變成了

asdflkajfkldjfas234ljkjdfs --->(相當於(2月2號:  小B,小C 需給 小A  24元) + 小A的私鑰 )
fdkalsjfasdjl34ljlsdflj --->(相當於(2月3號: 小B,小C 需給 小A  30元) + 小A的私鑰 )
jfldsajfkj1231lk --->(相當於(2月4號: 小A,小C 需給 小B  10元) + 小B的私鑰)
......
......
......

複製程式碼

這時候就算你直接把上面一行拷貝覆蓋下面的一行也沒用了,因為不然就有二行的日期一樣,明顯作假了。

6.

因為每天都要自己去往伺服器上的檔案寫東西,小A他們開始嫌太麻煩了,說我只要把(日期 + 內容 + 私鑰)合併後的內容發出來,讓別人去伺服器上新增進去到記事本就好了。但是平白無故肯定沒人願意,所以他們對辦公室其他同事說:你們誰幫我們記賬,我們每個月會請你一瓶飲料,並且每幫忙記一筆賬,我們會額外給你一筆記賬費(比如記錄了小A,小B需要給小C 40元,記錄者可以拿中間的1元,小C只能拿到39元,類似手續費),於是好幾個同事都踴躍參與,但是並不需要這麼多人來記內容,畢竟人多了。請的飲料也就多了。所以決定讓要記賬的同事們自己來決賽,既然大家都是程式設計師,就用一個有難度的比賽,做數學題目,誰能最快的做出題目,誰就有資格來幫忙記內容。

7.

好不容易一個月到了,我們要開始結算飯錢了,結果小A需要給小B和小C各自200元,可是小A因為最近花銷大,就雙手一攤說反正我沒錢,我就只能欠著你們了。小B和小C很生氣,所以從第二個月開始,小A每次都要給小B和小C看過他的錢包。證明他有錢,他們二個才會願意先付錢。

8.

一天公司的伺服器壞了,而且已經這個月到了最後幾天,已經記了二十幾天了,我們記賬的文字也看不到了,小A,小B,小C都傻眼了,他們三個終於知道了不要把雞蛋放在一個籃子裡面的道理了。事已至此,只能吃一塹長一智。在下個月記賬的時候多備份幾個地方。所以他們在公司的三臺伺服器上都放上了這個記事本,然後每次寫新的內容,就三個地方都去寫。

9.

因為大家都在一個記事本里面記,記一個月倒也還好,可是當小A,小B,小C用這種方式一起吃飯吃了N個月後,txt裡面的內容就越來越多了。每次開啟,都要往下翻好久才能繼續記東西,於是他們就決定一個月用一個記事本,到了第二個月,就再新建一個記事本。

零基礎學區塊鏈(一)

10.

因為大家為了更好的統計這個飯錢,所以在每個月結束後在上方寫著這個月一共的飯錢,並且記住上個月吃了多少錢,方便比較。

飯錢小賬1:

上個月一共吃了1000元
這個月一共吃了1200元

asdflkajfkldjfas234ljkjdfs --->(相當於(2月2號:  小B,小C 需給 小A  24元) + 小A的私鑰 )
fdkalsjfasdjl34ljlsdflj --->(相當於(2月3號: 小B,小C 需給 小A  30元) + 小A的私鑰 )
jfldsajfkj1231lk --->(相當於(2月4號: 小A,小C 需給 小B  10元) + 小B的私鑰)
......
......
......


複製程式碼
飯錢小賬2:

上個月一共吃了1200元
這個月一共吃了1100元

asdflkajfkldjfas234ljkjdfs --->(相當於(3月2號:  小B,小C 需給 小A  24元) + 小A的私鑰 )
fdkalsjfasdjl34ljlsdflj --->(相當於(3月3號: 小B,小C 需給 小A  30元) + 小A的私鑰 )
jfldsajfkj1231lk --->(相當於(3月4號: 小A,小C 需給 小B  10元) + 小B的私鑰)
......
......
......


複製程式碼

然後我們這樣中間一個賬本因為某種原因被改了的話,這個月的總花費就變了,然後下個月上面記著的上個月的花費就對應不起來了,也就會發現中間某個賬本應該被改動過了,出了問題。

零基礎學區塊鏈(一)

這麼長的一個故事看完後,我們比特幣的大致基本概念也就懂了。具體的資訊下次我再深入解釋。

我們來看對比腦圖:

零基礎學區塊鏈(一)

結尾:

哪裡不對,歡迎大家噴,哈哈,後續繼續詳細的講解。

相關文章