Tengo una asignación anidada que va de la dirección al planId a la estructura (suscripción)
mapping(address => mapping(uint => subscription)) public subscriptions
Tengo una función para cancelar un plan específico que se ha creado, pero cuando activé la función, recibí un error que dice
La transacción se quedó sin gasolina. Aumente el límite de gas.
Cuando depuré el error, el depurador señala el error dentro de la función de cancelación en la línea de código a continuación
function cancel(uint planId) external {
Subscription storage subscription = subscriptions[msg.sender][planId];
require(
subscription.subscriber!= address(0),
'this subscription does not exist'
);
delete subscriptions[msg.sender][planId]; // this one
emit SubscriptionCancelled(msg.sender, planId, block.timestamp);
}
¿Cómo puedo solucionar ese error?
Gracias
Solución del problema
Estoy enfrentando un problema similar. Esto es lo que hice, me di cuenta de que no es posible asignar un valor predeterminado a un mapeo anidado una vez que lo cambia. En su ejemplo, puede intentar asignar una estructura con diferentes valores (que puede considerar como un reemplazo por defecto) y luego no arrojará un error.
El siguiente es mi ejemplo:
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract test{
mapping(address=> mapping(uint => uint)) public address_id_liked;
function register(uint id) external{
address_id_liked[msg.sender][id] = 1;
}
function test_(uint index) external view returns(uint) {
uint out = address_id_liked[msg.sender][index];
return(out);
}
function ops(uint id, uint num) external {
address_id_liked[msg.sender][id] = num;
}
}
En la ops
función, quería que mi mapeo tuviera un valor predeterminado, pero no está sucediendo. Así que intenté ingresar el valor que quiero asignar al mapeo anidado. Y está tomando todos los valores uint excepto 0 (el valor predeterminado)
PD: estaba usando mapping(address=> mapping(uint => bool)) public address_id_liked
anteriormente. Pero no puedo eliminar/asignar falso, por lo que probé con uint.
¡Espero que esto ayude!
No hay comentarios:
Publicar un comentario