¿Cómo puedo activar un script PHP cuando se recibe una transacción?

Mi objetivo es invocar un script PHP cada vez que una dirección determinada recibe una transacción.

Sé Javascript, pero esta es mi primera salida a Node.js. Creo que el enfoque correcto es ejecutar un servidor web node.js en paralelo a Apache, y para eso ejecutar un script que utiliza web3.eth.filterpara activar un javascript que realiza una solicitud HTTP a Apache.

¿Está bien? Si es así, no sé cómo usarlo web3.eth.filter, la documentación no es excelente.

¿Algunos consejos, por favor?

Respuestas (2)

Si no está familiarizado con node.js pero con PHP y la arquitectura ethereum, le recomiendo que eche un vistazo a la API de RPC: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_newfilter

En particular, en eth_newFiltery al eth_getFilterChangesque simplemente puede llamar a través de la API de reposo

p.ej

# 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>
Si tiene muchos pagos, eso se volverá demasiado lento en algún momento.

Debería consultar Ethereum-php Listener and Indexer

A diferencia de lo anterior, también funcionará con clientes que no admitan EthFilter como Infura .

1) Extienda un Ethereum\SmartContract y agregue controladores de eventos con "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) Inicialice sus contratos (en este ejemplo de las compilaciones de 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
);

3) Crear un procesador de eventos

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

El código está basado en reactPHP .

Encontrará más ejemplos de procesamiento de bloques o eventos aquí .