Quiero que todas las transacciones de los tokens se envíen a mi base de datos a través de un contrato inteligente.
Por ejemplo, A envía 10Token a B, se mostrará en blockchain, pero también quiero una función cuyo contrato inteligente permita que mi servidor guarde y registre estas transacciones.
Estoy usando php para este registro.
No soy un gurú de PHP aquí, pero invertir el control de flujo podría ayudarlo a buscar los detalles en Google.
Los contratos no interactúan con otros sistemas en ninguna dirección. Alguna vez.
La mayor interacción que puede tener lugar es
Un registro de eventos adecuado es parte del estándar de token ERC20, por lo que puede "escuchar" el contrato y capturar los eventos. La forma más común de lograrlo es con la biblioteca Javascript "Web3".
En JavaScript, uno usaría una devolución de llamada para ejecutar cada vez que se observe un "evento" de transferencia en el "registro". Eso podría , por ejemplo, desencadenar una inserción de base de datos o informar a un sistema PHP por otros medios.
Hay algunas implementaciones experimentales de PHP Web3.
Conclusión principal: el contrato simplemente hace lo suyo. El servidor puede reaccionar observándolo (Pull), pero nunca nada en el lado de Ethereum interactuando con el servidor (Push).
Espero eso ayude.
Puede configurar un proceso de escucha en PHP para abordar esto. Asumiendo que tienes un contrato como:
contract CallableEvents {
event CalledTrigger1 (address indexed from);
// ...
}
Debe extender el objeto \Ethereum\SmartContract con un controlador de eventos. Asegúrese de que el nombre de la clase sea el mismo que el nombre de la clase de su contrato.
class CallableEvents extends SmartContract {
public function onCalledTrigger1 (EthEvent $event) {
echo '### ' . substr(__FUNCTION__, 2) . "(\Ethereum\EmittedEvent)\n";
// Add your database code here
}
}
// Initialize Web3 and Network ID as deployed with 'truffle migrate'
$web3 = new Ethereum('http://192.168.99.100:8545');
$networkId = '5777';
// Initialize the ABI from the truffle generated JSON
$contracts = SmartContract::createFromTruffleBuildDirectory(
'PATH_TO_YOUR/truffle/build/contracts',
$web3,
$networkId
);
// Initialize to process any transaction from current Block to the future.
new ContractEventProcessor(
$web3,
$contracts,
'latest',
'latest'
);
Si ahora ejecuta el script, puede actuar en cada evento desencadenado por la interacción del contrato en cadena
php path_toScript_above.php
burro digital
burro digital
Rob Hitchens