¿Cómo hacer una acción para enviar registro a mi base de datos?

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.

Respuestas (2)

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

  • Alice firmó una transacción con datos y/o ether y la envió al contrato, o
  • Alice escucha los eventos emitidos por el contrato.

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.

El propósito general de una implementación de PHP es principalmente que ha sido una buena práctica verificar cualquier entrada de usuario. Los pagos u otros eventos se pueden integrar de una manera más segura. Entonces, en mi humilde opinión, el flujo podría ser necesario en los casos en que se establece PHP.
Recuerdo que me opuse estrictamente a la idea de transacciones generadas por PHP, debido a "poseer su clave". Pero en la realidad de UX, utiliza una configuración de propiedad de cambio/multisig que podría ser adecuada para la incorporación de usuarios basados ​​en la web en algunos casos. Web3p podría admitir la firma de transacciones, pero Ethereum-PHP no.
La solución dependerá de dónde esté tratando de depositar la confianza. Si se trata de confianza en el contrato, incluso los oyentes son la forma en que se informará al servidor. Vale la pena señalar que muchas implementaciones incluyen servidores que presentan capas de interfaz de usuario y ayudan con la creación del lado del cliente de una transacción válida que se envía a la cadena. O bien, el usuario firma una transacción y entrega la transacción firmada a un servidor que puede reenviarla a la cadena. Ayudará pensar en cadena/contrato, servidor y cliente como una topología triangular. Cada nodo puede hablar con los otros dos.

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

https://github.com/digitaldonkey/ethereum-php-eventlistener#integration-with-truffle-and-contract-events