Solidity

比特幣和乙太坊交易有什麼區別?

  • November 23, 2020

我已經閱讀了有關交易如何運作以及如何用比特幣兌換它們的資訊。以一種非常抽象的方式,發送者定義了應該贖回交易的輸出腳本。但我是乙太坊的新手。所以我的問題是,乙太坊交易與比特幣有何不同?

為了澄清我的問題,如果我在乙太坊區塊鏈上有一個智能合約,可以在特定條件下將一些乙太幣從合約所有者發送給其他人(在這個問題的這個很好的答案中,有一個類似的合約,使用乙太坊區塊鏈的定時承諾) . 我知道比特幣如何處理前一種情況(它需要傳遞部分簽名的交易、持有未發布的交易、共享雜湊),但從技術上講,乙太坊如何處理它?比特幣和乙太幣哪個更安全?

一個重要的區別是,在乙太坊中,賬戶和數據作為狀態數據庫中的有序數據存在。事務修改此狀態。然而,在比特幣中,舊 UTXO 的消耗和新 UTXO 的創建會導致隱式狀態的變化。可以說,所有未使用的交易輸出共同反映了比特幣的目前狀態。

範例:在乙太坊中,您可以直接在 stateDB 中搜尋地址並查詢餘額。在比特幣中,你必須搜尋每個 UTXO 並查看是否可以製定支出條件。將耦合到 UTXO 的值相加可以得到平衡。

比特幣和乙太坊(大致)共享相同的安全性。在乙太坊中,您必須使用 ECDSA 在曲線 Secp256k1 上簽署您的交易以轉移餘額或呼叫處理狀態更改的智能合約。每個狀態變化都始於乙太坊中的簽名交易。在比特幣中,你可以製定不需要 EC 簽名的支出條件。例如,您可以製定條件“x + 2 = 3”來保護 utxo 不被花費。任何具有求解該方程的算術技能的人都可以採用此 UTXO,制定解決方案(將 1 壓入堆棧)並創建有效交易(並因此隱式轉移價值)。

智能合約或比特幣腳本中使用的語言存在很大差異。前一種語言(通常)是圖靈完備的,這(大致)意味著您可以解決電腦可以使用該語言解決的所有問題。準確地說,它們是準圖靈完備的,因為還有另一個因素限制了語言可以解決的問題:gas 成本(執行成本)和 gas 限制。比特幣使用圖靈不完全語言。從該語言中刪除了重要的操作,只剩下真正需要的操作。進一步的比特幣客戶端規則通常會極大地限制腳本大小。這些情況極大地限制了你在比特幣中創建“智能合約”。您可以製定電腦可以在乙太坊中執行的任何程序,這一事實使該語言非常強大,因此也很危險。編寫智能合約需要對如何編寫無法被利用的程式碼進行大量思考。人們故意編寫程式碼以供以後濫用以欺騙客戶的情況發生了。舉一些程式碼錯誤導致高破壞的例子:DAO Hack、Partiy Multisig bug、整數溢出攻擊

比特幣地址和乙太坊地址都經過校驗和,因此可以捕捉到人為輸入錯誤。不過,比特幣地址具有更強的校驗和。

在乙太坊中,乙太坊虛擬機處理交易。每當有新事務到達節點時。該節點執行以下步驟

  1. 驗證交易簽名
  2. 驗證交易發送者
  3. 檢查交易通知,它應該與發件人通知匹配
  4. 氣體限制應大於交易使用的氣體
  5. 檢查發件人餘額,發件人餘額應足以執行交易
  6. 檢查氣體限制,因為它不應在交易執行後超過

勾選後,可以在區塊中添加交易並執行狀態轉換函式來實現交易的執行

參考:Arshdeep Bahga的區塊鏈應用實踐方法

引用自:https://ethereum.stackexchange.com/questions/67051