|
1 | 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 |
| 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 | 5 | --- |
6 | 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. |
| 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 | 8 |
|
9 | 9 | <Warning> |
10 | | -Prerequisito: Desplegar contratos y objetos |
| 10 | + Requisito previo: desplegar contratos y colecciones |
11 | 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. |
| 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 | 13 | </Warning> |
14 | 14 |
|
15 | 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. |
16 | 17 |
|
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 | 18 | <Frame> |
19 | | - |
| 19 | +  |
20 | 20 | </Frame> |
21 | 21 |
|
22 | 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. |
23 | 24 |
|
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 | 25 | <Frame> |
26 | | - |
| 26 | +  |
27 | 27 | </Frame> |
28 | 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. |
| 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. |
32 | 31 |
|
33 | 32 | Cada fila debe incluir: |
34 | | - |
35 | 33 | - `Pack Content ID` |
36 | 34 | - Para cada ítem: `Token Address`, `Token Type` (1155/721), `Token IDs` y `Amounts` |
37 | 35 |
|
38 | | -Ejemplo: |
| 36 | +p. ej. |
| 37 | + |
39 | 38 | ``` |
40 | 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 |
41 | 40 | 1,0x3a6a8f4091b705fe1241c47e2532d45a6dff5a85,721,"1200","1",0xa558419686308ce836c36a5c44eeeb4b0916ca7b,1155,"5,6","7,3" |
42 | 41 | 2,0x3a6a8f4091b705fe1241c47e2532d45a6dff5a85,721,"1201","1",0xa558419686308ce836c36a5c44eeeb4b0916ca7b,1155,"9,10","7,9" |
43 | 42 | 3,0x3a6a8f4091b705fe1241c47e2532d45a6dff5a85,721,"1202","1",0xa558419686308ce836c36a5c44eeeb4b0916ca7b,1155,"7,8","4,8" |
44 | 43 | 4,0x3a6a8f4091b705fe1241c47e2532d45a6dff5a85,721,"1203","1",0xa558419686308ce836c36a5c44eeeb4b0916ca7b,1155,"9","7" |
45 | 44 | 5,0x3a6a8f4091b705fe1241c47e2532d45a6dff5a85,721,"1204","1",0xa558419686308ce836c36a5c44eeeb4b0916ca7b,1155,"9,10","5,4" |
| 45 | +
|
46 | 46 | ``` |
47 | 47 |
|
48 | 48 | <Frame> |
49 | | - |
| 49 | +  |
50 | 50 | </Frame> |
51 | 51 |
|
52 | 52 | <Warning> |
53 | | -El CSV reemplaza todo el contenido existente para el Pack ID seleccionado y reinicia el seguimiento de distribución. |
| 53 | + El CSV reemplaza todo el contenido existente para el Pack ID seleccionado y reinicia el seguimiento de distribución de packs. |
54 | 54 |
|
55 | | -Si ya distribuyó packs para un ID concreto, recomendamos no cambiar el CSV, ya que restablece qué packs han sido abiertos. |
| 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 | 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. |
| 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 | 58 | </Warning> |
59 | 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. |
| 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. |
63 | 62 |
|
64 | 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 | 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 | 66 | <Frame> |
68 | | - |
| 67 | +  |
69 | 68 | </Frame> |
70 | 69 |
|
71 | | -¿Quiere un frontend para abrir packs? Revise el ejemplo open source en https://github.com/0xsequence-demos/pack-opening-boilerplate/. |
72 | | - |
| 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/). |
73 | 71 |
|
74 | 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. |
75 | 74 |
|
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: |
| 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. |
85 | 79 |
|
| 80 | +Aleatorización: |
86 | 81 | - 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. |
| 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. |
90 | 85 |
|
91 | 86 | <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> |
| 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