Solidity

想像你要在以太坊上建一個應用:

最後更新:2026 年 1 月

Solidity 是專門用來撰寫以太坊智能合約的程式語言。如果智能合約是區塊鏈上的「自動販賣機」,那 Solidity 就是製造這台販賣機的「藍圖語言」——它決定販賣機怎麼收錢、怎麼出貨、怎麼找零。

想像你要在以太坊上建一個應用:

  • 一個可以自動分潤的創作者平台

  • 一個不需要銀行的借貸系統

  • 一個數位收藏品的交易市場

你用什麼來寫?

答案是 Solidity。

它是以太坊生態系最主流的智能合約語言,超過 90% 的 DeFi 協議和 NFT 項目都用它開發。

Solidity 的誕生

2014 年,以太坊團隊面臨一個問題:

「我們創造了一個可以執行程式的區塊鏈,但⋯⋯要用什麼語言寫程式?」

幾個選項被考慮過:

選項
問題

使用現有語言(如 Python)

不適合區塊鏈的特殊需求

使用比特幣腳本

功能太有限

完全新創語言

開發者學習成本高

最後,Gavin Wood(以太坊共同創辦人)設計了 Solidity。

設計原則:語法要像 JavaScript,讓網頁開發者容易上手。

為什麼叫 Solidity?

「Solid」有「堅固」的意思。

這個名字暗示:

  • 智能合約應該是「堅固」且可靠的

  • 一旦部署就無法輕易修改

  • 程式碼就是法律

Solidity 的設計者 Gavin Wood 後來離開以太坊,創立了 Polkadot。他發明了另一個智能合約語言叫 Ink!。但 Solidity 仍然是最主流的選擇。

Solidity 長什麼樣?

一個最簡單的智能合約:

這段程式碼做了什麼?

  1. 宣告一個叫 HelloWorld 的合約

  2. 有一個公開的變數 message

  3. 有一個函數可以更改這個訊息

看起來很像 JavaScript 對吧?這是故意的。

Solidity 的核心概念

1. 合約(Contract)

合約是 Solidity 的基本單位,類似其他語言的「類別(Class)」。

2. 狀態變數(State Variables)

存在區塊鏈上的永久資料。

3. 函數(Functions)

合約的「動作」。

4. 修飾符(Modifiers)

控制誰可以執行函數。

5. 事件(Events)

通知外部世界「發生了什麼事」。

Solidity 特有的概念

這些是你在其他程式語言看不到的:

概念
說明

msg.sender

呼叫合約的人的地址

msg.value

這次交易附帶多少 ETH

block.timestamp

當前區塊的時間戳

payable

標記函數可以接收 ETH

require

條件不滿足就回滾交易

revert

主動回滾交易

Gas 與優化

在 Solidity 裡,效率 = 省錢

每一行程式碼的執行都要消耗 Gas。不同操作的 Gas 成本:

操作
大約 Gas 消耗

加法

3

讀取狀態變數

200

寫入狀態變數

5,000-20,000

部署合約

數十萬到數百萬

常見優化技巧

Solidity 版本

Solidity 持續更新,版本很重要:

版本
重要變化

0.4.x

早期版本,很多安全問題

0.5.x

增加安全檢查

0.6.x

try/catch、虛擬函數

0.7.x

移除許多過時功能

0.8.x

內建溢位保護(重大改進)

Solidity 的安全陷阱

1. 重入攻擊(Reentrancy)

最著名的漏洞,The DAO 就是這樣被駭的。

2. 整數溢位(0.8.0 前)

3. 存取控制

開發工具生態系

工具
用途

Remix

瀏覽器 IDE,適合新手

Hardhat

本地開發框架

Foundry

Rust 寫的高效框架

OpenZeppelin

安全的合約範本庫

Slither

靜態分析工具

學習 Solidity 的路徑

Solidity vs 其他智能合約語言

語言
區塊鏈
特點

Solidity

Ethereum、BSC、Polygon

最主流,資源最多

Vyper

Ethereum

更安全但功能較少

Rust

Solana、Near

性能高但學習曲線陡

Move

Aptos、Sui

專注資產安全

Ink!

Polkadot

Rust-based

為什麼 Solidity 這麼重要?

數字說話:

數據
說明

TVL 佔比

以太坊及 EVM 鏈佔 DeFi 總鎖倉量 70%+

工作機會

區塊鏈開發職缺 80%+ 要求 Solidity

教學資源

最豐富的文件和教程

合約數量

數百萬個已部署合約


相關條目

學習資源

Last updated