---
title: "Solana 資料帳戶 vs. 程式帳戶"
description: "了解 Solana 帳戶模型中資料帳戶與程式帳戶的差異"
---

# Solana 資料帳戶 vs. 程式帳戶

Solana 是一個去中心化區塊鏈平台，透過獨特的[帳戶模型](https://www.alchemy.com/overviews/solana-account-model)來協調處理流程，目標是實現快速、安全且可擴展。典型的 Solana dApp 架構通常由三種帳戶類型組成：原生帳戶（native accounts）、資料帳戶（data accounts）以及程式帳戶（program accounts）。

本文將聚焦於 Solana 區塊鏈上的資料帳戶與程式帳戶，並探討它們與 Ethereum 上對應概念——[Ethereum 智能合約](https://alchemy.com/overviews/smart-contract-security-best-practices)——有何不同。

## **什麼是 Solana 資料帳戶？**

**Solana 資料帳戶是 Solana 區塊鏈上的一種帳戶類型，用來儲存代幣、文件或其他任何形式的資訊。** 資料帳戶可以儲存狀態，但不可執行。

資料帳戶與其他區塊鏈平台上的帳戶類似，具有餘額，也能接收和發送交易。這些帳戶連同其中繼資料，會標示出擁有者身分以及執行期間可能進行互動的類型。錢包帳戶、mint 帳戶和代幣帳戶都是資料帳戶的典型例子，因為它們持有價值，並隸屬於某個使用者與程式帳戶。

## **什麼是 Solana 程式帳戶？**

**程式帳戶是 Solana 區塊鏈上的智能合約，用來執行程式碼，通常是由傳入的交易或時間經過所觸發。** 程式帳戶可以與資料帳戶互動，讀取及寫入區塊鏈上的資料。程式帳戶本身無法儲存可變狀態，而是從資料帳戶呼叫這些狀態。

Solana 資料帳戶與程式帳戶的一項關鍵差異在於，程式帳戶只能由其他程式帳戶建立，而資料帳戶則可以由任何開發者或使用者建立。不過，程式帳戶可以用來建立更多程式帳戶，讓開發者能在 [Solana EVM](https://www.alchemy.com/overviews/solana-evm) 上建立複雜的多層智能合約系統。

## **資料帳戶與程式帳戶如何協同運作？**

資料帳戶可用來儲存程式帳戶所使用的資料，而程式帳戶則能與資料帳戶互動，讀取及寫入這些資料。資料帳戶與程式帳戶在 [Solana 區塊鏈](https://www.alchemy.com/ecosystem/solana)上共存並協作，支援廣泛的 dApp 功能與服務。

舉例來說，程式帳戶可用來建立一個簡單的代幣合約，讓使用者能在資料帳戶之間轉移代幣。在這種情況下，程式帳戶負責執行合約邏輯，而資料帳戶則用來儲存代幣餘額。

大致如下：

在這個範例中，我們建立了一個名為「transfer_tokens.wasm」的程式帳戶，其中包含將代幣從一個帳戶轉移到另一個帳戶的邏輯。接著可以使用 invoke 方法，將資料帳戶以及轉帳所需的參數以陣列形式傳入，把資料帳戶與程式帳戶連結起來。

當程式帳戶執行時，會使用資料帳戶中儲存的資料來完成代幣轉帳。在這個例子中，程式帳戶會從代幣帳戶轉出 100 個代幣到接收帳戶。

你可以用自己選擇的任何程式，或是 [Solana Program Library（SPL）](https://www.alchemy.com/overviews/solana-program-library)中的一些現成程式，來測試上述範例展示的程式流程。

## **Solana 帳戶與 Ethereum 智能合約的比較**

Solana 資料帳戶與程式帳戶在概念上與 Ethereum 智能合約相似，但在儲存方式、呼叫方式、執行模型、gas 等方面存在一些關鍵差異。

### **Solana 資料帳戶與程式帳戶和 Ethereum 智能合約有何不同？**

**Solana 資料帳戶與程式帳戶在資料儲存方式、合約呼叫方式、執行模型、語言支援以及 gas 機制上，都與 Ethereum 智能合約有所不同。**

#### **1. 資料儲存**

在 Solana 區塊鏈上，資料帳戶用來儲存資料；而在 Ethereum 區塊鏈上，資料則儲存在智能合約內部。這代表在 Solana 上，資料與操作資料的邏輯是分離的，而在 Ethereum 上，資料與邏輯則結合在同一個智能合約中。

#### **2. 合約呼叫**

在 Solana 區塊鏈上，程式帳戶是由傳入的交易、[其他程式的呼叫（即跨程式呼叫，cross-program invocations）](https://www.alchemy.com/overviews/cross-program-invocation)，或時間經過所觸發。在 Ethereum 區塊鏈上，智能合約則是由傳入的交易觸發，也可以被其他智能合約呼叫。

#### **3. 執行模型**

Solana 資料帳戶與程式帳戶是由 Solana 網路中的驗證者（validators）執行，而 Ethereum 智能合約則是由個別節點上的 Ethereum Virtual Machine（EVM）執行。

#### **4. EVM gas 與資料量的關係**

Solana 資料帳戶可以儲存無限量的資料，而 Ethereum 的[智能合約儲存空間](https://www.alchemy.com/docs/smart-contract-storage-layout)則有限，其上限取決於執行時所消耗的 gas 量。

#### **5. 語言支援**

Solana 程式帳戶可以用任何能編譯成 WebAssembly（WASM）的語言撰寫，而 Ethereum 智能合約通常使用 [Solidity](https://www.alchemy.com/overviews/solidity) 或 Vyper（一種以 Python 為基礎實作的 Solidity）撰寫。

### **Solana 資料帳戶與程式帳戶在哪些方面與 Ethereum 智能合約相似？**

**Solana 資料帳戶與程式帳戶在智能合約功能、去中心化、不可竄改性、透明度以及可程式性方面，都與 Ethereum 智能合約相似。**

#### **1. 智能合約功能**

Solana 帳戶與 Ethereum 智能合約都可以用來促成交易並自動化流程，例如轉移資產或管理供應鏈物流。

#### **2. 去中心化**

Solana 帳戶與 Ethereum 智能合約都部署並執行在去中心化的公開區塊鏈網路上。

#### **3. 不可竄改性**

一旦 Solana 資料帳戶、程式帳戶或 Ethereum 智能合約部署到區塊鏈上，就無法再被修改或刪除。

#### **4. 透明度**

Solana 資料帳戶與程式帳戶，以及 Ethereum 智能合約中儲存的程式碼與資料都是公開可查閱的，具備透明度與可稽核性。

#### 5. 可程式性

Solana 資料帳戶與程式帳戶，以及 Ethereum 智能合約都具備可程式性，意味著它們可以包含邏輯，並根據特定條件執行相應功能。在 Solana 上，程式帳戶可以建立其他程式帳戶；而在 Ethereum 上，智能合約可以呼叫其他智能合約。

### **Neon Labs 的 Solana EVM 如何處理程式、帳戶與智能合約？**

Neon Labs 的 Solana EVM 是一項工具，讓開發者能使用 Solidity/Vyper 程式語言，在 [Solana 區塊鏈上建立並部署 Ethereum 智能合約](https://www.alchemy.com/overviews/solana-evm)，方便將現有的 Ethereum [應用程式](https://www.alchemy.com/dapps/top/defi-dapps)移植到 Solana。在 [Neon EVM](https://www.alchemy.com/dapps/neon-evm) 於 [Solana devnet](https://www.alchemy.com/overviews/solana-devnet) 和主網（mainnet）推出之前，Ethereum 應用程式與 [Solana 生態系統](https://www.alchemy.com/dapps/ecosystem/solana)是不相容的。

Neon EVM 為智能合約提供了一個能像在 Ethereum 區塊鏈上一樣執行的平台，同時也能享有 Solana 區塊鏈上帳戶原本就具備的優勢，例如低 gas 費用與高吞吐量。

Solana EVM 的運作方式，是在 Solana 區塊鏈上模擬 Ethereum Virtual Machine，讓 Ethereum 智能合約能在 Solana 上以類似於在 Ethereum 區塊鏈上執行的方式運作。這代表開發者可以運用他們既有的 Solidity 程式語言知識以及對 [Ethereum 生態系統](https://www.alchemy.com/dapps/ecosystem/ethereum)的了解，在 Solana 上發布應用程式。

## **使用 Alchemy 建構 Solana 帳戶**

一個建構在 Solana 上的去中心化應用程式，通常由原生帳戶、資料帳戶與程式帳戶組成。原生帳戶代表 Solana 上的程式，資料帳戶儲存資訊，而程式帳戶則在 Solana 上執行程式碼。如果你想開始建構應用程式，歡迎到 Alchemy [註冊免費的 Solana 開發者帳戶](https://dashboard.alchemy.com/signup/?a=cbb287cfba)！
