Wie führe ich eine Aktion durch, um Datensätze an meine Datenbank zu senden?

Ich möchte, dass alle Transaktionen der Token über Smart Contract an meine Datenbank gesendet werden.

Zum Beispiel, A sendet 10Token an B, es wird auf der Blockchain angezeigt, aber ich möchte auch eine Funktion, mit der Smart Contract meinen Server diese Transaktionen speichern und aufzeichnen lässt.

Ich verwende PHP für diesen Datensatz.

Antworten (2)

Kein PHP-Guru hier, aber das Umkehren der Flusskontrolle könnte Ihnen helfen, die Details zu googeln.

Verträge interagieren in keiner Richtung mit anderen Systemen. Immer.

Die meisten Interaktionen, die stattfinden können, sind

  • Alice hat eine Transaktion mit Daten und/oder Ether unterschrieben und zum Vertrag geschickt, oder
  • Alice hört auf vom Vertrag ausgegebene Ereignisse.

Ein entsprechendes Ereignisprotokoll ist Teil des ERC20-Token-Standards, sodass Sie den Vertrag „abhören“ und die Ereignisse abfangen können. Der gebräuchlichste Weg, dies zu erreichen, ist die Javascript-Bibliothek "Web3".

In JavaScript würde man einen Rückruf verwenden, der immer dann ausgeführt wird, wenn ein Übertragungs-"Ereignis" im "Protokoll" beobachtet wird. Das könnte zum Beispiel ein Datenbankeinfügen auslösen oder auf andere Weise ein PHP-System informieren.

Es gibt einige experimentelle PHP-Web3-Implementierungen.

Hauptsache – der Vertrag macht einfach seine Sache. Der Server kann reagieren, indem er ihn beobachtet (Pull), aber niemals durch irgendetwas auf der Ethereum-Seite, das mit dem Server interagiert (Push).

Ich hoffe es hilft.

Der ganze Zweck einer PHP-Implementierung besteht hauptsächlich darin, dass es sich bewährt hat, alle Benutzereingaben zu überprüfen. Zahlungen oder andere Ereignisse können sicherer integriert werden. Also IMHO könnte der Fluss in Fällen erforderlich sein, in denen PHP eingestellt ist.
Ich erinnere mich, dass ich mich strikt gegen die Idee von PHP-generierten Transaktionen ausgesprochen habe, wegen "own your key". Aber in der UX-Realität verwenden Sie ein Multisig / Change Owner- Setup, das in einigen Fällen für webbasierte Benutzer beim Boarding geeignet sein kann. Web3p unterstützt möglicherweise das Signieren von Transaktionen, Ethereum-PHP jedoch nicht.
Die Lösung hängt davon ab, wo Sie versuchen, das Vertrauen zu setzen. Wenn es Vertrauen in den Vertrag gibt, dann werden sogar Listener so dem Server mitgeteilt. Es ist erwähnenswert, dass viele Implementierungen Server als vorhandene UI-Schichten enthalten und bei der clientseitigen Erstellung einer gültigen Transaktion helfen, die an die Kette übermittelt wird. Oder der Benutzer signiert eine Transaktion und übergibt die signierte Transaktion an einen Server, der sie an die Kette weiterleiten kann. Es ist hilfreich, sich Kette/Vertrag, Server und Client als dreieckige Topologie vorzustellen. Jeder Knoten kann mit den anderen beiden kommunizieren.

Sie könnten einen Listener-Prozess in PHP einrichten, um dies anzugehen. Angenommen, Sie haben einen Vertrag wie:

contract CallableEvents {
  event CalledTrigger1 (address indexed from);
  // ...
}

Sie müssen das \Ethereum\SmartContract-Objekt mit einem Event-Handler erweitern. Stellen Sie sicher, dass der Klassenname mit Ihrem Vertragsklassennamen übereinstimmt.

class CallableEvents extends SmartContract {
  public function onCalledTrigger1 (EthEvent $event) {
    echo '### ' . substr(__FUNCTION__, 2) . "(\Ethereum\EmittedEvent)\n";
    // Add your database code here
  }
}

// Initialize Web3 and Network ID as deployed with 'truffle migrate'
$web3 = new Ethereum('http://192.168.99.100:8545');
$networkId = '5777';

// Initialize the ABI from the truffle generated JSON 
$contracts = SmartContract::createFromTruffleBuildDirectory(
  'PATH_TO_YOUR/truffle/build/contracts',
   $web3,
   $networkId
);

// Initialize to process any transaction from current Block to the future.
new ContractEventProcessor(
  $web3,
  $contracts,
  'latest',
  'latest'
);

Wenn Sie jetzt das Skript ausführen, können Sie auf jedes Ereignis reagieren, das durch die Vertragsinteraktion in der Kette ausgelöst wird

php path_toScript_above.php

https://github.com/digitaldonkey/ethereum-php-eventlistener#integration-with-truffle-and-contract-events