Publicación
Comparte tu conocimiento.
+15
Fallo en la transacción Sui: objetos reservados para otra transacción
Me encuentro con un problema persistente JsonRpcError
al intentar ejecutar transacciones en Sui. El error indica que los objetos están reservados para otra transacción, aunque he implementado el procesamiento secuencial de las transacciones con retrasos.
JsonRpcError: Failed to sign transaction by a quorum of validators because one or more of its objects is reserved for another transaction. Other transactions locking these objects:
- AV7coSQHWg5vN3S47xada6UiZGW54xxUNhRv1QUPqWK (stake 33.83)
- 0x1c20f15cbe780ee7586a2df90c1ab70861ca77a15970bea8702a8cf97bd3eed9
- 0x1c20f15cbe780ee7586a2df90c1ab70861ca77a15970bea8702a8cf97bd3eed9
- 0x1c20f15cbe780ee7586a2df90c1ab70861ca77a15970bea8702a8cf97bd3eed9
He intentado:
- Ejecución secuencial de la transacción (esperando a que se complete la transacción anterior)
- Se agregaron retrasos de 3 segundos entre transacciones
Y sigo recibiendo el mismo error de forma constante.
Uso de Sui RPC para el envío de transacciones. El mismo ID de objeto aparece varias veces en la lista de objetos bloqueados. El error se produce incluso con una secuenciación cuidadosa de las transacciones.
- ¿Qué hace que los objetos se «reserven» para otras transacciones?
- ¿Cómo puedo comprobar correctamente si un objeto está disponible antes de usarlo en una transacción?
- ¿Existen mejores prácticas para gestionar los bloqueos de objetos en Sui?
- ¿Podría estar relacionado con el tiempo de finalización de la transacción?
¿Alguien se ha encontrado con este problema antes? ¡Cualquier información sobre la gestión adecuada de objetos en las transacciones de Sui sería muy apreciada!
- Sui
- Transaction Processing
- Move
Respuestas
4Sui utiliza uncontrol de concurrencia optimista, lo que significa que los objetos se bloquean cuando se utilizan en una transacción hasta que la transacción finalice o caduque.
Aunque esperes 3 segundos entre una transacción y otra, si la anterior no se ha finalizado, el objeto permanece bloqueado. Esto significa que la transacción sigue pendiente y tiene acceso exclusivo al objeto.
Cómo comprobar si un objeto está disponible
Utilice el método Sui RPC:
sui_getObject
Compruebe la respuesta para "status": "Locked"
o"owner": "locked"
.
Ejemplo de solicitud:
{
"jsonrpc": "2.0",
"id": 1,
"method": "sui_getObject",
"params": ["0x...object_id..."]
}
Si está bloqueado, espera un poco más y vuelve a intentarlo más tarde.
Oye, estás intentando realizar una transacción demasiado rápido y los objetos se han bloqueado.
Intenta enviar una transacción con los mismos objetos a la vez. Si envías dos transacciones, es posible que algunos validadores acepten la primera, otros acepten la segunda y tus objetos se bloquearán porque cada transacción necesita un 66,7% de validadores y es posible que solo obtengas el 50%.
=> espera a que se restablezca la época, ¡es pronto
Consulta más información: https://forums.sui.io/t/beginner-tutorial-error-when-deploying-simple-sui-package/44842
El error significa que los objetos que usa tu transacción siguen bloqueados por transacciones anteriores que aún no se han finalizado. Incluso con retrasos, los objetos permanecen reservados hasta que esas transacciones se completen en cadena.
Para solucionarlo:
- Confirme siempre que las transacciones anteriores relacionadas con los objetos se hayan finalizado por completo antes de volver a utilizarlos.
- Comprueba el estado de los objetos a través de Sui RPC para asegurarte de que están desbloqueados.
- Evite enviar transacciones paralelas o rápidas sobre los mismos objetos.
- Implemente los reintentos con comprobaciones de finalización y retroceso en lugar de demoras fijas.
Este bloqueo evita actualizaciones conflictivas y es normal en el modelo de objetos de Sui. JsonRpcError
La secuenciación adecuada y la confirmación de la finalidad son fundamentales para evitarlo.
Este error se produce si intenta ejecutar dos transacciones simultáneamente (por ejemplo, iniciar una antes de que finalice la anterior). Si vuelves a intentar ejecutar la transacción de publicación sin ejecutar otra transacción antes o al mismo tiempo, debería realizarse correctamente. También es posible que tengas que sacar más gasolina del grifo (o esperar un día, a que pase la época, a que los objetos se desbloqueen)
Cuando realizas una transacción en la que intervienen objetos de tu dirección (como los objetos de gas), los validadores reservan la última versión del objeto para que la utilice la transacción que está firmando. Si intentas ejecutar dos transacciones simultáneamente y se refieren al mismo objeto, competirán entre sí por las firmas de los validadores. En este caso, una de las transacciones gana y se ejecuta, y la otra no consigue suficientes firmas. En el caso desafortunado, es posible que ambas transacciones no obtengan suficientes firmas (si ambas obtuvieron más de un tercio de las firmas del validador, ninguna de las dos podrá superar los dos tercios, que es el umbral), esto se denomina equívoco y, a partir de ese momento, los objetos que sirvieron de entrada a ambas transacciones no se pueden utilizar para ninguna otra transacción.
Al final de la época (duran aproximadamente un día; puedes comprobar el progreso hasta el siguiente cambio de época en https://suiexplorer.com), se liberan todos los bloqueos, por lo que puedes volver a utilizar los objetos, pero si no has cambiado de época desde la última vez que lo intentaste, necesitarás adquirir más gas.
Sabes la respuesta?
Inicie sesión y compártalo.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Gana tu parte de 1000 Sui
Gana puntos de reputación y obtén recompensas por ayudar a crecer a la comunidad de Sui.
- ¿Por qué BCS requiere un orden de campo exacto para la deserialización cuando las estructuras Move tienen campos con nombre?53
- «Errores de verificación de múltiples fuentes» en las publicaciones del módulo Sui Move: resolución automática de errores42
- Fallo en la transacción Sui: objetos reservados para otra transacción24
- ¿Cómo interactúan las restricciones de capacidad con los campos dinámicos en colecciones heterogéneas?04