Pectra 升級實務應用完整指南:從技術變更到實際應用場景
Pectra 是以太坊史上第一個同步升級執行層與共識層的大規模升級。本文深入分析 EIP-7702 帳戶抽象、EIP-7251 驗證者質押上限提升等核心提案,提供具體的程式碼範例和實際應用場景分析,幫助開發者和用戶全面理解這次升級的實務影響。
Pectra 升級實務應用完整指南:從技術變更到實際應用場景
概述
Pectra 是以太坊史上第一個同步升級執行層(Execution Layer)與共識層(Consensus Layer)的大規模升級,於 2025 年第四季度正式部署。這次升級結合了布拉格(Prague,執行層升級代號)與 Electra(共識層升級代號)的功能,代表了以太坊協議演進的重要里程碑。對於開發者、驗證者和普通用戶而言,理解 Pectra 升級帶來的具體變化及其實際應用場景,對於把握以太坊未來發展方向至關重要。
本指南深入分析 Pectra 升級的核心技術提案,包括 EIP-7702 帳戶抽象、EIP-7251 驗證者質押上限提升、以及多項效能優化。我們將從工程師視角出發,提供具體的程式碼範例和實際應用場景分析,幫助讀者全面理解這次升級的實務影響。
截至 2026 年第一季度,Pectra 升級已經在主網平穩運行數個月。本文將基於實際運行數據,提供最新的應用場景分析和最佳實踐建議。
第一章:Pectra 升級核心提案解析
1.1 升級時間線與背景
升級歷程
以太坊的 Pectra 升級經歷了漫長的研發和測試過程:
- 2024 年 3 月:Cancun-Deneb 升級完成
- 2024 年 Q2:Pectra 提案開始征集
- 2025 年 Q1:測試網部署(Sepolia、Holesky)
- 2025 年 Q3:最終提案鎖定
- 2025 年 Q4:主網升級啟動
- 2026 年 Q1:完全激活
升級規模
Pectra 是合併以來最大的升級,包含了約 15 個 EIP,主要集中在三個領域:
- 帳戶抽象與用戶體驗改進
- 驗證者體驗優化
- 協議效率提升
1.2 EIP-7702:帳戶抽象
核心概念
EIP-7702 是 Pectra 升級中最重要的提案之一,它為以太坊引入了「代理帳戶」功能,允許外部擁有帳戶(EOA)在交易過程中臨時獲得智慧合約的能力。
這意味著:
- 普通錢包可以具有智慧合約的功能
- 實現社交恢復、多重簽名、交易限額等高級功能
- 無需將資產轉移到新的智慧合約錢包
技術原理
在 EIP-7702 之前:
- EOA 帳戶只能發送簡單的轉帳交易
- 所有複雜邏輯必須通過智慧合約帳戶實現
- 用戶必須管理兩種類型的帳戶
在 EIP-7702 之後:
- EOA 可以透過 Authorization Tuple 臨時獲得合約代碼
- 每次交易都可以指定不同的合約邏輯
- 保留了 EOA 的簡單性,同時獲得合約的靈活性
程式碼範例
// EIP-7702 授權合約範例
// 這個合約為 EOA 提供了額外的權限控制功能
pragma solidity ^0.8.20;
/**
* @title EIP7702AuthContract
* @dev EIP-7702 授權合約示例
*
* 這個合約實現了以下功能:
* - 交易限額控制
* - 黑白名單
* - 時間鎖功能
*/
contract EIP7702AuthContract {
// 錯誤定義
error ExceedsDailyLimit(uint256 requested, uint256 remaining);
error NotAuthorized(address caller);
error LockedUntil(uint256 unlockTime);
// 狀態變數
mapping(address => uint256) public dailySpent;
mapping(address => uint256) public dailyLimit;
mapping(address => bool) public authorizedCallers;
mapping(address => uint256) public lockedUntil;
address public owner;
// 每日重置時間(UTC 0點)
uint256 public lastResetTime;
// 事件
event DailyLimitUpdated(address indexed user, uint256 newLimit);
event AuthorizationUpdated(address indexed user, bool status);
event FundsLocked(address indexed user, uint256 until);
constructor() {
owner = msg.sender;
lastResetTime = block.timestamp / 1 days * 1 days;
}
/**
* @dev EIP-7702 授權驗證函數
* @param authority 授權的 EOA 地址
*/
function validateAuthorization(
address authority,
bytes32 /*domainSeparator*/,
bytes32 /*messageHash*/,
uint256 /*chainId*/,
address /*nonce*/,
bytes calldata /*signature*/
) external view returns (bytes4) {
// 檢查是否被鎖定
if (lockedUntil[authority] > block.timestamp) {
revert LockedUntil(lockedUntil[authority]);
}
// 檢查是否在白名單
if (!authorizedCallers[authority] && authority != owner) {
revert NotAuthorized(authority);
}
return this.validateAuthorization.selector;
}
/**
* @dev 檢查並更新每日限額
* @param sender 發送者地址
* @param amount 金額
*/
function checkAndUpdateLimit(address sender, uint256 amount) external returns (bytes4) {
// 重置每日限額
uint256 currentDay = block.timestamp / 1 days * 1 days;
if (currentDay > lastResetTime) {
lastResetTime = currentDay;
// 這裡應該有更複雜的重置邏輯
}
uint256 limit = dailyLimit[sender];
if (limit == 0) {
limit = 10 ether; // 默認每日限額
}
uint256 remaining = limit - dailySpent[sender];
if (amount > remaining) {
revert ExceedsDailyLimit(amount, remaining);
}
dailySpent[sender] += amount;
return this.checkAndUpdateLimit.selector;
}
/**
* @dev 設定每日交易限額
* @param user 用戶地址
* @param limit 新限額
*/
function setDailyLimit(address user, uint256 limit) external {
require(msg.sender == owner, "Only owner");
dailyLimit[user] = limit;
emit DailyLimitUpdated(user, limit);
}
/**
* @dev 授權或撤銷調用者
* @param user 用戶地址
* @param status 授權狀態
*/
function setAuthorization(address user, bool status) external {
require(msg.sender == owner, "Only owner");
authorizedCallers[user] = status;
emit AuthorizationUpdated(user, status);
}
/**
* @dev 鎖定帳戶直到指定時間
* @param user 用戶地址
* @param until 解鎖時間
*/
function lockAccount(address user, uint256 until) external {
require(msg.sender == owner, "Only owner");
require(until > block.timestamp, "Invalid time");
lockedUntil[user] = until;
emit FundsLocked(user, until);
}
}
1.3 EIP-7251:驗證者質押上限提升
變更內容
- 驗證者質押上限從 32 ETH 提升至 2048 ETH
- 允許更大的質押節點運營
- 降低大型質押運營的複雜性
實際影響
對於個人驗證者:
- 影響有限,個人驗證者通常質押 32 ETH
- 更重要的是,這意味著質押生態更成熟
對於機構驗證者:
- 可以用更少的Validator數量管理更大規模的質押
- 降低運營成本和管理複雜度
- 例如:10 億美元質押只需要約 3 萬個 Validator,而不是 200 萬個
技術細節
// 質押合約更新示例
// 展示新的質押上限如何影響質押邏輯
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
/**
* @title EnhancedStakingContract
* @dev 展示 Pectra 升級後的質押合約功能
*/
contract EnhancedStakingContract {
// Pectra 升級後的新上限
uint64 public constant MAX_EFFECTIVE_BALANCE = 2048 ether;
uint64 public constant MIN_EFFECTIVE_BALANCE = 32 ether;
// 質押者結構
struct Validator {
address operator;
uint256 depositAmount;
uint256 activationEpoch;
bool isActive;
}
mapping(bytes => Validator) public validators;
mapping(address => bytes[]) public operatorValidators;
// 事件
event ValidatorDeposited(
bytes pubkey,
address indexed operator,
uint256 amount
);
event ValidatorActivated(
bytes pubkey,
uint256 activationEpoch
);
/**
* @dev 質押 ETH 成為驗證者
* @param pubkey 驗證者公鑰(BLS)
* @param signature 存款簽名
* @param depositDataRoot 存款數據根
*/
function deposit(
bytes calldata pubkey,
bytes calldata signature,
bytes32 depositDataRoot
) external payable {
// 檢查質押金額
require(
msg.value >= MIN_EFFECTIVE_BALANCE &&
msg.value <= MAX_EFFECTIVE_BALANCE,
"Invalid deposit amount"
);
// 創建驗證者記錄
validators[pubkey] = Validator({
operator: msg.sender,
depositAmount: msg.value,
activationEpoch: 0,
isActive: false
});
operatorValidators[msg.sender].push(pubkey);
emit ValidatorDeposited(pubkey, msg.sender, msg.value);
}
/**
* @dev 批量質押(適合機構運營商)
* @param pubkeys 驗證者公鑰陣列
*/
function batchDeposit(bytes[] calldata pubkeys) external payable {
uint256 perValidator = msg.value / pubkeys.length;
require(
perValidator >= MIN_EFFECTIVE_BALANCE &&
perValidator <= MAX_EFFECTIVE_BALANCE,
"Invalid amount per validator"
);
for (uint256 i = 0; i < pubkeys.length; i++) {
validators[pubkeys[i]] = Validator({
operator: msg.sender,
depositAmount: perValidator,
activationEpoch: 0,
isActive: false
});
operatorValidators[msg.sender].push(pubkeys[i]);
emit ValidatorDeposited(pubkeys[i], msg.sender, perValidator);
}
}
}
第二章:用戶端影響與應用場景
2.1 錢包體驗改進
帳戶抽象帶來的變化
Pectra 升級後,普通用戶將體驗到以下改進:
社交恢復功能
傳統 EOA 錢包一旦丟失私鑰,資產將無法恢復。EIP-7702 使得社交恢復變得簡單:
// 社交恢復合約示例
pragma solidity ^0.8.20;
/**
* @title SocialRecoveryModule
* @dev 實現社交恢復功能的合約
*/
contract SocialRecoveryModule {
// 恢復守護者
mapping(address => address[]) public guardians;
mapping(address => uint256) public guardianCount;
mapping(address => uint256) public recoveryRequestTime;
// 恢復閾值:需要多少守護者同意
uint256 public constant RECOVERY_THRESHOLD = 2;
uint256 public constant RECOVERY_DELAY = 48 hours;
event GuardianAdded(address indexed account, address indexed guardian);
event GuardianRemoved(address indexed account, address indexed guardian);
event RecoveryInitiated(address indexed account, uint256 executeTime);
event AccountRecovered(address indexed oldKey, address indexed newKey);
/**
* @dev 添加恢復守護者
* @param guardian 守護者地址
*/
function addGuardian(address guardian) external {
require(guardian != address(0), "Invalid guardian");
guardians[msg.sender].push(guardian);
guardianCount[msg.sender]++;
emit GuardianAdded(msg.sender, guardian);
}
/**
* @dev 移除守護者
* @param guardian 要移除的守護者地址
*/
function removeGuardian(address guardian) external {
address[] storage list = guardians[msg.sender];
for (uint256 i = 0; i < list.length; i++) {
if (list[i] == guardian) {
list[i] = list[list.length - 1];
list.pop();
guardianCount[msg.sender]--;
emit GuardianRemoved(msg.sender, guardian);
break;
}
}
}
/**
* @dev 發起恢復請求
* @param account 要恢復的帳戶
* @param newKey 新的公鑰
*/
function initiateRecovery(address account, address newKey) external {
require(
guardianCount[account] >= RECOVERY_THRESHOLD,
"Not enough guardians"
);
recoveryRequestTime[account] = block.timestamp + RECOVERY_DELAY;
emit RecoveryInitiated(account, recoveryRequestTime[account]);
}
/**
* @dev 執行恢復(需要守護者確認)
* @param account 要恢復的帳戶
* @param newKey 新的公鑰
*/
function executeRecovery(address account, address newKey) external {
require(
recoveryRequestTime[account] > 0 &&
block.timestamp >= recoveryRequestTime[account],
"Recovery not available"
);
// 這裡應該有守護者多重簽名邏輯
// 簡化版本:任何人都可以觸發
emit AccountRecovered(account, newKey);
}
}
交易限額控制
家長可以為子女設置交易限額:
// 交易限額控制示例
pragma solidity ^0.8.20;
/**
* @title AllowanceController
* @dev 實現交易限額控制
*/
contract AllowanceController {
struct Allowance {
uint256 dailyLimit;
uint256 weeklyLimit;
uint256 monthlyLimit;
uint256 dailySpent;
uint256 weeklySpent;
uint256 monthlySpent;
uint256 lastDailyReset;
uint256 lastWeeklyReset;
uint256 lastMonthlyReset;
}
mapping(address => Allowance) public allowances;
mapping(address => address) public parents;
event AllowanceSet(
address indexed child,
uint256 daily,
uint256 weekly,
uint256 monthly
);
event AllowanceExceeded(
address indexed child,
string limitType
);
/**
* @dev 設置限額(家長調用)
* @param child 子女地址
* @param daily 每日限額
* @param weekly 每週限額
* @param monthly 每月限額
*/
function setAllowance(
address child,
uint256 daily,
uint256 weekly,
uint256 monthly
) external {
parents[child] = msg.sender;
allowances[child] = Allowance({
dailyLimit: daily,
weeklyLimit: weekly,
monthlyLimit: monthly,
dailySpent: 0,
weeklySpent: 0,
monthlySpent: 0,
lastDailyReset: block.timestamp,
lastWeeklyReset: block.timestamp,
lastMonthlyReset: block.timestamp
});
emit AllowanceSet(child, daily, weekly, monthly);
}
/**
* @dev 檢查並記錄交易
* @param user 用戶地址
* @param amount 金額
* @return 是否允許
*/
function checkAndRecordSpend(
address user,
uint256 amount
) external returns (bool) {
Allowance storage allowance = allowances[user];
_resetIfNeeded(allowance);
if (allowance.dailySpent + amount > allowance.dailyLimit) {
emit AllowanceExceeded(user, "daily");
return false;
}
if (allowance.weeklySpent + amount > allowance.weeklyLimit) {
emit AllowanceExceeded(user, "weekly");
return false;
}
if (allowance.monthlySpent + amount > allowance.monthlyLimit) {
emit AllowanceExceeded(user, "monthly");
return false;
}
allowance.dailySpent += amount;
allowance.weeklySpent += amount;
allowance.monthlySpent += amount;
return true;
}
function _resetIfNeeded(Allowance storage allowance) internal {
uint256 now = block.timestamp;
// 重置每日
if (now - allowance.lastDailyReset >= 1 days) {
allowance.dailySpent = 0;
allowance.lastDailyReset = now;
}
// 重置每週
if (now - allowance.lastWeeklyReset >= 7 days) {
allowance.weeklySpent = 0;
allowance.lastWeeklyReset = now;
}
// 重置每月
if (now - allowance.lastMonthlyReset >= 30 days) {
allowance.monthlySpent = 0;
allowance.lastMonthlyReset = now;
}
}
}
2.2 DeFi 應用場景
借貸協議優化
EIP-7702 為 DeFi 借貸協議帶來新的可能性:
自動化清算保護
// 清算保護合約示例
pragma solidity ^0.8.20;
/**
* @title LiquidationProtection
* @dev 展示 Pectra 升級後的清算保護應用
*/
contract LiquidationProtection {
// 健康因子閾值
uint256 public constant SAFE_HEALTH_FACTOR = 2.0e18;
uint256 public constant WARNING_HEALTH_FACTOR = 1.5e18;
// 抵押品價值(假設已有預言機餵價)
mapping(address => uint256) public collateralValue;
mapping(address => uint256) public debtValue;
// 用戶設定
mapping(address => bool) public autoRepayEnabled;
mapping(address => uint256) public minCollateralRatio;
event HealthFactorWarning(address indexed user, uint256 healthFactor);
event AutoRepayTriggered(address indexed user, uint256 amount);
event CollateralAdded(address indexed user, uint256 amount);
/**
* @dev 計算健康因子
*/
function calculateHealthFactor(address user) public view returns (uint256) {
uint256 collateral = collateralValue[user];
uint256 debt = debtValue[user];
if (debt == 0) return type(uint256).max;
return (collateral * 1e18) / debt;
}
/**
* @dev 檢查並觸發保護措施
*/
function checkHealthFactor(address user) external {
uint256 healthFactor = calculateHealthFactor(user);
if (healthFactor < WARNING_HEALTH_FACTOR) {
emit HealthFactorWarning(user, healthFactor);
// 觸發自動轉帳
if (autoRepayEnabled[user]) {
_autoRepay(user);
}
}
}
/**
* @dev 自動償還債務
*/
function _autoRepay(address user) internal {
uint256 healthFactor = calculateHealthFactor(user);
if (healthFactor < minCollateralRatio[user]) {
// 計算需要償還的金額
uint256 targetDebt = (collateralValue[user] * 1e18) /
(minCollateralRatio[user] * 2);
if (debtValue[user] > targetDebt) {
uint256 repayAmount = debtValue[user] - targetDebt;
// 執行償還邏輯
// ...
emit AutoRepayTriggered(user, repayAmount);
}
}
}
/**
* @dev 設定自動還款
*/
function setAutoRepay(bool enabled, uint256 minRatio) external {
autoRepayEnabled[msg.sender] = enabled;
minCollateralRatio[msg.sender] = minRatio > 0 ? minRatio : SAFE_HEALTH_FACTOR;
}
}
2.3 企業級應用
多重簽名簡化
企業用戶可以更方便地實現多重簽名功能:
// 企業級多重簽名錢包
pragma solidity ^0.8.20;
/**
* @title EIP7702EnterpriseMultisig
* @dev 展示 Pectra 升級後的企業級應用
*/
contract EIP7702EnterpriseMultisig {
// 簽名要求
uint256 public requiredSignatures;
uint256 public numOwners;
// 所有者
mapping(address => bool) public isOwner;
address[] public owners;
// 交易記錄
struct Transaction {
address to;
uint256 value;
bytes data;
bool executed;
uint256 numConfirmations;
mapping(address => bool) confirmed;
}
mapping(uint256 => Transaction) public transactions;
uint256 public transactionCount;
// 事件
event TransactionSubmitted(uint256 indexed txId, address indexed to, uint256 value);
event TransactionConfirmed(uint256 indexed txId, address indexed owner);
event TransactionExecuted(uint256 indexed txId);
/**
* @dev 提交新交易
*/
function submitTransaction(
address to,
uint256 value,
bytes calldata data
) external returns (uint256) {
require(isOwner[msg.sender], "Not owner");
uint256 txId = transactionCount++;
transactions[txId] = Transaction({
to: to,
value: value,
data: data,
executed: false,
numConfirmations: 0
});
// 自動確認
confirmTransaction(txId);
emit TransactionSubmitted(txId, to, value);
return txId;
}
/**
* @dev 確認交易
*/
function confirmTransaction(uint256 txId) public {
require(isOwner[msg.sender], "Not owner");
Transaction storage tx_ = transactions[txId];
if (!tx_.confirmed[msg.sender]) {
tx_.confirmed[msg.sender] = true;
tx_.numConfirmations++;
}
// 檢查是否可以執行
if (tx_.numConfirmations >= requiredSignatures && !tx_.executed) {
_executeTransaction(txId);
}
emit TransactionConfirmed(txId, msg.sender);
}
/**
* @dev 執行交易
*/
function _executeTransaction(uint256 txId) internal {
Transaction storage tx_ = transactions[txId];
(bool success, ) = tx_.to.call{value: tx_.value}(tx_.data);
require(success, "Execution failed");
tx_.executed = true;
emit TransactionExecuted(txId);
}
}
第三章:開發者準備指南
3.1 合規性檢查清單
在 Pectra 升級後,開發者應該檢查以下項目:
智慧合約相容性
- 升級代理合約:如果使用代理模式,確保升級機制與新帳戶模型相容
- 簽名驗證:檢查所有簽名驗證邏輯是否與新格式相容
- Gas 估算:由於 EIP-7702 會增加交易開銷,重新估算 Gas 限制
錢包整合
- 錢包升級:通知用戶升級錢包版本
- 用戶界面:更新界面以支持新功能(如社交恢復)
- 錯誤處理:更新錯誤訊息以反映新的行為
3.2 測試策略
本地測試網
// Hardhat 配置 Pectra 測試
module.exports = {
networks: {
// Pectra 測試網絡配置
pectra: {
url: "https://pectra.devnet.infura.io",
chainId: 123456,
accounts: [...]
}
},
// 確保使用支持 Pectra 的 Solidity 版本
solidity: {
version: "0.8.26",
settings: {
optimizer: {
enabled: true,
runs: 200
}
}
}
};
集成測試
// EIP-7702 集成測試示例
describe("EIP-7702 Integration Tests", function() {
it("should execute authorized transaction", async function() {
// 獲取錢包
const [owner, user] = await ethers.getSigners();
// 部署授權合約
const AuthContract = await ethers.getContractFactory("EIP7702AuthContract");
const authContract = await AuthContract.deploy();
await authContract.deployed();
// 設置授權
await authContract.setAuthorization(user.address, true);
// 執行交易(使用 EIP-7702 格式)
// ...
});
});
結論
Pectra 升級是以太坊發展的重要里程碑,為用戶和開發者帶來了顯著的改進。通過本指南,我們詳細分析了:
- EIP-7702 帳戶抽象:為普通 EOA 帶來智慧合約能力
- EIP-7251 質押上限提升:優化機構驗證者體驗
- 實際應用場景:從社交恢復到企業級多重簽名
開發者行動建議:
- 立即行動:
- 在測試網絡上測試新的 EIP-7702 功能
- 更新開發工具到最新版本
- 檢查現有合約的相容性
- 短期規劃:
- 規劃錢包產品的升級路線圖
- 設計基於新功能的產品特性
- 更新用戶教育內容
- 長期考量:
- 關注帳戶抽象的進一步發展
- 探索與其他 Layer 2 的整合機會
- 參與以太坊治理討論
以太坊的演進不會停止。Pectra 升級只是一個開始,未來還會有更多激動人心的改進。保持學習、積極參與,我們一起推動以太坊生態系統的發展。
參考資源
- EIP-7702: Set EOA account code via transaction
- EIP-7251: Increase the MAXEFFECTIVEBALANCE
- Ethereum Foundation - Pectra Upgrade
4.以太坊基金會官方文檔
- OpenZeppelin Contracts
- ConsenSys Pectra升級指南
相關文章
- 以太坊 Pectra 升級深度技術分析:從 EIP 提案到協議變革全景 — Pectra 是以太坊自合併以來最具影響力的升級之一,涵蓋 EIP-7702 帳戶抽象、EIP-2537 BLS 預編譯、EIP-7251 質押優化等多個關鍵提案。本文深入分析各 EIP 的技術原理、實現細節、對網路的影響、以及生態系統的準備策略,為開發者和節點運營商提供全面的技術參考。
- Pectra 升級深度解析:EIP-7702 帳戶抽象與驗證者改進完整指南 — Pectra 是以太坊史上第一個同步升級執行層(Execution Layer)與共識層(Consensus Layer)的大規模升級,於 2025 年第四季度正式部署。這一升級結合了布拉格(Prague,執行層升級代號)與 Electra(共識層升級代號)的功能,代表了以太坊協議演進的重要里程碑。本文深入分析 Pectra 升級的所有提案、其技術實現細節、對生態系統的影響,以及開發者和用戶應該如
- EIP-7702 帳戶抽象完整指南:EOA 的智能化革命 — 帳戶抽象(Account Abstraction)是以太坊演進歷程中最具革命性的技術創新之一。傳統以太坊帳戶分為兩種:外部擁有的帳戶(EOA)和合約帳戶。EIP-7702(最初以 EIP-3074 為基礎)旨在讓 EOA 臨時獲得合約帳戶的功能,實現平滑的用戶體驗升級。本文深入解析帳戶抽象的概念、EIP-7702 的技術原理、以及其對以太坊生態的深遠影響。
- EIP-7702 實際應用場景完整指南:從理論到生產環境部署 — EIP-7702 是以太坊帳戶抽象演進歷程中的重要里程碑,允許外部擁有帳戶(EOA)在交易執行期間臨時獲得智慧合約的功能。本文深入探討 EIP-7702 的實際應用場景,包括社交恢復錢包、批量交易、自動化執行和多重簽名等,提供完整的開發指南與程式碼範例,並探討從概念驗證到生產環境部署的最佳實踐。
- 以太坊 Pectra 升級完整準備指南:技術規範、影響評估與實戰準備 — Pectra 是以太坊網路的下一個重大升級,預計將在 2025 年底或 2026 年初實施。這次升級是以太坊 Cancun-Dencun 升級之後最重要的網路升級,包含了多個重要的 EIP(以太坊改進提案),涉及驗證者體驗改善、帳戶抽象、執行層效率等多個領域。本指南將深入分析 Pectra 升級的技術細節、對各類用戶和開發者的影響,以及如何為這次升級做好準備。
延伸閱讀與來源
- Ethereum.org Developers 官方開發者入口與技術文件
- EIPs 以太坊改進提案
這篇文章對您有幫助嗎?
請告訴我們如何改進:
評論
發表評論
注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。
目前尚無評論,成為第一個發表評論的人吧!