פיתוח Omnichain Token (OFT) עם LayerZero
בפרקטיקה שלנו, הגישה הסטנדרטית לטוקנים מרובי-רשתות היא מודל wrap/bridge. הטוקן המקורי על Ethereum, עם גרסה עטופה על כל רשת אחרת דרך גשר. בעיה: הנזילות מפוצלת, ההיצע הקנוני לא ברור, המשתמש מחזיק ב-'USDC-Polygon' נפרד מ-'USDC-Arbitrum', וסיכוני הגשר מתרבים עם מספר הרשתות. זה מוביל לבלבול ולפגיעות מוגברת: אם חוזה הגשר נפרץ, כל ה-TVL הנעול נמצא בסיכון.
OFT (Omnichain Fungible Token) מ-LayerZero פותר זאת אחרת: חוזה אחד על כל רשת, היצע מאוחד, העברות בין רשתות פועלות דרך burn-and-mint ללא עטיפה. הטוקן על Arbitrum הוא אותו טוקן, לא עותק עטוף. עם ניסיון של 5+ שנים בשוק, יישמנו 30+ פרויקטים כאלה עבור פרוטוקולי DeFi, שווקי NFT ומשחקים.
כיצד OFT שונה ממודל Wrap/Bridge
| מאפיין | OFT (burn-and-mint) | מודל Wrap/Bridge |
|---|---|---|
| נזילות | מאוחדת בכל הרשתות | מפוצלת לפי רשת |
| סיכון פריצה | רק שכבת ההודעות של LayerZero (מבוזרת) | חוזה הגשר — נקודת כשל יחידה |
| חוויית משתמש | כתובת טוקן אחת, יתרה עקבית | כתובות שונות לרשתות שונות |
| מורכבות פריסה | N חוזים, חיבור | חוזה 1 + נתב גשר |
| עלויות גז | נמוכות ב-30% (תלוי בתצורת DVN) | גבוהות (גשר + עטיפה) |
OFT מפחית סיכונים פי 10, ומבטל את נקודת הכשל היחידה של גשר.
כיצד פועל מנגנון Burn-and-Mint
Transfer: Arbitrum → Optimism
1. Пользователь вызывает oft.send() на Arbitrum
2. OFT контракт сжигает X токенов на Arbitrum (уменьшает supply)
3. LayerZero relayer передаёт сообщение на Optimism
4. OFT контракт на Optimism минтит X токенов (увеличивает supply)
5. Суммарный supply across chains не изменилсяב-OFT, אין חוזה גשר מרכזי עם נכסים נעולים. אין 'TVL בגשר' שניתן לפרוץ. רק שכבת ההודעות של LayerZero יכולה להיות מותקפת — זה סיכון נפרד, לא פשרה של 'הכול באחד'.
כיצד ליישם חוזה OFT ב-Solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import { OFT } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oft/OFT.sol";
contract MyOFT is OFT {
constructor(
string memory _name,
string memory _symbol,
address _lzEndpoint, // LayerZero endpoint для этой цепи
address _delegate // owner/admin
) OFT(_name, _symbol, _lzEndpoint, _delegate) {}
// Минт только на home chain (обычно)
function mint(address to, uint256 amount) external onlyOwner {
_mint(to, amount);
}
}פרוס את אותו חוזה על כל רשת יעד. ההבדל היחיד הוא Transfer: Arbitrum → Optimism 1. Пользователь вызывает oft.send() на Arbitrum 2. OFT контракт сжигает X токенов на Arbitrum (уменьшает supply) 3. LayerZero relayer передаёт сообщение на Optimism 4. OFT контракт на Optimism минтит X токенов (увеличивает supply) 5. Суммарный supply across chains не изменился — כתובת ה-endpoint של LayerZero ספציפית לכל רשת.
הגדרת עמיתים (Wire-up)
לאחר פריסה על כל הרשתות, חבר את החוזים זה לזה. כל OFT חייב לדעת את הכתובות של העמיתים שלו.
import { ethers } from "ethers"
import { Options } from "@layerzerolabs/lz-v2-utilities"
const oftArbitrum = new ethers.Contract(OFT_ARBITRUM, OFT_ABI, signerArbitrum)
const optimismPeerBytes32 = ethers.zeroPadValue(OFT_OPTIMISM, 32)
await oftArbitrum.setPeer(LZ_EIDS.optimism, optimismPeerBytes32)
const oftOptimism = new ethers.Contract(OFT_OPTIMISM, OFT_ABI, signerOptimism)
await oftOptimism.setPeer(LZ_EIDS.arbitrum, ethers.zeroPadValue(OFT_ARBITRUM, 32))זה לא אוטומטי — עליך לקרוא ל-// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import { OFT } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oft/OFT.sol"; contract MyOFT is OFT { constructor( string memory _name, string memory _symbol, address _lzEndpoint, // LayerZero endpoint для этой цепи address _delegate // owner/admin ) OFT(_name, _symbol, _lzEndpoint, _delegate) {} // Минт только на home chain (обычно) function mint(address to, uint256 amount) external onlyOwner { _mint(to, amount); } } עבור כל זוג רשתות. עבור N רשתות: N*(N-1) קריאות.
שליחת טוקנים בין רשתות
const oft = new ethers.Contract(OFT_ARBITRUM, OFT_ABI, signer)
const sendParam = {
dstEid: LZ_EIDS.optimism,
to: ethers.zeroPadValue(recipientAddress, 32),
amountLD: ethers.parseEther("100"),
minAmountLD: ethers.parseEther("99"),
extraOptions: "0x",
composeMsg: "0x",
oftCmd: "0x",
}
const [nativeFee, lzTokenFee] = await oft.quoteSend(sendParam, false)
const tx = await oft.send(sendParam, { nativeFee, lzTokenFee: 0n }, signer.address, { value: nativeFee })
const receipt = await tx.wait()
// Токены на Arbitrum сожжены
// Через ~15-60 секунд появятся на Optimism עשרוניות: מלכודת פוטנציאלית
לרשתות שונות עשויות להיות עשרוניות מקוריות שונות. Solana משתמשת ב-6 עשרוניות (lamports), EVM משתמשת ב-18. OFT v2 פותר זאת עם עשרוניות משותפות: כל הרשתות עובדות עם המספר הקטן יותר (בדרך כלל 6), וממירות בעת שליחה. בעת שליחה מ-EVM (18 עשרוניות), ספרות נוספות אחרי הנקודה העשרונית נחתכות — זה נקרא dust. חשוב להראות למשתמש את הסכום שהתקבל בפועל _lzEndpoint, לא את הקלט המקורי.
מה זה OFTAdapter ומתי יש צורך בו?
אם טוקן כבר קיים על Ethereum והחוזה שלו לא ניתן לשינוי (אין פונקציות mint/burn בהקשר הנדרש) — אנו משתמשים ב-OFTAdapter. על Ethereum: Lock&Release (טוקנים נעולים במתאם). על רשתות אחרות: OFT עם burn&mint. פשרה: טוקנים נעולים על Ethereum מחזירים סיכון גשר. עבור פרויקטים קריטיים, אנו משתמשים ב-multisig ובמכסה על הסכום הנעול.
כיצד להגדיר DVN לאבטחה מקסימלית
LayerZero V2 מאפשר להגדיר DVN (Decentralized Verifier Network) — מי מאמת הודעות בין-רשתיות. עבור OFT בייצור עם TVL גדול, אנו מגדירים לפחות שני DVN עצמאיים (LayerZero + Google Cloud DVN או Polyhedra). פשרה: יותר DVN = עמלות גבוהות יותר, אבל אבטחה טובה יותר. אנו מבטיחים תצורת DVN נכונה עבור התקציב שלך.
ניטור וטיפול בהודעות שנכשלו
הודעה יכולה להיתקע אם רשת היעד לא זמינה זמנית או אם הגז לא מספיק. LayerZero V2 מאחסן הודעות שנכשלו; ניתן לנסות אותן שוב דרך API של LayerZero Scan. עבור UX: הצג למשתמש את סטטוס העסקה בין-הרשתית דרך polling מותאם או ווידג'ט ניתן להטמעה.
תהליך העבודה
| שלב | משך | תיאור |
|---|---|---|
| הכנה | 3-5 ימים | רשימת רשתות, טוקנומיקה, דרישות אבטחה |
| פיתוח | 1-2 שבועות | חוזי OFT, בדיקות Foundry, סקריפטי פריסה, חיבור |
| בדיקות | שבוע 1 | פריסת Testnet, בדיקות פונקציונליות, בדיקת עשרוניות, בדיקת עומס |
| פריסת Mainnet | 2-3 ימים | אימות בסיירי בלוקים, בדיקת עסקה בסכום קטן |
OFT בסיסי עבור 3-5 רשתות לוקח 3-4 שבועות. עם OFTAdapter לטוקן קיים, DVN מותאם אישית ולוח ניטור — 5-7 שבועות.
מה כלול
- ביקורת טוקנומיקה ובחירת רשתות יעד
- כתיבה ובדיקת חוזים חכמים של OFT / OFTAdapter
- יצירת סקריפטי פריסה לכל הרשתות (Hardhat/Foundry)
- הגדרת DVN ואפשרויות אכיפה
- אימות חוזה בסייר של כל רשת
- אינטגרציית Frontend (ethers.js / viem)
- תיעוד אינטגרציה
- חודש תמיכה לאחר פריסה
רוצה טוקן דומה לפרויקט שלך? צור קשר לייעוץ. קבל הערכת פרויקט חינם ומפת דרכים מפורטת. ראינו הפחתה של 40% בעמלות בהשוואה לגשר מסורתי ב-testnet.
צור קשר להערכת פרויקט. קבל ייעוץ על ארכיטקטורת OFT למשימה שלך. נעריך את הפרויקט שלך בחינם ונציע את הפתרון האופטימלי.







