Incrementar una variable uint da como resultado un valor inesperado

Tengo la función resolveProject()en mi contrato, que itera sobre una lista de tareas, digamos 2, ambas con estado 3.

function resolveProject() {
    // ...

    uint closedTask;
    uint totalPayout;

    for(uint i=0; i<taskIds.length; i++){
        if(tasks[taskIds[i]].status == 3) {
            // Issue here
            closedTask = closedTask + 1;
            totalPayout += tasks[taskIds[i]].compensationOracle;
        }
    }
    // ...
}

Después de una iteración, la línea closedTask = closedTask + 1se asigna 1000000000000000000a la variable, donde mi intención sería establecerla en 1. Intenté usar también closedTask++con el mismo resultado.

1000000000000000000gwei es 1eth, ¿está ocurriendo algún tipo de conversión implícita? Obtengo esto cuando ejecuto Remix JavaScript VM.

Editar 1

El código de Solidity funciona realmente bien, pero creo que podría haber un error en el panel de depuración de Remix.

Valor de variable incorrecto en la consola de depuración de Remix

en la línea 146 hay una comparación entre closedTasky taskIds.length. Este último tiene 3 elementos, como puede ver a la derecha, pero closedTasken el panel de depuración se muestran 3000000000000000000. Aún así, esa comparación se vuelve verdadera cuando se ejecuta, puedo confirmar el projectStatusconjunto en 2.

Edición 2 Creé un error en remix-ide' github, se ha etiquetado como error, así que asumo que esto confirma que hay un error menor con la consola de depuración de Remix.

https://github.com/ethereum/remix-ide/issues/1599

Respuestas (1)

Solo debería estar sumando 1. El problema está casi definitivamente en el método que estás usando para leer la variable, que no podemos ver.

Escriba algunas pruebas y, si sus pruebas fallan, publique la prueba fallida.

Veo el valor asignado en la consola de depuración de Remix y empiezo a pensar que esto podría ser un problema con Remix, porque la otra variable local totalPayoutni siquiera aparece en la parte de Solidity Local del panel de depuración. Intentaré verificar manualmente con geth y regresaré, es bueno saber que comparte mi comportamiento esperado para el incremento.
El código de Solidity funciona realmente bien, creo que este es un problema con la consola de depuración de Remix, actualizaré la pregunta con más detalles