Drizzle cacheCall aktualisiert die Daten nicht korrekt

Ich habe eine Reaktionskomponente, die über Nieselregen mit einem Soliditätsvertrag interagiert. Ich speichere einen cacheCallIndex im Konstruktor:

this.opcTokenCacheCallIndex = context.drizzle.contracts.OPCToken.methods.balanceOf.cacheCall(this.props.accounts[0], {from: this.props.accounts[0]});

Wenn dann die Komponente aktualisiert wird, verwende ich diesen Index, um den Drizzle-Speicher zu überprüfen

const opcBalance = await this.opcTokenCacheCallIndex.call(this.props.accounts[0], {from: this.props.accounts[0]});

Wenn ich mich jetzt bei opcBalance abmelde, sehe ich das mit verknüpfte Guthaben accounts[0]. Ich rufe dann eine andere Methode in meiner App auf, von der ich weiß, dass sie den Saldo von accounts[0]erhöht, aber ich sehe dies nicht inopcBalance - was gleich bleibt. Ich weiß, dass sich das Guthaben definitiv erhöht hat, weil:

1) Wenn ich die Seite aktualisiere und opcBalance wieder abmelde, sehe ich jetzt, dass es zugenommen hat

2) Ich habe die Methode, die ich anrufe, gründlich getestet, von der ich erwarte, dass sie das Gleichgewicht erhöht

Angesichts dessen bin ich mir sicher, dass die von mir aufgerufene Transaktion den Token-Saldo erfolgreich erhöht, aber Truffle spiegelt diese aktualisierten Informationen nicht wider, obwohl ich cacheCall verwende. Verstehe ich den Anwendungsfall falsch cacheCall? Und wenn ja, wie kann ich die Blockchain kontinuierlich nach frischen Daten abfragen?

Antworten (1)

Ich arbeite auch mit Nieselregen und bin auf diese Anleitung gestoßen

Zusammenfassend müssen Sie den Status eines Vertrags als Requisite erhalten, aber auch die Drizzle-Variable, um Anrufe zu tätigen.

Um nach Updates für den Drizzle Store zu suchen, versuchen Sie Folgendes:

constructor(props, context) {
  super(props);
  this.contracts = context.drizzle.contracts
  this.opcTokenCacheCallIndex = this.contracts.OPCToken.methods.balanceOf.cacheCall(this.props.accounts[0], {from: this.props.accounts[0]})
}

render() {
  var data = this.props.OPCToken.balanceOf[this.opcTokenCacheCallIndex].value
  return (
    <div>
      {data}
    </div>
  )
}