Blockchain

智能合約如何在底層“在區塊鏈上執行”?

  • December 1, 2021

我對區塊鏈技術很陌生,我想了解一些我在網上找不到深入解釋的概念。到目前為止,我檢查的所有資源都以非常高級的方式解釋了這個主題,並且沒有對系統工作過程的技術解釋,特別是乙太坊。

我將解釋我對系統的了解,然後是我不知道的。可能是我的問題有點寬泛,但我不能把它分成單獨的問題,因為這些概念是如此糾纏在一起!

以一種簡化的方式,這就是區塊鏈的樣子(我將在下面引用一些想法):

在此處輸入圖像描述

假設我們有一個儲存節點地址列表的智能合約。每次節點觸發合約iWasHere()函式時,該節點的地址都會被添加到一個列表中,並且可以通過呼叫該whoWasHere()函式來讀取地址列表。

我想更深入地了解智能合約在區塊鏈上執行的確切含義以及幕後究竟發生了什麼。

以下是我對這個概念的理解:

  • 智能合約可以具有與普通人相同的功能:可以收款、可以匯款、可以收聽某些事件並與其他智能合約進行互動。
  • 人類可以通過前端界面與智能合約進行互動,因此可以在該“後端”界面之上建構成熟的應用程序。
  • 智能合約被編譯成字節碼,即在 EVM 上執行的 EVM 彙編指令,每條指令都包含 Gas。

這是我對這個概念的理解:

  • 當一個人“在區塊鏈上部署智能合約”時會發生什麼?它是否附加到新開采的區塊上,例如n + 17?那麼,如何訪問該契約呢?您只是掃描整個鏈以查找具有特定合約地址的智能合約嗎?
  • 例如,當一個隨機的人觸發智能合約功能時,究竟會發生什麼iWasHere()。對應於該函式呼叫需要執行的程式碼的 EVM 字節碼被添加到事務中,然後記錄在塊上?誰執行程式碼本身(即哪個節點將執行在實際硬體上執行程式碼所需的實際處理器週期,例如人類擁有的 CPU),呼叫函式的節點或網路中的所有節點?如果網路中的所有節點都將執行程式碼,那麼它的可擴展性如何?當有 10.000 個應用程序同時在 blochcain 上執行時會發生什麼?與網路中每個節點上執行的 10.000 個應用程序不一樣嗎?

有人可以解釋或指出一些解釋這些概念的文件嗎?網路上充斥著關於系統如何工作的高級解釋,但在低技術水平上找不到任何東西。

首先,我們不要將智能合約與人等同起來,這是一個非常物件導向的想法,在我看來,它只會混淆整個問題。

我絕對同意這樣的技術文件和教學材料非常缺乏。你經常得到非常表面的資訊。

可以收聽某些事件

智能合約不能監聽事件。

智能合約是一種被動靜態的東西。叫它做某事,它就會做這件事。它從不靠自己做事。它可能會根據經過的時間或塊高度或類似情況做出不同的響應。或者取決於其他智能合約的狀態,作為您請求的一部分,它可能會詢問。

人類可以通過前端界面與智能合約進行互動,因此可以在該“後端”界面之上建構成熟的應用程序。

正確的。基本上,區塊鏈只是一個不可變的數據庫,它存在於“網際網路上”去中心化,沒有單一位置。如果是智能合約鏈,它也可以有程式碼。

智能合約被編譯成字節碼,即在 EVM 上執行的 EVM 彙編指令和每條指令

$$ cost $$氣體。

對。

它是否附加到一個塊上,在一個新開采的塊上

這是!一切都是塊,所以鏈上的一切都在塊上。我認為從技術上講,合約可能會在區塊之間拆分,因為區塊大小是有限的,但不確定。

那麼,如何訪問該契約呢?您只是掃描整個鏈以查找具有特定合約地址的智能合約嗎?

部署後,這是使用現有乙太坊地址執行的 EVM 操作,需要消耗 gas,您會收到一個地址。該地址是您找到智能合約的地方。與 hashmap 類似,訪問速度非常快。

一筆交易,然後記錄在區塊上

乙太坊“視圖”類型和普通函式呼叫有兩種類型的函式呼叫。視圖類型呼叫,不會向鏈中寫入任何內容,也不會花費任何氣體。正常人會。gas 成本相當於完成整個呼叫所需的 EVM 指令的數量和成本。因此,它僅在您實際寫入鏈時記錄,而不是在您剛剛刪除變數時記錄。

請注意,對於某些視圖呼叫,仍然需要進行一些處理,例如通過一個循環,實際上這樣做並不需要任何氣體。這與下一點有關。

誰執行程式碼本身

我認為這是一個非常重要的問題。

因此,首先,這些區塊鏈的設計方式是:您自己執行一個節點,並使用它與鏈進行通信。

實際上,大多數人都使用第三方,比如說 metamask 或 infura 或其他。但是這些第三方只是自己執行節點並為您提供您正在尋找的答案,他們仍然必須像您自己一樣執行節點。這些服務通常將所有區塊鏈數據記憶體在更快、更方便的數據庫中。

(很多這看起來很神奇,因為我們使用這樣的便利服務,但實際上你只是執行一個節點,它收集所有塊並可以與區塊鏈通信,區塊鏈又是一個巨大的數據庫)

當您進行 VIEW 呼叫時,我假設您自己在節點上執行 EVM 指令,這就是它不消耗任何氣體的原因。

在進行寫入的呼叫時,礦工必須實際探勘它。探勘塊,將你的東西附加到塊上,執行程式碼(如果有的話)並將結果寫入塊。

這對我來說確實有點模糊:共識機制確保數據是正確的,並且通過更多的節點拾取你產生的塊,它被接受了。但它只寫一次。

例如,如果您想進一步研究它,這將進入知識證明的領域。

但是你只寫一次,礦工會做。之後通過共識,我們通過共識算法確定此寫入是正確的,並且您沒有欺騙系統。

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