|
| 1 | +--- |
| 2 | +title: Cómo configurar un contrato ERC1155Pack en Sequence Builder |
| 3 | +description: Aprenda cómo funciona ERC1155Pack en Builder, incluyendo la mecánica de commit-reveal y la publicación del contenido de los packs. |
| 4 | +sidebarTitle: Uso de un contrato ERC1155Pack |
| 5 | +--- |
| 6 | + |
| 7 | +Utilice esta guía para configurar packs en su contrato ERC1155Pack dentro de Sequence Builder. El contrato `ERC1155Pack` amplía ERC1155Items para agregar un flujo de apertura de packs basado en un esquema de commit-reveal. |
| 8 | + |
| 9 | +<Warning> |
| 10 | + Requisito previo: desplegar contratos y colecciones |
| 11 | + |
| 12 | + Asegúrese de haber [creado un proyecto](/solutions/builder/getting-started), desplegado su contrato ERC1155Pack y también los contratos/colecciones ERC1155 o ERC721 cuyos ítems desea incluir en cada pack. |
| 13 | +</Warning> |
| 14 | + |
| 15 | +## Paso 1: Abra su contrato ERC1155Pack |
| 16 | +Desde el panel de su proyecto, seleccione el contrato PACK que desea configurar y luego abra la pestaña `Pack` para gestionar su contenido. Confirme que está en la red y colección correctas antes de editar. |
| 17 | + |
| 18 | +<Frame> |
| 19 | +  |
| 20 | +</Frame> |
| 21 | + |
| 22 | +## Paso 2: Elija o agregue un pack para editar |
| 23 | +Use el selector de packs para elegir el pack que desea actualizar, o haga clic en `Add new pack` para crear una nueva entrada. La tabla muestra la dirección del token, tipo, IDs y cantidades que se incluirán al abrir un pack. |
| 24 | + |
| 25 | +<Frame> |
| 26 | +  |
| 27 | +</Frame> |
| 28 | + |
| 29 | +## Paso 3: Suba el contenido del pack mediante CSV |
| 30 | +Haga clic en `Add New Pack` o `Update Pack Contents` para abrir el cargador de CSV. Ingrese el `Pack ID` que desea modificar, defina el `Supply` para indicar cuántos packs pueden abrirse y suba un archivo CSV con una fila por cada contenido del pack. |
| 31 | + |
| 32 | +Cada fila debe incluir: |
| 33 | +- `Pack Content ID` |
| 34 | +- Para cada ítem: `Token Address`, `Token Type` (1155/721), `Token IDs` y `Amounts` |
| 35 | + |
| 36 | +p. ej. |
| 37 | + |
| 38 | +``` |
| 39 | +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 |
| 40 | +1,0x3a6a8f4091b705fe1241c47e2532d45a6dff5a85,721,"1200","1",0xa558419686308ce836c36a5c44eeeb4b0916ca7b,1155,"5,6","7,3" |
| 41 | +2,0x3a6a8f4091b705fe1241c47e2532d45a6dff5a85,721,"1201","1",0xa558419686308ce836c36a5c44eeeb4b0916ca7b,1155,"9,10","7,9" |
| 42 | +3,0x3a6a8f4091b705fe1241c47e2532d45a6dff5a85,721,"1202","1",0xa558419686308ce836c36a5c44eeeb4b0916ca7b,1155,"7,8","4,8" |
| 43 | +4,0x3a6a8f4091b705fe1241c47e2532d45a6dff5a85,721,"1203","1",0xa558419686308ce836c36a5c44eeeb4b0916ca7b,1155,"9","7" |
| 44 | +5,0x3a6a8f4091b705fe1241c47e2532d45a6dff5a85,721,"1204","1",0xa558419686308ce836c36a5c44eeeb4b0916ca7b,1155,"9,10","5,4" |
| 45 | +
|
| 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 de packs. |
| 54 | + |
| 55 | + Si ya ha distribuido packs para un ID específico, le recomendamos no cambiar el CSV, ya que esto reinicia el registro de packs abiertos. |
| 56 | + |
| 57 | + Si un ítem 721 ya fue distribuido en un pack anterior y aparece en un nuevo CSV de pack, fallará al mintear cuando un usuario abra ese pack. |
| 58 | +</Warning> |
| 59 | + |
| 60 | +## Paso 4: Asigne el rol de Minter al contrato de pack en su colección de ítems |
| 61 | +Para que los packs puedan mintear ítems al abrirse, otorgue al contrato ERC1155Pack la función de `Minter` en la colección ERC1155 que utiliza para el contenido del pack. Abra la sección `Settings > Permissions` de ese contrato, agregue la dirección del contrato de pack y asigne `Minter`, luego firme la transacción. |
| 62 | + |
| 63 | +## Paso 5: Revise y publique |
| 64 | +Después de procesar el CSV, verá una vista previa de las filas de contenido del pack analizadas. Verifique las direcciones de los tokens, IDs, cantidades y totales, luego haga clic en `Create Pack Contents` para guardar. Su pack ya está listo para que los jugadores lo abran. |
| 65 | + |
| 66 | +<Frame> |
| 67 | +  |
| 68 | +</Frame> |
| 69 | + |
| 70 | +¿Busca un frontend para abrir packs? Vea nuestro boilerplate en React en [https://github.com/0xsequence-demos/pack-opening-boilerplate/](https://github.com/0xsequence-demos/pack-opening-boilerplate/). |
| 71 | + |
| 72 | +## Cómo funciona ERC1155Pack |
| 73 | +El contenido de los packs es gestionado por direcciones con `PACK_ADMIN_ROLE` usando `setPacksContent(bytes32 _merkleRoot, uint256 _supply, uint256 packId)`. El merkle root codifica todas las posibles combinaciones de contenido y `supply` define cuántos packs pueden abrirse para ese ID. Builder se encarga de crear el root a partir de su CSV para que usted solo se enfoque en el contenido. |
| 74 | + |
| 75 | +Flujo (on-chain): |
| 76 | +- El usuario llama a `commit(packId)` para quemar su pack y crear un compromiso. |
| 77 | +- Después de al menos un bloque, cualquier persona puede llamar a `reveal(user, packContent, proof, packId)` con una prueba de merkle para el contenido seleccionado; el contrato verifica y mintea los ítems. La API de Sequence lo hará automáticamente. |
| 78 | +- Si no se llama a reveal antes de que expire el hash del bloque de compromiso (30 minutos), `refundPack(user, packId)` devuelve el pack. |
| 79 | + |
| 80 | +Aleatorización: |
| 81 | +- El compromiso registra `block.number + 1` para la aleatoriedad. |
| 82 | +- Reveal deriva `randomSeed = keccak256(abi.encode(blockHash, user))`. |
| 83 | +- El contrato elige `randomSeed % remainingSupply[packId]`, usando un mapa `_availableIndices` al estilo Fisher–Yates para que cada contenido solo pueda revelarse una vez y se mantenga la aleatoriedad. |
| 84 | +- La hoja de merkle es `keccak256(abi.encode(revealIdx, packContent))`, que se valida con la prueba proporcionada. |
| 85 | + |
| 86 | +<Warning> |
| 87 | + Los validadores o mineros que controlan bloques secuenciales podrían sesgar los hashes de bloque. Permitir que cualquiera llame a `reveal` ayuda a asegurar que los packs comprometidos se revelen antes de que expiren los hashes de bloque. |
| 88 | +</Warning> |
0 commit comments