Python web3으로 Uniswap의 유동성 대조 잔액을 얻는 비망록 (최신 블록만)

2603 단어 uniswapweb3Ethereum

배경.


스크립트로 Uniswap의 유동성 쌍을 얻으려고 합니다.
세금의 손익 계산에 필요한 가격의 편차가 결정될 기회가 있는지 등을 점검하고 싶다.
etherscan을 통해 조사할 수 있지만 PRO 버전의 API가 아니면 무리다.
파이썬 웹3으로 확인해 보세요.

블록체인 노드 준비

  • 자립geth
  • infra 등 서비스 사용
  • 이번엔 infra로등록 계정에서 프로젝트 id를 얻습니다.
    chainlink에 공공 노드를 만들었습니다.이것도 사용할 수 있어요.
    최신 블록만 얻었습니다.
    과거 데이터에 접근하려면archive nodegeth --syncmode full --gcmode archive를 구축하거나archive node에 접근하는 서비스를 사용해야 한다(후술)

    코드


    WEETH/USDT의 잔액을 조사합니다.
    import json
    
    from web3 import Web3,HTTPProvider
    
    web3 = Web3(HTTPProvider('https://mainnet.infura.io/v3/<project_id>'))
    blockNumber=web3.eth.blockNumber
    print(blockNumber)
    
    addr_weth_usdt = '0x0d4a11d5EEaaC28EC3F61d100daF4d40471f1852' # Uniswap WETH/USDT pair
    
    abi_weth_usdt = json.loads(open('abi.json').read())
    contract = web3.eth.contract(address=addr_weth_usdt, abi=abi_weth_usdt)
    print("decimals", contract.functions.decimals().call())
    print("totalSupply", contract.functions.totalSupply().call())
    print("token0 addr", contract.functions.token0().call())
    print("token1 addr", contract.functions.token1().call())
    print("reserves(token0, token1, blocktime): ", contract.functions.getReserves().call())
    
    
    ab JSON 정보는 먼저 etherscan에서 얻었습니다.
    python 웹3이면 ABI가 정의한 함수를 가져오면 contract.functions.****().call()에서 호출할 수 있습니다.방법 매개 변수는 etherscan의 설정 소스 코드를 참조하십시오.
    12068697
    decimals 18
    totalSupply 2237106473773835710
    token0 addr 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
    token1 addr 0xdAC17F958D2ee523a2206206994597C13D831ec7
    reserves(token0, token1, blocktime):  [77593590686712646780933, 139661541958582, 1616150417]
    
    Voila!
    token0은 WETH이고, token1은 USDT다.

    나는 etherscan의 잔액과 비교하면 같다는 것을 확인했다.

    찰트가 블록을 정할 때의 잔액

    print("reserves(token0, token1, blocktime): ", contract.functions.getReserves().call(block_identifier=12068708))
    
    이렇게 하면 블록 번호나 블록 산열을 지정할 수 있습니다...오래된 블록 번호를 지정하면 오류가 발생합니다.linkpool timeout error
    infra라면 방문 기록은 데이터archive 추가 비용을 내야 합니다.
    호출 수가 적으면 quicknode가 좋아요.

    TODO


    geth면 archive node는 7TB 정도가 필요하기 때문에 1.5TB 정도면 수납이 가능한 터보 게스로 archive node를 만든다.GraphiQL의 취득 여부를 시험하다.bitQuery로 테스트: https://graphql.bitquery.io/ide

    좋은 웹페이지 즐겨찾기