Interactive Scenes in Decentraland: SDK Integration and Web3

Interactive Scenes in Decentraland: SDK Integration and Web3 A Decentraland scene loads in 20 seconds, interactivity lags, and the Web3 wallet throws an error on every click. If you've faced this, you know how quickly user engagement drops. We solve these problems — from asset optimization to dep

Blockchain Development Services

Frequently Asked Questions

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1441
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    998
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1267
  • image_logo-advance_0.webp
    B2B Advance company logo design
    713
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    1003

Interactive Scenes in Decentraland: SDK Integration and Web3

A Decentraland scene loads in 20 seconds, interactivity lags, and the Web3 wallet throws an error on every click. If you've faced this, you know how quickly user engagement drops. We solve these problems — from asset optimization to deployment. Decentraland is a browser-based metaverse on Ethereum where land parcels (LAND) are NFTs (see Wikipedia). Our track record: dozens of scenes with NFT logic, multiplayer, and server integration. Get an engineer consultation — contact us.

Problems We Solve

Slow Loading of 3D Assets

Unoptimized glb models and textures without LOD levels push load times to 30 seconds. We implement progressive loading, use Draco compression, and split the scene into chunks. Result: 5 seconds to full render — that's 6x better than unoptimized scenes. Compare: without compression 30 seconds, with Draco — 3x faster.

Unstable Web3 Authorization

When checking NFT ownership via createEthereumProvider, users often see "User rejected request" due to incorrect timeout. We configure retries with exponential backoff and handle MetaMask exceptions. We guarantee that 99% of transactions succeed on the first try — a 50% improvement over standard implementations.

Multiplayer Challenges

Synchronizing player states via WebSocket without a centralized server leads to desynchronization. We use the Decentraland Scene Server with room logic and a message queue — latency stays under 200 ms, 3x better than naive peer-to-peer approaches.

How We Do It

Stack: Decentraland SDK 7, TypeScript, ethers.js, WebSocket (ws), Tenderly for contract debugging. Server side is written in Node.js with Docker containerization.

Key case — an NFT display scene that shows exclusive content only to token owners. Here's a minimal implementation:

import { engine, Entity, Transform, GltfContainer, PointerEvents, InputAction, inputSystem } from '@dcl/sdk/ecs' import { Vector3, Quaternion } from '@dcl/sdk/math' export function main() { // Create interactive object 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 integration via @dcl/sdk/ethereum-provider and ethers.js — check NFT ownership:

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() } async function unlockExclusiveArea() { const hasAccess = await checkNFTOwnership(MEMBERSHIP_TOKEN_ID) if (hasAccess) { showExclusiveContent() } else { showPurchasePrompt() } } 

For multiplayer we use a WebSocket server:

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 } }) }) 

Gas Optimization Is Critical

Every smart contract call in a scene is a transaction with gas. We minimize call count using eth_call for reads and batching for writes. Gas optimization reduces operation costs by an average of 60% compared to a naive implementation — critical for mass interactions. Especially relevant for game mechanics with frequent ownership checks. Our approach saves up to $0.50 per user session on Ethereum mainnet.

Speeding Up Decentraland Scene Loading

Use Draco compression for 3D models: it reduces asset size by three times, cutting load time from 30 to 10 seconds. Compare:

Method Load Time Asset Size
Without compression (glTF) 30 seconds 50 MB
With Draco compression 10 seconds 15 MB

Additionally, set up LOD levels and progressive chunk loading. This combination yields 5x faster perceived load time.

Our Work Process

  1. Analysis — we study requirements, LAND parcel, existing scenes.
  2. Design — scene architecture, contracts, server logic.
  3. Implementation — writing code, 3D modeling, Web3 setup.
  4. Testing — on local server and testnet, unit tests and scenarios.
  5. Deployment — upload to Content Server, management instructions.

To deploy a public scene: npx @dcl/sdk-commands deploy. For private scenes — own catalyst node. Contact us to discuss your project — we'll prepare an estimate in 1 day.

Development Timeline and Costs

Scene Type Timeline Typical Cost
Simple interactive with 1-2 objects and Web3 3-5 weeks $5,000–$8,000
Scene with multiplayer and game logic 2-3 months $10,000–$25,000

Cost is calculated individually — write to us, and we'll evaluate your project in 1 day.

What's Included?

  • Source code of the scene in TypeScript (GitHub repository).
  • 3D models and textures (glb, converted from Blender).
  • Deployment documentation (deploy guide).
  • Access to test scene and management instructions.
  • 30 days of support after delivery.

Why Choose Us

Team experience in Web3 — over 5 years, certified Solidity and TypeScript developers. We have completed over 50 scenes with NFT logic and multiplayer. We guarantee the scene will work without revert on mainnet, and provide a written compatibility guarantee with the latest SDK updates. Order development — get a compatibility guarantee and 30 days of support. Our clients save an average of 40% on development costs compared to in-house teams.

Typical Deployment Issues

Wrong parcel coordinates in scene.json — check in explorer. Missing HTTPS for server part — use Let's Encrypt. Outdated @dcl/sdk — run npm update. If the error persists — contact us, we'll find the cause within a day.

Order integration with Decentraland SDK right now — get an engineer consultation and a free preliminary estimate.