Más reciente
Mantente actualizado con las últimas publicaciones.
Publicaciones
656He perdido las direcciones de mi monedero Sui, ¿cómo las recupero?
Estoy usando Suiscanner y veo actividad conocida en diferentes direcciones a las que solía tener acceso en mi monedero Sui, pero ahora solo aparece una en Sluch. ¿Cómo puedo recuperar las direcciones que faltan?
- Sui
01How to fix 'Cannot open wallet config file' error in Walrus?
I'm trying to use the Walrus CLI to store a file with the command walrus store --wallet. However, I'm encountering an error: Cannot open wallet config file at "~/.sui/sui_config/client.yaml". Err: Unable to load config. I've tried using relative and absolute paths in the command, but the error persists. I can open the file using a text editor, so I know it exists. How can I resolve this issue?
- Walrus
- Typescript SDK
04- DiscusiónParaSuiJun 19, 2025
Soulbound Activo transferible
¡Gran artículo! Me gustaría añadir algunos puntos prácticos para reforzar el diseño y la seguridad tipográfica en torno a los activos heterogéneos de Sui Move: ✅ Como se dynamic_field::add()requiere esta storehabilidad, los activos como los tokens Soulbound (que solo los tienenkey) no se pueden almacenar directamente. IDEn su lugar, almacena solo sus storemetadatos y los de la lista, que sí tienen. ✅ El mejor enfoque: separar las colecciones en función de las limitaciones de capacidad: VecMap→ para key + storeactivos (por ejemplo, NFT transferibles) VecMap→ para keyactivos exclusivos (p. ej., tokens Soulbound) ✅ Agregue una asset_type: Stringetiqueta de tiempo de ejecución a los metadatos. Esto le permite identificar y gestionar de forma segura la lógica de los activos (por ejemplo, las transferencias o la visualización) incluso después de la eliminación del tipo. ✅ Los tipos fantasma son excelentes para etiquetar tipos en tiempo de compilación y evitar el uso indebido por parte de los desarrolladores (como las transferencias accidentales de tokens no transferibles). Esta estructura modular es escalable, evita que se infrinjan las capacidades de Move y permite un diseño flexible del mercado sin sacrificar la seguridad. ¡Buen trabajo al explicarlo tan minuciosamente!
- Sui
- NFT Ecosystem
01 Building with Rust on Sui
I saw this repo recently when checking on the Mysten_Labs's GitHub: https://github.com/MystenLabs/move-binding Move Binding is a Rust library that provides a way to interact with Sui Move packages on-chain. It reads Move packages from the Sui blockchain and generates corresponding Rust structs and function entry points, allowing for seamless integration between Move and Rust. To use Move Binding in your project, add the following dependency to your Cargo.toml: [dependencies] move-binding-derive = { git = "https://github.com/MystenLabs/move-binding" } move-types = { git = "https://github.com/MystenLabs/move-binding" } `
- Sui
21- Artículoharry phan458ParaSuiJun 18, 2025
Creación de un mercado con activos heterogéneos
Al crear un mercado en una cadena de bloques con el lenguaje de programación Move, uno de los desafíos más interesantes es administrar activos con diferentes restricciones de capacidad en una sola colección. Ya sea que se trate de NFT transferibles, de tokens Soulbound intransferibles o de activos personalizados con restricciones de transferencia únicas, el estricto sistema de tipos de Move exige un diseño cuidadoso para garantizar la seguridad y la eficiencia de los tipos. En esta publicación, analizaremos cómo las restricciones de capacidad interactúan con los campos dinámicos de colecciones heterogéneas, exploraremos soluciones prácticas y compartiremos un enfoque sólido para crear un mercado que gestione diversos tipos de activos. Comprender las habilidades de Move Move, diseñado para cadenas de bloques como Sui y Aptos, usa habilidades para definir qué operaciones admite un tipo. Las dos habilidades clave relevantes para nuestro mercado son: clave: permite almacenar un tipo en el almacenamiento global como un objeto. almacenar: permite incrustar un tipo en otro objeto, como una estructura o una colección. Nuestro mercado debe gestionar: NFT normales: haz que Key + almacene, lo que los hace transferibles y almacenables. Tokens de Soulbound: solo tienen una clave, lo que significa que no son transferibles y no se pueden almacenar en otros objetos. Activos personalizados: tienen diferentes habilidades y pueden tener restricciones de transferencia. El objetivo es almacenar estos activos en una sola colección, como una bolsa, y gestionar sus anuncios respetando el sistema de tipos de Move. El desafío: campos dinámicos y restricciones de habilidad La dynamic_field::add()función de Move permite añadir campos a los objetos de forma dinámica, lo que parece ideal para una colección heterogénea. Sin embargo, el tipo de valor V debe tener la capacidad de almacenamiento. Esto supone un problema para los tokens Soulbound, que carecen de capacidad de almacenamiento. Entonces, ¿cómo almacenamos y administramos activos con diferentes conjuntos de habilidades en un mercado? Preguntas clave ¿La V en los campos dinámicos siempre necesita almacenamiento? ¿Podemos usar tipos de contenedores para solucionar este problema? ¿Puede una sola bolsa almacenar objetos con diferentes habilidades (por ejemplo, llave más tienda contra llave)? ¿Cómo mantenemos la seguridad de los tipos con el borrado de tipos de Dynamic Fields? ¿Cómo ayudan los tipos de fantasmas y el patrón de testigos a gestionar los activos heterogéneos? Abordemos cada pregunta y construyamos una solución. Requisitos de habilidad para campos dinámicos La documentación de Move confirma que dynamic_field: :add () requiere que V tenga la capacidad de almacenar. Esto se debe a que los campos dinámicos se almacenan dentro de un objeto y Move exige que los valores incrustados se puedan almacenar. En el caso de los NFT normales con clave + store, esto es sencillo: podemos almacenarlos directamente en una bolsa o en un campo dinámico. En el caso de los tokens Soulbound con solo una clave, el almacenamiento directo es imposible. Un tipo de contenedor, como struct Wrapper tiene store {asset: T}, no funcionará porque T carece de almacenamiento. En su lugar, podemos almacenar metadatos, como el identificador del activo y los detalles del anuncio, que sí tienen almacenamiento. Por ejemplo: struct Metadata has store { id: ID, price: u64, asset_type: String, } Almacenamiento heterogéneo en una sola colección Una bolsa en movimiento está diseñada para almacenar valores con la capacidad de almacenarlos, pero todos los valores deben cumplir con las mismas restricciones de tipo. Esto significa que una sola bolsa no puede almacenar metadatos tanto de los NFT (clave más tienda) como de los tokens de soulbound, a menos que estén empaquetados en un tipo común con store. Sin embargo, mezclar tipos en una misma colección suele generar complejidad y posibles problemas de seguridad tipográfica. Un mejor enfoque es usar colecciones separadas para diferentes conjuntos de habilidades: Activos: almacena los activos directamente en un vector o bolsa. - Tokens de Soulbound: almacena sus ID y metadatos en un vector. Esta separación respeta las limitaciones de capacidad de Move y, al mismo tiempo, mantiene el sistema modular y fácil de mantener. Mantener la seguridad de los tipos Los campos dinámicos borran la información de tipos en tiempo de ejecución, por lo que para recuperar un valor es necesario especificar el tipo en el momento de la compilación, como dynamic_field: :remove (). Esto garantiza la seguridad de los tipos, pero complica el manejo de tipos heterogéneos. Para gestionar diferentes tipos de activos, almacena una etiqueta de tipo (por ejemplo, una cadena como «NFT» o «SoulboundToken») en los metadatos. Durante el tiempo de ejecución, comprueba la etiqueta para determinar cómo procesar el anuncio. Por ejemplo: public struct ListingMetadata has store { asset_id: ID, price: u64, asset_type: String, } Al recuperarlo, utilízalo asset_typepara decidir si quieres tratar el activo como un token NFT o como un token de Soulbound, lo que garantiza un manejo correcto y, al mismo tiempo, mantiene la seguridad de tipos en tiempo de compilación para los metadatos almacenados. Los tipos de fantasmas y el patrón de los testigos Los tipos fantasma de Move, como struct Asset, son útiles para etiquetar diferentes tipos de activos sin sobrecargar el tiempo de ejecución. Por ejemplo, puedes definir Asset y Asset para distinguir las variantes. Sin embargo, la estructura en sí misma debe seguir almacenándose para poder almacenarse en una colección, y la información de tipos se borra durante el tiempo de ejecución. Para extraer la información de tipo más adelante, almacena un campo de metadatos como asset_type junto con el activo o su ID. Esto te permite diferenciar un activo de un activo durante el procesamiento, por ejemplo, al ejecutar transferencias o mostrar listados. Un diseño de mercado práctico He aquí una implementación práctica para un mercado que gestiona tanto activos transferibles como patrimoniales: Estructura del mercado use sui::object::{Self, UID, ID}; use sui::vec_map::{Self, VecMap}; struct Marketplace has key { id: UID, transferable_listings: VecMap, soulbound_listings: VecMap, } struct ListingWithAsset has store { asset: T, // T must have key + store price: u64, } struct ListingMetadata has store { asset_id: ID, price: u64, asset_type: String, } Activos transferibles: public fun list_transferable( marketplace: &mut Marketplace, asset: T, price: u64 ) { let id = object::id(&asset); let listing = ListingWithAsset { asset, price }; vec_map::insert(&mut marketplace.transferable_listings, id, listing); } Fichas de Soulbound: ublic fun list_soulbound( marketplace: &mut Marketplace, asset: &T, price: u64 ) { let id = object::id(asset); let listing = ListingMetadata { asset_id: id, price, asset_type: "SoulboundToken" }; vec_map::insert(&mut marketplace.soulbound_listings, id, listing); } La creación de un mercado en Move me enseñó la importancia de alinearme con el sistema de tipos del idioma. En el caso de los campos dinámicos, capacidades como la de almacenar no son negociables, por lo que planificar el almacenamiento de metadatos con antelación es fundamental para los activos que no se pueden almacenar. Las recopilaciones independientes simplifican el manejo de los diferentes conjuntos de capacidades, mientras que las etiquetas de metadatos permiten la flexibilidad del tiempo de ejecución. Los tipos fantasma son ideales para hacer distinciones en tiempo de compilación, pero la gestión de tipos en tiempo de ejecución requiere metadatos explícitos.
- Sui
1 +15
P&R expertosXavier.eth301ParaSuiJun 17, 2025¿Cómo interactúan las restricciones de capacidad con los campos dinámicos en colecciones heterogéneas?
Estoy creando un mercado que necesita gestionar varios tipos de activos con diferentes requisitos de capacidad, y me he planteado algunas preguntas fundamentales sobre el sistema de tipos de Move. Quiero almacenar diferentes tipos de activos en la misma colección, pero tienen diferentes capacidades: NFT normales: key + store(transferibles) Tokens Soulbound: key únicamente (no transferibles) Activos personalizados con restricciones de transferencia public struct Marketplace has key { id: UID, listings: Bag, // Want to store different asset types here } // This works for transferable assets public fun list_transferable( marketplace: &mut Marketplace, asset: T, price: u64 ) { /* ... */ } // But how to handle soulbound assets? public fun list_soulbound( // No store ability marketplace: &mut Marketplace, asset_ref: &T, // Can only take reference price: u64 ) { /* How do I store metadata about this? */ } Preguntas clave: Requisitos de habilidad: Cuando se usadynamic_field::add(), ¿Vsiempre se necesita store en tiempo de compilación? ¿Pueden los tipos de contenedores solucionar esto? Almacenamiento heterogéneo: ¿puede una sola bolsa almacenar objetos con diferentes conjuntos de habilidades (key + store + copycontrakey + store) y manipularlos de forma diferente durante el tiempo de ejecución? Seguridad de tipos: dado que los campos dinámicos eliminan los tipos, ¿cómo puedo mantener la seguridad de los tipos al recuperar los valores? ¿Cuál es el patrón para almacenar los metadatos de tipo? Patrón de testigos: ¿Cómo funcionan las restricciones de habilidad con los tipos de fantasmas? ¿Puedo AssetAssetguardarlos en la misma colección y extraer la información de tipos más adelante? Construir un sistema en el que los NFT, los tokens de soul bound y los activos restringidos requieran funciones de mercado, pero con una semántica de transferencia diferente. He probado los tipos de contenedores, varias colecciones por conjunto de habilidades y el almacenamiento de metadatos de tipos separados. Cada uno tiene sus ventajas y desventajas entre la seguridad del tipo, los costos de la gasolina y la complejidad.
- Sui
- Architecture
03- DiscusiónParaSuiJun 16, 2025
¿Cómo reclamar el USDC después de pasar de Base a Sui?
Hace poco pasé mi USDC de Base a la red Sui, pero ha pasado un tiempo y aún no lo he recibido. Me preocupa que se pierda. ¿Cómo puedo solicitar mi USDC? ¿Hay algún proceso en particular a seguir para garantizar que la transacción se realice correctamente?
- Sui
12 No se puede acceder al sitio web de Seal: se necesita una solución de contraseña
Hola, quiero acceder al sitio web de Seal, pero me piden una contraseña. ¿Alguna idea sobre cómo resolver esto?
- Sui
21¿Tienes problemas para transferir NFT desde la billetera Slushy?
Tengo problemas para transferir un NFT desde mi monedero de Slushy. Cada vez que intento hacerlo, el proceso no se completa. He oído que los NFT de quiosco pueden tener restricciones. ¿Cómo puedo transferir correctamente mis NFT?
- NFT Ecosystem
13[Necesito ayuda] Suibridge se retrasa más de 48 horas
He pasado SuiUSDT de Sui a Eth en los últimos 2 días, y cuando lo solicité ayer, el impuesto era «Fallo con el error «SuiBridge: el importe supera el límite del bridge». Desde entonces, el botón de reclamación ha desaparecido y el registro de la transacción ha pasado a ser «Retrasado», lo que ya lleva más de 48 horas La pestaña «soporte» del sitio web de suibridge no puede conectar con su discordia, y la discordia oficial de sui discord tampoco se puede unir, y no tengo forma de encontrar a las personas adecuadas para solucionarlo ahora mismo. ¿Alguien sabe lo que debo hacer ahora? ¡Gracias
- Sui
- Transaction Processing
21
- ¿Cómo actualizar la clave de un comerciante en ObjectTable cuando cambia en la estructura?20
- ¿Cuál es la interfaz más fácil para subir manchas de morsa?10
- ¿Qué pasa si no solicito ETH a través del puente Sui?00
- ¿Es fácil aprender Move after solidity?00
- ¿Es rentable crear servicios de dapps (como juegos) en sui?00
Gana tu parte de 1000 Sui
Gana puntos de reputación y obtén recompensas por ayudar a crecer a la comunidad de Sui.
- 458
- 426
- 409
- 360
- 304
- 301
- 295
- 291
- 271
- 259
- 👀 SEAL: creo que la privacidad de los datos de Web3 está a punto de cambiar8
- AMM Bot en el ecosistema Sui62
- Administración de niños entre módulos con public_receive5
- En resumen, el vídeo puede potenciar tu viaje como desarrollador de Sui5
- How to access and manage nested structs and dynamic fields in Move?56