區塊鏈達成共識要解決的問題

我在學習時的有以下疑問。

目錄

1 怎麼定義一單交易

1.1 處理反覆花費同一筆錢的問題?

1.2 錢是怎麼產生的?

1.3 交易過程是怎麼樣的?

1.3.1 假如某一次交易沒有完全消耗所有的錢,要修改前面的區塊把現在有的錢訂正餘額嗎?

1.3.2 那麼按照上面的說法,就是輸入的總量=輸出的總量?

1.3.3 爲什麼需要這一筆交易費?

1.4 怎麼查詢餘額?

1.5 怎麼去驗證是A的公鑰,而不是有人頂替A和B做交易呢?

1.7 怎麼保證大家都認可這一筆交易?

1.7.1 假如有惡意結點並且超過半數怎麼辦?

1.7.2 既然不能結點樹作爲投票標準,那麼什麼作爲投票標準?

2 在併發的情況下可能出現的情況

2.1 在同一時間假如有兩個結點可以提供可靠的nonce那麼怎麼辦

2.2 假如這麼巧兩個分支正好同時又接上了兩個呢?

2.3 假如有一個交易處理特別特別慢,原來的鏈上已經添加了新的交易記錄a和新的交易記錄b,但是慢交易還是用之前的取hash,能插到新的交易記錄a和新的交易記錄b前面嗎?

2.3.1 慢交易是合法的那麼他該何去何從?

 


1 怎麼定義一單交易

生產者和消費者+生產者的簽名

例如區塊2的生產者是A消費者是B和A。

1.1 處理反覆花費同一筆錢的問題?

反覆花費同一筆錢也成爲雙花攻擊,花是花費的意思

通過圖中的箭頭(指針)指向每一筆交易,以及交易的簽名判定是同一筆錢。例如我是D,我要僞造一筆A給D的交易,因爲我沒有A的密鑰所以籤不了名,這筆交易就是非法的。UTXO這一個數據結構是用於存放沒有花費的錢,例如交易A在UTXO中會給出交易A產生這個輸入的hash值,以及它是第幾個交易。

 

上圖包括了4各種狀態的交易,我決定用問題&解決方法的模式給大家介紹。

1.2 錢是怎麼產生的?

看區塊1,第一筆稱之爲鑄幣它是由挖礦作爲獎勵產生的。

1.3 交易過程是怎麼樣的?

看區塊3,B給C轉了5塊錢,給D轉了2塊錢,此時B把他僅有的7塊錢消耗乾淨,最後簽名。

1.3.1 假如某一次交易沒有完全消耗所有的錢,要修改前面的區塊把現在有的錢訂正餘額嗎?

不需要修改前面的區塊,看第2個區塊,A給B轉了7塊錢,剩下的錢會轉回給自己,要保證每一次轉錢都把錢花的乾乾淨淨。

1.3.2 那麼按照上面的說法,就是輸入的總量=輸出的總量?

不是的,因爲每一筆交易都有交易費,所以輸出是略微大於輸出的。

1.3.3 爲什麼需要這一筆交易費?

對於我來說幫你記一筆交易並沒有好處,因爲要消耗我的算力,我完全可以只記自己的帳,擱家自掃門前雪。

1.4 怎麼查詢餘額?

看區塊2和區塊3,區塊3的B指向區塊2的B不斷往前回溯到前面的區塊,最後判斷餘額是否足夠。看區塊4,可以發現C的餘額是不夠支付給E所以E區塊4不可以添加鏈上。

1.5 怎麼去驗證是A的公鑰,而不是有人頂替A和B做交易呢?

例如第一筆交易,提供A的公鑰hash值要和鑄幣交易時A的hash值一致。《區塊鏈與Merkle tree》第1.2介紹如何防止篡改

1.7 怎麼保證大家都認可這一筆交易?

選用投票機制,過半數的結點認可就可以認同這一筆交易並添加到區塊鏈上。

1.7.1 假如有惡意結點並且超過半數怎麼辦?

假如是投票機制,因爲是去中心化的,只要生產一對公私鑰就相當於註冊了賬戶,當不斷生成公私鑰,新建賬戶那當賬戶超過半數結點,那麼能不能添加到鏈上的生殺大權就留給了惡意結點,這就是女巫攻擊。

1.7.2 既然不能結點樹作爲投票標準,那麼什麼作爲投票標準?

算力作爲投票的標準,誰的算力強就掌握了投票權,假如在單位時間裏可以試10個隨機數別人只能試一個隨機數,你的投票權就比別人高。

2 在併發的情況下可能出現的情況

2.1 在同一時間假如有兩個結點可以提供可靠的nonce那麼怎麼辦

看誰的後面新增一個區塊,假如新增了一個區塊就是指認同了前一個區塊。

2.2 假如這麼巧兩個分支正好同時又接上了兩個呢?

那就要看往後誰的分支更長,選用最長鏈。

2.3 假如有一個交易處理特別特別慢,原來的鏈上已經添加了新的交易記錄a和新的交易記錄b,但是慢交易還是用之前的取hash,能插到新的交易記錄a和新的交易記錄b前面嗎?

不可以,以爲牽一髮而動後半身《區塊鏈與Merkle tree》第1.2介紹如何防止篡改,所以即使你的交易是合法的但是也不能插到交易a和交易b前面英文這樣不符合插入到最長鏈而且還有a和b回滾這是很不划算的。

2.3.1 慢交易是合法的那麼他該何去何從?

它會重新到最後面變成新的區塊,總會有善意的結點去接納它讓它添加到鏈上。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章