Contract-Development

交易如何在乙太坊虛擬機中工作?

  • December 17, 2018

在閱讀 EVM 文件的事務部分時,我腦海中提出了許多問題:

如果沒有設置目標賬戶(交易沒有收款人或者收款人設置為空),交易會創建一個新的合約**(payload應該是合約的程式碼,對嗎?)。** 如前所述,該合約的地址不是零地址,而是從發送者及其發送的交易數量(“現時”)派生的地址**(但現時不是表示與塊數據結合的數字提供了下一個區塊的雜湊?)。這種合約創建交易的有效載荷被視為 EVM 字節碼並被執行(它們是指合約的編譯字節碼嗎?他們所說的“並執行”是什麼意思?). 此執行的輸出數據作為合約程式碼永久儲存。這意味著,為了創建合約,您不會發送合約的實際程式碼,而是實際上在執行時返回該程式碼的程式碼(哪個程式碼返回什麼?我們有合約程式碼和編譯的合約我完全錯過了這個) .**

很抱歉將問題嵌入引用,但我認為這是為了更好地理解我在提問時的真實情況。

我相信https://programtheblockchain.com/posts/2018/01/09/how-smart-contract-deployment-works/回答了所有這些問題。

關於部署的程式碼:

合約部署交易的數據欄位是合約初始化期間要執行的程式碼。它不是在發送到合約的後續交易上執行的程式碼。該程式碼 由初始化程式碼*返回。*本質上,數據欄位中的程式碼是一個程序,它將編寫一個部署為智能合約的程序。雖然這聽起來相當開放和復雜,但實際上它通常非常簡單。Solidity 編譯器生成的標準初始化程式碼執行以下操作:

  1. 在合約的建構子中執行程式碼,設置儲存值等。
  2. 將合約其餘部分的程式碼*複製到記憶體中並返回。*要複製的程式碼只是簡單地附加到數據欄位中的建構子程式碼中。

建構子參數的處理方式類似。它們最後儲存在數據欄位中,初始化程式碼從那裡讀取它們。

關於隨機數,它是每個帳戶的隨機數,而不是塊頭中使用的隨機數:

一旦部署了一個合約,它就會被它的地址引用,這個地址保證是唯一的。計算地址只需要發送者帳戶的地址和發送者的隨機數。

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