¿Qué es el evento de función? [duplicar]

¿Pueden algunos explicar qué es un evento en solidium... qué podemos hacer con un evento en nuestro contrato... sería bueno si tuviera la amabilidad de explicarlo con algún código... puede usar el siguiente código para explicarlo agregando uno? o dos eventos...

contract CarRentalServiceCustomer is GeneralAccount{
    string public customerName;
    string public postalAddress;
    string public phoneNumber;
    string public emailAddress;

    mapping(address=>CarRentService) public rentCar;

    struct CarRentService{ 
        bool active;
        uint lastUpdate;
        uint registrationFee;   // e.g. To register DriveNow or Car2GO, you have to pay approx 25 Euro
        uint256 rent;              // youtube video suggest it to uint256, then have to provide 18 digit number
    }

    function CarRentalServiceCustomer(string _name,string _postalAddress,
                                    string _phoneNumber,string _emailAddress) payable {
        customerName  = _name;
        postalAddress = _postalAddress;
        phoneNumber   = _phoneNumber;
        emailAddress  = _emailAddress;
    }

    function registerToCarRentalServiceProvider(address _providerAddress) onlyOwner {

        rentCar[_providerAddress] = CarRentService({
                                    active: true, 
                                    lastUpdate: now,
                                    registrationFee: 0,
                                    rent: 0
                                    });
    }

    function setRegistrationFee(uint256 _registrationFee) {
        if(rentCar[msg.sender].active){
            rentCar[msg.sender].lastUpdate      = now;
            rentCar[msg.sender].registrationFee = _registrationFee;
        }
        else{
            throw;
        }
    }

    function setCarRent(uint256 _rent) {
        if(rentCar[msg.sender].active){
            rentCar[msg.sender].lastUpdate = now;
            rentCar[msg.sender].rent       = _rent;
        }
        else{
            throw;
        }
    }

    function payRegistrationFeeToCarRentalServiceProvider(address _providerAddress) returns (bool){
        if(_providerAddress.send(rentCar[_providerAddress].registrationFee))
        {
            rentCar[_providerAddress].registrationFee = 0;
            return true;
        }
        else{
            return false;
        }
    }

    function payRentToCarRentalServiceProvider(address _providerAddress) returns (bool){
        if(_providerAddress.send(rentCar[_providerAddress].rent))
        {
            rentCar[_providerAddress].rent = 0;
            return true;
        }
        else{
            return false;
        }
    }

    function unsubscribeFromCarRentalService(address _providerAddress){
        if(rentCar[_providerAddress].active = false && rentCar[_providerAddress].rent == 0 
        && rentCar[_providerAddress].registrationFee == 0 ){
            rentCar[_providerAddress].active = false;
        } else {
            throw;
        }
    }

    function payTestFunds() payable{
        //This is a do nothing function
    }
}

Respuestas (1)

Eche un vistazo aquí: http://solidity.readthedocs.io/en/develop/contracts.html#events

Básicamente, los eventos crean entradas de registro en la cadena de bloques. Los encuentro especialmente útiles para funciones que modifican el estado de la cadena de bloques (transacciones). Las funciones que modifican el estado de la cadena de bloques no pueden tener valores de retorno, debido a que su ejecución no se completa de inmediato, solo finalizan una vez que se ha minado el bloque que contiene la transacción.

Para tu ejemplo: Digamos que quieres alquilar un coche. Lo caro que es puede depender de ciertos parámetros y condiciones. Entonces, para que el usuario sepa cuánto pagó realmente, puede activar un evento que contenga esa información. El usuario puede más tarde (después de que se haya extraído la transacción) acceder a los datos del evento recuperando un recibo de transacción para esta transacción.

Hola Max. Creo que es una buena respuesta y veo a lo que te refieres con la minería. Tal vez haya otra forma de decir "Las funciones que modifican el estado de la cadena de bloques no pueden tener valores de retorno". Me parece engañoso de esta manera.