Solana是一個高效能的區塊鏈平台,旨在支援dApps,以提高速度和可擴展性而聞名。文章介紹了Solana合約程式設計模型的特點,與以太坊進行了比較。以太坊使用智能合約,而Solana使用鏈上程序。 Solana帳戶模型和資料解耦與以太坊有所不同,提供了更安全的智慧合約開發方式。 Solana主要使用Rust程式語言開發智慧合約,而以太坊主要使用Solidity。總體而言,Solana的智慧合約程式設計模型創新,為建置和部署智慧合約提供了強大支持,適合尋求高效能dApps的開發人員選擇。
作者:前瞻新聞,Alex Liu
Solana 是一個旨在支援dApps 的高效能區塊鏈平台,以提高速度和可擴展性而聞名,而透過這種獨特的機制和架構設計實現的。本文以以太坊作為比較對象,簡單介紹Solana合約程式設計模型的特色。
智能合約、鏈上程序:
運行在以太坊上的程式被稱為智慧合約,它是位於以太坊上一個特定地址的一系列程式碼(函數)和資料(狀態)。 (噢坊,程式碼資料連接了)智能合約也是一個以太坊帳戶,稱合約帳戶,它們有餘額,可成為交易對象,但無法被人操縱,被部署在網路上作為程式運作。
而運行在Solana 上的執行程式碼稱為鏈上程式(On-chain Program),它們能夠解釋每筆交易中發送的指令。這些程序可以直接部署到網路核心作為程序,或由任何人發佈為SPL程序。
指令(Instructions):指令是Solana鏈上程式的特有名詞。鏈上程序由指令組成,是執行特定操作的最小單位:每筆Solana交易中都包含一個或多個指令。指令指定了要執行的操作,包括呼叫特定的鏈上程式、提交帳戶、輸入清單以及提供位元組叢集。指令有計算限制,因此鏈上程式應該優化為使用少量計算單元,或將昂貴的操作替換多個指令。
重建程式:提供節點所需功能的重建程式。其中核心的是系統程序,它負責建立管理新帳戶以及在兩個帳戶之間的轉帳驗證SOL。 SPL程式:定義了一系列鏈上活動,包括代幣的創建、交易所、比特幣,以及創建質押礦池、維護鏈上域名解析服務等。其中,SPL代幣計畫用於代幣操作,以及關聯代幣帳戶計畫等則常用於編寫其他定製程式。
你叫智能合約,我叫鏈上程序,大家說法不一樣,但都是指運行在區塊鏈上的程式碼。張三李四王麻子都是人名,到底素質如何還要注意其他面向。
帳戶模型、資料解耦:
與以太坊類似,Solana 也是基於帳戶模型的區塊鏈,但Solana 提供了一套本體以太坊的帳戶模型,使用不同的方式儲存資料。
在Solana 中,帳戶可以保存錢包資訊和數據,帳戶定義的欄位包括Lamports(帳戶餘額)、Owner(帳戶所有者)、Executable(為可執行其他帳戶)和Data(帳戶儲存的數據)。帳戶都指定一個程式作為其所有者,以區分帳戶設定哪個程式的狀態儲存。這些鏈上程式是有爭議或無狀態的:程式帳戶(執行帳戶)只儲存BPF 字節碼,不儲存任何狀態,程式將狀態儲存放在其他獨立帳戶(不可執行帳戶)中,即Solana 的程式設計模型將程式碼和資料解耦。
以太坊帳戶是對EVM狀態的主要引用,其智能合約既存在代碼邏輯,又需要用戶儲存的資料。這通常被認為是EVM歷史傳承的設計缺陷。
不要小看這個區別Solana 智能合約在根本上比具有連接程式設計模型的區塊鏈(如以太坊)更難攻擊:
在以太坊中,智能合約「擁有者」是一個全域變量,與智能合約一一對應。因此,呼叫某個函數可能直接改變合約「擁有者」。
而在Solana 中,智能合約的「擁有者」是與帳戶關聯的數據,而不是全域變數。一個帳戶可以有多個擁有者,而不是配對一個關聯。攻擊者要利用智慧合約的安全漏洞,不僅需要找到有問題的函數,還需要準備「正確」的帳戶來呼叫函數。這個步驟並不容易,因為Solana 智慧合約通常涉及多個輸入帳戶,並透過約束條件(例如`account1.owner= =account2.key`)來管理它們之間的關係。從「準備正確的帳戶」到「發動攻擊」的過程,足以讓安全監控人員可以在攻擊之前主動偵測到建立與智慧合約相關的「威脅」帳戶的可疑交易。
以太坊的智能合約就像是一個使用唯一密碼的保險庫,你只要得到這個密碼,就能獲得完整的號碼;而很多Solana的盒子有一個密碼的保險庫,但想要獲取權限,你只要搞清楚這個密碼,還要弄清楚這個密碼對應的編號,才能把鎖打開。
程式設計語言
Rust 是Solana 上開發智慧合約的主要程式語言。由於它的性能和安全特性,使其適用於區塊鏈和智慧合約的高風險環境。 Solana 同時也支援C、C++ 和其他語言(很不常見)官方提供了Rust 和C 的SDK 來支援開發鏈上程式。開發者可以使用工具將程式編譯成Berkley Packet Filter (BPF) 字節碼(檔案以.so 為副檔名),再部署到Solana 鏈上,透過Sealevel設備智慧合約運行時來執行智慧合約的邏輯。
由於Rust許多語言本身上手難度高,且不是區塊鏈開發定制,導致許多需求需要重複造輪子、程式碼發音。 (生產中許多項目採用背包聯創Armani創建的錨框架簡化開發)新創造專用於區塊鏈開發的程式語言是基於Rust的,如Cairo(Starknet)、Move(Sui、Aptos)。
生產中許多項目採用錨框架
而以太坊智能合約主要用Solidity語言開發(語法和javascript類似,程式碼檔案以.sol為副檔名)。由於語法相對簡單以及開發工具更加成熟(Hardhat框架、Remix IDE …)通常我們認為以太坊的開發體驗更加簡單爽快,而Solana 開發的上手難度很高。所以雖然現在Solana 的熱度很大,但實際上以太坊的開發者人數仍然遠遠多於Solana 的。
路況特定下,嚴格賽車沒有改裝車跑得快。 Rust就像嚴格賽車一樣,有力地確保了Solana的性能和安全性,但非為鏈上程序開發此輪而生,反而造成了駕駛(開發) )功耗的上漲。採用基於Rust 、為鏈上開發定制語言的公鏈則開源了這輛賽車,使其更適應路況。 Solana 在這一點上有不利的趨勢。
總結
Solana 的智慧合約程式設計模式是創新的。它提供了一種無狀態的智能合約開發方法,將Rust 作為主要程式語言,以及讓邏輯與狀態分離的架構,為開發人員構建和部署智能合約提供了強大的支援Solana 專注於高吞吐量、凹陷和可擴展性,仍是尋求創建高效能dApps 的開發人員目前的理想選擇。
參考連結
https://solana.com/docs
https://ethereum.org/en/developers/docs
https://www.anchor-lang.com/
資訊來源:0x資訊編譯自網際網路。版權歸作者Foresight News所有,未經許可,不得轉載