Inicio
Bienvenido al Foro Comunitario de Move
Nuevos Artículos
- Transacciones patrocinadas por Sui: ejemplos básicos de integracionesArtículoOct 31, 2023
Tradicionalmente, los usuarios que utilizan aplicaciones descentralizadas (dApps) se enfrentan a un obstáculo común: las tarifas de gas. En nuestro caso, estas tarifas de Sui, necesarias para ejecutar transacciones en la cadena de bloques, a menudo disuaden a los nuevos usuarios de aprovechar al máximo el potencial de Web3. Sin embargo, la innovadora función de transacciones patrocinadas de Sui elimina este obstáculo, lo que permite a los desarrolladores cubrir las tarifas de gas de las transacciones de sus aplicaciones. Esta funcionalidad revolucionaria allana el camino para una experiencia de usuario perfecta y fomenta una adopción más amplia de aplicaciones descentralizadas. TheMoveDev GitHub; SuIQL Repositorio de GitHub; Si tienes alguna duda, puedes hacerla aquí. Flujo de trabajo de transacciones patrocinadas El flujo de trabajo de transacciones patrocinadas de Sui es un proceso bien orquestado que garantiza transacciones fluidas y sin comisiones para los usuarios finales. Este es un desglose de los pasos necesarios. El usuario inicia una acción El proceso se inicia cuando un usuario inicializa una GasLessTransactionDatatransacción, indicando su intención de realizar una acción específica dentro de una dApp. dApp crea un bloque de transacciones de Sui En el centro del flujo de trabajo de las transacciones patrocinadas se encuentra la capacidad de la dApp para crear un bloque de transacciones. Este bloque encapsula todos los datos necesarios, incluida la intención del usuario, la acción que se va a realizar y los parámetros asociados. Transmisión de GasLessTransactionData GasLessTransactionDataSe envía al patrocinador, un participante clave en el marco de la transacción patrocinada, con una solicitud de firma. Estos datos sirven de base para la próxima transacción. Validación y construcción de datos de transacciones El patrocinador valida la transacción recibida y la construyeTransactionData, incorporando las tarifas de gas necesarias. Este paso garantiza que la transacción esté debidamente financiada para su ejecución en la cadena de bloques Sui. Firma de transacciones El patrocinador firma laTransactionData, indicando su aprobación y compromiso con la transacción. La clave privada necesaria para esta firma se almacena de forma segura en AWS Secrets Manager, lo que garantiza la máxima seguridad. Verificación y doble firma por parte del usuario La firmaTransactionData, junto con la firma del patrocinador, se devuelve al usuario. El usuario verifica los detalles de la transacción y la firma TransactionDatauna vez más, creando una transacción con doble firma lista para su ejecución. Ejecución de transacciones en Sui La transacción con doble firma se envía a la red Sui a través de un nodo Sui (nodo completo) o del patrocinador. Sui procesa la transacción y ejecuta la acción especificada dentro de la dApp, todo ello sin que el usuario deba pagar ninguna tarifa de gas. Notificación al usuario Finalmente, una dApp notifica al usuario que la transacción está patrocinada y enviada. Implementación de transacciones patrocinadas por Sui: la perspectiva de un desarrollador Para implementar transacciones patrocinadas, los desarrolladores interactúan con la API Sui o la API de transacciones patrocinadas, haciendo uso de la función sui-sign-sponsored-transactionLambda. He aquí un vistazo al código del lado del cliente que facilita este proceso: const response = await fetch('http://localhost:5000/blockchain/sui-sign-sponsored-transaction', { method: 'POST', headers: { Accept: 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({ sender: wallet.address, module: libName, action, arguments: data, }), }); const sponsorSignedTransaction = await response.json(); const transactionBlock = TransactionBlock.from(sponsorSignedTransaction?.transactionBlockBytes); const senderSignedTransaction = await wallet.signTransactionBlock({ transactionBlock, }); const executeResponse = await provider.executeTransactionBlock({ transactionBlock: sponsorSignedTransaction?.transactionBlockBytes, signature: [sponsorSignedTransaction?.signatureBytes, senderSignedTransaction.signature], options: { showEffects: true }, requestType: 'WaitForLocalExecution', }); Este código del lado del cliente actúa como un puente entre el usuario, el patrocinador y la cadena de bloques Sui, lo que permite la ejecución sin problemas de transacciones sin comisiones de gas. Conclusión La función de transacciones patrocinadas de Sui representa un cambio de paradigma en el mundo de las aplicaciones descentralizadas, ya que elimina una importante barrera de entrada para los usuarios. A través de nuestra exploración de esta innovadora funcionalidad, hemos obtenido información valiosa que ha dado forma a nuestro enfoque para crear dApps fáciles de usar. No dudes en dejar tus preguntas aquí.
0 - Oyentes y webhooks de Sui Move Events: ejemplos básicos de integracionesArtículoOct 31, 2023
Para las empresas y los desarrolladores, la integración con cadenas como Sui ofrece una oportunidad única para innovar y crear soluciones transformadoras. En esta serie, nos adentramos en el proceso de construir sobre Sui, arrojando luz sobre las complejidades de las integraciones y centrándonos en los oyentes de eventos y los webhooks, que han sido componentes integrales de TheMoveDev y SuiQL, la API de eventos de GraphQL para indexación de Sui creada por Peeranha. TheMoveDev GitHub; SuIQL Repositorio de GitHub; Si tienes alguna duda, puedes hacerla aquí. El código se implementa en TypeScript y se ejecuta en el entorno de nube de AWS mediante tecnologías sin servidor. Serverless se usa para las implementaciones. Serverless Offline se usa para ejecutar el código localmente. Sui Events Listeners and Webhooks: una breve descripción Las redes blockchain están inherentemente descentralizadas, lo que hace que la integración de datos en tiempo real sea una hazaña desafiante. Aquí es donde entran en juego los oyentes de eventos y los webhooks. Losdetectores de eventosson mecanismos que supervisan constantemente la actividad de la cadena de bloques, identificando y capturando eventos específicos de interés. LosWebhooks, por otro lado, son llamadas HTTP activadas por estos eventos, lo que permite una comunicación fluida entre diferentes aplicaciones. La arquitectura de integración de Sui Nuestro proceso de integración con Sui implicó una arquitectura integral que comprendía varios componentes clave. Oyente de eventos ElEvents Listener, una potente herramienta de ECS Fargate, desempeña un papel fundamental en nuestra configuración de integración. Sondea continuamente los nuevos eventos de los nodos Sui (nodo completo de Sui) para garantizar que nuestro sistema se mantenga actualizado con las últimas actividades de la cadena de bloques. Lista de oyentes de Sui Events Los eventos identificados por elEvents Listenerse añaden a laSui Listener Queue, una cola FIFO SQS. Esta cola actúa como almacenamiento intermediario, lo que permite procesar y gestionar los eventos de forma eficiente. Invocador de webhook ElWebhook Invoker, responsable de invocar los webhooks, es una función de Lambda que garantiza una comunicación fluida entre nuestro sistema y las aplicaciones externas. Actúa como un puente, lo que facilita la transmisión de los datos de los eventos a los puntos finales designados. Event Bridge ElEvent Bridge, un componente fundamental de nuestra arquitectura, invoca la lambdaWebhook Invokercada vez que se añaden nuevos elementos a laSui Listener Queue. Este mecanismo de activación en tiempo real garantiza la invocación rápida de los webhooks. Webhook ElWebhook, implementado como una función de AWS Lambda, procesa los eventos individuales recibidos de la cadena de bloques Sui. Este componente desempeña un papel crucial a la hora de interpretar los datos del evento y ejecutar acciones específicas en función del tipo de evento. Flujo de trabajo: cómo se combina todo Entender el flujo de trabajo es esencial para comprender el perfecto funcionamiento de nuestra arquitectura de integración. Eventos: funcionamiento del oyente El detector de eventos funciona en un bucle continuo y realiza llamadas a la API de RPC para suix_queryEventsrecuperar nuevos eventos asociados a un ID de paquete configurado. El detector de eventos mantiene un valor de cursor en DynamoDB, lo que garantiza que lee los eventos cronológicamente. Añadir eventos a Sui Listener Queue Siempre que el detector de eventos identifica nuevos eventos, los añade a la cola de oyentes de Sui para su posterior procesamiento. Event Bridge Trigger El AWS Event Bridge monitoriza la cola de oyentes de Sui y activa la lambda del invocador de webhooks en cuanto se añaden nuevos elementos. Esto garantiza el procesamiento de eventos en tiempo real. Invocación de webhook El invocador de webhooks, una vez activado, invoca la función Lambda de Webhook para cada evento presente en la cola. Ejecución local: Dev Playground El complemento offline sin servidor se utiliza para ejecutar la solución localmente. Listener ejecuta una tarea de ECS en la nube. ECS no está disponible sin conexión a Internet sin servidor. Por ese motivo, descomente la sui-events-listenerfunción lambda en serverless.yml. Esta función leerá los nuevos eventos de la cadena de bloques una vez por minuto. Instalar dependencias: npm install Instale DynamoDB: npm run dynamodb:install Si recibe un error Error getting DynamoDb local latest tar.gz location undefined: 403en este paso, significa que todavía hay un problema conocido en serverless-dynamodb-local. Se discute aquí o puedes dejar tu pregunta en Sui Move Q&A. node_modules/dynamodb-localhost/dynamodb/config.json URL to https://s3.us-west-2.amazonaws.com/dynamodb-local/dynamodb_local_latest.tar.gz- En http(añadir s a); node_modules/dynamodb-localhost/dynamodb/installer.j Cambiando httpahttps; Para iniciar los servicios, ejecute: npm run dev Implementación de Event Listener en AWS Instale la CLI de AWS; Configurar la CLI de AWS; aws configure Modificar los valores en stages\test.ymlystages\prod.yml; Iniciar el despliegue; npm run deploy:test o npm run deploy:prod Continuará... En esta primera parte de nuestra serie sobre integraciones de Sui, hemos explorado los conceptos fundamentales de los oyentes de eventos y los webhooks, y hemos desentrañado la intrincada arquitectura que subyace a nuestra integración con la cadena de bloques Sui. Estén atentos a las próximas partes, en las que profundizaremos en nuestro viaje y compartiremos ideas, desafíos y soluciones innovadoras que han dado forma a nuestra experiencia. No dudes en dejar tus preguntas aquí.
1
Publicaciones
142- P&R expertosyhant3251Apr 07, 2025
¿Cómo garantizar que solo el propietario de un NFT pueda transferirlo en un contrato?
¡Hola a todos! Estoy trabajando para implementar un contrato de NFT y quiero asegurarme de que solo el propietario legítimo del NFT pueda transferirlo. Tengo esta función para transferir: public fun transfer( nft: DevNetNFT, recipient: address, _: &mut TxContext ) { transfer::public_transfer(nft, recipient) } ¿Esta comprobación se realiza dentro del public_transfermétodo o tengo que añadir lógica adicional?
- Move CLI
03 - P&R expertosBritain92Apr 07, 2025
¿Cómo obtener valores de ObjectTable usando campos dinámicos?
dynamicFieldObjectEstoy intentando obtener valores de una ObjectTable utilizando campos dinámicos desde la interfaz, pero me aparece un error con. Unexpected arg String("gms") for the expected type Struct(MoveStructLayout...)El error dice. ¿Cómo puedo obtener el tipo correcto para el valor y evitar este error?
- Move CLI
- Move
03 - P&R expertosRaju158Apr 06, 2025
¿Cómo probar una función con un parámetro de recepción en Sui?
Estoy intentando probar la receive_objectfunción con un Receivingparámetro en Sui según los documentos de este enlace. Inicialmente, creé una prueba usando el ejemplo, pero tengo problemas para hacer que el argumento enviado sea un Receivingtipo. También intenté indicar el tipo de recepción, pero encontré errores. ¿Podría alguien guiarme para probar correctamente esta función?
- Move CLI
- Move
04 - P&R expertosApr 06, 2025
¿Cómo puedo copiar un vector <u64>para usarlo varias veces?
Estoy intentando copiar un vector en una variable local porque necesito dos instancias del mismo vector para mi proyecto. He visto algunos métodos, pero no estoy del todo seguro de cómo implementarlos correctamente. ¿Alguien puede guiarme sobre las mejores prácticas o métodos para lograrlo en el lenguaje de programación Move?
- Move CLI
- Move
04 - DiscusiónelfDani139Apr 05, 2025
¿Otw está disponible solo por primera vez?
Estoy intentando entender si la funcionalidad de Otw está pensada para invocarse solo una vez, especialmente en el contexto de la inicialización o creación de una moneda. ¿Alguien podría explicar su propósito?
- Move CLI
01 - P&R expertosyhant3251Apr 05, 2025
¿Cómo concatenar cadenas en el lenguaje Move?
Estoy intentando concatenar dos cadenas usando el lenguaje de programación Move. ¿Puede alguien guiarme sobre cómo hacer esto?
- Move CLI
- Move
01 - P&R expertosApr 04, 2025
¿Cómo corregir el error de «módulo desvinculado» en el paquete Move implementado?
Estoy usando el router_addrpaquete e intentando llamar a una función desde mi nuevo paquete. A pesar de que está implementado en la red, aparece un error que diceUnbound module 'router_addr::router'. ¿Cómo soluciono este error?
- Move CLI
02 - Discusiónandreweth.148Apr 03, 2025
¿La mejor forma de gestionar un registro de usuario único en Sui?
Estoy intentando configurar un registro único de nombres de usuario en Sui y estoy considerando usar vec_set. Me preocupa su escalabilidad. ¿Es esta la única forma y cómo se escala en Sui?
- Move CLI
22 - P&R expertosBolke 88Apr 02, 2025
¿Se puede usar la aleatoriedad en las funciones públicas de Move que no son de entrada?
Soy nuevo en el uso de la aleatoriedad en la programación de Move. La documentación sugiere usar el azar solo en las funciones de entrada. Sin embargo, estoy considerando usar la aleatoriedad para establecer valores, no para el código de bifurcación. ¿Está bien usar la aleatoriedad en una función pública de esta manera?
- Move CLI
- Move
11Mejor Respuesta - P&R expertosApr 01, 2025
Why does Rust enum with Box create cycle warning even with phantom?
I'm working with Rust and I have the following code: public enum Expr { Apply(Box, Box), } It seems like I'm getting a cycle warning because Expr contains Box. However, I'm using phantom types, and I thought that would make it safe to compile. Can someone explain why this cycle warning is happening despite using phantom types?
- Move CLI
- Move
21Mejor Respuesta
Move is an executable bytecode language used to implement custom transactions and smart contracts.
Gana tu parte de 1000 Sui
Gana puntos de reputación y obtén recompensas por ayudar a crecer a la comunidad de Sui.
- Move CLI
- Move
- Move Bug
- Move Module
- Move Script
- Smart Contract
- Move Prover
- Feature Request