Documentos de Asset Core

Documentación del motor de estado mundial determinista y referencias de API.

Documentos de Decision Gate

Recetas

Las recetas son patrones comunes de múltiples operaciones que logran flujos de trabajo típicos. Utiliza estas como plantillas para tus transacciones y ajusta los IDs y metadatos para que se adapten a tu dominio.

Requisitos previos

Estas recetas asumen que ya tienes lo básico en su lugar. Si te falta algún requisito previo, completa ese paso primero para evitar fallos de validación.

  • Comprensión de operaciones
  • Clases de activos registradas para su dominio
  • Contenedores creados para origen y destino

Paso 1 - Transferir el saldo fungible entre contenedores

Mueva una cantidad fungible de un contenedor a otro utilizando operaciones de eliminar y agregar. Este es el patrón más seguro cuando desea un control explícito sobre cada paso.

Cuándo usar: Mover recursos, transferir saldos, reequilibrar inventario.

Operaciones: RemoveFungible, AddFungible

{
  "operations": [
    {
      "op": "RemoveFungible",
      "args": {
        "class_id": 200,
        "key": 1,
        "quantity": 150,
        "from": {
          "container_id": 1001,
          "kind": "balance"
        }
      }
    },
    {
      "op": "AddFungible",
      "args": {
        "class_id": 200,
        "key": 1,
        "quantity": 150,
        "location": {
          "container_id": 1002,
          "kind": "balance"
        }
      }
    }
  ],
  "idempotency_key": "transfer-balance-2026-01-15-1001-1002"
}

Alternativamente, use TransferFungible para una transferencia de operación única:

{
  "operations": [
    {
      "op": "TransferFungible",
      "args": {
        "from_container": 1001,
        "to_container": 1002,
        "class_id": 200,
        "key": 1,
        "quantity": 150
      }
    }
  ]
}

Paso 2 - Mover Instancia Entre Slots

Reubique una instancia única de un espacio a otro dentro de los mismos o diferentes contenedores. Este patrón preserva la auditabilidad y evita el estado parcial durante los cambios de equipo.

Cuándo usar: Reorganizar inventario, mover equipos, reposicionar artículos.

Operaciones: RemoveFromSlot, PlaceInSlot

{
  "operations": [
    {
      "op": "RemoveFromSlot",
      "args": {
        "container_id": 1001,
        "slot_index": 1
      }
    },
    {
      "op": "PlaceInSlot",
      "args": {
        "container_id": 1001,
        "slot_index": 2,
        "instance_id": 9001
      }
    }
  ],
  "idempotency_key": "slot-move-2026-01-15-9001"
}

Para intercambiar dos espacios ocupados, utilice SwapSlots en su lugar.

Paso 3 - Registrar Clase con Shape

Defina una nueva clase de activo y configure inmediatamente su forma de cuadrícula en una sola transacción.

Cuándo usar: Configuración de nuevos tipos de activos que se colocarán en contenedores de cuadrícula.

Operaciones: RegisterClass, RegisterClassShape

{
  "operations": [
    {
      "op": "RegisterClass",
      "args": {
        "request": {
          "class_id": 300,
          "flags": 2,
          "name": "Battle Tank"
        }
      }
    },
    {
      "op": "RegisterClassShape",
      "args": {
        "request": {
          "class_id": 300,
          "stack_key": null,
          "shape": {
            "width": 3,
            "height": 2
          }
        }
      }
    }
  ],
  "idempotency_key": "class-with-shape-2026-01-15-300"
}

Paso 4 - Agregar y Colocar Instancia

Cree una nueva instancia única y colóquela inmediatamente en un espacio.

Cuándo usar: Generación de elementos, creación de equipos, adición de muestras.

Operaciones: AddInstance

{
  "operations": [
    {
      "op": "AddInstance",
      "args": {
        "class_id": 200,
        "key": 1,
        "location": {
          "container_id": 1001,
          "kind": "slot",
          "slot_index": 1
        }
      }
    }
  ]
}

Nota: La respuesta del commit lista los IDs de instancia creados bajo created_entities.instances, que puedes utilizar en operaciones posteriores.

Paso 5 - Configurar Contenedor con Saldo Inicial

Cree un contenedor y pobléelo con recursos iniciales.

Cuándo usar: Inicializando inventarios de jugadores, creando nuevo almacenamiento, configurando experimentos.

Operaciones: CreateContainer, AddFungible

{
  "operations": [
    {
      "op": "CreateContainer",
      "args": {
        "container_id": 2001,
        "kind": { "type": "balance" },
        "owner": null,
        "policies": null
      }
    },
    {
      "op": "AddFungible",
      "args": {
        "class_id": 100,
        "key": 1,
        "quantity": 1000,
        "location": {
          "container_id": 2001,
          "kind": "balance"
        }
      }
    },
    {
      "op": "AddFungible",
      "args": {
        "class_id": 101,
        "key": 1,
        "quantity": 500,
        "location": {
          "container_id": 2001,
          "kind": "balance"
        }
      }
    }
  ],
  "idempotency_key": "init-container-2026-01-15-2001"
}

Paso 6 - Adjuntar Equipos al Personaje

Cree relaciones de padre-hijo entre instancias para equipos o componentes.

Cuándo usar: Equipar elementos, adjuntar componentes, construir jerarquías.

Operaciones: Adjuntar

{
  "operations": [
    {
      "op": "Attach",
      "args": {
        "child_instance": 9002,
        "parent_instance": 9001
      }
    }
  ]
}

Para eliminar el equipo, utilice Detach seguido de la ubicación deseada.

Solución de problemas

El orden importa

Las operaciones se ejecutan secuencialmente. Asegúrese de que las operaciones anteriores creen el estado del cual dependen las operaciones posteriores.

Utilizar claves de idempotencia

Siempre incluya claves de idempotencia para las operaciones que modifican el estado. Esto previene compromisos duplicados en caso de reintentos.

Verificar tipos de contenedores

Las operaciones de balance requieren contenedores de balance o de red. Las operaciones de ranura requieren contenedores de ranuras. Los tipos desajustados causan errores WrongContainerKind.

Validar cantidades

Asegúrese de que los contenedores de origen tengan un saldo suficiente antes de las transferencias. Un saldo insuficiente provoca que toda la transacción se revierta.

Próximos pasos