探索Solana 智能合約程式設計模型

新手Jun 11, 2024
Solana是一個高性能的區塊鏈平臺,旨在支撐dApp。它以其速度和可擴充性而聞名,通過獨特的共識機制和架構設計實現。本文以以太坊作為對比對象,簡單介紹Solana智慧合約程式設計模型的特點。
探索Solana 智能合約程式設計模型

轉發原標題 '小學生也能看懂!Solana 的编程模型,究竟和 二餅 有啥區别?

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

智慧合約和鏈上程式:

在以太坊上運行的程式稱為智能合約,一系列代碼(函數)位於以太坊和data(state)上的特定位址。(哦,代碼和數據是耦合的)智慧合約也是以太坊帳戶,稱為合約帳戶。它們有餘額,可以成為交易物件,但它們不能由人類控制,而是部署在網路上作為程序運行。

Solana上運行的可執行代碼稱為鏈上程式,它們可以解釋每個事務中發送的指令。這些程式可以作為本機程式直接部署到網路核心中,也可以由任何人作為SPL程序發佈。

  1. 說明:說明是Solana鏈上程式的唯一術語。鏈上程式由指令組成。它們是執行特定操作的最小單位:每個Solana事務中都包含一條或多條指令。指令指定要執行的操作,包括調用特定的鏈上程式、傳遞帳戶、輸入上架以及提供位元組陣列。指令具有計算約束,因此應優化鏈上程式以使用少量計算單元或將昂貴的操作拆分為多個指令。

“”

  1. 本機程式:這些程式為驗證節點提供必要的功能。最值得注意的是系統程式,它負責管理新帳戶的創建並在兩個帳戶之間轉移SOL。
  2. SPL計劃:這些計劃定義了一系列鏈上活動,包括代幣的創建,交易所和借出,以及質押池的創建和維護鏈上域名解析服務。其中,SPL代幣程式用於令牌操作,而關聯代幣帳戶程式通常用於編寫其他自定義程式。

你稱它們為智能合約,我稱它們為鏈上程式。不同的術語,但它們都是指在區塊鏈上運行的代碼。就像愛麗絲、鮑勃、約翰都是名字一樣,他們的實際素質需要從其他方面來評估。

帳戶模型,數據解耦:

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

Solana,帳戶可以保存錢包資訊和其他數據。帳戶定義的欄位包括 Lamports (帳戶餘額)、擁有者(帳戶擁有者)、可執行檔(是否為可執行檔帳戶)和數據(存儲在帳戶中的數據)。每個帳戶將一個程式指定為其擁有者,以區分帳戶用作狀態存儲的程式。這些鏈上程式是唯讀或無狀態的:程式帳戶(可執行帳戶)僅存儲 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 語言本身很難上手,並且不是為區塊鏈開發定製的,因此許多需求需要重新發明輪子和冗餘代碼。(許多製作中的專案都使用Backpack聯合創始人Armani創建的Anchor框架來簡化開發)許多新創建的專門用於區塊鏈開發的程式設計語言都基於Rust,例如Cairo(Starknet),Move(Sui,Aptos)。

“”

生產中的許多專案都使用 Anchor 框架

以太坊 智能合約主要用Solidity語言開發(語法類似於javascript,代碼檔擴展名為.sol)。由於相對簡單的語法和更成熟的開發工具(Hardhat 框架、Remix IDE...),我們一般認為以太坊的開發體驗更簡單、更令人耳目一新,而Solana開發則更難上手。因此,即使Solana現在非常受歡迎,但實際上以太坊上的開發者數量仍然遠遠超過Solana。

在某些路況下,頂級賽車的速度不如改裝車。Rust就像一輛頂級賽車,有效地保證了Solana的性能和安全性。但是,它不是為鏈上程序開發此軌道而設計的,而是導致駕駛(開發)難度的增加。使用基於 Rust 的公鏈,為鏈開發自定義語言,相當於修改賽車,使其更適合路況。Solana在這裡處於劣勢。

Summary

Solana的智慧合約程式設計模型是創新的。它提供了一種無狀態的智慧合約開發方法,使用 Rust 作為主要程式設計語言和將邏輯與狀態分開的架構。這為開發人員提供了一個強大的環境來構建和部署智能合約,確保安全性和性能,儘管它帶來了更高的開發難度。Solana 專注於高輸送量、低成本和可擴充性,使其成為當前希望創建高性能 dApp 的開發人員的理想選擇。

免責聲明:

  1. 本文轉載自[遠見新聞]。所有版權歸原作者[Alex Liu]所有。如果對此轉載有異議,請聯繫Gate Learn團隊,他們會及時處理。
  2. 免責聲明:本文中表達的觀點和意見僅代表作者的觀點和意見,不構成任何投資建議。
  3. 文章到其他語言的翻譯由Gate Learn團隊完成。除非另有說明,否則禁止複製、分發或抄襲翻譯后的文章。

智慧合約和鏈上程式:

帳戶模型,數據解耦:

程式設計語言

總結

探索Solana 智能合約程式設計模型

新手Jun 11, 2024
Solana是一個高性能的區塊鏈平臺,旨在支撐dApp。它以其速度和可擴充性而聞名,通過獨特的共識機制和架構設計實現。本文以以太坊作為對比對象,簡單介紹Solana智慧合約程式設計模型的特點。
探索Solana 智能合約程式設計模型

智慧合約和鏈上程式:

帳戶模型,數據解耦:

程式設計語言

總結

轉發原標題 '小學生也能看懂!Solana 的编程模型,究竟和 二餅 有啥區别?

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

智慧合約和鏈上程式:

在以太坊上運行的程式稱為智能合約,一系列代碼(函數)位於以太坊和data(state)上的特定位址。(哦,代碼和數據是耦合的)智慧合約也是以太坊帳戶,稱為合約帳戶。它們有餘額,可以成為交易物件,但它們不能由人類控制,而是部署在網路上作為程序運行。

Solana上運行的可執行代碼稱為鏈上程式,它們可以解釋每個事務中發送的指令。這些程式可以作為本機程式直接部署到網路核心中,也可以由任何人作為SPL程序發佈。

  1. 說明:說明是Solana鏈上程式的唯一術語。鏈上程式由指令組成。它們是執行特定操作的最小單位:每個Solana事務中都包含一條或多條指令。指令指定要執行的操作,包括調用特定的鏈上程式、傳遞帳戶、輸入上架以及提供位元組陣列。指令具有計算約束,因此應優化鏈上程式以使用少量計算單元或將昂貴的操作拆分為多個指令。

“”

  1. 本機程式:這些程式為驗證節點提供必要的功能。最值得注意的是系統程式,它負責管理新帳戶的創建並在兩個帳戶之間轉移SOL。
  2. SPL計劃:這些計劃定義了一系列鏈上活動,包括代幣的創建,交易所和借出,以及質押池的創建和維護鏈上域名解析服務。其中,SPL代幣程式用於令牌操作,而關聯代幣帳戶程式通常用於編寫其他自定義程式。

你稱它們為智能合約,我稱它們為鏈上程式。不同的術語,但它們都是指在區塊鏈上運行的代碼。就像愛麗絲、鮑勃、約翰都是名字一樣,他們的實際素質需要從其他方面來評估。

帳戶模型,數據解耦:

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

Solana,帳戶可以保存錢包資訊和其他數據。帳戶定義的欄位包括 Lamports (帳戶餘額)、擁有者(帳戶擁有者)、可執行檔(是否為可執行檔帳戶)和數據(存儲在帳戶中的數據)。每個帳戶將一個程式指定為其擁有者,以區分帳戶用作狀態存儲的程式。這些鏈上程式是唯讀或無狀態的:程式帳戶(可執行帳戶)僅存儲 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 語言本身很難上手,並且不是為區塊鏈開發定製的,因此許多需求需要重新發明輪子和冗餘代碼。(許多製作中的專案都使用Backpack聯合創始人Armani創建的Anchor框架來簡化開發)許多新創建的專門用於區塊鏈開發的程式設計語言都基於Rust,例如Cairo(Starknet),Move(Sui,Aptos)。

“”

生產中的許多專案都使用 Anchor 框架

以太坊 智能合約主要用Solidity語言開發(語法類似於javascript,代碼檔擴展名為.sol)。由於相對簡單的語法和更成熟的開發工具(Hardhat 框架、Remix IDE...),我們一般認為以太坊的開發體驗更簡單、更令人耳目一新,而Solana開發則更難上手。因此,即使Solana現在非常受歡迎,但實際上以太坊上的開發者數量仍然遠遠超過Solana。

在某些路況下,頂級賽車的速度不如改裝車。Rust就像一輛頂級賽車,有效地保證了Solana的性能和安全性。但是,它不是為鏈上程序開發此軌道而設計的,而是導致駕駛(開發)難度的增加。使用基於 Rust 的公鏈,為鏈開發自定義語言,相當於修改賽車,使其更適合路況。Solana在這裡處於劣勢。

Summary

Solana的智慧合約程式設計模型是創新的。它提供了一種無狀態的智慧合約開發方法,使用 Rust 作為主要程式設計語言和將邏輯與狀態分開的架構。這為開發人員提供了一個強大的環境來構建和部署智能合約,確保安全性和性能,儘管它帶來了更高的開發難度。Solana 專注於高輸送量、低成本和可擴充性,使其成為當前希望創建高性能 dApp 的開發人員的理想選擇。

免責聲明:

  1. 本文轉載自[遠見新聞]。所有版權歸原作者[Alex Liu]所有。如果對此轉載有異議,請聯繫Gate Learn團隊,他們會及時處理。
  2. 免責聲明:本文中表達的觀點和意見僅代表作者的觀點和意見,不構成任何投資建議。
  3. 文章到其他語言的翻譯由Gate Learn團隊完成。除非另有說明,否則禁止複製、分發或抄襲翻譯后的文章。
即刻開始交易
註冊並交易即可獲得
$100
和價值
$5500
理財體驗金獎勵!