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

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

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

Decentraland — браузерная метавселенная на базе Ethereum, где land-участки (LAND) являются NFT. SDK 7 (текущая версия) даёт возможность создавать интерактивные сцены с 3D-объектами, игровой логикой и Web3-интеграцией.

Структура проекта Decentraland

npx @dcl/sdk-commands init my-scene --skip-install
cd my-scene && npm install

Структура:

my-scene/
├── src/
│   ├── index.ts     # точка входа сцены
│   └── systems/     # игровые системы
├── assets/          # 3D модели, текстуры
└── scene.json       # метаданные (координаты парцели, title)

Создание интерактивной сцены

import { engine, Entity, Transform, GltfContainer, 
         PointerEvents, InputAction, inputSystem } from '@dcl/sdk/ecs'
import { Vector3, Quaternion } from '@dcl/sdk/math'

export function main() {
  // Создаём интерактивный объект
  const nftDisplay = engine.addEntity()
  
  Transform.create(nftDisplay, {
    position: Vector3.create(8, 1, 8),
    scale: Vector3.create(1, 1, 1),
    rotation: Quaternion.fromEulerDegrees(0, 0, 0),
  })
  
  GltfContainer.create(nftDisplay, {
    src: 'assets/nft_frame.glb',
  })
  
  // Обработчик клика
  PointerEvents.create(nftDisplay, {
    pointerEvents: [{ eventType: PointerEventType.PET_DOWN,
                      info: { button: InputAction.IA_POINTER, hoverText: 'Inspect NFT' } }],
  })
  
  // Система обновления
  engine.addSystem(() => {
    if (inputSystem.isTriggered(InputAction.IA_POINTER, PointerEventType.PET_DOWN, nftDisplay)) {
      openNFTDetails()
    }
  })
}

Web3 интеграция

Decentraland SDK 7 поддерживает взаимодействие с кошельком пользователя через @dcl/sdk/ethereum-provider:

import { createEthereumProvider } from '@dcl/sdk/ethereum-provider'
import { ethers } from 'ethers'

async function checkNFTOwnership(tokenId: number): Promise<boolean> {
  const provider = createEthereumProvider()
  const ethProvider = new ethers.BrowserProvider(provider)
  const signer = await ethProvider.getSigner()
  const userAddress = await signer.getAddress()
  
  const nftContract = new ethers.Contract(NFT_CONTRACT_ADDRESS, ERC721_ABI, ethProvider)
  const owner = await nftContract.ownerOf(tokenId)
  
  return owner.toLowerCase() === userAddress.toLowerCase()
}

// Показываем эксклюзивный контент только владельцам NFT
async function unlockExclusiveArea() {
  const hasAccess = await checkNFTOwnership(MEMBERSHIP_TOKEN_ID)
  
  if (hasAccess) {
    showExclusiveContent()
  } else {
    showPurchasePrompt()
  }
}

Серверная логика через Scene Runtime

Для сложной логики (мультиплеер, игровые механики) используется Decentraland Scene Server на базе TypeScript:

// server/index.ts
import { WebSocketServer } from 'ws'

const wss = new WebSocketServer({ port: 8080 })
const players = new Map<string, PlayerState>()

wss.on('connection', (ws, req) => {
  const playerId = getPlayerIdFromRequest(req)
  
  ws.on('message', (data) => {
    const event = JSON.parse(data.toString())
    
    switch(event.type) {
      case 'MOVE':
        players.set(playerId, event.position)
        broadcastToAll({ type: 'PLAYER_MOVED', playerId, position: event.position })
        break
      case 'INTERACT':
        handleInteraction(playerId, event.objectId)
        break
    }
  })
})

Деплой сцены: npx @dcl/sdk-commands deploy — загружает контент на Decentraland Content Server. Приватные сцены деплоятся на своей инфраструктуре через catalyst node.

Разработка простой интерактивной Decentraland сцены с Web3 интеграцией: 3–5 недель. Сложная сцена с мультиплеером и игровыми механиками — 2–3 месяца.