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.
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
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.
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
digitaler Esel
digitaler Esel
Rob Hitchens