穩定幣已成為區塊鏈和 web3 生態系統的重要組成部分,幫助用戶規避比特幣和以太坊等加密貨幣的價格波動。在本篇文章中,我們將了解什麼是穩定幣,以及如何在 Linea 上編寫並部署一個簡單的穩定幣合約。
什麼是穩定幣?
穩定幣是一種旨在維持價值穩定的加密貨幣。其做法是將自身價值與更穩定的資產掛鉤,例如美元等傳統貨幣、黃金等大宗商品,甚至是其他加密貨幣。穩定幣的目標是結合加密貨幣的優勢(如快速交易和去中心化)與傳統金融資產的穩定性,使其在日常交易中更加可靠且實用。
穩定幣可依據多種因素進行分類,包括抵押品結構、穩定機制及相對穩定性。以下是穩定幣類型的完整說明:
1. 法幣抵押穩定幣
法幣抵押穩定幣由美元或歐元等傳統貨幣作為儲備支撐,例如 Tether USDT 和 USD Coin USDC。由於直接與法幣掛鉤,這類穩定幣穩定且易於使用。然而,它們依賴中心化機構管理儲備,並面臨監管審查。
2. 加密貨幣抵押穩定幣
加密貨幣抵押穩定幣(如 DAI 和 LUSD)以其他加密貨幣作為抵押,通常採用超額抵押以應對加密市場的波動性。相較於法幣支撐的選項,這類穩定幣更加去中心化。然而,其機制較為複雜,在市場下行期間穩定性可能較差,需要積極管理以維持穩定。
3. 演算法穩定幣
演算法穩定幣(如 Ampleforth (AMPL))依靠演算法調整供應量並穩定價格,無需直接抵押品。雖然高度去中心化且靈活,但這類穩定幣較難理解,且若市場信心下滑,可能面臨價值快速崩潰(即「死亡螺旋」)的風險。
此外還有其他幾種類型,例如混合型穩定幣 Frax (FRAX),結合了抵押品與演算法機制來實現穩定性,在不同模型之間取得平衡,但複雜度也相對較高。大宗商品支撐穩定幣(如 Paxos Gold (PAXG))與實體資產掛鉤,提供對現實世界大宗商品的數位敞口。收益型穩定幣(如 Compound USD (cUSDC))透過借貸或投資產生收益,提供被動收入,但伴隨較高的相關風險。
現在我們已了解穩定幣及其在當今生態系統中的類型,接下來讓我們探索如何在 Linea 網路上建立穩定幣。
設定開發環境
第一步是確保您的環境已正確設定:
安裝 Node.js 和 npm(Node 套件管理器)。
執行以下指令安裝 Hardhat:
npm install --save-dev hardhat建立新的 Hardhat 專案
在您的專案目錄中,初始化一個新的 Hardhat 專案:
npx hardhat init本教學將使用 TypeScript,Hardhat 已為您準備好所有必要的相依套件。初始化完成後,您將獲得包含以下內容的專案結構:
contracts/:Solidity 合約
ignition/:Ignition 部署模組
test/:測試檔案
hardhat.config.js:Hardhat 設定檔
現在,讓我們開始編寫自己的穩定幣合約 RadStablecoin (RAD)。這將是一個簡單的以太坊抵押穩定幣,抵押率為 150%。
在此合約中:
ETH 將作為抵押品使用。
150% 抵押率將確保穩定性。
用戶可透過發送 ETH 來 mint(鑄造)穩定幣,並透過 burn(銷毀)穩定幣來取回抵押品。
將使用簡單的價格預言機來獲取 ETH 的價格(在實際應用場景中,您應使用安全的去中心化預言機)。
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract RadStablecoin is ERC20, Ownable {
uint256 public constant COLLATERAL_RATIO = 150;
uint256 public constant PRICE_PRECISION = 100;
mapping(address => uint256) public collateralBalances;
constructor() ERC20("RadStablecoin", "RAD") {}
function depositCollateral() external payable {
collateralBalances[msg.sender] += msg.value;
}
function withdrawCollateral(uint256 amount) external {
require(collateralBalances[msg.sender] >= amount, "Insufficient collateral");
collateralBalances[msg.sender] -= amount;
payable(msg.sender).transfer(amount);
}
function mintStablecoin(uint256 stablecoinAmount) external {
uint256 collateralRequired = (stablecoinAmount * COLLATERAL_RATIO * PRICE_PRECISION) / (100 * getCurrentPrice());
require(collateralBalances[msg.sender] >= collateralRequired, "Insufficient collateral");
collateralBalances[msg.sender] -= collateralRequired;
_mint(msg.sender, stablecoinAmount);
}
function burnStablecoin(uint256 stablecoinAmount) external {
require(balanceOf(msg.sender) >= stablecoinAmount, "Insufficient stablecoin balance");
uint256 collateralToReturn = (stablecoinAmount * COLLATERAL_RATIO * PRICE_PRECISION) / (100 * getCurrentPrice());
_burn(msg.sender, stablecoinAmount);
collateralBalances[msg.sender] += collateralToReturn;
}
function getCurrentPrice() public view returns (uint256) {
return 200000;
}
}
抵押品管理:- 存入抵押品:- 用戶可透過呼叫 depositCollateral 將 Ether (ETH) 作為抵押品存入。
存入的 ETH 儲存於 collateralBalances 映射中,追蹤用戶的總抵押品。
提取抵押品:- 用戶可使用 withdrawCollateral 提取其抵押品。
穩定幣操作:- 鑄造穩定幣:- mintStablecoin 函式確保用戶擁有足夠的抵押品,以鑄造所請求數量的 RAD 代幣。
銷毀穩定幣:- burnStablecoin 函式銷毀指定數量的 RAD,並根據 150% 抵押率及 ETH 當前價格返還等值的 ETH。
價格饋送:- 獲取 ETH 價格:- 合約包含一個 getCurrentPrice 函式,在此簡化範例中返回 ETH 的固定價格 $2000。
為 Linea 設定 Hardhat
更新您的 hardhat.config.js,加入 Linea 測試網設定。新增以下網路設定:
import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
import * as dotenv from "dotenv";
dotenv.config();
const config: HardhatUserConfig = {
solidity: "0.8.24",
networks: {
"linea-testnet": {
url: `https://linea-sepolia.infura.io/v3/${process.env.INFURA_API_KEY}`,
accounts: [process.env.ACCOUNT_PRIVATE_KEY!],
},
},
};
export default config;
建立部署腳本
在 ignition/modules/ 目錄中,建立名為 RadStablecoin.ts 的檔案,並加入以下腳本:
import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";
const RadStablecoinModule = buildModule("RadStablecoinModule", (m) => {
const radStablecoin = m.contract("RadStablecoin");
return { radStablecoin };
});
export default RadStablecoinModule;
執行以下指令編譯合約:
npx hardhat compile在部署智能合約之前,請確保在目錄中的 .env 檔案中更新以下值:
# Infura API key for connecting to Ethereum networks
INFURA_API_KEY=your_infura_api_key_here
# Private key of the account to be used for deployments and transactions
ACCOUNT_PRIVATE_KEY=your_account_private_key_here
部署合約
最後,將 RadStablecoin 合約部署至 Linea:
npx hardhat ignition deploy ignition/modules/RadStablecoin.ts --network linea-testnet這將在 Linea Sepolia 上部署市場智能合約。
下一步?
穩定幣在加密貨幣生態系統中扮演著至關重要的角色,為金融應用提供急需的穩定性。在本教學中,我們探討了穩定幣的核心概念、各種類型,以及它們如何將傳統金融與去中心化技術相結合。我們也透過在 Linea 網路上建立並部署 RadStablecoin,獲得了實作經驗,進一步加深了對抵押品支撐穩定幣的理解——祝編碼愉快!