用PHP監聽以太坊代幣轉賬 EthMon

2021-09-27 00:07:58 字數 2999 閱讀 5787

ethmon代幣交易監聽開發包特點如下:

ethmon執行於php 7.1+環境下,主要類以及其關係如下圖所示:

ethmon的主要**檔案清單如下:

檔案路徑

說明ethtool/src/

ethmon源**目錄

ethtool/src/ethmon.php

ethmon入口類

ethtool/src/ethapi.php

以太坊api基類

ethtool/src/ethapietherscan.php

ethapi的etherscan繼承類

ethtool/src/ethapiweb3.php

ethapi的web3繼承類

ethtool/src/logparser.php

以太坊日誌解析類

ethtool/src/ieventlistener.php

ethmon事件***介面

demo/

ethmon演示**目錄

demo/ethmon-es-demo.php

使用etherscan介面的ethmon演示

demo/ethmon-web3-demo.php

使用web3/infura介面的ethmon演示

demo/getlogs-es-demo.php

使用etherscan介面的getlogs演示

demo/getlogs-web3-demo.php

使用web3/infura介面的getlogs演示

demo/logparser-demp.php

logparser演示

demo/etherscan-key

演示**用的api key - etherscan

demo/infura-key

演示**用的api key - infura

vendor/

第三方依賴包

composer.json

composer配置檔案

在開始之前,請使用自己的api key替換以下檔案的內容

ethmon是開發包的入口類,呼叫其scanblocks()方法可以掃瞄指定區間的以太坊區塊,提取並解析其中的合約日誌,當匹配監聽的位址後,呼叫事件***(ieventlistener介面實現物件)的handleevent()方法並傳入解析後的事件物件。

呼叫者的程式需要在ieventlistener介面的實現類中封裝自己的業務邏輯,例如寫入資料庫等等。下面的**實現了乙個基本的事件*** —— 只是簡單地在螢幕顯示輸出事件物件的內容:

class ezlistener implements ieventlistener

}

handleevent()方法的引數是乙個stdclass物件,結構如下:

一旦定義好事件***,就可以按如下步驟設定並啟動監聽:

建立ethmon例項需要傳入乙個ethapi物件,例如使用ethapiweb3物件:

$ethapi = new ethapiweb3('');

$em = new ethmon($ethapi);

建立了ethmon例項後,需要呼叫watchtoken()方法設定要監聽的代幣合約,例如監聽bnb代幣合約:

$em->watchtoken('0xb8c77482e45f1f44de1745f52c74426c631bdd52');
使用ethmon例項的watchaddress()方法新增要監聽的代幣交易相關位址。例如下面的**監聽位址0xd3705916ce7e2c43806e0e0707c4b9d6f27e9ab2收到代幣

的事件:

$em->watchaddress('0xd3705916ce7e2c43806e0e0707c4b9d6f27e9ab2',ethmon::flow_in);
$em->watchaddress('0x6c6cbbb3ef3d690de7aa0525b5e6c2ffe7aed6a5',ethmon::flow_out);
$em->watchaddress('0xd3705916ce7e2c43806e0e0707c4b9d6f27e9ab2',ethmon::flow_inout);
呼叫ethmon例項的addeventlistener()方法新增乙個事件***物件,當ethmon的scanblocks()掃瞄區塊時,將在滿足條件時呼叫這些事件***。

例如,下面的**新增我們之前定義的ezlistener類的例項物件:

$em->addeventlistener(new ezlistener);
需要周期性地呼叫ethmon的scanblocks()方法來掃瞄區塊鏈以便跟蹤新的代幣交易日誌,scanblocks()的兩個引數分別用來指定掃瞄的起始區塊號和結束區塊號,當使用特殊的latest字串時,表示使用最新的區塊。

例如,下面的**每隔5秒鐘掃瞄一次最新的區塊:

while(true)
雖然起止區塊號都可以使用任意整數值,但由於etherscan和web3的返回記錄數量都有限制,因此不建議一次掃瞄多個區塊。例如下面的**試圖掃瞄從8500000到8500404的405個區塊:

$em->scanblocks(8500000,8500404);    //不建議,可能失敗
建議逐塊掃瞄,同時考慮到第三方服務的訪問頻次限制,在兩次掃瞄期間進行適當的延時處理。

以太坊代幣事件監控 以太坊ERC20代幣合約案例

一.erc20代幣合約與web3呼叫 二.erc20合約標準 contract erc20 require compilcaipiao const bytecode bytecodejsonobj.bytecode const inte ce bytecodejsonobj.inte ce 2.匯入...

理解以太坊上的代幣

如果你對以太坊的世界有一些了解,你很可能聽過人們聊到代幣 尤其是 erc20 代幣.乙個 代幣 在以太坊基本上就是乙個遵循一些共同規則的智慧型合約 即它實現了所有其他代幣合約共享的一組標準函式,例如 transfer address to,uint256 value 和 balanceof addr...

以太坊智慧型合約部署代幣

pragma solidity 0.4.0 建立乙個基礎合約,用於指定某些操作只能由合約擁有者 執行 contract owned 宣告乙個修改器,證明只有合約擁有者才能執行某些操作 modifier onlyownerelse 此函式的功能是把合約轉讓給指定使用者 function transfe...