# 使用python监控套利机会1 **Published by:** [想住大房子的java程序员](https://paragraph.com/@java-3/) **Published on:** 2022-11-29 **URL:** https://paragraph.com/@java-3/python-1 ## Content 近期使用JS来写监控套利,发现越写越坑。不得已把目光转向python。 再进行三分钟入门,一小时精通的技能后,下载PyCharm Community直接开搞。 在克服了定义函数没有大括号这种强迫症之后,错误才慢慢减少。 对了,还有for循环。。。 废话说完,现在开始开搞。 首先确保已经有了能够正常运行python的环境下。 安装web3如果你不想安装在系统环境里面,记得需要创建并激活虚拟环境,然后再安装web3. 打开PyCharm Community 新建项目。 新建一个类EthMarketPair.py,用于保存市场地址和token信息。代码如下:class EthMarketPair: def __init__(self, marketAddress, token0, token1): self.marketAddress = marketAddress self.tokens = [token0, token1] self.token0 = token0 self.token1 = token1 marketAddress = "" tokens = [","] token0 = "" token1 = "" 再新建另一个py文件EthMarkets.py,以后的操作将会在这里面进行。 由于现在只进行简单操作。只进行一个市场的信息查询。所以,预先定义一些常量值WETH_ADDRESS = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' #uniswap的查询地址 UNISWAP_LOOKUP_CONTRACT_ADDRESS = '0x5EF1009b9FCD4fec3094a5564047e190D72Bd511' #crypto的合约地址 CRO_FACTORY_ADDRESS = "0x9DEB29c9a4c7A88a3C0257393b7f3335338D9A9D" 定义连接web3的RPC#记得顶部需要import #还要记得需要启动ganache-cli w3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545')) uniswapQuery = w3.eth.contract(address=UNISWAP_LOOKUP_CONTRACT_ADDRESS, abi=UNISWAP_QUERY_ABI) 定义查询函数def queryPairs(): factoryAddress = CRO_FACTORY_ADDRESS result = uniswapQuery.functions.getPairsByIndexRange(factoryAddress, 0, 1000).call() pairList = [] for pair in result: # 如果需要进行token黑名单的校验,则需要获取下列的token地址,再进行类似!blacklistTokens.includes(tokenAddress)校验 # if pair[0] == WETH_ADDRESS: # tokenAddress = pair[1] # elif pair[1] == WETH_ADDRESS: # tokenAddress = pair[0] # else: # continue pairList.append(EthMarketPair(pair[2], pair[0], pair[1])) return pairList 编写main函数,打印返回长度if __name__ == '__main__': pairList = queryPairs() print("长度:%d" % len(pairList)) 记得千万别写print("长度:" + len(pairList)),会报错的。别问我怎么知道。。。。 OK,运行程序!程序返回ETH交易对的结果集。长度:99 好了。走完这一个之后,下面再根据地址去查询储备信息。之后改进一下,可以进行批量查询。 ## Publication Information - [想住大房子的java程序员](https://paragraph.com/@java-3/): Publication homepage - [All Posts](https://paragraph.com/@java-3/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@java-3): Subscribe to updates