您好,登錄后才能下訂單哦!
怎么用EthMon.php監聽以太坊代幣轉賬交易,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
EthMon開發包用于監聽以太坊ERC20代幣合約的轉賬交易。
EthMon代幣交易監聽開發包特點如下:
監聽以太坊合約日志中指定地址發生的代幣轉入/轉出交易
自定義代幣交易發生時的業務邏輯
即支持標準的Web3接口(例如Infura),也支持Etherscan非標接口
EthMon運行于PHP 7.1+環境下,主要類以及其關系如下圖所示:
EthMon的主要代碼文件清單參見官方說明:http://sc.hubwiz.com/codebag/ethmon-php/
在開始之前,請使用自己的API KEY替換以下文件的內容
demo/etherscan-key
demo/infura-key
EthMon是開發包的入口類,調用其scanBlocks()
方法可以掃描指定區間的以太坊區塊,提取并解析其中的合約日志,當匹配監聽的地址后,調用事件監聽器(IEventListener接口實現對象)的handleEvent()
方法并傳入解析后的事件對象。
調用者的程序需要在IeventListener接口的實現類中封裝自己的業務邏輯,例如寫入數據庫等等。下面的代碼實現了一個基本的事件監聽器 —— 只是簡單地在屏幕顯示輸出事件對象的內容:
class EzListener implements IEventListener{ function handleEvent($event){ var_dump($event); } }
handleEvent()
方法的參數是一個StdClass對象,結構如下:
block:交易所在區塊號
txhash:交易哈希
contract:觸發事件的合約地址
name:事件名稱,例如:Transfer
flow:資金流向,可能值:inbound - 轉入 , outbound - 轉出
params:事件參數數組,成員依次為:
轉出地址,字符串
轉入地址,字符串
代幣數量,BigInteger,可以調用toString()
方法將其轉換為字符串
一旦定義好事件監聽器,就可以按如下步驟設置并啟動監聽:
創建EthMon實例需要傳入一個EthApi對象,例如使用EthApiWeb3對象:
$ethApi = new EthApiWeb3('https://mainnet.infura.io/v3/<your-api-key>'); $em = new EthMon($ethApi);
創建了EthMon實例后,需要調用watchToken()
方法設置要監聽的代幣合約,例如監聽BNB代幣合約:
$em->watchToken('0xb8c77482e45f1f44de1745f52c74426c631bdd52');
使用EthMon實例的watchAddress()
方法添加要監聽的代幣交易相關地址。例如下面的代碼監聽地址0xd3705916ce7e2c43806e0e0707c4b9d6f27e9ab2
收到代幣 的事件:
$em->watchAddress('0xd3705916ce7e2c43806e0e0707c4b9d6f27e9ab2',EthMon::FLOW_IN);
而下面的代碼監聽地址0x6c6cbbb3ef3d690de7aa0525b5e6c2ffe7aed6a5
轉出代幣的事件:
$em->watchAddress('0x6c6cbbb3ef3d690de7aa0525b5e6c2ffe7aed6a5',EthMon::FLOW_OUT);
當希望監聽一個地址的轉入/轉出代幣事件時,使用EthMon::FLOW_INOUT
標志:
$em->watchAddress('0xd3705916ce7e2c43806e0e0707c4b9d6f27e9ab2',EthMon::FLOW_INOUT);
調用EthMon實例的addEventListener()
方法添加一個事件監聽器對象,當EthMon的scanBlocks()
掃描區塊時,將在滿足條件時調用這些事件監聽器。
例如,下面的代碼添加我們之前定義的EzListener類的實例對象:
$em->addEventListener(new EzListener);
需要周期性地調用EthMon的scanBlocks()
方法來掃描區塊鏈以便跟蹤新的代幣交易日志,scanBlocks()
的兩個參數分別用來指定掃描的起始區塊號和結束區塊號,當使用特殊的latest
字符串時,表示使用最新的區塊。
例如,下面的代碼每隔5秒鐘掃描一次最新的區塊:
while(true){ $em->scanBlocks('latest','latest'); sleep(5); }
雖然起止區塊號都可以使用任意整數值,但由于Etherscan和Web3的返回記錄數量都有限制,因此不建議一次掃描多個區塊。例如下面的代碼試圖掃描從8500000到8500404的405個區塊:
$em->scanBlocks(8500000,8500404); //不建議,可能失敗
建議逐塊掃描,同時考慮到第三方服務的訪問頻次限制,在兩次掃描期間進行適當的延時處理。
看完上述內容,你們掌握怎么用EthMon.php監聽以太坊代幣轉賬交易的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。