9.以太坊php web3 解码日志数据

正文开始

[md]

日志中的topics和data字段,包含了我们感兴趣的数据。

topics的第一个成员,总是相应事件的签名。而其他的成员则有序对应着事件 参数中的有索引(indexed)参数:

因此我们首先根据第一个主题判断是否为感兴趣的事件,然后依次解码参数即可:

$mytopic = $ethabi->encodeEventSignature('Transfer(address,address,uint256)');
$web3->eth->getFilterChanges($fid,$cb);
$logs = $cb->result;
foreach($logs as $log){
  if($log->topics[0] != $mytopic) continue;
  echo 'event Transfer triggered '  . PHP_EOL;
  $from = $ethabi->decodeParameter('address',$log->topics[1]);
  echo 'from: ' . $from . PHP_EOL;
  $to = $ethabi->decodeParameter('address',$log->topics[2]);
  echo 'to: ' . $to . PHP_EOL;
  $value = $ethabi->decodeParameter('uint256',$log->data);
  echo 'value: ' . $value . PHP_EOL;

}

由于Transfer事件的value参数不是有索引参数,因此它的值在日志的data字段中。 如果存在多个无索引参数时,则data字段是这些参数按32字节顺序拼接的结果:

参考教程和示例代码,编写php脚本实现以下功能:监听代币合约的所有事件 打印输出Approve事件的参数

完结。

正文结束

1.以太坊php web3 在windows10下调试——ganache工具的安装 【hi 以太坊】 使用公共节点——PHP开发以太坊代币与合约