בניית חוויות משחק עם The Sandbox SDK
שחקן נכנס לאזור תוכן בלעדי, אבל המשחק לא בודק אם הוא הבעלים של LAND — אכזבה מיידית למשתמש. שילוב The Sandbox SDK פותר את זה בכמה שורות קוד. במקום לכתוב חוזים חכמים מותאמים אישית ב-Solidity, להקים אינטגרציה עם Polygon וליצור שוק נפרד, אתה משתמש בכלי SDK מוכנים. זה מפחית את עלויות הפיתוח בעד 70% ומקצר את לוחות הזמנים מחודשים לשבועות. אנחנו עושים את זה במפתח אחד, וחוסכים לך זמן.
פיתוח מותאם אישית של אותן פונקציות ללא SDK היה לוקח 2–6 חודשים ודורש ביקורת אבטחה מלאה. החוזים המבוקרים של The Sandbox מכסים 90% מהתרחישים הטיפוסיים: בדיקת בעלות על LAND, רכישת ASSET, חסימת תוכן. בממוצע, אינטגרציה מבוססת SDK מאיצה את זמן היציאה לשוק פי 3 — מחצי שנה לשבועיים עבור פונקציונליות בסיסית.
עם ניסיון של למעלה מ-10 שנים ו-40+ פרויקטים מוצלחים, אנחנו מביאים מומחיות מוכחת לכל אינטגרציה.
אילו בעיות The Sandbox SDK פותר?
ה-SDK כולל את VoxEdit לנכסי ווקסל, את Game Maker לסקריפטינג ויזואלי, ואת TypeScript SDK ללוגיקה מותאמת אישית. בנוסף, זמינים REST API לשוק ו-GraphQL לנתוני LAND. בעיות מרכזיות שאנחנו פותרים עם ה-SDK:
- אימות בעלות על LAND בזמן אמת. אנחנו משתמשים ב-
ethers.jsכדי לקרוא לחוזי Polygon ולקבלethers.JsonRpcProvider. זה הבסיס לחסימת תוכן — רק בעלי NFT מקבלים גישה לאזורים בלעדיים. - אינטגרציה של שוק בתוך המשחק. דרך Marketplace API וחוזה Exchange, משתמשים יכולים לקנות ולמכור ASSET מבלי לעזוב את עולם המשחק. חתימה על עסקאות דרך MetaMask מוקמת תוך ימים.
- לוגיקת משחק מותאמת אישית ב-TypeScript. כניסה לאזור, אינטראקציה עם NPC, טיפול ברכישות — הכל כתוב בטכנולוגיה מוכרת בלי לצלול ל-Solidity.
טעויות נפוצות באינטגרציה עצמית: ABI שגוי, כתובות חוזה לא נכונות (לדוגמה, כתובת LAND על Polygon), התעלמות ממגבלות גז בקריאות אצווה, וטיפול חסר באירועים לעדכוני מצב. אנחנו נמנעים מהבעיות האלה באמצעות ניסיון ושימוש בספריות מאומתות.
תהליך האינטגרציה שלב אחר שלב
- ניתוח דרישות ותרחישי משחק: הגדרת מכניקות — בדיקת בעלות, רכישת נכסים, חסימת תוכן, אינטראקציה עם NPC.
- הגדרת ספק Web3: חיבור ל-Polygon דרך
viemאוnpm install @sandbox/game-sdk, התקנת SDKbalanceOf. - לוגיקת אימות נכסים: שימוש ב-Sandbox Game SDK כדי לקבל את הארנק של השחקן ולקרוא ל-
window.ethereumעל חוזי LAND ו-ASSET. - אינטגרציה עם Marketplace API: הגדרת רישום ורכישה של ASSET דרך חוזה Exchange עם חתימה על עסקאות דרך
import { ethers } from 'ethers'; // ABI для основных контрактов Sandbox const LAND_ABI = [ 'function ownerOf(uint256 tokenId) view returns (address)', 'function tokenOfOwnerByIndex(address owner, uint256 index) view returns (uint256)', 'function balanceOf(address owner) view returns (uint256)', ]; const ASSET_ABI = [ 'function balanceOf(address account, uint256 id) view returns (uint256)', 'function balanceOfBatch(address[] accounts, uint256[] ids) view returns (uint256[])', ]; // Polygon Mainnet адреса const LAND_CONTRACT = '0x50f5474724e0Ee42D9a4e711ccFB275809Fd6d4A'; const ASSET_CONTRACT = '0xa342f5D851E866E18ff98F351f2c6637f4478dB5'; async function getUserSandboxAssets(userAddress: string) { const provider = new ethers.JsonRpcProvider('https://polygon-rpc.com'); const landContract = new ethers.Contract(LAND_CONTRACT, LAND_ABI, provider); const assetContract = new ethers.Contract(ASSET_CONTRACT, ASSET_ABI, provider); // Получаем количество LAND токенов const landBalance = await landContract.balanceOf(userAddress); // Получаем все LAND tokenIds const landIds: bigint[] = []; for (let i = 0; i < Number(landBalance); i++) { const tokenId = await landContract.tokenOfOwnerByIndex(userAddress, i); landIds.push(tokenId); } return { landIds, landCount: Number(landBalance) }; }. - בדיקות וניפוי שגיאות: שימוש ב-Tenderly לסימולציית עסקאות, וב-Slither לניתוח סטטי. בדיקת טיפול בשגיאות (גז לא מספיק, ביטול עסקה).
- פריסה ותיעוד: פרסום חווית המשחק על מפת The Sandbox, מסירת מסמכי תחזוקה לצוות שלך.
השוואה: SDK מול פיתוח מותאם אישית
| היבט | ללא SDK | עם The Sandbox SDK |
|---|---|---|
| הטכנולוגיה הנדרשת | Solidity, Hardhat, ethers.js | TypeScript, Game Maker, VoxEdit |
| זמן ל-MVP | 3–6 חודשים | 2–5 שבועות |
| ביקורת אבטחה | חובה | לא נדרשת |
| גמישות | גבוהה | בינונית (מכסה 90% מהתרחישים) |
| עלות | גבוהה (ביקורת + פיתוח) | חיסכון של עד 70% |
ה-SDK מאיץ את הפיתוח פי 3 ומפחית את הסיכון לשגיאות — החוזים כבר מבוקרים. אם אתה צריך התאמה אישית מקסימלית, אנחנו משלבים SDK עם חוזים מותאמים אישית.
דוגמת קוד: בדיקת בעלות על LAND
קוד TypeScript עם ethers.js
import { ethers } from 'ethers';
// ABI для основных контрактов Sandbox
const LAND_ABI = [
'function ownerOf(uint256 tokenId) view returns (address)',
'function tokenOfOwnerByIndex(address owner, uint256 index) view returns (uint256)',
'function balanceOf(address owner) view returns (uint256)',
];
const ASSET_ABI = [
'function balanceOf(address account, uint256 id) view returns (uint256)',
'function balanceOfBatch(address[] accounts, uint256[] ids) view returns (uint256[])',
];
// Polygon Mainnet адреса
const LAND_CONTRACT = '0x50f5474724e0Ee42D9a4e711ccFB275809Fd6d4A';
const ASSET_CONTRACT = '0xa342f5D851E866E18ff98F351f2c6637f4478dB5';
async function getUserSandboxAssets(userAddress: string) {
const provider = new ethers.JsonRpcProvider('https://polygon-rpc.com');
const landContract = new ethers.Contract(LAND_CONTRACT, LAND_ABI, provider);
const assetContract = new ethers.Contract(ASSET_CONTRACT, ASSET_ABI, provider);
// Получаем количество LAND токенов
const landBalance = await landContract.balanceOf(userAddress);
// Получаем все LAND tokenIds
const landIds: bigint[] = [];
for (let i = 0; i < Number(landBalance); i++) {
const tokenId = await landContract.tokenOfOwnerByIndex(userAddress, i);
landIds.push(tokenId);
}
return { landIds, landCount: Number(landBalance) };
}הקוד הזה הוא הבסיס לחסימת תוכן. ל-LAND על מפת The Sandbox יש קואורדינטות (x, y) ברשת של 408×408. דרך The Graph אפשר לשלוף נתונים:
query GetLandDetails($tokenId: String!) { land(id: $tokenId) { id x y owner { address } estate { id } tokenURI } } אינטגרציה עם Marketplace API
מסחר בנכסים הוא תכונת מפתח במטאברס. דרך ה-API אפשר לרשום את ה-NFTs שלך, לקבל נתוני מחיר ולקנות ישירות. רישום דורש חתימה על עסקה ב-MetaMask וקריאה לחוזה Exchange.
const SANDBOX_API = 'https://api.sandbox.game';
async function getMarketplaceListing(assetId: string) {
const response = await fetch(`${SANDBOX_API}/v1/assets/${assetId}`);
return response.json();
}
async function getUserCreations(walletAddress: string) {
const response = await fetch(
`${SANDBOX_API}/v1/assets?creator=${walletAddress}&status=published`
);
return response.json();
}
// Листинг собственного ASSET на маркетплейсе
async function listAssetForSale(assetId: string, priceInSand: string) {
const provider = new ethers.BrowserProvider(window.ethereum);
const signer = await provider.getSigner();
const sandContract = new ethers.Contract(SAND_TOKEN, ERC20_ABI, signer);
await sandContract.approve(MARKETPLACE_CONTRACT, ethers.MaxUint256);
const marketplace = new ethers.Contract(MARKETPLACE_CONTRACT, MARKETPLACE_ABI, signer);
await marketplace.createListing(assetId, ethers.parseEther(priceInSand));
} מה כלול ולוחות זמנים
- פיתוח לוגיקת משחק מותאמת אישית באמצעות TypeScript SDK.
- הגדרת אימות בעלות על LAND ו-ASSET דרך Web3.
- אינטגרציה עם Marketplace API לקנייה ומכירה של NFT בתוך המשחק.
- יצירת נכסים ב-VoxEdit ופרסומם.
- תיעוד אינטגרציה והדרכת צוות.
- תמיכה לאחר השקה.
פרויקט טיפוסי לוקח 3 עד 5 שבועות. פונקציונליות בסיסית (בדיקת בעלות, לוגיקת משחק פשוטה) לוקחת 1–2 שבועות. העלות מחושבת באופן אישי לאחר שנדון ברעיון שלך. קבל הערכת עלות חינם — נגיב תוך 24 שעות. צור קשר כדי לדון בפרטים.
לצלילה עמוקה יותר ליכולות ה-SDK, עיין בתיעוד הרשמי ב-GitHub The Sandbox Game SDK.







