原作者:前瞻新聞,Alex Liu
Solana 是一個旨在支援 dApp 的高效能區塊鏈平台,以其速度和可擴展性而聞名,這是透過獨特的共識機制和架構設計實現的。本文以以太坊為對比對象,簡單介紹Solanas智能合約程式設計模型的特色。
智能合約、鏈上程序:
運行在以太坊上的程式稱為智慧合約,它是位於以太坊上特定地址的一系列程式碼(函數)和資料(狀態)。 (哦不,程式碼和資料是耦合的)智能合約也是以太坊帳戶,稱為合約帳戶,有餘額,可以交易,但不能被人操縱,部署在網路上作為程式運行。
Solana 上運行的可執行代碼稱為鏈上程序,它解釋每筆交易中發送的指令。這些程式可以作為本機程式直接部署到網路核心,也可以由任何人作為 SPL 程式發布。
- 指令:指令是 Solana 鏈上程式的專用術語。鏈上程序由指令組成,指令是執行特定操作的最小單元:每筆 Solana 交易都包含一條或多條指令。指令指定要執行的操作,包括呼叫特定的鏈上程序、傳遞帳戶、輸入清單以及提供位元組數組。指令具有計算限制,因此應優化鏈上程式以使用少量計算單元,或將昂貴的操作拆分為多個指令。
- 原生程式:提供驗證節點所需功能的原生程式。其中最著名的是系統程序,它負責管理新帳戶的創建以及兩個帳戶之間 SOL 的轉移。
- SPL Program:定義了一系列鏈上活動,包括建立、交換、借貸、建立質押池、維護鏈上網域解析服務等。編寫其他自訂程式。
你叫它智能合約,我叫它鍊程式。每個人都有不同的術語,但它們都是指在區塊鏈上運行的程式碼。張三、李四、王麻子都是人名。它們的品質還需要在其他方面進行檢驗。
帳戶模型與資料解耦:
與以太坊類似,Solana 也是基於帳戶模型的區塊鏈,但 Solana 提供了與以太坊不同的帳戶模型,並以不同的方式儲存資料。
在 Solana 中,帳戶可以儲存錢包資訊和其他資料。帳戶定義的欄位包括Lamports(帳戶餘額)、Owner(帳戶擁有者)、Executable(是否為執行帳戶)、Data(帳戶中儲存的資料)。每個帳戶指定一個程式作為其所有者,以區分該帳戶使用哪個程式作為狀態儲存。這些鏈上程式是唯讀的或無狀態的:程式帳戶(可執行帳戶)只儲存BPF字節碼,不儲存任何狀態。程式會將狀態儲存在其他獨立帳戶(不可執行帳戶)中,即Solanas程式設計模型將程式碼和資料解耦。
以太坊帳戶主要參考EVM狀態,其智慧合約既包含程式碼邏輯,也包含儲存使用者資料的需求。這通常被認為是 EVM 歷史遺留的設計缺陷。
不要低估這種差別! Solana 智能合約從根本上來說比具有耦合程式設計模型(如以太坊)的區塊鏈更難攻擊:
在以太坊中,智能合約所有者是一個全局變量,與智能合約一一對應。因此,呼叫函數可能會直接改變合約所有者。
在 Solana 中,智能合約的擁有者是與帳戶關聯的數據,而不是全域變數。一個帳戶可以有多個所有者,而不是一對一的關聯。對於攻擊者來說,要利用智慧合約中的安全漏洞,他們不僅需要找到有問題的函數,還需要準備正確的帳戶來呼叫該函數。這一步驟並不容易,因為 Solana 智能合約通常涉及多個輸入帳戶,並透過約束來管理它們之間的關係(例如「帳戶 1.owner==帳戶 2.key」)。從準備正確的帳戶到發動攻擊的過程足以讓安全監視器在攻擊前主動偵測建立與智慧合約相關的虛假帳戶的可疑交易。
以太坊智能合約就像一個有唯一密碼的保險箱。只要拿到密碼,就可以獲得完全的所有權。 Solana是一個有很多密碼的保險箱,但為了取得權限,你不僅要想辦法取得密碼,還要弄清楚密碼對應的數字,才能打開鎖。
程式設計語言
Rust 是在 Solana 上開發智慧合約的主要程式語言。由於其性能和安全特性,它適用於區塊鏈和智慧合約的高風險環境。 Solana 也支援 C、C++ 和其他語言(非常罕見)。官方提供Rust和C語言的SDK,支援鏈上程式的開發。開發者可以使用工具將程式編譯為伯克利數據包過濾器(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 在這方面處於劣勢。
總結
Solanas 智能合約程式設計模式具有創新性。它提供了無狀態的智慧合約開發方法,採用Rust作為主要程式語言,以及邏輯與狀態分離的架構,為開發者建構和部署智慧合約提供了強大的環境,保證了安全性和效能,但開發難度較大。 Solana 專注於高吞吐量、低成本和可擴展性,仍然是尋求創建高效能 dApp 的開發人員的理想選擇。
參考連結
https://solana.com/docs
https://ethereum.org/en/developers/docs
https://www.anchor-lang.com/
本文源自網路:Solana程式設計模式簡述:與ETH有何不同?
相關:符文的流行是加密技術發展的倒退,但也是加密技術發展的最佳體現
原作者:@Web3 Mario 簡介:昨天,無意中從朋友那裡得知,他在BTC銘文領域獲得了可觀的投資回報,這深深激起了作者踏入虛空的心態。連續兩天都著急,真是丟臉。回想起先前Ordinals技術架構剛發布,筆者研究了相關文檔,但作為一名開發者,我對這條技術路徑頗為不滿。當時我判斷這簡直就是加密技術的反轉,因為它的設計理念似乎和一個遙遠的山寨幣項目Color Coin類似,即如何利用BTC的技術架構來發行一些獨立的代幣,但是不同的是,序號沒有…