Solidity

如何進行操作以將記錄發送到我的數據庫?

  • August 10, 2018

我希望代幣的所有交易都通過智能合約發送到我的數據庫。

例如,A 向 B 發送 10Token,它將顯示在區塊鏈上,但我還想要一個智能合約讓我的伺服器保存和記錄此交易的功能。

我正在使用 php 記錄此記錄。

這裡不是 PHP 專家,但反轉流控制可能會幫助您搜尋詳細資訊。

合約不會在任何方向上與其他系統互動。曾經。

可以發生的最多的互動是

  • Alice 用數據和/或乙太幣簽署了一筆交易並將其發送到合約中,或者
  • Alice 監聽合約發出的事件。

合適的事件日誌是 ERC20 代幣標準的一部分,因此您可以“監聽”合約並捕捉事件。最常用的方法是使用“Web3”Javascript 庫。

在 JavaScript 中,只要在“日誌”中觀察到傳輸“事件”,就會使用回調來執行。例如,這可能會觸發數據庫插入或通過其他方式通知 PHP 系統。

有一些實驗性的 PHP Web3 實現。

主要外賣 - 契約只是做它的事情。伺服器可以通過觀察它(Pull)做出反應,但絕不會通過乙太坊端與伺服器互動的任何東西(Push)來做出反應。

希望能幫助到你。

您可以在 PHP 中設置一個偵聽器程序來解決這個問題。假設您有如下契約:

contract CallableEvents {
 event CalledTrigger1 (address indexed from);
 // ...
}

您需要使用事件處理程序擴展 \Ethereum\SmartContract 對象。確保類名與您的契約類名相同。

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'
);

如果您現在執行腳本,您可以對鏈上合約互動觸發的每個事件採取行動

php path_toScript_above.php

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

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