Интеграция с The Sandbox SDK

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Интеграция с The Sandbox SDK
Средняя
~1-2 недели
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1258
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1170
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    873
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1092
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    830

Интеграция с 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 недель в зависимости от сложности игрового опыта.