Інтеграція з The Sandbox SDK
The Sandbox — метавселенна на базі Polygon, де земельні ділянки (LAND), ігрові ассети (ASSET) та персонажі (Avatar) є NFT. SDK (VoxEdit + Game Maker) дозволяє створювати ігри та інтерактивні досвід без глибоких знань блокчейну. Для розробників — додатковий рівень через Sandbox Game SDK та Web3 інтеграцію.
Структура The Sandbox екосистеми
| Інструмент | Призначення | Технологія |
|---|---|---|
| VoxEdit | Створення 3D воксельних ассетів | Десктопне програму |
| Game Maker | Розробка ігор без коду | Visual scripting |
| Sandbox Game SDK | Програмування ігрової логіки | TypeScript |
| Marketplace API | Торгівля ASSET NFT | REST API |
| LAND API | Дані про земельні ділянки | GraphQL (The Graph) |
Web3 інтеграція через Sandbox API
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) };
}
Game Maker SDK — програмна логіка
The Sandbox Game Maker підтримує TypeScript для кастомної ігрової логіки:
// Приклад ігрового скрипту в Game Maker SDK
import { engine, Entity, web3 } from '@sandbox/game-sdk';
// Івент при входу гравця у зону
engine.onPlayerEnter('exclusive_zone', async (player) => {
const walletAddress = await web3.getPlayerWallet(player.id);
// Перевіряємо наявність LAND у потрібному квадраті
const hasLand = await checkLandOwnership(walletAddress);
if (hasLand) {
player.showMessage('Добро пожаловать, владелец LAND!');
player.grantAccess('vip_area');
} else {
player.showMessage('Для доступу необхідний LAND NFT');
player.redirectTo('marketplace');
}
});
// Покупка ASSET всередину гри
engine.onPlayerInteract('shop_npc', async (player, npc) => {
const items = await fetchAvailableItems();
npc.openShop(player, items);
});
Marketplace API інтеграція
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) {
// Вимагає підпису транзакції через MetaMask
const provider = new ethers.BrowserProvider(window.ethereum);
const signer = await provider.getSigner();
// Approve SAND токен для контракту маркетплейсу
const sandContract = new ethers.Contract(SAND_TOKEN, ERC20_ABI, signer);
await sandContract.approve(MARKETPLACE_CONTRACT, ethers.MaxUint256);
// Створюємо листинг через Exchange контракт
const marketplace = new ethers.Contract(MARKETPLACE_CONTRACT, MARKETPLACE_ABI, signer);
await marketplace.createListing(assetId, ethers.parseEther(priceInSand));
}
LAND координати та метадані
LAND в Sandbox має координати (x, y) на карті. Через The Graph можна отримати дані:
query GetLandDetails($tokenId: String!) {
land(id: $tokenId) {
id
x
y
owner {
address
}
estate {
id
}
tokenURI
}
}
Розробка інтеграції з The Sandbox (перевірка власності, ігрова логіка, маркетплейс): 3–5 тижнів залежно від складності ігрового досвіду.







