從 EVM 遷移到 SVM(Solana)需要了解虛擬機之間的幾個關鍵差異。本文將介紹其中的幾個差異,包括賬戶、費用、交易、智能合約(程序)等。它還將探討開發人員設置,包括工具和 SDK。

最後,開發人員將擁有開始 Solana 之旅所需的知識。

瞭解核心差異

首先,讓我們看看 EVM 和 SVM 之間最顯著的區別——賬戶模型設計。

帳戶模型

與以太坊不同,Solana 的設計旨在利用多核並支持並行交易。爲了實現這一點,Solana 使用了賬戶模型。

Solana 上的賬戶是 Solana 分類賬中的一條記錄,它要麼保存數據(數據賬戶),要麼是可執行程序(Solana 上的智能合約或程序)。

與以太坊一樣,每個帳戶都有一個地址標識符。然而,與以太坊(每個智能合約都是一個將執行邏輯和存儲綁定在一起的帳戶)不同,Solana 的智能合約完全無狀態。必須將狀態傳遞給帳戶才能執行。

讓我們看一個代碼示例。在下面的 Solidity 代碼中,狀態與智能合約綁定,其中有一行 int private count = 0。

使用 Rust (Solana),智能合約中有一個結構體,聲明爲 initialize_counter。此初始計數器創建一個計數爲 0 的帳戶。帳戶被傳遞給此計數器以增加計數。這樣可以防止狀態保留在智能合約本身內。

使用 Solana,數據存儲在程序之外的單獨賬戶中。要執行程序中的邏輯,請傳遞要執行的賬戶。

在這個計數器程序的情況下,在調用增量函數時將一個計數器賬戶傳遞給程序,然後程序會增加計數器賬戶中的值。

賬戶模型設計的好處

此帳戶模型的主要優點之一是程序可重用性。

由於以太坊採用的是 ERC20 接口,開發者每次創建新 token 時,都必須將 ERC20 智能合約重新部署到以太坊,並指定其價值,這種重新部署的成本很高。

但使用 Solana,無需創建和部署新的智能合約即可創建新代幣。相反,使用 Solana 代幣計劃創建一個新帳戶(稱爲鑄幣帳戶),並傳遞代幣數量、小數點、誰可以鑄幣等詳細信息。

只需向代幣程序發送交易即可完成此操作。例如,使用 Solana 程序庫 CLI,只需一個命令:

本地費用市場

賬戶模型的另一個好處是費用市場是每個賬戶本地的。

在以太坊上,費用市場是全球性的。如果 NFT 收藏品風靡一時,每個人都在鑄造——每個人的費用都會上漲。但在 Solana 上,由於費用市場是按賬戶本地劃分的,因此只有鑄造該 NFT 收藏品的人才能支付高額費用。不參與的用戶不受影響。

費用

讓我們更深入地瞭解一下費用。在 Solana 上,費用分爲三類:基本費用、優先費用和租金。讓我們逐一瞭解一下。

  • 基本費用根據交易中的簽名數量計算。每個簽名需要花費 5000 個 Lamport(0.000000001 sol = 1 個 Lamport)。如果交易有 5 個簽名,則基本費用爲 25000 個 Lamport。

  • 優先費用是一種可選費用,可以添加到交易中以賦予其優先權。此費用基於交易中使用的計算單位數量。與以太坊 gas 類似,此費用是交易所需計算資源的簡單衡量標準。

  • 最後的費用,租金,更像是押金。當開發者創建賬戶或在網絡上分配空間時,他們必須爲網絡存入 SOL 以保留他們的賬戶。租金是根據網絡上存儲的字節數計算的,並且分配空間會收取額外的基本費用。

交易

在 Solana 上,程序執行從向集羣提交事務開始。Solana 上的每個事務由四個部分組成:

  1. 一條或多條指令。指令是 Solana 上最小的執行邏輯。它們可以被視爲以太坊智能合約上的函數調用。它們調用程序來調用 Solana 運行時來更新狀態(例如,調用代幣程序將代幣從一個帳戶轉移到另一個帳戶)。

  2. 要讀取或寫入的帳戶數組

  3. 一個或多個簽名

  4. 最近的區塊哈希或隨機數。與以太坊上使用增量隨機數不同,Solana 會從集羣中提取最近的區塊哈希。使用此區塊哈希,交易僅在 150 個區塊內有效,從而防止長期交易簽名在更晚的日期執行。

以太坊和 Solana 之間的另一個重要區別是,使用 Solana,交易可以有多個指令(以太坊上的函數調用)。這意味着無需創建自定義智能合約來將函數鏈接到單個交易中。每個指令都可以是單獨的函數調用,在交易中按順序執行。交易也是原子的:如果一條指令失敗,整個交易就會失敗。

交易限制

與以太坊 gas 限制一樣,Solana 交易也有計算單元限制。

其他限制包括:

  • 每個引用的帳戶每個區塊最多可使用 12,000,000 個計算單元。

  • 在交易恢復之前,僅能以深度 4 調用指令。

內存池

與以太坊不同,Solana 沒有內存池。Solana 驗證器會根據領導者計劃將所有交易轉發給最多四位領導者。沒有內存池會迫使交易在領導者之間跳躍,直到區塊哈希到期,但這也減少了整個集羣的八卦開銷。

Solana 開發者環境

現在讓我們來看看 Solana 上的一些開發工具。

編程語言

以太坊主要使用 Solidity 編寫智能合約,而 Solana 使用 Rust。如果從以太坊轉移,請考慮使用 Anchor 框架或 Neon,這兩個框架都可以幫助開發人員更快地上手,因爲他們可以使用熟悉的 EVM 工具在 Solana 中構建。

與以太坊一樣,許多最流行的編程語言都有可用的客戶端 SDK,包括 JavaScript、Python 和 Java。

開發人員工具

Solana 目前沒有與 Foundry 相當的產品,但它確實擁有一套與 Solidity 相當的工具。

爲了更深入地瞭解,這裏有一個更廣泛的開發人員資源列表。

創建智能合約

在 Solana 上創建程序時(或遷移現有的以太坊智能合約時),有幾個核心差異——太多了,無法在此一一介紹。但讓我們來看看一些最常見的:

  • Solana 上不直接存在映射。相反,請使用程序派生地址。與映射一樣,程序派生地址能夠創建從密鑰或帳戶到鏈上存儲的值的映射。

  • 在 Solana 上,程序默認可升級。智能合約可以通過簡單的 CLI 命令 solana program deploy <program_filepath> 進行升級。

  • 在編寫 Solidity 智能合約時,通常會檢查 msg.sender 或 tx.origin。Solana 上沒有與此對應的內容。每筆交易可以有多個簽名者,發送交易的人不一定是簽署交易的人。

有關程序和如何部署的更多信息,請查看本指南。

瞭解更多

這些是在以太坊和 Solana 上進行開發的一些最關鍵的區別。當然,還有很多東西需要學習。最好的入門方式就是直接開始!以下是一些後續步驟的資源:

  • Solana Playground,開發人員可以在其中從瀏覽器編寫、構建和部署 Solana 程序

  • 使用 Solana Playground 進行 Solana 開發的簡介

  • 更詳細地瞭解在以太坊和 Solana 上開發之間的差異

  • Solana 訓練營