簡述Solana的編程模型:究竟和ETH有何區別?

2024-05-18 00:05:10

Solana 是一個旨在支持 dApps 的高性能區塊鏈平臺,以其速度和可擴展性聞名,而這是通過獨特的共識機制和架構設計實現的。本文將以太坊作為比較對象,簡要介紹 Solana 智能合約編程模型的特點。

智能合約、鏈上程序:

運行在以太坊上的程序被稱為智能合約,它是位於以太坊上一個特定地址的一系列代碼(函數)和數據(狀態)。(哦豁,代碼數據耦合了)智能合約也是一個以太坊帳戶,稱之為合約帳戶,它們有余額,可成為交易對象, 但是無法被人操控,被部署在網絡上作為程序運行。

而運行在 Solana 上的可執行代碼被稱為鏈上程序(On-chain Program),它們能解釋每筆交易中發送的指令。這些程序可以直接部署到網絡核心作為原生程序,或由任何人發布為 SPL 程序。

  • 指令 (Instructions):指令是 Solana 鏈上程序的特有名詞。鏈上程序由指令組成,是執行特定操作的最小單位: 每筆 Solana 交易中都包含一個或多個指令。指令指定了要執行的操作,包括調用特定鏈上程序、傳遞账戶、輸入列表以及提供字節數組。指令有計算限制,因此鏈上程序應該被優化為使用少量計算單元,或將昂貴的操作分成多個指令。

  • 原生程序:提供驗證節點所需功能的原生程序。其中最著名的是 System Program,它負責管理創建新账戶以及在兩個账戶之間轉账 SOL。

  • SPL 程序:定義了一系列鏈上活動,包括代幣的創建、交換、借貸,以及創建質押池、維護鏈上域名解析服務等。其中,SPL Token Program 用於代幣操作,而 Associated Token Account Program 等則常用於編寫其他定制程序。

你叫智能合約,我叫鏈上程序,大家說法不一樣,但都是指運行在區塊鏈上的代碼。張三李四王麻子都是人名,到底素質如何還得考察其他方面。

账戶模型、數據解耦:

與以太坊類似,Solana 也是基於账戶模型的區塊鏈,但 Solana 提供了一套不同於以太坊的账戶模型,用不同的方式存儲數據。

在 Solana 中,账戶可以保存錢包信息和其他數據,账戶定義的字段包括 Lamports(账戶余額)、Owner(账戶所有者)、Executable(是否為可執行账戶)和 Data(账戶存儲的數據)。每個账戶都指定一個程序作為其所有者,以區分账戶用作哪個程序的狀態存儲。這些鏈上程序是只讀或無狀態的:程序账戶(可執行账戶)只存儲 BPF 字節碼,不存儲任何狀態,程序會把狀態存儲在其他獨立账戶(不可執行账戶)中,即 Solana 的編程模型將代碼和數據解耦。

而以太坊账戶主要是 EVM 狀態的引用,其智能合約既存在代碼邏輯,又需要存儲用戶的數據。這通常被認為是 EVM 歷史遺留的設計缺陷。

不要小看這一區別!Solana 智能合約在根本上比具有耦合編程模型的區塊鏈(如以太坊)更難攻擊:

在以太坊中,智能合約「擁有者」是一個全局變量,與智能合約一一對應。因此,調用某個函數可能直接改變合約「擁有者」。

而在 Solana 中,智能合約的「擁有者」是與账戶關聯的數據,而不是全局變量。一個账戶可以有多個擁有者,而不是一對一關聯。攻擊者要利用智能合約的安全漏洞,不僅需要找到有問題的函數,還需要准備「正確」的账戶來調用該函數。這一步驟並不容易,因為 Solana 智能合約通常涉及多個輸入账戶,並通過約束條件(例如 `account 1.owner==account 2.key` )來管理它們之間的關系。從「准備正確的账戶」到「發動攻擊」的過程,足夠讓安全監控人員可以在攻擊之前主動檢測到創建與智能合約相關的「虛假」账戶的可疑交易。

以太坊的智能合約就像是一個使用唯一密碼的保險庫,你只要得到了這個密碼,就能獲得完整的所有權;而 Solana 的則是一個有很多個密碼的保險庫,但想要獲取權限,你不但要想辦法搞到密碼,還要弄清楚這個密碼對應的編號,才能把鎖打开。

編程語言

Rust 是 Solana 上开發智能合約的主要編程語言。因為它的性能和安全特性,使其適用於區塊鏈和智能合約的高風險環境。Solana 同時也支持 C、C++ 和其他語言(很不常見)。官方提供了 Rust 和 C 的 SDK 來支持开發鏈上程序。开發者可以使用工具將程序編譯成 Berkley Packet Filter (BPF) 字節碼(文件以 .so 為擴展名 ),再部署到 Solana 鏈上,通過 Sealevel 並行智能合約運行時來執行智能合約的邏輯。

由於 Rust 語言本身上手難度高,且並不是為區塊鏈开發定制,導致很多需求需要重復造輪子、代碼冗余。(生產中許多項目採用 Backpack 聯創 Armani 創造的 Anchor 框架簡化开發)許多新創造的專用於區塊鏈开發的編程語言是基於 Rust 的,如 Cairo(Starknet)、Move(Sui、Aptos)。

生產中許多項目採用 Anchor 框架

而以太坊智能合約主要用 Solidity 語言开發(語法和 javascript 類似,代碼文件以 .sol 為擴展名)。由於語法相對簡單以及开發工具更加成熟(Hardhat 框架、Remix IDE...)通常我們認為以太坊的开發體驗更簡單爽快,而 Solana 开發的上手難度高。所以盡管現在 Solana 的熱度很高,事實上以太坊的开發者數目仍然是遠多於 Solana 的。

特定路況下,頂級賽車沒有改裝車跑得快。Rust 就像頂級賽車,有力地保證了 Solana 的性能和安全性,但非為鏈上程序开發這條賽道而生,反而造成了駕駛(开發)難度的上升。採用基於 Rust、為鏈上开發定制語言的公鏈則相當於改裝了這輛賽車,使其更適應路況。Solana 在這點上處於劣勢。

總結

Solana 的智能合約編程模型是創新的。它提供了一種無狀態的智能合約开發方法,將 Rust 作為主要編程語言,以及讓邏輯與狀態分離的架構,為开發人員構建和部署智能合約提供了強大環境,確保安全性和性能,但开發難度較大。Solana 專注於高吞吐量、低成本和可擴展性,仍是尋求創建高性能 dApps 的开發人員目前的理想選擇。

 

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

推薦文章

香港眾安銀行上線加密貨幣交易!CEX將全面被銀行進攻?

香 港數位銀行眾安銀行(ZA Bank)宣布,從今(25 )日起,正式在其 App 推出 加密貨幣...

Arthur Wang
6 6小時前

殺》比特幣一度跌破9.6萬、以太坊苦守3300美元,超19萬人爆倉5億美元

比 特幣在剛結束的週末一度觸及 99,588 美元的歷史新高後就開啟震盪下跌,昨日傍晚左右從 98...

Joe
6 6小時前

SAND兩天飆漲100%、老牌公鏈集體覺醒,山寨季信號燈亮了?

比 特幣劍指十萬美元之際,投資者密切關注的是等待已久的山寨季是否即將到來?在此背景下,上週末開始有...

Joe
6 6小時前

山寨季要來了嗎?除了 BTC.D 還有這三大指標助你判斷

在 加密貨幣領域最常討論的話題一直是 「山寨季」(Altseason),這是因為在這個短暫時期通常...

白話區塊鏈
6 6小時前

WBTC「大插針」閃崩至5200美元,與Coinbase宣布下架有關?

W rapped Bitcoin(WBTC)週末於幣安交易所發生異常閃崩的狀況,在 23 日晚間十...

Arthur Wang
6 6小時前

拆解微策略買比特幣行為和資金來源 = 加強版「Grayscale + Luna」

比 特幣突破 8 萬美元!比特幣突破 9 萬美元!比特幣突破 9.5 萬美元!比特幣突破 9.9...

PANews
6 6小時前