Java
如何獲得特定代幣的最大持有者?
我正在嘗試獲取最大代幣持有者的降序列表,例如顯示在 etherscan 上。我找不到執行此操作的 api。我查看了 EtherScan 和 EthPlorers api,但沒有看到與此相關的任何內容。
有誰知道我如何在java中做到這一點?
要獲得所有代幣持有者的降序列表,您需要通過將所有代幣持有者及其各自的代幣保存在一個數組中來自定義您自己的 API。除此之外,您可以使用第三方解決方案:-
雖然您可以通過創建 api 在特定地址找到令牌:-
const contractInstance = web3.eth.contract(abiData).at(contract_addr); contractInstance.balanceOf.call(data.public_key, (err, result) => { if (result) { next(null, result); } else if (err && err.message) { next(err.message, null); } else { next('Unable to sendRawTransaction', null); }
我沒有確切的答案如何在 Java 中做到這一點,但我有密切的答案如何在 Python 中做到這一點。您應該能夠使用 Python web3.py 邏輯中的 web3j 複製此解決方案。
ERC-20 代幣不維護目前代幣持有者的可迭代列表,使用的
mapping
類型僅允許您檢查已知地址 - 餘額。要獲取所有代幣持有者的列表,您需要離線處理並根據區塊鏈數據自行建構。我創建了一個獨立工具,用於收集 ERC-20 代幣持有者和交易到 SQLite 數據庫
- 取一個代幣合約地址
- 使用JSON-RPC API遍歷
Transfer
令牌的所有事件eth_getLogs
- 建立這些事件的本地數據庫
- 允許您使用 SQL 查詢任意時間點的任意賬戶餘額(block num)
該工具維護一個本地 SQLite 數據庫。隨後的命令執行掃描自上次執行以來的新塊,並將新事務寫入數據庫。根據時間戳從 SQL 導出它應該很容易。
您可以在此處找到如何建構令牌持有者數據庫的命令行應用程序執行範例
到處都有一些怪癖:例如,檢測某些令牌的鑄幣/創建事件並不簡單。因此,如果您僅依賴
Transfer
事件,您可能會在接收初始總供應量的帳戶上出現負餘額。