Интеграция с 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 (проверка владения, игровая логика, marketplace): 3–5 недель в зависимости от сложности игрового опыта.







