跳至內容
0%

什麼是 Solana 帳戶模型?

發布於 2023年1月26日閱讀時間 2 分鐘

Solana 上的所有東西都可以視為一個帳戶(account),而帳戶正是該協定用來「組織」區塊鏈上資料的方式。本文將全面概述 Solana 的帳戶模型,包括帳戶的類型與分類、帳戶組成,以及「rent」的概念。

什麼是 Solana 帳戶,運作方式為何?

Solana 帳戶可以視為儲存空間,能夠容納各種資料類型:從 SOL 這類代幣,到程式的狀態變數(例如整數、字串、公鑰),甚至是整個程式本身。 每個帳戶都有指定的 owner,而單一 owner 可以擁有多個不同的帳戶。

Account Model 常被拿來與電腦檔案系統做比較:

Computer File
Solana Account

Name

lamports

Address

owner

Email

rent_epoch

Experience

executable

GeorgeBrownCV.docx

0cnjSElkwFlkffjckDSJRU432RIANCLk

Solana 帳戶有哪些類型?

Solana 帳戶主要分為兩種類型:可執行(executable)與不可執行(non-executable)。這是因為 Solana 的程式不像 Ethereum 的智能合約那樣儲存狀態,因此需要將兩種行為分開處理。

什麼是可執行程式(executable programs)?

可執行程式由不可變的程式碼組成,這些程式碼擁有並建立其他用於儲存狀態的帳戶。這些程式碼以 Rust 等語言撰寫,接著編譯成 eBPF,這是一種位元組碼(bytecode)形式。

可執行程式最常見的例子是 Solana 的核心 System Program,負責建立人們用來存取代幣與 NFT 的帳戶(也就是錢包)。

什麼是不可執行程式(non-executable programs)?

不可執行程式是「儲存」帳戶,內含所有其他類型的資料,例如程式變數、代幣餘額、NFT、同質化貨幣等。透過不可執行帳戶,協定得以反映每筆交易後所發生的狀態變化。

Ethereum 智能合約 vs. Solana 程式

智能合約內建一個稱為「storage」的特殊區塊,用來儲存其狀態變數。智能合約接著使用其可執行程式碼來修改這些狀態變數。Ethereum 合約可以視為可執行程式碼與不可執行程式碼共存的統一場所。

以 USDC 代幣為例。它的合約中有一個名為「balances」的對應表(mapping),將使用者的地址對應到該使用者所持有的 USDC 數量。當使用者發送或接收 USDC 代幣時,合約會透過其可執行程式碼自行反映相應的變化。

Solana 的處理方式不同。有一個 USDC token program,會為每個代幣持有者建立一個新帳戶。這些帳戶儲存持有者可用的 USDC 數量。當使用者傳播一筆交易時,USDC Token account 會尋找要進行交換的使用者所對應的 token account,然後在其中反映變化。

Solana 代幣程式建立關聯代幣帳戶以儲存每位使用者 USDC 餘額的示意圖
Solana 的關聯代幣帳戶結構

Solana 帳戶有哪些分類?

可執行與不可執行帳戶還可以再細分為幾種類別,例如 native programs、program accounts 以及 data accounts

什麼是可執行的 native programs?

可執行的 native programs 是 Solana 生態系統「原生」的程式,負責維護與運行驗證節點等任務。此類型最知名的例子是 System Program,它負責建立新的系統帳戶(也就是我們常說的「錢包」)、SOL 的轉帳等。其他 Native Programs 的例子還有 Stake Program,負責質押機制,以及 BPF Loader,其功能類似於 Ethereum 的 EVM。

什麼是可執行的 program accounts?

可執行的 program accounts 是預先建立好的 Solana 程式,用來建立並儲存其他程式。一個很好的例子是Solana Program Library(SPL)——這是一系列支援多種鏈上活動的程式集合,包括建立、交換、借貸代幣、產生質押池,以及維護鏈上名稱服務。SPL 中一個重要的代表是 Token Program,負責建立與管理代幣。

Solana 的 USDC 代幣其實就是一個由 Token Program 管理的 Token account。不過,Token account 本身並不儲存使用者的代幣餘額,這是由第三種帳戶類型的成員來處理:data accounts。

什麼是不可執行的 data accounts?

Native Programs 與 Program accounts 屬於可執行類型,而 data accounts 則正好相反:它們是一個登記簿,反映特定程式以及整個 Solana 協定的狀態變化。

Data accounts 可以分為:

  1. Token accounts - 由 Token Program 建立的帳戶
  2. Associated Token Accounts(ATA) - 儲存每個使用者代幣餘額的帳戶
  3. System Owned Accounts - 儲存資料並允許簽署交易

Token accounts 代表每一種同質化貨幣(USDC、USDT 等),並包含該代幣的基本資訊,例如供應量、小數位數、名稱等。每個獨立的 Token account 都會產生一個不同的associated token account(ATA)。舉例來說,如果你同時持有 USDC 和 USDT,你就會擁有兩個分別由 USDC 和 USDT Token account 建立的 ATA。

Solana 帳戶類別示意圖:原生程式、程式帳戶與資料帳戶
Solana 帳戶類型與類別

Solana 帳戶有哪些組成元素?

每個帳戶元素都是一組 metadata,讓協定能夠輕易理解該帳戶的類型與其他資訊。 Metadata 包含:

  • lamports - 帳戶的 SOL 餘額,以 lamport 為單位計價,1 lamport 相當於十億分之一個 SOL 代幣
  • owner - 擁有該帳戶的程式的地址
  • executable - 一個布林變數,表示該帳戶是否包含可執行程式碼
  • data - 儲存在帳戶中的原始資料位元組陣列,無論是儲存變數還是可執行程式碼
  • rent_epoch - 表示該帳戶下一次需要繳交 rent 的 epoch

ownerholder 的差異在於:owner 是控制該帳戶的程式,而 holder 則是持有該帳戶私鑰的使用者。舉例來說,System Owned Account 是由 Solana 的 Native System Program 所擁有。

什麼是 Solana 帳戶的 rent?

每個帳戶都需要支付 rent 費用才能使用區塊鏈上的記憶體,這是一項預防措施,用來防止攻擊者利用所有記憶體來堵塞網路。

一條區塊鏈若要滿足所有使用者的需求,就必須包含某種經濟誘因。這對於驗證者(validators)來說尤其重要,他們提供硬體與運算能力來驗證所有交易。驗證者需要維護所有狀態變化的一份運作副本,並藉由收取 rent 作為報酬。

若某帳戶維持的最低餘額相當於 2 年的 rent 費用,則可豁免繳交 rent。若未達此標準,則會在該帳戶被某筆交易引用時,或每個 epoch(目前約為兩天)收取一次費用。若某帳戶不含足以豁免 rent 的最低 SOL 數量,其資料將會從鏈上刪除。

如何建立 Solana 帳戶

在 Solana 上建立 System Account,正是Solana 錢包每次使用者建立新「錢包」時,在背後所執行的動作。錢包會透過產生一組位於 ED25519 橢圓曲線上的 64 位元組金鑰對,來建立新帳戶。前 32 個位元組是私鑰,當使用者想要建立交易並與其他帳戶或程式互動時會用到。後 32 個位元組則是該錢包的公鑰。

開始在 Solana 上建構

Account Model 是 Solana 協定用來組織資料的系統。帳戶可以視為儲存空間,能夠容納各種內容——從原始資料、程式碼、狀態變數,到代幣餘額、NFT 等等。帳戶主要分為兩種類型:可執行與不可執行。

若想開始使用 Alchemy 進行開發,立即開通免費的 Solana 開發者帳戶

Background gradient

打造區塊鏈魔法

Alchemy 結合最強大的 Web3 開發者產品與工具,並提供資源、社群與卓越的支援。