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 + 1
se asigna 1000000000000000000
a la variable, donde mi intención sería establecerla en 1
. Intenté usar también closedTask++
con el mismo resultado.
1000000000000000000
gwei es 1
eth, ¿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.
en la línea 146 hay una comparación entre closedTask
y taskIds.length
. Este último tiene 3 elementos, como puede ver a la derecha, pero closedTask
en el panel de depuración se muestran 3000000000000000000
. Aún así, esa comparación se vuelve verdadera cuando se ejecuta, puedo confirmar el projectStatus
conjunto 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.
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.
zeta
totalPayout
ni 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.zeta