近期使用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
好了。走完这一个之后,下面再根据地址去查询储备信息。之后改进一下,可以进行批量查询。
