使用python监控套利机会1

近期使用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

好了。走完这一个之后,下面再根据地址去查询储备信息。之后改进一下,可以进行批量查询。