# 对Smart Money账户多钱包地址的挖掘 运行环境:python3+web3 1. 遍历钱包交互过的地址 2. 过滤掉合约地址 3. 过滤交易所钱包地址 4. 过滤交易频率只有1的地址 ## 0x01-获取交易记录 获取账户交易记录的方法有很多种 - Web3库 - Ethscan的API - Dex.guru,tokenview等第三方API 我使用的是EtherScan的API ```python #用于获取address在eth链上所有trc20代币交易 def get_eth_chain_ts(address): urls = f"https://api.etherscan.io/api?module=account&action=txlist&address={address}&startblock=0&endblock=99999999&apikey={api_kyes}" res = requests.get(urls) res = json.loads(res.text) if res["status"] == "1": ts_record_sums = len(res['result']) #记录交易条数 #用于debug print(f"Target_Address:{address}") print(f"账户交易记录总数:{ts_record_sums}") res = requests.get(urls) res = json.loads(res.text) if res["status"] == "1": # #交易条数比上一分钟检测的时候不同 # print(f"[{now_times()}]账户交易记录总数更新为:{ts_record_sums}"); # #输出新交易 # for ts in res["result"]: # #如果to是自身地址,表示in, 如果from是自身地址,则表示out # if ts['to'] == address: # print("操作:买入") # elif ts['from'] == address: # print("操作:卖出") return res else: print("error") print(res) ``` ## 0x02-过滤合约地址 > `Eth.``get_code`(*account*, *block_identifier=eth.default_block*) > > - Delegates to `eth_getCode` RPC Method > > Returns the bytecode for the given `account` at the block specified by `block_identifier`. ```python def isContract(address): address = web3.toChecksumAddress(address) #转换为校验地址 private_type ='0x' #get_code()返回值是一个byte类型,需要转换为hex address_type = web3.eth.get_code(address).hex() if address_type == private_type: # print("私钥地址") return False else: # print("合约地址") return True ``` ## 0x03-过滤交易所钱包地址 参考资料: https://cn.etherscan.com/labelcloud https://cn.etherscan.com/accounts/label/exchange 本来是想找一个类似的接口,但是发现没找到...暂时先用着 就手动抓了下Etherscan Name Tag为Exchange的地址(301个),存到了数据库中方便查询 <img src="/Users/r4bbit/Library/Application Support/typora-user-images/image-20211104114516169.png" alt="image-20211104114516169" style="zoom:20%;" /> ## 0x04-根据交易频率的再筛选 1.筛选前 ```python {'0x33566c9d8be6cf0b23795e0d380e112be9d75836': 5, '0x6c85006eae121cf2444f0852cab9914607915df2': 5, '0x21077c80971716faa403060a6d209274754a609d': 4, '0x67550a37c17c3261c390ac15cf741958dcd3c45b': 3, '0x32e46cab87109ee6ede7d03d263c47be987238b9': 3, '0x2e94bafe71bfc27d96105209eb48210b39a55c03': 3, '0x9fc6bef0702cf47dcd2e5a42b48e19aed8732499': 3, '0xf4561c710ba450aab302ffc3557ee59bbce94ca6': 2, '0xcac437276cf7a033658445e7f0ab03fa3ead447d': 2, '0x246073ff205b9cea3cc5782cddf61e57375a586b': 2, '0x46f34c24a7ba7a2ac6dd76c3f09b32d41c144d08': 2, '0xddfabcdc4d8ffc6d5beaf154f18b778f892a0740': 2, '0x6d21266dfcf5541bee9f67c4837aaa72b3bf9303': 2, '0xa247ef67ad4ebd5365d7f6077b7d3ca7a570e070': 1, '0x038642d3d38393849a8ddbc147f70eaeec939884': 1, '0x3a36d00a881086ec4ef61263cfff3aa72d4b5e43': 1, '0xc42300335f18e490985ace34f2962e74a2e09a7f': 1, '0x26bb5f5e331318f3284cd2b53214be342efdd800': 1, '0xa2c19aebb36943dfc8b2167e5b2e49cfb3bded7e': 1, '0xef7d6661fae2082ef0cecd42b322a3960eb87f66': 1, '0xeb40a64c0f87922b2f0696c7308b7a674deffba5': 1, '0xe453d15d043ecce0a2482c89561ac14a6d4bc134': 1, '0x4bc82b615807df7e6b35b35303f8629898cd6a12': 1, '0xe9905c5e3d46ab0622f3ab9bb372584874ac63f6': 1, '0xb2deb66dc0c8fd1abc4f373dcf0224ab48bf49d2': 1, '0xf272da55a2f4caec3fe615092eab4b134738f63f': 1, '0x71ec921c911acea1c5de86c267d84ed418f90885': 1, '0xdcce10bd7b32637afa16b5385de9187888c67d3d': 1, '0xeb377f5d949653b9cb0b95d95b7882a768a06b12': 1, '0x3ab19e729b53d8fd6f8f0d9a5d8eedbad06a2620': 1, '0xd1b0816bf4587b25178781b46c4d8c066c88ab06': 1, '0xf2308f111120ffaf349d547cb8e1c216d4894b7e': 1, '0x87a49d57dea90c982b536220ad4234e1b3d1245f': 1, '0x2a39e7a64c93dfa3524aa72c66ecd06bc0310993': 1, '0x994a6f8b0d1704a9bad4abcf142014653e2d3e0a': 1, '0x32760eef93eddbe5face982ecb8907c0286b7ea4': 1, '0xb8bf7f71d21771b1477f0a811ecfcf0ceef28fc1': 1, '0x5c6f57709c5e234533b3c612eafe769cf6072af2': 1, '0x0b54420ee63aa04da4cc87064142c6e64b70bb94': 1, '0xcde637b9298309e3869281c0f56dffb2a6ec662c': 1, '0x2928908a41a905b9732530ce02d9c2ea3ee39946': 1} ``` 2.筛选交易频率<1的地址后 ```python {'0xf4561c710ba450aab302ffc3557ee59bbce94ca6': 2, '0x33566c9d8be6cf0b23795e0d380e112be9d75836': 5, '0x67550a37c17c3261c390ac15cf741958dcd3c45b': 3, '0x32e46cab87109ee6ede7d03d263c47be987238b9': 3, '0xcac437276cf7a033658445e7f0ab03fa3ead447d': 2, '0x246073ff205b9cea3cc5782cddf61e57375a586b': 2, '0x21077c80971716faa403060a6d209274754a609d': 4, '0x46f34c24a7ba7a2ac6dd76c3f09b32d41c144d08': 2, '0xddfabcdc4d8ffc6d5beaf154f18b778f892a0740': 2, '0x2e94bafe71bfc27d96105209eb48210b39a55c03': 3, '0x6d21266dfcf5541bee9f67c4837aaa72b3bf9303': 2, '0x6c85006eae121cf2444f0852cab9914607915df2': 5, '0x9fc6bef0702cf47dcd2e5a42b48e19aed8732499': 3} ``` 在Ethscan浏览器看了大概2~3个交互频率为1的地址,全部交易记录也就几次,而且还是和主钱包或者和交易所钱包交互,感觉那种地址没什么用,这里我选择放弃这部分地址了,如果有不一样的意见,欢迎和我交流。 ## 0x05-数据可视化 暂时不会 :p 网上搜了几个小时后发现这是一大块知识,等待日后学习~ Twitter:@deephea29088204(https://twitter.com/deephea29088204)