跳至主要內容
本頁面使用機器翻譯自英語,可能包含錯誤或不清楚的語言。如需最準確的信息,請參閱英文原文。由於更新頻繁,部分內容可能與英文原文有出入。請加入我們在 Crowdin 上的努力,幫助我們改進本頁面的翻譯。 (Crowdin translation page, Contributing guide)

執行模式

本頁介紹 Kaia 智能合約的執行模型、數據結構和生命週期。

執行模式

Transactions can be generated by platform APIs as described in Platform API Specification. 這些交易被髮送到_共識節點(CNs\ )_,存儲在一個區塊中。 CN 檢查收到的每筆交易是否有效。 有效的事務會保存在事務池中,否則會被丟棄。 CN 在其事務池中選擇當前區塊中的可執行事務,並逐一執行。

要執行交易,發送方必須支付一定數額的 KAIA 作為交易費。 KAIA 的這筆交易費是根據天然氣和乘數(即_)、單價計算的。 氣體是計算的基本單位。 在 Kaia 節點上執行的每個操作都會消耗預定量的氣體。 交易所需的 KAIA 確切金額按交易費中的公式計算。 如果發送方提交的交易附帶的氣體不足,交易可能會失敗。 如果發件人賬戶餘額不足,交易也可能失敗。

當一個事務成功執行後,它就會被包含在當前區塊中。 CN 收集交易,直到達到區塊氣體限制或區塊時間限制。 然後,CN 將這些交易生成一個區塊。 這一步需要在區塊中填寫幾個字段。 例如,它必須計算交易、收據、狀態等的哈希值。 填寫完所有必填字段後,CN 會生成一個區塊哈希值。

區塊生成完成後,區塊會傳播到所有其他 CN。 其他 CN 都會驗證傳播的區塊,並通過 BFT 共識算法就驗證結果達成共識。 當大多數 CN 成功完成驗證過程後,區塊就會被存儲到區塊鏈中。 由於 BFT 共識算法滿足即時終局性屬性,因此區塊是終局的,永遠不會被刪除。 一個區塊最終完成後,該區塊中所有事務的執行都將得到不可逆轉的保證,而且如果發送者提出要求,其執行結果可以返回給發送者。

增強整體提案人和委員會遴選的隨機性

Kaia 採用了一種新機制,在區塊提議者和委員會選擇過程中引入了可驗證的鏈上隨機性。 這種機制涉及到塊標頭中的兩個新字段:randomReveal "和 "mixHash"。

在這個系統中,區塊提議者生成並承諾隨機值。 區塊中的 "randomReveal "字段包含提議者的簽名,該簽名使用特定簽名方案生成,並根據當前提議的區塊編號進行計算。 然後,"mixHash "就會使用這個揭示的隨機值和其他區塊數據進行計算,從而為網絡創建一個隨機源。

區塊提案人和委員會的遴選過程就是利用這種生成的隨機性。 使用這種隨機性的目的是使選擇過程更加不可預測和公平,從而提高網絡的整體安全性。 這種機制的一個特殊用例是允許區塊提議者在上一個區塊完成之前保持隱私,從而為網絡增加了一層額外的安全性。

執行流程形成了一個循環,每個區塊的隨機性都會影響未來區塊提議者和委員會的選擇。 這就為這些過程引入了不可預測性因素,同時又保持了其可驗證性。

值得注意的是,雖然這種隨機性被用於選擇過程,但在區塊挖掘結束時,獎勵仍會根據投注金額直接修改狀態進行分配。 隨機性決定了哪些驗證者被選中成為接受獎勵的委員會成員,而不是分配獎勵的數量。

若干安全考慮因素對這一機制至關重要:

  • 為防止重放攻擊,每個區塊的每個 randomReveal 值都必須是唯一的。
  • 區塊提議者必須誠實地生成並提交其 "隨機揭示",以防止 "混合哈希 "被篡改。
  • 提案者必須在區塊提案之前對其 randomReveal 保密,以防止其他參與者預測和可能的操縱。
  • randomReveal "必須經過適當簽名和驗證,以防篡改。

這種機制的目的是在區塊創建和委員會選擇過程中引入不可預測性,同時保持可驗證性。 值得注意的是,雖然本系統提供了一個增強隨機性的框架,但隨著網絡的發展和完善,使用這種隨機性的提案人和委員會選擇算法的具體實現方式可能會隨時間推移而發生變化。

交易執行限制

Kaia Mainnet 和 Kairos Testnet 目前對交易執行有以下限制:

  • 您可以設置交易的 gasPrice,但這意味著這是您能支付的最高價格。 實際Gas 價格將由網絡決定。 更多詳細信息,請參閱Gas 價格概覽
  • 執行成本大於計算成本限制的事務將被丟棄。 請參閱 計算成本
  • 從上海硬分叉開始,根據初始代碼的長度創建合約需要額外的 gas 費用,每 32 字節的初始代碼收取 2 gas。

智能合約部署限制

Kaia 對智能合約的部署實施了多項限制:

  • 根據 EIP-3541,從 Kore 硬分叉開始,不允許部署以 0xEF 字節開始的新合約代碼。
  • 自上海硬分叉以來:
    • 如果初始代碼長度超過 49 152 字節,新合同代碼的部署將被拒絕。
    • 新合同代碼的長度不能超過 24 576 字節。
    • 這些限制基於 EIP-3860
    • 已啟用智能合約賬戶 (SCA) 覆蓋外部所有賬戶 (EOA)。

數據結構

賬戶

Kaia 區塊鏈平臺中的賬戶是一種數據結構,包含個人餘額或智能合約的相關信息。 Kaia 重新設計了賬戶模型,以提供更好的 DX 和 UX。 有關賬戶模型的詳細信息,請參閱 此處

交易

區塊鏈平臺中的交易是節點之間發送的改變區塊鏈狀態的信息。 Kaia 還重新設計了交易模式。 根據交易的目的將其分為不同類型,以尋找優化性能的機會,並支持重新設計的賬戶模式。 Detailed information about the transaction model can be found here.

國家

Kaia 的狀態是賬戶狀態的集合。 如果 Kaia 節點以相同的順序處理了相同的區塊,則各節點的狀態必須相同。 在 Kaia 節點上執行事務時,狀態會發生變化。

下表列出了存儲在該州的賬戶數據。

組件說明
nonce整數值,表示該賬戶執行的交易次數。 提交交易時,交易的 nonce 應等於賬戶的 nonce。
balance一個整數值,表示該賬戶目前擁有的 KAIA 數量。
storageRoot包含賬戶中所有存儲變量值的 Merkle Patricia Trie 根的 256 位散列。
codeHash賬戶字節碼的哈希值。 這個值是不可變的,這意味著它只有在智能合約創建時才會被設置。 如果賬戶是 EOA 或 EA,該值將設為空值。

街區

區塊是 Kaia 區塊鏈的重要元素,因為區塊鏈實際上是由區塊鏈組成的。 下表列出了程序塊中的組件。

組件說明
baseFeePerGas每個氣體的基本費用。 只有當該塊編號的 EthTxTypeCompatibleBlock 被激活時,才會返回該值。
blockScoreFormer difficulty. 在 BFT 共識引擎中始終為 1
extraData該數據塊的 "額外數據 "字段。
gasUsed該區塊內所有交易使用的氣體總量。
governanceDataRLP 編碼的治理配置
logsBloom區塊日誌的 Bloom 過濾器。 待處理塊時為 "空"。
number區塊編號。 待處理塊時為 "空"。
parentHash塊的父塊的哈希值。
proposer區塊提議者的地址。
receiptsRoot區塊收據三元組的根。
reward接收區塊獎勵的地址。
size整數,該數據塊的大小(字節)。
stateRoot區塊最終狀態三元組的根。
totalBlockScore該區塊之前鏈上總 blockScore 的整數。
transactionsRoot區塊的交易三角根。
timestamp區塊整理時間的 Unix 時間戳。
timestampFoS區塊整理時間戳的秒分數。
transactions事務對象數組,或 32 字節事務哈希值(取決於最後給定的參數)。
voteDataRLP 編碼的提案人治理投票

Smart Contract Lifecycle

智能合約由代碼和數據的集合組成,這些代碼和數據位於 Kaia 區塊鏈上的特定地址。 合約賬戶能夠相互傳遞信息,並進行實際上完整的圖靈計算。 合約以 Kaia 特有的二進制格式存在於區塊鏈上。 目前,Kaia 支持一種二進制格式--以太坊虛擬機字節碼(Ethereum Virtual Machine (EVM));不過,未來還將支持其他格式。

創建智能合約

通過向空地址發送以二進制為數據的交易,可以在 Kaia 區塊鏈中創建智能合約。 二進制文件可以是多種格式,但 Kaia 目前支持一種二進制文件格式,即 EVM 字節碼。 值得注意的是,這項交易的執行需要付款。 交易存儲到區塊後,發送方賬戶餘額將根據交易費用模式進行扣減。 一段時間後,交易應出現在一個區塊中,該區塊會確認交易涉及的狀態已達成共識。 此時,智能合約已存在於 Kaia 區塊鏈中。

執行智能合約

智能合約的函數可以通過向智能合約發送交易或在節點本地調用函數來調用和執行。 通過發送事務調用函數時,函數是通過處理事務來執行的。 這就需要花費 KAIA 來發送交易,而呼叫將被永久記錄在區塊鏈上。 以這種方式調用的返回值是事務的哈希值。 在本地調用函數時,函數會在本地的 Kaia 虛擬機(KVM)中執行,調用會返回函數的返回值。 以這種方式進行的調用不會記錄在區塊鏈上,因此無法修改合約的內部狀態。 這種調用被稱為常量函數調用。 以這種方式撥打電話不收取任何 KAIA 費用。 當只對返回值感興趣時,應使用常量函數調用,而當對合約狀態的副作用感興趣時,應使用事務。

通過交易執行智能合約功能時,會產生氣體成本。 確切的氣體成本取決於功能執行的操作,並根據每個 EVM 操作的預定義氣體成本進行計算。

禁用智能合約

由於智能合約存在於 Kaia 區塊鏈中,因此無法刪除,只能禁用。 目前,Kaia 採用了與以太坊智能合約相同的程序來禁用 Kaia 智能合約。 例如,可以通過使用 Solidity \(或 KLVM 操作碼 SELFDESTRUCT\)中的selfdestruct(address recipient)調用來禁用 KLVM 的 Kaia 智能合約。 Kaia 團隊還將為其他執行環境提供禁用智能合約的方法。

升級智能合約

Kaia 將提供升級已部署智能合約的方法,以解決現有區塊鏈給用戶帶來的不便。 例如,區塊鏈上部署的服務很難升級。 Kaia 將提供框架和智能合約庫,使服務提供商(SPs\ )能夠升級已部署的服務並遷移服務信息。 Kaia 將根據以下要求謹慎提供該功能。

  • 只有授權賬戶或智能合約所有者才能升級智能合約。
  • 升級後的智能合約應能操作舊智能合約維護的現有數據。
  • 其他引用舊智能合約的智能合約應該能夠決定是否使用這些智能合約的更新、升級版本。
讓這個頁面變得更好