什麼是 Solidity?
作者 Alchemy
隨著 web3 產業的成長,開發者面臨更多 web3 程式語言的選擇。每種語言在設計上都有不同的優點與取捨,適用於編寫智能合約。語言之間的差異可能來自對特定區塊鏈的支援,或是速度、可讀性、安全性等不同特性。
Solidity 是為 Ethereum 區塊鏈開發的智能合約語言,是一種功能強大的程式語言,用於為區塊鏈產業中最大的開發者生態系統建立去中心化應用程式。
在本文中,我們將透過 Solidity 的歷史、語言影響來源與用途,介紹 Solidity。最後,我們會提供一些最佳的開發者資源,讓你透過免費的 Solidity 課程以及學習 web3 開發的資源繼續學習。
什麼是 Solidity?
Solidity 於 2014 年提出,是一種物件導向的高階程式語言,用於實作在** Ethereum 虛擬機(EVM)****上執行的智能合約。**Solidity 的設計受到 C++ 和 JavaScript 等知名程式語言的啟發。身為 web3 開發者,學習使用 Solidity 對於學習 web3 開發相當有幫助。
本節將介紹 Solidity 的歷史、說明 Solidity 與其他程式語言的相似之處,並解釋 Solidity 的主要用途。
Solidity 是誰創建的?
2014 年,Ethereum 的 CTO Gavin Wood 提出了 Solidity,作為一種能滿足 Ethereum 對圖靈完備程式語言需求的語言,用於編寫智能合約。
Ethereum 的創辦人 Vitalik Buterin 提出將 Ethereum 作為一種協定,延伸由 Bitcoin 開創的區塊鏈功能,並加入智能合約的功能。在他的構想中,Ethereum 能夠執行一套複雜的智能合約網路,這些合約是在分散的全球電腦網路上有條件執行的程式碼片段。智能合約讓開發者能夠建立新的加密貨幣、開發 DeFi 應用程式等等。
Solidity 專案團隊由 Christian Reitwiessner 領導,他們成功建立了一種圖靈完備、物件導向的程式語言,用於實作智能合約。作為一種高階語言,代表開發者在編寫智能合約時,不需要操作記憶體或位元組碼等系統層級的資訊來執行運算。
圖靈完備性指的是一種資料操作系統(在此指程式語言)能夠模擬圖靈機行為的能力。理論上,Solidity 需要能夠執行開發者所需的任何運算。
Solidity 是基於哪些程式語言的?
Solidity 在開發過程中受到多種既有程式語言的影響,包括 C++、Python 和 JavaScript。
Solidity 與 C++ 的相似之處
Solidity 在變數宣告與 for 迴圈的語法上與 C++ 完全相同。此外,Solidity 也支援 C++ 風格的函式多載,這在兩個函式名稱相同但參數不同時是必要的功能。
最後,Solidity 允許隱式與顯式的型別轉換。這代表變數型別可以由開發者程式碼明確轉換,或是在運算需要時自動轉換。
Solidity 與 JavaScript 的相似之處
Solidity 過去深受 JavaScript 影響。現在,最明顯的相似之處在於 Solidity 使用 'function' 關鍵字來定義函式。
對於熟悉 Solidity 主要影響來源的開發者來說,學習 Solidity 相對容易上手。此外,Solidity 是靜態型別語言,支援使用函式庫,也能建立複雜型別。
Solidity 與 Python 的相似之處
Solidity 受 Python 影響在語法上較不明顯,不過與 Python 相同,Solidity 使用 C3 線性化、多重繼承,並保留了 'super' 關鍵字。
Vyper 使用 Python 風格的語法,與 Solidity 相似,其設計目的是提升在相容 EVM 的區塊鏈上使用的智能合約的安全性。
Solidity 如何被使用?
作為區塊鏈編程語言,Solidity 的本質就是為了能在 Ethereum 虛擬機(EVM)上編譯而創建。因此,Solidity 能為任何相容 EVM 的區塊鏈編寫安全的、與 Ethereum 相容的智能合約。
這種廣泛的相容性,加上其易於理解與靈活的功能,使 Solidity 成為業界使用最廣泛的區塊鏈開發語言。
Solidity 如何運作?
Solidity 開發者編寫的智能合約是在 EVM 上執行的程式。與其他語言中的類別類似,智能合約可以擁有多個函式、內部狀態與公開宣告。
Solidity 合約會編譯成位元組碼,供 EVM 讀取。編譯完成後,Solidity 合約與其他 EVM 智能合約語言(如 Vyper 或 Huff)編寫的合約並無二致。
如同其他開發者工具,Solidity 也會定期進行版本更新。請注意,由於智能合約一旦部署並加入區塊鏈後便無法逆轉,Solidity 的版本限制只在建立當下有意義。
雖然 Solidity 開發者理論上可以直接用位元組碼編寫 Ethereum 智能合約,但像 Solidity 這樣的高階語言能讓工程師更有效率地編寫合約,而不需要進行任何低階操作。
Solidity 如何與 EVM 互動?
以下摘要說明 Solidity 如何改變 EVM 的狀態:
- 使用 Solidity 編寫智能合約
- Solidity 智能合約被編譯成位元組碼
- 位元組碼被轉換成 EVM 操作碼(opcode)
- EVM 操作碼改變 EVM 的狀態
EVM 是一台 virtual state machine,是 Ethereum「全球電腦」的記錄保存者。簡單來說,EVM 維護整個網路的全域狀態,包括地址、帳戶餘額與代幣持有情況。
Solidity 智能合約的編寫目的是為了改變 EVM 的全域狀態。EVM 的全域狀態會因鑄造代幣、發送與接收代幣,或釋放資產等動作而改變。
一系列編碼成 EVM 操作碼的 EVM 運算,會觸發這些對全域狀態的改變。每個 EVM 操作碼都被設計用來促使 EVM 執行特定種類的狀態變化,例如將代幣從一個地址發送到另一個地址、鑄造代幣,甚至銷毀智能合約。
在最後一步,EVM 會將智能合約的位元組碼翻譯成 EVM 操作碼,對區塊鏈進行必要的變更。
每個操作碼都會產生一定的 gas fee,以 ETH 計價收取,用以降低惡意行為者以大量請求堵塞網路的風險。因此,一筆交易的總 gas 成本,是由每單位 gas 的價格乘以該交易所有操作碼的總 gas 成本所計算出來的。
哪些相容 EVM 的區塊鏈支援 Solidity?
Solidity 能為任何相容 EVM 的區塊鏈編寫智能合約,包括 Polygon、Arbitrum 和 Optimism 等 L2。由於 Solidity 靈活且易於使用,因此獲得許多其他區塊鏈的支援。以下是一些支援 Solidity 的最大專案:
1. Polkadot
Polkadot 是一條專注於將多個區塊鏈(即平行鏈)整合到一條使用中繼鏈的鏈上。Polkadot 的目標是讓平行鏈之間具備互通性,以提升可擴展性並增加頻寬。 Astar 就是一個由 Alchemy 支援的 Polkadot 平行鏈範例。
2. Avalanche
Avalanche 是支援 Solidity 開發的 Ethereum 競爭者。Avalanche 的架構基於三條區塊鏈組成的網路:一條用於發行與交易資產(X Chain)、一條用於協調網路驗證者(P-Chain),以及一條允許建立智能合約(C Chain)。
3. BNB chain(前身為 Binance smart chain)
Binance Smart Chain 最初是 Ethereum 上的一種 ERC-20 代幣,為了支援其日益成長的應用程式生態系統,Binance Smart Chain(BSC)網路因此誕生。BSC 及其代幣的智能合約使用 Solidity 編寫。如今,Binance Smart Chain 已更名為 BNB Chain。
Solidity 有多受歡迎?
Solidity 是區塊鏈產業中最受歡迎的智能合約程式語言。Solidity 是建立相容 EVM 智能合約的原生語言。即使在 EVM 之外,也有專案內建對 Ethereum 虛擬機的支援,例如 Neon Labs 的 Solana EVM。
由於區塊鏈產業仍在成長中,Solidity 相較於其他所有程式語言,可能看似使用較少。然而,在這個產業內,Solidity 是應用範圍最廣的智能合約語言。Solidity 在許多鏈以及成長最快的 web3 dApp 生態系統中都有強大的應用案例。
根據 The Next Web’s Hard Fork 的一份報告,在標記為區塊鏈的問題中,Solidity 出現的次數是排名第二的競爭語言的兩倍。JavaScript 的佔比僅為 4.8%,而 Solidity 則佔 9.5%。
Solidity 在 Ethereum 上如何被使用?
看看 Solidity 在 Ethereum 中應用的一些範例,能讓你清楚感受到 Solidity 程式碼在建立靈活智能合約方面的簡潔性。官方 Solidity 文件中的程式碼範例,是學習這門語言的絕佳入門。
智能合約
以下是 Solidity 文件中的一個簡單程式碼範例,用於在 Ethereum 上建立一種簡單的貨幣。

請注意合約中函式的宣告,以及私有與公開變數。函式讓合約能夠在鏈上執行不同的動作,在此範例中即是從一個地址發送代幣到另一個地址,以及鑄造代幣。
公開變數可以從合約外部存取,並會自動產生 getter 函式 用於取得這些變數的值。event 關鍵字讓客戶端應用程式能夠監聽合約引發的變化。
在此範例中,客戶端會看到 sent 事件,這向監聽者表示地址 msg.sender 向地址 receiver 發送了一定 amount 的代幣。
什麼是 Solidity ERC 標準?
Solidity 智能合約的設計基礎是 ERC(Ethereum Request for Comment)標準,這些標準旨在改善並統一不同類型 Ethereum 代幣的實作方式。
ERC 標準由 EIP(Ethereum Improvement Proposals)提出。一旦 ERC 標準獲得核准並定案,就會成為編寫 Solidity 合約的標準,形成一套用於建立智能合約的通用 Solidity 介面範本。當 Solidity 開發者建立符合現有 ERC 標準的代幣時,他們就能清楚知道自己的代幣在區塊鏈上會如何正確運作。
以下是一些使用最廣泛的 ERC 標準:
如何學習 Solidity 程式設計
現在你知道什麼是 Solidity 了,但該如何開始學習呢?作為最受歡迎的智能合約語言,網路上有大量資源可供你開始學習 Solidity 開發。
學習 Solidity 最好的方式之一,就是參加 Alchemy University 的為期 7 週的 Solidity 訓練營,該課程最初由領先的 web3 工程師團隊 ChainShot 建立,並在 Alchemy 於 2022 年 8 月收購 ChainShot 後重新設計。
這個 Ethereum 開發者訓練營原本是一堂價值 3,000 美元的認證課程,現在已完全免費。立即報名排隊加入 Alchemy University。
Solidity 資源
本節提供一些線上學習 Solidity 開發的最佳資源。
- 官方 Solidity 文件-將文件作為學習 Solidity 開發的主要資源。
- Solidity by Example-從「Hello World」程式到錢包應用程式與 DeFi,涵蓋各種 Solidity 範例的彙整。
- Clean Contracts - 指南說明如何搭配 Solidity 程式碼範例,撰寫安全且可預測的智能合約。
- OpenZeppelin 的 Ethernaut - 一款以智能合約為基礎的戰爭遊戲,每一關都需要破解一個智能合約。
開始使用 Solidity 進行開發
本文為你介紹了 Solidity,並提供了開始學習 Solidity 開發的資源。Solidity 是一種極具彈性且功能強大的語言,可用於在 Ethereum 及相容 EVM 的區塊鏈上開發去中心化應用程式。
當你對自己的知識有足夠信心時,不妨在 Goerli 測試網上部署一個應用程式、參加 web3 黑客松,並開始嘗試建立自己的 web3 新創公司!
相關總覽

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


