Asignación de una dirección a dos saldos

Quiero asignar una dirección a dos saldos, porque en el contrato tenemos dos tipos de fichas, es decir, energía y potencia. ¿El siguiente código es correcto en el programa Solidity?

mapping(address => uint256) Enbalances;
mapping(address => uint256) Pwbalances;

Aquí está la función para obtener el equilibrio de energía:

function balanceOfEn(address _owner) constant returns (uint256 Enbalance) {
    return Enbalances[_owner];
  }

y llamo a esta función de la siguiente manera:

contractInstance.methods.balanceOfEn('0x1c3bcab2050Fbe3A0c4958dd5776558EE9720460').call({ from: '0x1c3bcab2050Fbe3A0c4958dd5776558EE9720460' }, function(error, result) {
    console.log(error);
    console.log(result)
});

PD: cuando quiero obtener un saldo, recibo el siguiente error:

> Error: Couldn't decode uint256 from ABI: 0x
    at SolidityTypeUInt.formatOutputUInt (/home/ubuntu/parityewf/node_modules/we                                                                                                             b3-eth-abi/src/formatters.js:174:15)
    at SolidityTypeUInt.SolidityType.decode (/home/ubuntu/parityewf/node_modules                                                                                                             /web3-eth-abi/src/type.js:252:17)
    at /home/ubuntu/parityewf/node_modules/web3-eth-abi/src/index.js:327:49
    at Array.forEach (native)
    at ABICoder.decodeParameters (/home/ubuntu/parityewf/node_modules/web3-eth-a                                                                                                             bi/src/index.js:326:13)
    at Contract._decodeMethodReturn (/home/ubuntu/parityewf/node_modules/web3-et                                                                                                             h-contract/src/index.js:459:22)
    at Method.outputFormatter (/home/ubuntu/parityewf/node_modules/web3-eth-cont                                                                                                             ract/src/index.js:812:46)
    at Method.formatOutput (/home/ubuntu/parityewf/node_modules/web3-core-method                                                                                                             /src/index.js:163:54)
    at sendTxCallback (/home/ubuntu/parityewf/node_modules/web3-core-method/src/                                                                                                             index.js:467:33)
    at /home/ubuntu/parityewf/node_modules/web3-core-requestmanager/src/index.js                                                                                                             :147:9
    at XMLHttpRequest.request.onreadystatechange (/home/ubuntu/parityewf/node_mo                                                                                                             dules/web3-providers-http/src/index.js:77:13)
    at XMLHttpRequestEventTarget.dispatchEvent (/home/ubuntu/parityewf/node_modu                                                                                                             les/xhr2/lib/xhr2.js:64:18)
    at XMLHttpRequest._setReadyState (/home/ubuntu/parityewf/node_modules/xhr2/l                                                                                                             ib/xhr2.js:354:12)
    at XMLHttpRequest._onHttpResponseEnd (/home/ubuntu/parityewf/node_modules/xh                                                                                                             r2/lib/xhr2.js:509:12)
    at IncomingMessage.<anonymous> (/home/ubuntu/parityewf/node_modules/xhr2/lib                                                                                                             /xhr2.js:469:24)
    at emitNone (events.js:91:20)
    at IncomingMessage.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:974:12)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickDomainCallback (internal/process/next_tick.js:128:9)

¿Es correcto seguir el código alternativo para asignar la dirección a dos saldos?

mapping (address => uint256) Enbalances;
mapping (address => mapping (address => uint256)) Pwbalances;
que error recibes
parece que está relacionado con su código js, ​​y no con ETH. Además, si configura sus dos mappins como públicos, Solidity creará captadores automáticos para que no tenga que hacerlo.
Parece que tiene el ABI incorrecto para este contrato, ¿tal vez una versión desactualizada de su contrato?
@Eli Drion ¿Cuál es su opinión sobre el mapeo (dirección => uint256) Enbalances; mapeo (dirección => mapeo (dirección => uint256)) Pwbalances; ? no es mejor?
Creo que es innecesario en tu caso.
@ Eli Drion ¿Crees que si lo reemplazo con mapeo (dirección => uint256) Enbalances; mapeo(dirección => uint256) Pwsaldos; ¿funciona?
@Eli Drion Actualicé ABI pero sigo teniendo el mismo problema. ¿Debo implementar el contrato nuevamente?
Parece que estás perdido entre tus diferentes versiones. Implemente uno en la red de prueba con las asignaciones "simples", actualice el ABI y pruebe. Deberia de funcionar.

Respuestas (1)

  1. Reconstruye tus artefactos (usando truffle compilepor ejemplo)

  2. puedes simplificarcontractInstance.methods.balanceOfEn('...').call({ from: '...' })

    AcontractInstance.balanceOfEn('...', { from: '...' })

    Y, de hecho, dado que Enbalancesse declara public, puede deshacerse de la función balanceOfEnen su contrato y luego usarcontractInstance.Enbalances('...', { from: '...' })

¿Cuál es su opinión sobre el mapeo (dirección => uint256) Enbalances; mapeo (dirección => mapeo (dirección => uint256)) Pwbalances; ? no es mejor?
Mi ABI es generado por remix y también probé otra función y funciona. pero en el caso de balanceOfEn tengo este problema.
@goodvibrationActualicé ABI pero sigo teniendo el mismo problema. ¿Debo implementar el contrato nuevamente?