שימו לב: כאשר חוזה ריאינטרנטיות ב-Solidity רוקן את The DAO ממיליוני דולרים, התברר: המודל של מצב גלובלי משתנה בתוספת קריאות חיצוניות שרירותיות הוא בעיה ארכיטקטונית יסודית. Move פותר זאת אחרת: משאבים אינם מועתקים או מושמדים באופן מרומז, הם מועברים. מכאן שם השפה.
אם אתם מגיעים מרקע של Solidity, השבוע הראשון ב-Move יהיה כואב. לא כי זה קשה—אלא כי הרבה ממה ש-Solidity מאפשרת כברירת מחדל, Move אוסרת ברמת מערכת הטיפוסים. אנו עוזרים לכם לעשות את המעבר הזה עם מינימום הפסדים: אנו מראים מלכודות נפוצות ומספקים תבניות מוכנות למודל משאבים. במהלך השנים האחרונות, פיתחנו יותר מ-30 חוזים ב-Move ומשתמשים בוודאות פורמלית עבור מודולים קריטיים בכל פעם.
תכונות אבטחה של Move: מודל משאבים ומהדר
מערכת טיפוסים לינארית ומודל משאבים
ב-Solidity, טוקן הוא רשומה במיפוי: mapping(address => uint256) balances. שום דבר לא מונע כתיבת פונקציה שיוצרת טוקנים יש מאין או "שוכחת" לנכות יתרה. משאב ב-Move קיים במקום אחד בדיוק בכל רגע—זה מובטח על ידי מאמת ה-bytecode, לא על ידי מבקר. לפי תיעוד שפת Move, ספר שפת Move, התכונות copy, drop, store, key הן יכולות. אם לטיפוס חסרה drop, המהדר לא ייתן לפונקציה להסתיים ללא צריכת הערך. משאב שנשכח = שגיאת קומפילציה, לא אובדן כספים.
// Aptos Move: ресурс нельзя скопировать или потерять struct Coin<phantom CoinType> has store { value: u64, } וקטורי תקיפה שנסגרו ב-Move לעומת EVM
| וקטור תקיפה (EVM) | סטטוס ב-Move |
|---|---|
| ריאינטרנטיות | בלתי אפשרי: אין קריאות חיצוניות שרירותיות לחוזים לא ידועים |
| גלישת מספרים שלמים | בלתי אפשרי: חשבון נעצר על גלישה כברירת מחדל |
| אתחול פרוקסי לא תקין | קשה משמעותית: מודל האחסון שונה |
| בקרת גישה דרך msg.sender | הוחלף ב-// Aptos Move: ресурс нельзя скопировать или потерять struct Coin<phantom CoinType> has store { value: u64, } —לא ניתן לזיוף |
| Selfdestruct | אין אנלוג |
זה לא אומר שלחוזי Move אין נקודות תורפה. שגיאות לוגיות נשארות. אבל מחלקת התקיפות שצורכת 60-70% מביקורות EVM פשוט לא קיימת ב-Move.
בחירה בין Aptos ל-Sui
שתי הרשתות משתמשות ב-Move, אבל ארכיטקטורות האחסון שונות באופן קיצוני. הכנו השוואה כדי לעזור לכם לקבל החלטה.
Aptos: אחסון גלובלי ומודל ממוקד חשבון
ב-Aptos, משאבים מאוחסנים בחשבונות: signer. כדי לגשת למשאב של חשבון אחר, יש צורך בקריאה עם הערת move_to(account, resource): acquires. זה דומה לתבנית EVM borrow_global<T>(addr), אבל בטוח מבחינת טיפוסים.
// Aptos: читаем ресурс конкретного аккаунта
public fun get_balance(owner: address): u64 acquires CoinStore {
borrow_global<CoinStore>(owner).coin.value
}מקביליות ב-Aptos מיושמת דרך Block-STM—ביצוע אופטימי עם גלגול לאחור בקונפליקטים. זה עובד היטב אם עסקאות נוגעות בחשבונות שונים, וגרוע אם כולם כותבים למשאב אחד (למשל, מונה גלובלי).
Sui: מודל אובייקטים ומקביליות אמיתית
ב-Sui, הכל הוא אובייקט עם mapping(address => struct) ייחודי. עסקה מצהירה במפורש אילו אובייקטים היא משתמשת (בבעלות, משותפים, בלתי ניתנים לשינוי). המתזמן רואה את גרף התלות מראש—עסקאות עם אובייקטים שאינם חופפים מבוצעות במקביל ללא גלגולים אופטימיים לאחור.
// Sui: объект существует независимо от аккаунта
public struct NFT has key, store {
id: UID,
name: String,
// ...
}
public fun transfer_nft(nft: NFT, recipient: address, ctx: &mut TxContext) {
transfer::public_transfer(nft, recipient);
}עבור פרוטוקולי DeFi עם TPS גבוה, זה קריטי. אובייקטים משותפים פועלים כמו mutexes משותפים, מסדר עסקאות. חוזה Sui מעוצב היטב ממקסם את השימוש באובייקטים בבעלות.
השוואה בין Aptos ל-Sui
| פרמטר | Aptos | Sui |
|---|---|---|
| מודל אחסון | משאבים בחשבונות, גישה גלובלית | אובייקטים עם מזהה, בעלות מפורשת |
| מקביליות | Block-STM (אופטימי) | מודל אובייקטים (גרף מחושב מראש) |
| מורכבות טיפוסית | בינונית (ממוקד חשבון) | גבוהה (תלויות אובייקטים) |
| כלים | Aptos CLI, Move Framework | Sui CLI, Move Analyzer |
למה Move בטוח יותר מ-Solidity?
Move אוסרת מחלקות שלמות של נקודות תורפה ברמת השפה: ריאינטרנטיות, גלישת מספרים שלמים, העתקות מרומזות. זה מפחית את עומס הביקורת ואת עלויות הבאונטי. חיסכון של עד 30% בתקציב האבטחה מושג על ידי ביטול הצורך בניתוח ידני של וקטורים אלה.
מה כלול בפיתוח חוזי Move?
שרשרת כלים ותשתית
עבור Aptos, אנו משתמשים ב-Aptos CLI וב-Aptos Framework (ספריית התקן של Move). עבור Sui, אנו משתמשים ב-Sui CLI וב-Move Analyzer (תוסף LSP ל-VS Code). בדיקות נכתבות באמצעות Move Test Framework (// Aptos: читаем ресурс конкретного аккаунта public fun get_balance(owner: address): u64 acquires CoinStore { borrow_global<CoinStore>(owner).coin.value } , ObjectID) עם כיסוי דרך // Sui: объект существует независимо от аккаунта public struct NFT has key, store { id: UID, name: String, // ... } public fun transfer_nft(nft: NFT, recipient: address, ctx: &mut TxContext) { transfer::public_transfer(nft, recipient); } או #[test]. לבדיקות fork ב-Aptos, אנו משתמשים ב-Aptos Local Testnet דרך Docker. עבור Sui, מצב localnet של Sui CLI. בדיקות אינטגרציה עם פרוטוקולים אמיתיים (Thala, Cetus, Turbos) דורשות פריסה ל-testnet.
מלכודות טיפוסיות בחוזה Move הראשון שלכם
- **פרמטר טיפוס phantom**: פרמטר טיפוס שאינו בשימוש בשדות חייב להיות מסומן `phantom`, אחרת המהדר דורש את נוכחותו. - **אילוצי יכולות**: פונקציות גנריות חייבות לציין יכולות נדרשות (store, copy, drop)—אחרת הקומפילציה נכשלת. - **פליטת אירועים ב-Sui**: אירועים אינם מאוחסנים על השרשרת, כלומר אינכם יכולים להירשם לאירועים של חוזה אחר. הארכיטקטורה חייבת להיות שונה.שלבי פרויקט
- ניתוח—עיצוב מודל המשאבים, תיאור לוגיקת signer.
- פיתוח—כתיבת קוד מקור, בדיקות יחידה, בדיקות fuzz.
- ביקורת—וודאות פורמלית דרך Move Prover, סקירת קוד ידנית.
- פריסה—פריסה עם חתימות מרובות, ניהול יכולות שדרוג, תיעוד.
- תמיכה—חודש אחריות לאחר הפריסה.
הניסיון שלנו: יותר מ-50 פרויקטים מוצלחים על EVM ו-Move. קבלו ייעוץ—נעריך את הפרויקט שלכם ונציע ארכיטקטורת Move אופטימלית. דברו על הפרויקט שלכם עם מהנדס ה-Web3 שלנו.
הערכות זמן ותקציב
חוזה טוקן פשוט על Aptos (תקן נכס fungible) לוקח 3-5 ימים עם בדיקות. פרוטוקול הלוואות עם אורקלים למחירים ופירוקים לוקח 4-8 שבועות. גשר חוצה שרשרת עם בדיקות סופיות לוקח החל מחודשיים. העלות המדויקת נקבעת לאחר תדריך.
Move היא מערכת אקולוגית צעירה עם יתרונות טכניים רציניים. תשתית הפיתוח מפגרת אחרי EVM, והתיעוד לפעמים מתיישן מהר יותר ממה שהוא מתעדכן. אבל אם אתם צריכים פרוטוקול שבו מחלקת תקיפות הריאינטרנטיות מסולקת ברמת השפה—זו היא.
צרו קשר כדי לדון בפרויקט שלכם—נעריך את הארכיטקטורה ונציע את הפתרון האופטימלי.







