|
| 1 | +--- |
| 2 | +title: "Cómo configurar un contrato ERC1155Pack en Sequence Builder" |
| 3 | +description: Aprenda cómo funciona ERC1155Pack en Builder, incluido el esquema commit-reveal, la carga de CSV y la publicación de contenidos. |
| 4 | +sidebarTitle: Usar un contrato ERC1155Pack |
| 5 | +--- |
| 6 | + |
| 7 | +Use esta guía para configurar paquetes en su contrato ERC1155Pack en Sequence Builder. El contrato `ERC1155Pack` amplía ERC1155Items para añadir una apertura de paquetes con commit-reveal, de modo que los resultados puedan verificarse y solo se revelen una vez. |
| 8 | + |
| 9 | +<Warning> |
| 10 | +Prerequisito: Desplegar contratos y objetos |
| 11 | + |
| 12 | +Asegúrese de haber [creado un proyecto](/solutions/builder/getting-started), desplegado su contrato ERC1155Pack y desplegado las colecciones ERC1155 o ERC721 cujos ítems quiere incluir en cada paquete. |
| 13 | +</Warning> |
| 14 | + |
| 15 | +## Paso 1: Abra su contrato ERC1155Pack |
| 16 | + |
| 17 | +Desde el panel del proyecto, seleccione el contrato PACK que quiere configurar y abra la pestaña `Pack` para gestionar su contenido. Confirme que está en la red correcta y que la colección vinculada es la adecuada antes de editar. |
| 18 | +<Frame> |
| 19 | + |
| 20 | +</Frame> |
| 21 | + |
| 22 | +## Paso 2: Elija o agregue un pack para editar |
| 23 | + |
| 24 | +Use el selector de packs para elegir el que quiere actualizar o haga clic en `Add new pack` para crear otro. La tabla muestra la dirección, tipo, IDs y cantidades de tokens que se incluirán cuando se abra un pack. |
| 25 | +<Frame> |
| 26 | + |
| 27 | +</Frame> |
| 28 | + |
| 29 | +## Paso 3: Cargue el contenido del pack vía CSV |
| 30 | + |
| 31 | +Haga clic en `Add New Pack` o `Update Pack Contents` para abrir el cargador CSV. Ingrese el `Pack ID` que va a modificar, defina el `Supply` (cuántos packs pueden abrirse) y cargue un CSV con una fila por contenido del pack. |
| 32 | + |
| 33 | +Cada fila debe incluir: |
| 34 | + |
| 35 | +- `Pack Content ID` |
| 36 | +- Para cada ítem: `Token Address`, `Token Type` (1155/721), `Token IDs` y `Amounts` |
| 37 | + |
| 38 | +Ejemplo: |
| 39 | +``` |
| 40 | +Pack Content ID, Item 1 Token Addr, Item 1 Token Type, Item 1 Token IDs, Item 1 Amounts, Item 2 Token Addr, Item 2 Token Type, Item 2 Token IDs, Item 2 Amounts |
| 41 | +1,0x3a6a8f4091b705fe1241c47e2532d45a6dff5a85,721,"1200","1",0xa558419686308ce836c36a5c44eeeb4b0916ca7b,1155,"5,6","7,3" |
| 42 | +2,0x3a6a8f4091b705fe1241c47e2532d45a6dff5a85,721,"1201","1",0xa558419686308ce836c36a5c44eeeb4b0916ca7b,1155,"9,10","7,9" |
| 43 | +3,0x3a6a8f4091b705fe1241c47e2532d45a6dff5a85,721,"1202","1",0xa558419686308ce836c36a5c44eeeb4b0916ca7b,1155,"7,8","4,8" |
| 44 | +4,0x3a6a8f4091b705fe1241c47e2532d45a6dff5a85,721,"1203","1",0xa558419686308ce836c36a5c44eeeb4b0916ca7b,1155,"9","7" |
| 45 | +5,0x3a6a8f4091b705fe1241c47e2532d45a6dff5a85,721,"1204","1",0xa558419686308ce836c36a5c44eeeb4b0916ca7b,1155,"9,10","5,4" |
| 46 | +``` |
| 47 | + |
| 48 | +<Frame> |
| 49 | + |
| 50 | +</Frame> |
| 51 | + |
| 52 | +<Warning> |
| 53 | +El CSV reemplaza todo el contenido existente para el Pack ID seleccionado y reinicia el seguimiento de distribución. |
| 54 | + |
| 55 | +Si ya distribuyó packs para un ID concreto, recomendamos no cambiar el CSV, ya que restablece qué packs han sido abiertos. |
| 56 | + |
| 57 | +Si un ítem 721 ya se distribuyó en un pack previo y aparece en un nuevo CSV, fallará al acuñar cuando un usuario abra ese pack. |
| 58 | +</Warning> |
| 59 | + |
| 60 | +## Paso 4: Dé al contrato de packs el rol de Minter en su colección de ítems |
| 61 | + |
| 62 | +Para que el pack pueda mintear los ítems al abrirse, otorgue al contrato ERC1155Pack el rol `Minter` en la colección ERC1155 que usa para el contenido. Abra `Settings > Permissions` en ese contrato de ítems, agregue la dirección del contrato de packs y asigne `Minter`, luego firme la transacción. |
| 63 | + |
| 64 | +## Paso 5: Revise y publique |
| 65 | + |
| 66 | +Cuando se procese el CSV verá una vista previa de las filas de contenido. Verifique direcciones, IDs, cantidades y totales, y luego haga clic en `Create Pack Contents` para guardar. Su pack estará listo para que los jugadores lo abran. |
| 67 | +<Frame> |
| 68 | + |
| 69 | +</Frame> |
| 70 | + |
| 71 | +¿Quiere un frontend para abrir packs? Revise el ejemplo open source en https://github.com/0xsequence-demos/pack-opening-boilerplate/. |
| 72 | + |
| 73 | + |
| 74 | +## Cómo funciona ERC1155Pack |
| 75 | + |
| 76 | +Las cuentas con `PACK_ADMIN_ROLE` gestionan el contenido con `setPacksContent(bytes32 _merkleRoot, uint256 _supply, uint256 packId)`. La raíz de Merkle codifica todo el contenido posible y `supply` define cuántos packs pueden abrirse para ese ID. Builder genera la raíz desde su CSV para que se concentre en el contenido. |
| 77 | + |
| 78 | +Flujo on-chain: |
| 79 | + |
| 80 | +- El usuario llama `commit(packId)` para quemar su pack y crear el compromiso. |
| 81 | +- Tras al menos un bloque, cualquiera puede llamar `reveal(user, packContent, proof, packId)` con la prueba Merkle del contenido seleccionado; el contrato verifica y mintea los ítems. La API de Sequence puede hacerlo automáticamente. |
| 82 | +- Si no se revela antes de que expire el hash del bloque de compromiso (30 minutos), `refundPack(user, packId)` devuelve el pack. |
| 83 | + |
| 84 | +Aleatoriedad: |
| 85 | + |
| 86 | +- El compromiso registra `block.number + 1` para la aleatoriedad. |
| 87 | +- La revelación deriva `randomSeed = keccak256(abi.encode(blockHash, user))`. |
| 88 | +- El contrato elige `randomSeed % remainingSupply[packId]` usando un mapa `_availableIndices` estilo Fisher–Yates, garantizando que cada contenido solo se revele una vez y con distribución uniforme. |
| 89 | +- La hoja de Merkle es `keccak256(abi.encode(revealIdx, packContent))`, que debe coincidir con la prueba suministrada. |
| 90 | + |
| 91 | +<Warning> |
| 92 | +Si validadores o mineros controlan bloques secuenciales pueden sesgar los hashes y la aleatoriedad. Permitir que cualquiera llame `reveal` ayuda a asegurar que los packs comprometidos se revelen antes de que el hash del bloque caduque. |
| 93 | +</Warning> |
0 commit comments