跳至主要內容

基於 Hyperliquid 並整合 Chainlink CCIP 的橋接方案

更新於
2026年4月22日

閱讀時間 38 分鐘

概覽

Hyperliquid 將兩層架構整合於單一統一狀態之下:HyperCore 是一款透過簽名操作存取的超低延遲訂單簿引擎;HyperEVM 則是一個完全相容於 EVM 的網路,可用於標準 Solidity 開發。

Chainlink CCIP 透過「銷毀與鑄造」機制,實現跨鏈資產橋接。在 Hyperliquid 系統中,HyperCore (HIP-1) 資產與其 HyperEVM 表示形式之間的轉換,由原生協議流程處理。

在本指南中,您將使用 Foundry 對應於 HIP-1 資產的 HyperEVM 代幣進行封裝,並透過 CCIP 將該代幣在 HyperEVM 與 BNB Smart Chain (BSC) 之間進行跨鏈轉移。

您將負責的工作內容


  • 為與 HIP-1 資產綁定的 HyperEVM 代幣建立一個封裝合約
  • 在 HyperEVM 和 BSC 上部署並配置 CCIP 代幣池
  • 在鏈上驗證我們已部署的代幣與流動性池合約
  • 使用 Foundry 腳本在 HyperEVM 與 BSC 之間執行 CCIP 轉帳

您需要準備的物品


免責聲明

本指南中,我們使用的是各條鏈的主網(MAINNETS)。這是因為在撰寫本文時,Chainlink CCIP 尚未在 HyperEVM 測試網(Testnet)上線。請謹慎操作,並僅使用您能承受損失的資金。

設定開發環境

我們將使用Foundry來編譯、部署以及與我們的智慧合約進行互動。如果您尚未安裝 Foundry,可以在終端機中執行以下指令進行安裝:

curl -L https://foundry.paradigm.xyz | bash

請依照螢幕上的指示操作,完成後,您即可使用該 foundryup 用於安裝 Foundry 的指令。請務必在新的終端機工作階段中執行此指令,以反映您所做的變更。 PATH 變數。

foundryup

我們需要在本地端建立一個新資料夾,用來存放本指南中的專案。我們將此資料夾命名為hyperevm_ccip,但您可隨意命名。請在終端機中執行以下指令來建立該資料夾,並使用您的程式碼編輯器進入該資料夾。在本指南中,我們將使用 VS Code。

forge init hyperevm_ccip
cd hyperevm_ccip
code .

至此,您的設定應大致如下所示:

太好了!我們的 Foundry 專案結構現在已經設定完成了。接下來請建立一個 .env 位於專案資料夾根目錄下的檔案。我們將在此儲存環境變數,例如私密金鑰和 RPC URL。以下是該檔案的格式: .env 檔案應如下所示:

HYPEREVM_RPC="您的_hyperevm_rpc_網址"
BSC_RPC="您的 BSC RPC 網址"
PRIVATE_KEY="您的私鑰"
ETHERSCAN_API_KEY="您的_etherscan_api_key"

我們稍後將討論這些變數各自代表什麼,以及如何取得它們。下一步是刪除預設值 src/Counter.sol 合約及 script/Counter.s.sol Foundry 為我們生成的腳本。本指南中將不會使用這些檔案。此外,您也可以在終端機中執行以下指令來刪除這些檔案:

rm src/Counter.sol
rm script/Counter.s.sol

您還需要設定 foundry.toml 請在專案資料夾的根目錄中建立一個檔案,用以包含 Solidity 編譯器的關鍵設定,以及我們即將使用的 import 語句的重新映射。以下是您的 foundry.toml 檔案應如下所示:

[個人檔案.預設]
src = "src"
out = "out"
= ["lib"]
優化器 = true
optimizer_runs = 200

重新映射 = [
'@chainlink/contracts-ccip/=node_modules/@chainlink/contracts-ccip/',
'@chainlink/contracts/=node_modules/@chainlink/contracts/',
]

fs_permissions = [{ 存取權限 = "讀寫", 路徑 = "./" }]

在此檔案中,我們新增了 優化器 設定,以優化我們的智慧合約以便部署。該 fs_permissions 此設定項可讓 Foundry 讀取及寫入專案目錄中的檔案。該 重新映射 這些項目是本指南中將要使用的 Chainlink 合約套件的路徑。接下來我們將安裝這些套件。

安裝依賴項

在本指南中,我們將使用兩個 Chainlink 合約套件: @chainlink/contracts-ccip 以及 @chainlink/contracts. 第一個套件包含我們將與之互動的核心 CCIP 合約,以及我們即將部署的 CCIP 代幣池合約。第二個套件則包含量身訂製的 ERC20 符合 Chainlink 跨鏈轉帳要求的合約。

我們還將安裝 @layerzerolabs/hyperliquid-composer 套件,該套件將用於提高我們在 HyperEVM 上進行交易的 Gas 限制。HyperEVM 具有一個 多區塊架構 該系統由兩類區塊組成:較小區塊的 gas 限制為 200 萬 gas 單位,較大區塊的 gas 限制則為 3,000 萬 gas 單位。較小區塊的區塊時間為 1 秒,而較大區塊的區塊時間為 1 分鐘。預設情況下,HyperEVM 上的帳戶僅能發送符合較小區塊 gas 限制的交易。此套件將使我們的帳戶能夠發送具有更高 gas 限制的交易,以適應較大區塊的容量。

要安裝這些套件,請使用您偏好的套件管理工具輸入以下指令:

npm install @chainlink/contracts-ccip @chainlink/contracts @layerzerolabs/hyperliquid-composer

太好了!您已成功安裝本指南中將使用的依賴項。接下來,我們將討論需要設定在我們的 .env 檔案。

環境變數

Quicknode 端點

首先,我們需要取得 HyperEVM 和 BSC 的適當 RPC 端點。您可以從以下位置取得這些資訊: Quicknode. 只需註冊免費試用,建立一個新的多鏈端點,並複製各條鏈的 HTTPS 網址。將對應的網址貼上至 HYPEREVM_RPC 以及 BSC_RPC 您在其中的變數 .env 檔案。

Etherscan API

接著,請前往您的個人檔案頁面 Etherscan 然後切換至「API 金鑰」分頁。若您尚未擁有帳戶,請建立一個 這裡. 在此處,您將建立一個 API 金鑰,該金鑰將協助您在鏈上驗證您的智慧合約。請複製該 API 金鑰,並將其貼上至 ETHERSCAN_API_KEY 您在其中的變數 .env 檔案。

Etherscan API v2
Etherscan 已將其 API 升級至 v2 版本。當您在 Etherscan 上建立 API 金鑰時,該金鑰亦可適用於 Etherscan 所支援的多條鏈,包括 HyperEVM 和 BSC。因此,您無需為每條鏈分別建立獨立的 API 金鑰。

私鑰

最後,請開啟您的 MetaMask,並複製其中一個帳戶的私鑰。若想了解如何取得您的私鑰,請參閱這篇簡短的 指南. 將此私鑰貼上至 PRIVATE_KEY 您在其中的變數 .env 檔案。

至此,您中的所有環境變數 .env 該檔案現在應該已填入資料。此設定流程的最後一步,是將適當的網路新增至我們的 MetaMask 錢包中。

將網路新增至 MetaMask

我們即將將 HyperEVM 主網和 Binance Smart Chain 主網加入我們的 MetaMask 錢包中。加入這些網路的最簡單方法是前往 hyperevmscan.io 以及 bscscan.com 然後點擊 新增 頁面左下角的按鈕。這將把這些網路新增至您的 MetaMask 錢包:

恭喜!您已成功為本指南設定好開發環境。下一步,我們將把 HyperCore 中的 HIP-1 資產橋接至 HyperEVM。

從 HyperCore 銜接至 HyperEVM

您現在將把一項 HIP-1 資產從 HyperCore 橋接至 HyperEVM。此過程涉及將 HIP-1 資產轉換為其對應的 HyperEVM 代幣形式。在本指南中,我們將使用 Hyperliquid 的原生生態系統代幣:HYPE。請前往Hyperliquid 交易介面,並使用MetaMask登入以開始操作。

如果您目前尚未持有 HYPE 代幣,您可以透過將 USDC 從 Arbitrum 主網存入 Hyperliquid,然後在交易介面的現貨市場將其兌換為 HYPE 來取得:

Hyperliquid 交易介面

提醒
本指南中,我們使用的是各條鏈的主網。這是因為在撰寫本文時,Chainlink CCIP 尚未在 HyperEVM 測試網開放使用。請謹慎操作,並僅使用您能承受損失的資金。

一旦您持有一定數量的 HYPE,即可將其橋接至 HyperEVM。操作時,請點擊頁面底部(圖表下方)的「轉入/轉出 EVM」按鈕。只需輸入您要橋接的 HYPE 數量,然後點擊「確認」即可。

將 HYPE 與 HyperEVM 串聯起來

將 HYPE 與 HyperEVM 串聯起來

太棒了!您已成功將 HYPE 從 HyperCore 橋接至 HyperEVM。現在,您應該可以在 MetaMask 的 HyperEVM 網路中查看您的 HYPE 餘額。接下來,我們將著手為 HYPE 建立一個符合 Chainlink 跨鏈轉帳要求的封裝合約。

為 HYPE 建立封裝合約

為了透過 Chainlink CCIP 在 HyperEVM 與 BSC 之間進行 HYPE 的跨鏈轉移,我們需要建立一個符合 Chainlink 跨鏈轉移要求的包裝合約。這涉及建立一個新的 ERC20 代幣合約,用以包裝 HyperEVM 上的現有 HYPE 資產,並在 BSC 上建立一個對應的 ERC20 代幣合約。

我們將建立一個 Quicknode 炒作風潮 符號為 的代幣 qWHYPE. 輸入以下指令,在 src 專案目錄中的資料夾,並將以下程式碼貼入其中。

touch src/qWHYPE.sol

了解封裝合約

讓我們來分析一下 qWHYPE.sol 合約。該合約導入了 BurnMintERC20 來自該的合約 @chainlink/contracts 該套件提供了鑄造和銷毀代幣所需的必要功能。當使用者將 HYPE 存入合約時,合約會向其地址鑄造等值的 qWHYPE 代幣。反之,當使用者提取 qWHYPE 代幣時,合約會銷毀這些代幣,並將相應數量的 HYPE 轉回使用者的地址。

這份特定合約將部署於 HyperEVM 網路。在 BSC 上,我們將部署基礎版 BurnMintERC20 直接部署該合約,因為它不需要任何額外功能。我們將在下一節中透過腳本部署這兩份合約。

撰寫鑄字腳本

我們將編寫幾個 Foundry 腳本,用來部署智慧合約並與其互動。本節將分為幾個部分,詳細介紹每個腳本。我們將依以下順序建立並執行這些腳本:

腳本名稱說明
DeployTokens.s.sol將 qWHYPE 合約部署至 HyperEVM 及其基礎鏈上 BurnMintERC20 BSC 上的合約
DeployPools.s.sol在 HyperEVM 和 BSC 上部署 CCIP 代幣池合約
SetupAdmin.s.sol針對每條鏈的 CCIP 合約進行註冊並設定管理員角色
ConfigurePools.s.sol設定我們的 CCIP 代幣池,以便彼此之間進行跨鏈轉帳
DepositAndTransferTokens.s.sol在 qWHYPE 合約中存入少量 HYPE,以鑄造 qWHYPE 代幣,然後執行跨鏈轉帳至 BSC
TransferTokens.s.sol執行 qWHYPE 代幣的跨鏈轉帳,無論是從哪個方向進行皆可

先決條件

在編寫腳本之前,我們需要一種方法來追蹤已部署的合約地址,並建立一個檔案來儲存腳本中會反覆使用的常用常數。

執行以下指令以建立相應的檔案:

touch script/Constants.s.sol
mkdir -p script/output
touch script/output/deployments.json

我們將使用 deployments.json 用於追蹤各鏈上已部署合約地址的檔案。

以下是 Constants.s.sol 檔案應如下所示:

點擊展開程式碼
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import {Script} from "forge-std/Script.sol";

contract Constants is Script {

struct CCIPConstants {
uint64 chainSelector;
address router;
address rmnProxy;
address tokenAdminRegistry;
address registryModuleOwnerCustom;
string nativeCurrencySymbol;
}

function getCCIPConstants(uint256 chainId) public pure returns (CCIPConstants memory) {
if(chainId == 999) {
return CCIPConstants({
chainSelector: 2442541497099098535,
router: 0x13b3332b66389B1467CA6eBd6fa79775CCeF65ec,
rmnProxy: 0x07f15e9813FBd007d38CF534133C0838f449ecFA,
tokenAdminRegistry: 0xcE44363496ABc3a9e53B3F404a740F992D977bDF,
registryModuleOwnerCustom: 0xbAb3aBB5F29275065F2814F1f4B10Ffc1284fFEf,
nativeCurrencySymbol: "HYPE"
});
} else if (chainId == 56) {
return CCIPConstants({
chainSelector: 11344663589394136015,
router: 0x34B03Cb9086d7D758AC55af71584F81A598759FE,
rmnProxy: 0x9e09697842194f77d315E0907F1Bda77922e8f84,
tokenAdminRegistry: 0x736Fd8660c443547a85e4Eaf70A49C1b7Bb008fc,
registryModuleOwnerCustom: 0x47Db76c9c97F4bcFd54D8872FDb848Cab696092d,
nativeCurrencySymbol: "BNB"
});
}
revert("Chain not supported");
}
}

腳本選單

此腳本將部署 qWHYPE HyperEVM 上的合約及其基礎 BurnMintERC20 BSC 上的合約。在 劇本 您專案目錄中名為 DeployTokens.s.sol 並將以下程式碼貼入其中。

點擊展開程式碼

建立檔案:

touch script/DeployTokens.s.sol

請將以下程式碼貼到檔案中:

// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import {Script, console} from "forge-std/Script.sol";
import {qWHYPE} from "../src/qWHYPE.sol";
import {BurnMintERC20} from "@chainlink/contracts/src/v0.8/shared/token/ERC20/BurnMintERC20.sol";

contract DeployTokens is Script {
string internal constant OUTPUT_PATH = "script/output/deployments.json";

/// forge script script/DeployTokens.s.sol:DeployTokens
function run() external {
// Load env vars
bytes memory hyperevm = bytes(vm.envString("HYPEREVM_RPC"));
bytes memory bsc = bytes(vm.envString("BSC_RPC"));
uint256 pk = vm.envUint("PRIVATE_KEY");

// Check if env vars are set
require(hyperevm.length != 0, "HYPEREVM_RPC not set");
require(bsc.length != 0, "BSC_RPC not set");

// print deployer address
address deployer = vm.addr(pk);
console.log("Deployer address:", deployer);

// Deploy on both chains
address hyperAddr = deployOn(hyperevm, deployer, pk);
address bscAddr = deployOn(bsc, deployer, pk);

// Write deployed addresses to JSON file
string memory obj = vm.serializeString("deployments", "qWHYPE_hyperevm", vm.toString(hyperAddr));
obj = vm.serializeString("deployments", "qWHYPE_bsc", vm.toString(bscAddr));
vm.writeJson(obj, OUTPUT_PATH);
}

function deployOn(bytes memory rpc, address deployer, uint256 pk) internal returns (address) {
vm.selectFork(vm.createFork(string(rpc)));
vm.startBroadcast(pk);
string memory chainName = getChainName(block.chainid);
address tokenAddr = address(block.chainid == 999 ? new qWHYPE() : new BurnMintERC20("Quicknode Wrapped HYPE", "qWHYPE", 18, 0, 0));
console.log("\nDeployed qWHYPE to:", tokenAddr, "on", chainName);
BurnMintERC20(tokenAddr).grantMintAndBurnRoles(deployer);
console.log("Granted minter and burner roles on", chainName, "qWHYPE to:", deployer);
vm.stopBroadcast();
return tokenAddr;
}

function getChainName(uint256 chainId) internal pure returns (string memory) {
if (chainId == 56) return "\x1b[36mBSC Mainnet\x1b[0m";
else if (chainId == 999) return "\x1b[32mHyperEVM Mainnet\x1b[0m";
else revert("Unsupported chain ID");
}
}

了解 DeployTokens 腳本

在此腳本中,我們首先載入 RPC URL 和私密金鑰的環境變數。接著,我們定義一個 deployOn 一個以 RPC URL、部署者地址及私鑰作為參數的函式。此函式會建立指定區塊鏈的分叉,使用提供的私鑰開始廣播交易,並部署 qWHYPE 合約(在 HyperEVM 上)或基礎合約 BurnMintERC20 合約(在 BSC 上)。部署完成後,該合約會授予部署者地址在已部署的代幣合約上進行鑄造與銷毀的權限。

執行腳本

既然我們已經寫好了所有必要的腳本,現在就可以依序執行它們,以部署和配置我們的 CCIP 代幣池,並執行 qWHYPE 代幣的跨鏈轉帳。

先前我們曾討論過 Hyperliquid 的多區塊架構,其中較小的區塊最多可使用 2M gas,而較大的區塊則最多可使用 30M gas。我們的合約部署交易肯定會超過 2M gas 的限制,因此我們需要先啟用帳戶以使用較大的區塊。要執行此操作,請在終端機中執行以下指令:

source .env
npx @layerzerolabs/hyperliquid-composer set-block --size big --network mainnet --private-key $PRIVATE_KEY
資訊

我們建議不要直接在命令列中傳入您的私密金鑰,因為它可能會被儲存於您的殼層歷史紀錄中。請務必使用環境變數或安全的方法來處理敏感資訊!


警告

如果您的錢包尚未在 HyperCore 上註冊,此指令可能會因以下原因而失敗: 該使用者或 API 錢包不存在。 請確保您已在 Hyperliquid 上進行過存款或交易,以註冊您的錢包。如果您已按照 從 HyperCore 銜接至 HyperEVM 沒錯,您的錢包已經註冊完成了!

太好了!我們的帳戶現在可以使用更大的區塊了。接下來,我們將使用 DeployTokens.s.sol 腳本:

forge script script/DeployTokens.s.sol:DeployTokens --broadcast --verify --verifier etherscan

此指令將把我們的代幣部署至 HyperEVM 和 BSC 兩個網路。您將在終端機中看到部署進度,待交易確認後,也會顯示交易哈希值。該 --廣播 此標誌表示我們希望將交易傳送至網路,而 --驗證 以及 --驗證器 Etherscan 部署完成後,flags 會自動在 hyperevmscan.io 和 bscscan.com 上驗證我們的合約。您還會發現您的 deployments.json 檔案中已填入已部署的合約地址。您的終端機輸出應類似如下:

部署輸出

接下來,我們將使用 DeployPools.s.sol 腳本:

forge script script/DeployPools.s.sol:DeployPools --broadcast --verify --verifier etherscan

此指令將把我們的代幣池部署至 HyperEVM 和 BSC 兩個網路。與前一步驟類似,您將在終端機中看到部署進度,並在交易確認後看到交易哈希值。該 deployments.json 檔案將更新為已部署的叢集位址。您的終端機輸出應類似如下:

叢集部署輸出

接下來,我們將使用 SetupAdmin.s.sol 使用 ConfigurePools.s.sol 腳本。我們可以透過以下指令依序執行這兩個腳本:

forge script script/SetupAdmin.s.sol:SetupAdmin --broadcast
forge script script/ConfigurePools.s.sol:ConfigurePools --broadcast

與前一步驟相同,一旦交易獲得確認,您將會看到類似的終端輸出,其中包含交易哈希值。

我們的首次跨鏈轉帳

最後,我們將使用 DepositAndTransferTokens.s.sol 腳本:

forge script script/DepositAndTransferTokens.s.sol:DepositAndTransferTokens --broadcast

此指令將存入 HYPE 以在 HyperEVM 上鑄造 qWHYPE,隨後將 qWHYPE 代幣轉移至 BSC。交易確認後,您將在終端機中看到轉帳進度及交易哈希值。您還會看到該轉帳的 CCIP 訊息 ID,可藉此在Chainlink CCIP Explorer 上追蹤轉帳狀態。您的終端機將輸出如下所示的訊息 ID:

傳輸輸出 顯示 CCIP 訊息 ID 的終端機輸出

讓我們來驗證一下這個 qWHYPE 代幣已發送至 BSC 網路。請開啟您的 MetaMask 錢包,切換至 BSC 網路,並匯入該 qWHYPE 使用您在 deployments.json 包含該金鑰的檔案 qWHYPE_bsc. 若您需要有關匯入代幣的協助,請參閱 MetaMask 的指南 這裡. 您的錢包中應顯示 0.01 qWHYPE 代幣的餘額,這表示跨鏈轉帳已成功!


MetaMask 餘額

向任何方向傳輸

TransferTokens.s.sol 此腳本可用於在 HyperEVM 與 BSC 之間雙向轉移 qWHYPE 代幣。您可以透過傳入以下任一參數來指定轉移方向: to-bscto-hyperevm 作為執行腳本時的參數。例如,若要將 qWHYPE 代幣從 BSC 轉移至 HyperEVM,請執行以下指令:

forge script script/TransferTokens.s.sol:TransferTokens --broadcast --sig 'run(string)' 'to-hyperevm'

輸出結果將與我們第一次的跨鏈轉帳類似,顯示交易哈希值和 CCIP 訊息 ID。將該訊息 ID 貼入Chainlink CCIP 瀏覽器後,現在將顯示反向的轉帳紀錄:

CCIP Explorer 反向

結論

恭喜!您已成功學會如何使用 Chainlink CCIP 在 Hyperliquid 上進行代幣跨鏈轉移。您已部署了自己的 ERC-20 代幣、設定了 CCIP 代幣池,並在 HyperEVM 與 BSC 之間完成了 qWHYPE 代幣的跨鏈轉移。

下一步

既然您已經擁有了一個可運作的跨鏈橋,現在可以進一步優化並客製化您的設定。以下提供一些建議:


  • Hyperliquid Bridge UI:利用 React 或 Vue.js 等框架,為您的橋接器建置一個使用者友善的介面。這樣一來,使用者便能輕鬆與您的橋接器互動,無需使用命令列工具。
  • 速率限制: 請在您的代幣池中實施速率限制,以防止濫用並確保公平使用。您可以在 ConfigurePools.s.sol 腳本。
  • 實作更多鏈:擴展您的橋接方案,以支援 Chainlink CCIP 所支援的其他鏈。您可以依照本指南中所述的相同步驟,在其他鏈上部署並配置代幣池。請在CCIP 目錄中查看通道及受支援的鏈。
  • 封裝其他 HIP-1 資產:您可以依照與處理 HYPE 時類似的流程,在 Hyperliquid 上為其他 HIP-1 資產建立並部署額外的封裝代幣。唯一的差異在於,每項資產都需要建立一個對應的 ERC-20 封裝合約。此舉將使使用者能夠在 HyperEVM 與其他區塊鏈之間橋接更廣泛的資產。

更多資源


如果您遇到困難或有任何疑問,歡迎在我們的Discord 頻道中提出。請追蹤我們的X帳號 (@Quicknode) 或Telegram 公告頻道,以掌握最新動態。

我們 ❤️ 您的回饋!

如果您對這份文件有任何意見或疑問,請告訴我們。我們非常樂意聽取您的意見!

分享這份指南