Solidity
如何找到所有代幣持有者?
例如,合約在創建代幣時保存地址,但之後代幣持有者可以將代幣或所有代幣發送到另一個錢包。
是否可以找到由我的合約創建的代幣持有者的所有錢包地址?
所有代幣轉移都是通過呼叫合約上的方法來執行的——因此你的合約可以以任何它希望的方式跟踪餘額和賬戶。如果您使用 Solidity 的預設排列
mapping
,您還需要在數組中保留一個單獨的已知帳戶 ID 列表,以便您可以迭代它們。
我創建了一個獨立的開源工具,它做同樣的事情。
- 取一個代幣合約地址
- 使用JSON-RPC API遍歷所有 ERC-20
Transfer
事件以獲取令牌eth_getLogs
- 建立這些事件的本地數據庫
- 允許您在任何時間點(block num)使用 SQL 查詢任何賬戶餘額 - 請注意,某些餘額可能已變為零
到處都有一些怪癖:例如,檢測某些令牌的鑄幣/創建事件並不簡單。因此,如果您僅依賴
Transfer
事件,您可能會在接收初始總供應量的帳戶上出現負餘額。