區塊鏈習題複習

静&音發表於2024-06-03

括號中的內容用於補充,來不及可以不看
一、
1、解釋比特幣私鑰、公鑰和地址的關係。比特幣私鑰、公鑰和地址長度分別多少?
私鑰、公鑰和地址之間的關係可以表示為:
私鑰可以透過加密演算法計算得出公鑰,再由公鑰經數字簽名和雜湊演算法進行運算得到錢包地址。
公鑰無法運算出私鑰;錢包地址不等於公鑰,錢包地址也無法運算出公鑰。
私鑰長度:32byte
公鑰長度:64byte
地址長度:20byte

2、什麼是雜湊函式。解釋雜湊函式的單向性。舉例兩個常用的雜湊函式。
雜湊函式它接受任意長度的輸入,並將其轉換為固定長度的字串。
(即雜湊函式。它是一種單向密碼體制,即它是一個從明文到密文的不可逆的對映)
雜湊函式的單向性就是指只能從輸入推匯出輸出,而不能從輸出計算出輸入
(雜湊函式的單向性是指,對於給定的雜湊值,很難或幾乎不可能逆向推匯出原始資料。這是因為雜湊函式是一種不可逆的對映,它將任意長度的輸入訊息對映成為一個較短的定長雜湊值。)
常用的雜湊函式
MD5:MD5是一種密碼雜湊函式,可以產生出一個128位(16位元組)的雜湊值,通常以32個十六進位制數字呈現。
(它被廣泛用於資料完整性校驗,但由於已知的漏洞,現在不再適合用於SSL證書和加密技術,這些需要防止資訊被篡改的地方。)
SHA-1:SHA-1是一種密碼雜湊函式,產生一個160位(20位元組)的雜湊值,通常以40個十六進位制數字呈現。
(雖然SHA-1比MD5更安全,但現在也不再推薦用於大多數安全性要求高的場合,因為已經存在針對SHA-1的有效攻擊1。)

二、
1、簡述比特幣UTXO模型
在這個模型中任何一個交易,它總是由若干個輸入(Input)和若干個輸出(Output)構成,一個Input指向的是前面區塊的某個Output。只有Coinbase交易(礦工獎勵的鑄幣交易)沒有輸入,只有憑空輸出。任何交易總是可以由Input溯源到Coinbase交易。還沒有被下一個交易花費的Output被稱為UTXO,即未花費交易輸出。給定任何一個區塊,計算當前所有的UXTO金額之和,等同於錢包的當前餘額(自創世區塊到給定區塊的挖礦獎勵之和)。

2、比特幣交易中傳送者地址和接收者地址在哪?
傳送者地址是交易輸入部分(Input)的一部分,它指向一個或多個未花費的交易輸出(UTXO)。
接收者地址出現在交易的輸出部分(Output)。

3、簡述鎖定指令碼和解鎖指令碼的關係。
鎖定指令碼和解鎖指令碼的關係是,解鎖指令碼需要提供滿足鎖定指令碼設定條件的證據,以解鎖UTXO,使其可以被用於新的交易。
(當一筆交易發生時,比特幣將解鎖指令碼與鎖定指令碼拼接後,使用堆疊語言按後進先出的順序執行,最後完成CHECK,如果返回結果為TRUE,代表解鎖成功,使用者可以使用該筆輸出作為新交易的輸入進行交易。如果返回為FALSE或者執行過程中出現問題,則花費這筆輸出的請求被拒絕。)
解釋:當比特幣交易時,UTXO帶有一個鎖定指令碼,為交易設定障礙。當接收方要接收比特幣,就要給出一個解鎖指令碼,解鎖指令碼是簽名和公鑰組合,簽名是接收方的私鑰對該筆交易的資訊加密的結果,公鑰就是指接收方的公鑰。所以只有接收方透過私鑰給出正確的簽名。

4、簡述隨機性錢包和分層確定性錢包的區別。
隨機性錢包是透過隨機數生成互不相關的多個私鑰。
分層確定性錢包是一種使用“種子”透過雜湊函式單向生成一組私鑰的方法。
隨機性錢包和分層確定性錢包的主要區別在於私鑰的生成和管理方式。隨機性錢包每次生成新的私鑰都需要備份,而分層確定性錢包只需要備份一次種子,就可以恢復所有的私鑰。

5、如果其中一個私鑰丟失了,分層確定性錢包如何恢復它?
當你建立一個分層確定性錢包時,錢包會生成一個隨機的種子,並提示你備份這個種子。這個種子通常會被表示為一組助記詞。
如果你丟失了一個私鑰,你可以使用備份的種子在同一個錢包軟體或者其他相容的錢包軟體中恢復你的錢包。恢復過程中,錢包軟體會使用同樣的演算法和種子,重新生成所有的私鑰。

三、
1、簡述工作量證明(POW)的過程
礦工生產一個新的區塊時,透過數學運算大量的計算資源和時間,解決一個複雜的數學難題——找到一個滿足特定條件的隨機數。然後馬上對全網進行廣播打包區塊,網路上的節點收到廣播打包區塊,會立即進行驗證。有效雜湊值必須經過無數次雜湊運算才能算出,但時雜湊值卻非常容易驗證。

2、為什麼工作量證明能夠抵抗sybil攻擊?
Sybil攻擊是一種網路攻擊,攻擊者透過建立大量的虛假身份來控制網路。在沒有任何限制的情況下,一個攻擊者可以輕易地建立大量的節點,從而控制網路。
因此,工作量證明機制透過引入計算能力這種稀缺資源,使得Sybil攻擊變得不切實際,要想獲取記賬權,節點必須透過解決複雜的數學難題來證明它的工作量。這個過程需要大量的計算資源和時間,對於大多數攻擊者來說,進行Sybil攻擊的成本會變得非常高。

3、解釋硬分叉和軟分叉的區別。
硬分叉是一種完全替換舊規則的升級方式,它需要所有節點強制升級到新規則。在硬分叉過程中,新規則與舊規則不相容,因此會導致網路分裂,產生兩條不同的區塊鏈。
軟分叉是在原有的區塊鏈規則上進行的一次修改,而不是完全替換舊的規則。在軟分叉過程中,新規則與舊規則並存,舊規則仍然有效,但新規則會優先被網路節點所接受。總的來說,硬分叉和軟分叉的主要區別在於新舊節點相互相容性。硬分叉不向前相容,而軟分叉向前相容。

4、解釋最長鏈原則。
最長鏈原則是比特幣網路中的一種共識機制。根據這個原則,節點永遠認為最長鏈才是有效的區塊鏈。
在比特幣網路中,比特幣區塊是依靠礦工們不斷進行數學運算而產生的,每一個區塊都必須引用其上一個區塊。因此,最長的鏈也是最難以推翻和篡改的,所以節點永遠認為最長鏈才是有效的區塊鏈。只有在最長鏈上挖礦的礦工才能夠獲得獎勵。

5、51%攻擊如何造成雙花攻擊。
51%攻擊能夠實施雙花攻擊,是因為攻擊者透過控制超過一半的網路算力,可以建立一個新的分支鏈,並使其成為主鏈,從而撤銷原本的交易。
發起交易:攻擊者在主鏈上進行一次交易,例如購買商品。
建立分支鏈:同時,攻擊者建立一個新的分支鏈,在該分支鏈上撤銷之前的交易。
挖礦:攻擊者在新的分支鏈上進行挖礦,由於其控制了51%以上的算力,那麼攻擊者獲得記賬權的機率很大,於是很快,新的分支鏈的長度就超過了主鏈。
替換主鏈:一旦新的分支鏈比主鏈更長,攻擊者便會立即向全網廣播這條新的分支鏈,而其他礦工檢測到這條新的分支鏈比他們原本挖礦的主鏈要長,按照協議,他們必須丟棄原本的主鏈,替換成這條新的分支鏈。
雙花成功:此時,原本的主鏈上的交易被回滾,也就是說,攻擊者在主鏈上的支付被撤銷,攻擊者在新的主鏈上再次擁有了他曾經已經花掉了的資金。

6、全節點如何向輕量節點證明某個交易tx已經儲存在區塊鏈中。
一個節點只需要log2(N)個32位元組的雜湊值,形成一條從特定交易到樹根的認證路徑或者Merkle路徑即可

四、
1、什麼是Remix和Ganache?
Remix是一個開源的Solidity智慧合約開發環境。
Ganache是一個可以在本地模擬以太坊環境的客戶端。

2、簡述外部賬戶和合約賬戶區別。
外部賬戶和合約賬戶的主要區別在於,外部賬戶由私鑰控制,擁有私鑰的賬號,沒有程式碼,可以發起交易,控制以太坊的訪問;而合約賬戶由程式碼控制,含有程式碼,沒有私鑰,不可以主動生成交易,只能在收到交易時傳送交易。

3、外部賬戶如何呼叫合約上的函式?
外部賬戶呼叫合約上的函式主要透過傳送交易來實現。
建立交易:外部賬戶建立一個交易,該交易包含合約地址和需要呼叫的函式的資訊。
傳送交易:外部賬戶使用其私鑰對交易進行簽名,然後將交易傳送到以太坊網路。
執行函式:一旦交易被礦工打包進區塊並新增到區塊鏈中,合約就會執行交易中指定的函式。

4、簡述solidity的狀態變數、全域性變數和區域性變數。
狀態變數是儲存在合約儲存空間中的變數,其值會永久儲存。這些變數的值在合約的所有函式中都可以訪問和修改。
全域性變數儲存在全域性名稱空間,用於獲取區塊鏈相關資訊的特殊變數。這些變數提供了有關當前交易和區塊的資訊。
區域性變數是在函式內部宣告的變數,其值僅在函式執行過程中有效,函式退出後,變數無效。這些變數只能在宣告它們的函式內部訪問。

五、
1、簡述智慧合約重入攻擊,舉例兩種防禦方法
重入攻擊是一種常見的智慧合約安全漏洞,攻擊者利用合約中存在的邏輯漏洞,在呼叫合約函式時,利用合約邏輯漏洞,反覆呼叫合約的函式,並利用這種遞迴呼叫的機制,以欺騙合約的計算,從而使攻擊者獲得非法利益。
防禦方法:
給變數加互斥鎖的方式
邏輯狀態更新在移送以太幣之前。這稱為檢查-生效-互動模式

2、什麼是智慧合約上溢和下溢,分別舉例說明
上溢是指在進行數值計算時,如果計算結果非常大,超過了儲存器或暫存器所能儲存或表示的能力限制,就會產生上溢。
下溢是指在進行數值計算時,如果計算結果非常小,小於儲存器或暫存器所能儲存或表示的能力限制,就會產生下溢。
例如:
在Solidity中,uint8型別的變數能表示的範圍是0 - 255這256個數。
如果我們試圖將一個uint8型別的變數加上一個大於255的數,那麼結果就會超過uint8的最大值,導致上溢,它會越過256,變成0。
如果我們試圖將一個uint8型別的變數減去一個大於它的數,那麼結果就會小於uint8的最小值(即0),導致下溢,它會越過-1,變成255。

六、
1、加密貨幣(cryptocurrency)和代幣(Token)的區別
加密貨幣是區塊鏈的原生資產,尤其執行的區塊鏈協議直接發行,例如比特幣上的BTC或以太坊上的ETH。
代幣是由各類智慧合約平臺的特殊費用載體,使用者可以在此類平臺上建立、發行並管理代幣。

2、同質化代幣和非同質化代幣(NFT)的區別,寫出它們分別的標準名字
同質化代幣不同單元是惡可互換的,沒有唯一屬性,使用最廣泛的代幣標準是ERC-20
非同質化代幣單獨唯一且無法與其他代幣互換的不可替代代幣。如標準ERC-721.

3、簡述ERC20標準的單步轉賬和兩步式轉賬的區別
這兩種轉賬方式的主要區別在於,單步轉賬直接將代幣從一個賬戶轉移到另一個賬戶,而兩步式轉賬則需要使用者先授權,然後由合約執行轉賬。

七、
1、簡述區塊鏈鏈上擴容和鏈下擴容區別。
在區塊鏈中,鏈上擴容和鏈下擴容是兩種主要的擴容方式,它們的區別主要在於擴容的實現層面
鏈上擴容是直接在區塊鏈上進行的,透過改變區塊大小或資料結構從而達到提高處理交易能力的解決方案。
鏈下擴容則是在加密貨幣的主鏈之外,建立外圍或第二層交易網路。

2、狀態通道(或閃電網路)擴容原理。
透過在不同使用者之間後使用者和服務之間建立一個雙向通道,為不同實體之間提供狀態維護服務。允許把區塊鏈上的許多操作在鏈外進行管理,等完成來鏈外操作多方籤確認後,才最終結果上鍊。

3、隔離見證擴容原理。
將簽名資訊從基本結構裡拿出來。放在心得資料結構中,本質上將區塊中的是交易結構同時處理改為拆分處理。

4、如何理解隔離見證是軟分叉
主要是因為它的實現方式並不會導致比特幣網路的分裂,保持了網路的一致性。具體來說,隔離見證的主要目標是最佳化比特幣交易和區塊的結構,將交易的簽名從交易中移到一個獨立的結構中。
舊版本的比特幣節點可以處理隔離見證的交易,即使真實的區塊已超過1MB,它們仍會以為沒有超過限制而會接受區塊。隔離見證的升級可以被忽略,無需強制,未升級的節點可以處理隔離見證型別的輸出。

相關文章