Cómo escuchar eventos de contrato en Drizzle

Tomemos el ejemplo del SimpleStoragecontrato que viene con la caja de trufadrizzle-box

¿Cómo podemos escuchar el evento StorageSety console.logenviarlo a la consola JS?

lloviznaOpciones.js

import SimpleStorage from './../build/contracts/SimpleStorage.json'

const drizzleOptions = {
web3: {
    block: false,
    fallback: {
    type: 'ws',
    url: 'ws://127.0.0.1:8545'
    }
},
contracts: [
    SimpleStorage
],
events: {
    SimpleStorage: ['StorageSet'],
},
polls: {
    accounts: 1500
}
}

export default drizzleOptions

Respuestas (2)

Supongo que usa Metamask, por lo que el problema podría ser el siguiente: "El proveedor actual no admite suscripciones: MetamaskInpageProvider" .

Tampoco veo este mensaje de error, ya que drizzle no lo imprime. Puedes echar un vistazo aquí . De esta manera, debería poder probar esa suscripción de eventos por su cuenta/manualmente. Algo como eso:

drizzle.contracts.SimpleStorage.events
    .StorageSet({/* eventOptions */}, (error, event) => {
        console.log(error, event);
    })
    .on('data', (event) => console.log(event))
    .on('changed', (event) => console.log(event))
    .on('error', (error) => console.log(error));

Aquí puede encontrar la documentación para eventos web3.

Opcionalmente, puede verificar los eventos en el recibo de la transacción.

De hecho, puedo reproducir esto. Me pregunto cómo es útil la llovizna en la producción donde solo tiene MM como proveedor. ¿Encontraste una solución @marius?

Estoy intentando hacer algo similar pero, según tengo entendido, Drizzle aún no es compatible con esto. Aquí está el problema que encontré para rastrearlo: https://github.com/trufflesuite/drizzle/issues/147