Transactions
收到交易時如何觸發 PHP 腳本?
我的目標是在給定地址收到交易時呼叫 PHP 腳本。
我知道 Javascript,但這是我第一次接觸 Node.js。我認為正確的方法是與 Apache 並行執行 node.js 網路伺服器,然後執行一個腳本,該腳本用於
web3.eth.filter
觸發向 Apache 發出 HTTP 請求的 javascript。是對的嗎?如果是這樣,我不知道如何使用
web3.eth.filter
,文件不是很好。請給點提示好嗎?
如果您不熟悉 node.js 但熟悉 PHP 和乙太坊架構,我建議您查看 RPC API: https ://github.com/ethereum/wiki/wiki/JSON-RPC#eth_newfilter
特別是您可以通過rest API簡單地呼叫
eth_newFilter
它eth_getFilterChanges
例如
# 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>
你應該看看Ethereum-php 監聽器和索引器
與上述相反,它也適用於不支持 EthFilter (如Infura )的客戶。
1) 擴展 Ethereum\SmartContract 並使用“on EventName ”添加事件處理程序
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)初始化你的合約(在這個例子中來自 Truffle 建構)
$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 );
- 創建一個事件處理器
// process any Transaction from current Block to the future. new ContractEventProcessor( $web3, $contracts, 'latest', 'latest' );
程式碼基於reactPHP。
您將在此處找到更多有關塊或事件處理的範例。