No se pueden ejecutar contratos usando 'Ethereum Wallet' en Etherum Private Chain debido a falta de gasolina

Creé Ethereum Private Network y extraje suficiente éter. Implementé un contrato inteligente 'Hello World' e intenté ejecutar las funciones en el contrato implementado.

Pero el contrato no se ejecutará debido a la escasez de gasolina.

Monedero Ethereum mostrando éter extraído

Ejecución de contrato en Wallet muestra el error de falta de gas

He incluido el código del contrato para su referencia.

pragma solidity ^0.4.2;

contract HelloWorld {
    uint public balance;

    function HelloWorld(){
             balance=1000;
    }
    function deposit(uint _value) returns (uint _newValue){
             balance += _value;
             return balance;    
    }
}

He ejecutado con éxito este contrato usando browsersolidity y truffle. Pero no se ejecutará con Ethereum Wallet.

La billetera miró el contrato y concluyó que probablemente arrojará una excepción. Le está haciendo un favor al usuario al advertirlo antes del intento. Por favor, publique su código de contrato. Alguien debería ser capaz de detectar el problema.
@Rob Hitchens He actualizado la pregunta. Pero el contrato se ejecuta con éxito usando browsersolidity y truffle.

Respuestas (1)

Después de solidity 0.4.0, debe especificar "pagadero" para cualquier función que reciba cualquiera. Previene el envío de ether a funciones que no lo esperan y no saben cómo manejarlo. Como habrás adivinado, el envío a funciones no pagables arroja resultados como los que estás viendo.

No veo una razón obvia por la que su contrato existente no se ejecute mientras no envíe valor con el mensaje. Probablemente valga la pena explorar.

Como alternativa, agregué pagos para que pueda transferir cualquiera de los dos (parece que se enviaron 4 en la captura de pantalla) sin la excepción. También ajustó ligeramente los parámetros y las partes internas para que el "valor" sea el valor real recibido.

pragma solidity ^0.4.2;

contract HelloWorld {
    uint public balance;

    function HelloWorld(){
             balance=1000;
    }
    function deposit() payable returns (uint _newValue){
             balance += msg.value;
             return balance;    
    }
}

Espero eso ayude.