Transactions

收到交易時如何觸發 PHP 腳本?

  • September 20, 2018

我的目標是在給定地址收到交易時呼叫 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_newFiltereth_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
);
  1. 創建一個事件處理器
// process any Transaction from current Block to the future.
new ContractEventProcessor(
 $web3,
 $contracts,
 'latest',
 'latest'
);

程式碼基於reactPHP

您將在此處找到更多有關塊或事件處理的範例。

引用自:https://ethereum.stackexchange.com/questions/2556