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.filter
para 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?
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_newFilter
y al eth_getFilterChanges
que 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>
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í .
CappY