Parece que hay un problema con el manejo de los eventos del contrato y no estoy seguro si está en el nivel de EVM o solo en web3js.
Tengo 2 contratos "SomeCoin" y "SomeConcert". Ambos contratos emiten un evento de "Transferencia" cuando hay una transferencia de artículo de una dirección a otra. Para "SomeCoin" el objeto de la transferencia es una moneda/token, para "SomeConcert" el objeto de la transferencia son las entradas para conciertos (que tienen un precio en "SomeCoins").
Cuando llamé al método "AlgúnConcierto" para comprar boletos, la lógica transferirá algunas "AlgunasCoins" de mi dirección a la dirección de "AlgúnConcierto". Todo está muy bien excepto por el manejo del evento. Vi 2 eventos emitidos, el evento "Comprar" emitido desde el contrato "AlgúnConcierto" y el evento "Transferir" desde el contrato "AlgunaCoin". Si cambio el nombre del evento "Transferir" en el contrato "SomeCoin" a "TransferCoin", solo veré el evento "Comprar".
Entonces, aparentemente, web3 o la capa subyacente confunden los eventos emitidos por el contrato de la capa interna con el contrato de la capa externa. Al menos esta es la conclusión a la que he llegado.
¿Es esto un error de web3js? ¿Hay algo que me perdí en el manejo de eventos que podría haber evitado la confusión? El código que tengo para el manejo de eventos es bastante estándar.
... return someConcertInstance.buyTickets(3, {from: customer1}); }).then(function(receipt) { assert.equal(receipt.logs.length, 1, "should have received 1 events for buy-ticket)"); assert.equal(receipt.logs[0].args._numberOfTickets, 3, "Number of tix bought must be 3");
El caso de prueba falló en la primera afirmación y descubrí que se emiten 2 eventos (transferencia y compra).
Resuelto en los comentarios anteriores, pasando a una respuesta para futuros lectores.
El código en la pregunta está usando truffle
. Al enviar una transacción en truffle, el resultado que obtiene tiene un logs
campo, que se ensambla a través de este código: https://github.com/trufflesuite/truffle-contract/blob/develop/contract.js#L44 .
Ese código descarta registros con temas que no coinciden con una firma de evento conocida en la ABI del contrato al que está llamando. Considero que ese comportamiento es un error de diseño.
usuario19510
Tomás
usuario19510
Tomás
usuario19510
usuario19510
Tomás
usuario19510
usuario19510
address
campo, por lo que puede filtrar eso.usuario19510
Tomás
usuario19510