erc20根据合约地址获取所有交易记录
生活随笔
收集整理的這篇文章主要介紹了
erc20根据合约地址获取所有交易记录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.etherscan api地址
https://etherscan.io/apis2.獲取特定區塊段,中的特定合約的交易記錄
https://api.etherscan.io/api?module=account&action=tokentx&contractaddress=填入合約地址&startblock=0&endblock=10000&page=1&offset=100&sort=asc&apikey=YourApiKeyToken接口原理:按照區塊獲取交易記錄(eth上的es設置只有10000,所以采取這種方式) 部分參數示例: contractaddress 自己的合約地址 startblock 開始區塊 endblock 結束區塊 page 頁數 offset 每頁數量 &apikey=YourApiKeyToken 測試時(最好修改)可不修改,只是限制調用次數3.獲取eth區塊高度
https://api.etherscan.io/api?module=proxy&action=eth_blockNumber&apikey=YourApiKeyToken實現代碼:
@Scheduled(cron = "0/1 * * * * ? ") // 間隔1秒執行public synchronized void tokenTranferRec() {try {logger.info("獲取交易記錄");ErcConfigEntity ercConfigEntity = ercConfigService.selectById(1);String result = GetApi.getApi(TOKENTRANSFERRECSTART +STARTBLOCK + ercConfigEntity.getStartBlock() +ENDBLOCK + ercConfigEntity.getEndBlock() +PAGE + ercConfigEntity.getPage() +OFFSET + ercConfigEntity.getOffset() +TOKENTRANSFERRECEND);JSONObject object = JSON.parseObject(result);//判斷接口調用返回值if ("1".equals(object.getString("status"))) {logger.info("已獲取到交易記錄");JSONArray list = object.getJSONArray("result");for (int i = 0; i < list.size(); i++) {JSONObject ercTraTec = list.getJSONObject(i);ErcTraRecEntity ercTraRecEntity = new ErcTraRecEntity();ercTraRecEntity = JSONObject.toJavaObject(ercTraTec, ErcTraRecEntity.class);logger.info(ercTraRecEntity.getHash());ercTraRecService.insertByHash(ercTraRecEntity);}ercConfigEntity.setPage(ercConfigEntity.getPage() + 1);ercConfigEntity.setOffseted(ercConfigEntity.getOffset());ercConfigService.updateById(ercConfigEntity);}//當前區塊有數據時,不執行區塊+10000,page=1的操作if (object.getJSONArray("result").size() <= 0) {//當前區段的塊中沒有記錄時,將endBlock賦值給startBlock,endBlock+10000-->判斷是否大于當前eth區塊高度,//將startBlock,endBlock以及page=1入庫。logger.info("start" + ercConfigEntity.getStartBlock());logger.info("end" + ercConfigEntity.getEndBlock());//獲取區塊高度String resul = GetApi.getApi(ETHBLOCKNUMBER);JSONObject object1 = JSON.parseObject(resul);long out = Integer.parseInt(object1.get("result").toString().substring(2, object1.get("result").toString().length()), 16) + 100000000L;//if (ercConfigEntity.getEndBlock() <= out) {ercConfigEntity.setStartBlock(ercConfigEntity.getEndBlock());ercConfigEntity.setPage(1L);}if ((ercConfigEntity.getEndBlock() + 10000) < out) {ercConfigEntity.setEndBlock(ercConfigEntity.getEndBlock() + 10000);} else {ercConfigEntity.setEndBlock(out);}ercConfigService.updateById(ercConfigEntity);}} catch (Exception e) {logger.error(e.toString());} finally {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}總結
以上是生活随笔為你收集整理的erc20根据合约地址获取所有交易记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓进程优先级调高
- 下一篇: 微信支付元转分的正确姿势