區塊鏈新手教學 — #12 智能合約與 dApps

JKOBlockchain
JKOBlockchain
Published in
Jul 29, 2022

上週我們和大家分享了區塊鏈的「共識機制」,以及常見的 PoW 和 PoS 有什麼不同。這篇將跟大家介紹「智能合約」的概念,我們將帶大家了解智能合約是什麼、智能合約和鏈之間是怎麼互動的。有興趣了解的朋友就繼續看下去吧!

這篇的內容將分為:

  • 智能合約是什麼
  • 智能合約的用途
  • 智能合約與鏈的互動

智能合約是什麼

智能合約(smart contract)其實不智能,也不是一個合約。它是在鏈上運行的一段程式碼,而這段程式碼運行著一套開發者寫好的規則或準則,所以類似於合約有著對簽約雙方的規定一樣。寫好的合約被部署到鏈上之後,也會以一個地址的形式被表示(和錢包一樣),而不同的錢包也都能對這個合約發送交易。在 Etherscan 等 Explorer 上我們也能查訊到這個合約的程式碼、看到哪些地址跟合約互動等等。例如下圖就是與 Uniswap V2 : Router 2 這個合約互動的交易紀錄,可以看到交易的接收者(“to”)不是一個錢包地址而是一個合約的地址(紅色框框內)。在第二欄的部分也能看到這些交易是跟合約裡的什麼功能(function)互動,例如 “Swap Exact Tokens for Tokens” 就是在 Uniswap 交易所交易代幣時會呼叫的功能。

Etherscan 上與 Uniswap V2 : Router 2 合約互動的交易。資料來源:Etherscan

智能合約的用途

在上一段我們有提到智能合約運行著一套開發者寫好的規則,那這些規則有什麼應用呢?最基本的就是用來發行代幣,只要是應用代幣或是 NFT 就都是由合約產生的,但原生代幣沒有智能合約。這就是 $WETH 和 $ETH 的不同,$WETH 和其他代幣一樣屬於基於智能合約的代幣,而 $ETH 則是以太坊的原生代幣。不論是哪種代幣都能在合約裡面定義這代幣符合的規則,(例如以太坊的 ERC-20、ERC-721、ERC-1155)它的供給量、代幣的代號(symbol)等等。

鏈上所有的應用程式(dApp)也都是由智能合約驅動的,不論是借貸協議、去中心化交易所(DEX)、預言機或 NFT 市場。這些協議都是由一個或多個智能合約組成的,而合約裡面都會寫好各式功能,讓協議能正常被用戶使用。例如我們剛剛舉例的 “Swap Exact Tokens for Tokens” 功能,就能在下圖合約上看到當用戶地址呼叫這個功能時,合約會做什麼相對應的操作。

Etherscan 上可以直接看到 Uniswap V2 : Router 2 合約裡的功能(function)。資料來源:Etherscan

智能合約與鏈的互動

寫智能合約的語言有很多中,每一條鏈支援的語言也不太一樣,常見的語言有 Solidity, Vyper 和 Rust。在鏈上執行合約的環境稱為虛擬機器(VM),不同的鏈也有各自不同的環境(例如以太坊的就稱為 EVM),而這些環境能適用的程式語言也不同。像是以太坊的 EVM 就只能執行由 Solidity 寫的智能合約,這也讓 Solidity 成為現在最普遍的智能合約語言。

由 Solidity 寫的智能合約大約佔 84%。資料來源:DeFiLlama

EVM-compatible 鏈指的就是這些鏈的執行環境與以太坊的 EVM 是兼容的,這也代表這些鏈所適用的語言大都是 Solidity。加上智能合約大都是開源的,所以只要是 EVM-compatible 的鏈都有很多從以太坊複製(fork)上去的協議,這些協議的智能合約大多都沒有更動,主要是更改協議名稱以及網頁介面而已。下圖可以看到 Uniswap 就被複製了 252 次,CompoundOlympus DAO 等以太坊上的知名項目也有很多複製品。這也讓 EVM-compatible 的鏈能快速的複製成功的協議,並形成豐富的生態,但也因而較缺乏創新的協議。比較知名的 EVM-compatible 鏈有 Polygon幣安鏈Avalanche,non-EVM-compatible 的鏈則有 SolanaTerra 等。

以太坊上成功的協議都被複製過非常多次。資料來源:DeFiLlama

以上就是我們有關「智能合約」這個主題的介紹,希望有幫助大家了解鏈上的應用程式是怎麼運作的。下週將會介紹最後一個主題「第二層解決方案」,想知道以太坊昂貴的 gas fee 該如何解決就務必要關注我們!

--

--