¿Cómo obtener "registros de eventos" similares a "remix"?

Tengo un evento de la siguiente manera:

event LogNewObject(address sender, bytes32 indexed id, bytes32 sub_states_types, bytes32 sub_states_values, address owner);

Y este evento se usa en la siguiente función:

function newObject(bytes32 _id, uint256 number_of_sub_states, bytes32[10] sub_states_types, bytes32[10] sub_states_values, address _owner) public returns(bool success) {
        require(!isObject(_id));

        uint256 counter=0;
        for(counter; counter < number_of_sub_states; counter++) {

            objectStructs[_id].state.sub_state[sub_states_types[counter]] = sub_states_values[counter];

            emit LogNewObject(msg.sender, _id, bytes32(sub_states_types[counter]), bytes32(sub_states_values[counter]), _owner);

        }

        objectStructs[_id].owner = _owner;
        objectStructs[_id].isObject = true;

        objectList.push(_id);

        return true;
    }

Quiero obtener los registros como remix como muestra la siguiente imagen:

ingrese la descripción de la imagen aquí

Sin embargo, cuando uso el siguiente código para obtener registros de eventos:

var Ev = contractInstance.LogNewObject({}, {fromBlock: 0, toBlock: 'latest'});
       Ev.get((error, events) => {
       if (!error) {
          function ShowResults(event) {
            console.log('sub_states_types: ' + event.args.sub_states_types);
            console.log('sub_states_values: ' + event.args.sub_states_values);
            }
          events.forEach(ShowResults);
        } else {
        console.log('Error');
          }
        });

Recibo el siguiente error:

TypeError: contractInstance.LogNewObject no es una función

¿Cómo puedo llamar event LogNewObjectpara obtener el resultado, como la salida de registros de remezcla como muestra la imagen de arriba?

NOTA: modifiqué mis comandos de acuerdo con la respuesta del usuario "oktapodia". el primer spep ahora está libre de errores, sin embargo, recibo otro error de la siguiente manera:

> var Ev = contractInstance.events.LogNewObject({}, {fromBlock: 0, toBlock: 'latest'});
undefined
>        Ev.events.get((error, events) => {
...        if (!error) {
.....           function ShowResults(event) {
.......             console.log('sub_states_types: ' + event.args.sub_states_types);
.......             console.log('sub_states_values: ' + event.args.sub_states_values);
.......             }
.....           events.forEach(ShowResults);
.....         } else {
.....         console.log('Error');
.....           }
...         });
TypeError: Cannot read property 'get' of undefined

Y si uso el siguiente formato, recibo nuevamente el error anterior:

> var Ev = contractInstance.events.LogNewObject({}, {fromBlock: 0, toBlock: 'latest'});
undefined
>        Ev.get((error, events) => {
...        if (!error) {
.....           function ShowResults(event) {
.......             console.log('sub_states_types: ' + event.args.sub_states_types);
.......             console.log('sub_states_values: ' + event.args.sub_states_values);
.......             }
.....           events.forEach(ShowResults);
.....         } else {
.....         console.log('Error');
.....           }
...         });
TypeError: Ev.get is not a functionI also used the command proposed by user "oktapodia", however I receive this error :

ingrese la descripción de la imagen aquí

También usé el comando como usuario "oktapodia" se explica en su respuesta. Sin embargo, recibo un nuevo error de la siguiente manera: "Error de tipo: no se puede leer la propiedad 'LogNewObject' de undefined"

ingrese la descripción de la imagen aquí

Nota importante: aquí está mi código de contrato inteligente :

pragma solidity 0.4.23; 

contract RFID {

    struct StateStruct {
        bytes32 description;
        mapping(bytes32 => bytes32) sub_state;
    }

    struct ObjectStruct {
        StateStruct state;
        address owner; 
        bool isObject;
    }

    mapping(bytes32 => ObjectStruct) objectStructs;
    bytes32[] public objectList;

    event LogNewObject(address sender, bytes32 indexed id, bytes32 sub_states_types, bytes32 sub_states_values, address owner);
    event LogChangeObjectState(address sender, bytes32 indexed id, bytes32 sub_states_types, bytes32 sub_states_values);
    event LogChangeObjectOwner(address sender, bytes32 indexed id, address newOwner);

    function isObject(bytes32 _id) public view returns(bool isIndeed) {
        return objectStructs[_id].isObject;
    }

    function getObjectCount() public view returns(uint count) {
        return objectList.length;
    }

    /*function setArraySize(uint256 _number_of_sub_states) public {

        number_of_sub_states = _number_of_sub_states;

    }

    function getArraySize() view public returns (uint256) {
       return number_of_sub_states;
    }*/

    function newObject(bytes32 _id, uint256 number_of_sub_states, bytes32[10] sub_states_types, bytes32[10] sub_states_values, address _owner) public returns(bool success) {
        require(!isObject(_id));

        uint256 counter=0;
        for(counter; counter < number_of_sub_states; counter++) {

            objectStructs[_id].state.sub_state[sub_states_types[counter]] = sub_states_values[counter];

            emit LogNewObject(msg.sender, _id, bytes32(sub_states_types[counter]), bytes32(sub_states_values[counter]), _owner);

        }

        objectStructs[_id].owner = _owner;
        objectStructs[_id].isObject = true;

        objectList.push(_id);

        return true;
    }

    function changeObjectState(bytes32 _id, uint256 number_of_sub_states, bytes32[10] sub_states_types, bytes32[10] sub_states_values) public returns(bool success) {
        require(isObject(_id));
        uint256 counter=0;
        for(counter; counter < number_of_sub_states; counter++) {

            objectStructs[_id].state.sub_state[sub_states_types[counter]] = sub_states_values[counter];

            emit LogChangeObjectState(msg.sender, _id, bytes32(sub_states_types[counter]), bytes32(sub_states_values[counter]));

        }
        //objectStructs[_id].state = StateStruct(_newState);
        //emit LogChangeObjectState(msg.sender, _id, _newState);
        return true;
    }

    function changeObjectOwner(bytes32 _id, address _newOwner) public returns(bool success) {
        require(isObject(_id));
        objectStructs[_id].owner = _newOwner;
        emit LogChangeObjectOwner(msg.sender, _id, _newOwner);
        return true;
    }

}

Y para invocar function newObjectusando el siguiente comando:

contractInstance.methods.newObject(web3.utils.asciiToHex("50"),3,[web3.utils.asciiToHex("location"),web3.utils.asciiToHex("price"),web3.utils.asciiToHex("sold"),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex("")],[web3.utils.asciiToHex("Paris"),web3.utils.asciiToHex("50"),web3.utils.asciiToHex("No"),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex("")], '0xE07b6e5a2026CC916A4E2Beb03767ae0ED6af773').send({ from: '0xE07b6e5a2026CC916A4E2Beb03767ae0ED6af773' }, function(error, result) {
    console.log(error);
    console.log(result)
});

Respuestas (3)

Parece que está utilizando la versión 1.0 de web3 con la nueva sintaxis ( doc aquí )

cambiar contractInstance.LogNewObjectacontractInstance.events.LogNewObject

Gracias. sin embargo, recibo otro error. Lo expliqué en mu pregunta. Gracias.

La respuesta es demasiado larga para agregarla en un solo comentario.

Debido a que lo está ejecutando directamente en su terminal y no desde un archivo, en NodeJS el punto y coma no es obligatorio y su terminal lo interpreta .oncomo una nueva línea en un nuevo ámbito y no como una función enlazada contractInstance.events.LogNewObject, el siguiente ejemplo debería funcionar directamente desde tu terminal, pero no realmente hermoso :)

contractInstance.events.LogNewObject({
  fromBlock: 0,
}, function(error, event){ console.log(event); }).on('data', function(event){
    console.log(event); // same results as the optional callback above
  }).on('changed', function(event){
    // remove event from local database
  }).on('error', console.error);
Recibo otro error: "Error de tipo: no se puede leer la propiedad 'LogNewObject' de undefined". Puse su captura de pantalla en mi pregunta. Gracias de nuevo.
¿Está seguro de que todavía está usando web3@^1.0, todavía tiene el event LogNewObjecten su contrato inteligente y su ABI es el último?
Sí, obtuve la versión web3 y aquí está el resultado: "web3.version '1.0.0-beta.34'". Y también ejecuté mi contrato con remix y command line web3js con éxito, quiero decir que su abi no cambió.
¿Estás seguro del caso? o la dirección del contrato?
Sí, hice una transacción en este momento. Puedes ver el resultado aquí: ibb.co/kDyfM7
Agregué el código de mi contrato inteligente a mi pregunta.
¿Puedes agregar también los addNewObjectargumentos, por favor? Voy a verificar localmente (en texto, por favor;))
¿Quieres decir "LogNewObject"? No está addNewObjecten mi contrato. tenemos solo function newObjecty event LogNewObject.
newObjectLo siento
¿Dónde exactamente debo agregar newObjectel parámetro? sus parámetros son function newObject(bytes32 _id, uint256 number_of_sub_states, bytes32[10] sub_states_types, bytes32[10] sub_states_values, address _owner)Gracias.
Me refiero al segundo comando que ingresaste, ibb.co/kDyfM7 . No quiero volver a copiarlo yo mismo tbh ^^
Agregué cómo invocar function newObjecta mi pregunta. Espero que esto sea lo que esperas. ¿Piensas cómo obtener una salida como remix?

No puede usar un get como ese con la API web3, de acuerdo con el documento y usar el emisor de eventos o una devolución de llamada:

ejemplo:

contractInstance.events.LogNewObject({
    fromBlock: 0,
}, function(error, event){ console.log(event); }) // callback here
.on('data', function(event){
    console.log(event); // same results as the optional callback above
})
.on('changed', function(event){
    // remove event from local database
})
.on('error', console.error);

// event output example
> {
    returnValues: {
        myIndexedParam: 20,
        myOtherIndexedParam: '0x123456789...',
        myNonIndexParam: 'My String'
    },
    raw: {
        data: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385',
        topics: ['0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385']
    },
    event: 'MyEvent',
    signature: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7',
    logIndex: 0,
    transactionIndex: 0,
    transactionHash: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385',
    blockHash: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7',
    blockNumber: 1234,
    address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'
}
Gracias, ¿podría decirme cómo usó su comando? porque, cuando uso su comando, recibo el error de que puse su captura de pantalla en mi pregunta. Gracias