Wie kann ich ein PHP-Skript auslösen, wenn eine Transaktion empfangen wird?

Mein Ziel ist es, dass ein PHP-Skript aufgerufen wird, wenn eine Transaktion von einer bestimmten Adresse empfangen wird.

Ich kenne Javascript, aber dies ist mein erster Ausflug in Node.js. Ich denke, der richtige Ansatz besteht darin, einen node.js-Webserver parallel zu Apache auszuführen und dafür ein Skript auszuführen, das web3.eth.filterein Javascript auslöst, das eine HTTP-Anfrage an Apache sendet.

Ist das richtig? Wenn ja, weiß ich nicht, wie man verwendet web3.eth.filter, die Dokumentation ist nicht großartig.

Ein paar Hinweise, bitte?

Antworten (2)

Wenn Sie mit node.js nicht vertraut sind, aber mit PHP und der Ethereum-Architektur, empfehle ich Ihnen, einen Blick auf die RPC-API zu werfen: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_newfilter

Insbesondere at eth_newFilterund eth_getFilterChangesdie Sie einfach über die Rest-API aufrufen können

z.B

# This will install a new filter with your desired address
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"address": "0x8888f1f195afa192cfee860698584c030f4c9db1"}],"id":73}' <address:port>

# Polling this will return updates - your received transactions 
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}' <address:port>
Wenn Sie viele Zahlungen haben - das wird irgendwann zu langsam.

Sie sollten sich den Ethereum-php Listener und Indexer ansehen

Im Gegensatz zu oben funktioniert es auch mit Clients, die EthFilter nicht unterstützen, wie Infura .

1) Erweitern Sie einen Ethereum\SmartContract und fügen Sie Event-Handler mit „on EventName “ hinzu

class CallableEvents extends SmartContract {
  public function onCalledTrigger1 (EthEvent $event) {
    echo '### ' . substr(__FUNCTION__, 2) . "(\Ethereum\EmittedEvent)\n";
    var_dump($event);
  }
  public function onCalledTrigger2 (EthEvent $event) {
    echo '### ' . substr(__FUNCTION__, 2) . "(\Ethereum\EmittedEvent)\n";
    var_dump($event);
  }
}

2) Initialisieren Sie Ihre Verträge (in diesem Beispiel von Truffle-Builds)

$web3 = new Ethereum('http://192.168.99.100:8545');
$networkId = '5777';

// Contract Classes must have same name as the solidity classes for this to work.
$contracts = SmartContract::createFromTruffleBuildDirectory(
  'YOUR/truffle/build/contracts',
   $web3,
   $networkId
);

3) Erstellen Sie einen Ereignisprozessor

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

Der Code basiert auf respondPHP .

Weitere Beispiele zur Block- oder Event-Verarbeitung finden Sie hier .