python 基于 Web3.py 和 Infura 网关采集链上数据

这篇具有很好参考价值的文章主要介绍了python 基于 Web3.py 和 Infura 网关采集链上数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • Web3.py是与Ethereum交互的Python库。功能包括连接到以太坊网络节点、检索数据和向以太坊网络广播数据。
pip install web3

目前以太坊全节点数据量高达数TB,自建本地全节点不太现实,因此一般通过Infura等的网关来实现数据查询。在 Infura 新建一个项目获取API KEY

from web3 import Web3
chainApi = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/6efdb....(替换为你的API KEY)'))
# 获取最新区块数据
block = chainApi.eth.getBlock("latest")
print(block)
# 获取某地址的余额
balance = chainApi.eth.getBalance("0x7A6381...(替换为你要查询的地址)")
print(balance)

与ERC-20合约交互

需求:识别当前用户地址持有的 token 资产的美元价格,统计资产总净值

web3py 爬取区块数据,区块链,web3.py,区块链,以太坊
实现思路:1. 首先要扫描钱包地址,查看持有哪些代币(需要与各ERC20合约交互)。2. 计算代币的美元价值来计算总净值。

第一步

符合ERC-20合约规范的都带有以下函数:

function name() public view returns (string)
function symbol() public view returns (string)
function decimals() public view returns (uint8)
function totalSupply() public view returns (uint256)
function balanceOf(address _owner) public view returns (uint256 balance)
function transfer(address _to, uint256 _value) public returns (bool success)
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
function approve(address _spender, uint256 _value) public returns (bool success)
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
  • ​​balanceOf​ ​是用于查询钱包地址持有多少代币的函数。

与合约交互需要通过 ABI:application binary interface。ABI用来定义数据在EVM中应该如何编码/解码。

这里以Synthetix(SNX)合约为例,示例代码如下:

import json
ABI = json.loads('[{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]')

wallet_address = '0x7A638...(换成你的地址)'
wallet_address = Web3.toChecksumAddress(wallet_address)

token_contract_address = '0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f' # SNX合约地址
token_contract_address = Web3.toChecksumAddress(token_contract_address)

# define contract
contract = chainApi.eth.contract(token_contract_address, abi=ABI)

# call contract and get data from balanceOf for argument wallet_address
raw_balance = contract.functions.balanceOf(wallet_address).call()

# convert the value from Wei to Ether
synthetix_value = Web3.fromWei(raw_balance, 'ether')

print(synthetix_value)
  • ​​toChecksumAddress()​​来确保我们的地址是校验格式的
  • fromWei()​​将我们的Wei价格转换为 ether 1ETH是 1 0 18 10^{18} 1018 Wei

要遍历所有 token 资产可以通过建立一个 ERC-20 合约地址的主列表,并通过迭代来找到特定钱包所持有的代币。

第二步
使用 The Graph 获取行情数据(美元价格)

from gql import gql, Client
from gql.transport.requests import RequestsHTTPTransport

sample_transport = RequestsHTTPTransport(
   url='https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2',
   verify=True,
   retries=5,
)
client = Client(transport=sample_transport)

# Get the value of SNX/ETH
query = gql('''
    query {
        pair(id: "0x43ae24960e5534731fc831386c07755a2dc33d47"){
            reserve0
            reserve1
        }
    }
''')
response = client.execute(query)
snx_eth_pair = response['pair']
eth_value = float(snx_eth_pair['reserve1']) / float(snx_eth_pair['reserve0'])

# Get the value of ETH/DAI
query = gql('''
query {
    pair(id: "0xa478c2975ab1ea89e8196811f51a7b7ade33eb11"){
        reserve0
        reserve1
    }
}
''')
response = client.execute(query)
eth_dai_pair = response['pair']
dai_value = float(eth_dai_pair['reserve0']) / float(eth_dai_pair['reserve1'])

snx_dai_value = eth_value * dai_value
print(snx_dai_value)

通过 DEX 的数据来计算 SNX 与锚定美元的稳定币的汇率,这里以 ETH 为中间币种做了两次计算(DAI 稳定币锚定美元)。
对 The Graph 进行查询,以获得 SNX 的 DAI 价值。我们首先得到每一个 SNX 的 ETH 价值,然后乘以与一个 ETH 等值的 DAI 数量,得到一个 SNX 的 DAI 价值。将最终的 DAI 值乘以我们钱包持有的 SNX 数量,找到头寸的总美元价值。

Reference

[1]用Web3.py、Infura和Graph查询以太坊数据文章来源地址https://www.toymoban.com/news/detail-786444.html

到了这里,关于python 基于 Web3.py 和 Infura 网关采集链上数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web3之链上情报平台Arkham

    官网:https://zh.arkhamintelligence.com/ 官方:https://platform.arkhamintelligence.com/ Arkham 作为区块链分析平台运营,提供参与链上加密市场活动的现实世界实体和个人的数据,该平台的一个核心功能是**“情报赏金”(intel bounties),区块链分析师可提供付费服务,帮助客户以查明(识别

    2024年02月08日
    浏览(41)
  • web3系列———4.编写第一个智能合约并发布到链上

    本篇教程为在以太坊区块链上发布一个智能彩票合约,活动期间用户可充值一定金额的以太币到合约地址,活动结束进行开奖,随机从参与用户中抽取3人,平分奖池奖金。(分为上下两篇)(本篇为下) 教程思路: 新建以太坊钱包 充值一定数额ETH作为合约发布汽油费 Remix编写s

    2024年04月15日
    浏览(54)
  • 解密链上治理优越性 | Polkadot Gov2 引领 Web3 治理新方向

    当我们在区块链进行技术开发和应用协作,享受区块链带来的行业利好时,是否思考过怎样周全的治理机制正作为守护者确保链上应用、程序的高效运行?更高开放度、更强交互性、更包容自由的区块链环境,其实与不断迭代的优越治理模式紧密相连。 从早期公链开发的链下

    2024年02月10日
    浏览(46)
  • Web3 开发指南:使用 NFTScan NFT API 构建一个 NFT 链上追踪器

    对于大多数 Web3 团队来说,构建一个完整的链上 NFT 数据追踪系统是一项具有挑战性的任务,构建一个 NFT 链上追踪器更是如此。涉及到处理区块链上的智能合约和交易数据,并将其与外部数据源进行整合和分析工作量是十分巨大的: 区块链数据的复杂性:区块链上的数据结

    2024年02月15日
    浏览(47)
  • java使用web3j,部署智能合约在测试链上,并调用(万字详细教程)

    最近在学区块链相关,想做点自己感兴趣的。网上关于这块部分的坑也比较多,最近也是问了很多行业从事者才慢慢填坑,因此记录下来分享一下。 钱包 :metemask、 solidity编译器 :remix 、 java ide :idea。 智能合约编写的我选择在remix上方便,而且部署的时候不需要自定义gasP

    2024年01月16日
    浏览(58)
  • 使用Ganache,web3js和remix在个人区块链上部署并调用合约

    Ganache是一个运行在本地的个人区块链,适用于以太坊的开发者。 首先我们需要下载Ganache web3js的中文文档 remix英文版的网址 有以上的准备之后我们就可以开始了 首先启动Ganache 这就是Ganache的主页面,下面有10个供我们使用的账号,上面有他们的地址以及余额,我们暂时需要

    2024年01月19日
    浏览(77)
  • Web3.py使用详解

    测试提供商 本地提供商 远程提供商 与以太坊区块链交互的最快方法是使用远程节点提供商,如Infura、Alchemy或QuickNode。您可以通过指定端点连接到远程节点,就像本地节点一样: 判断连接状态  使用web3创建账户 使用eth_account创建账户 效果与 web3 一致,安装web3.py会自动安装

    2024年02月16日
    浏览(39)
  • 基于MQTT协议的物联网网关实现远程数据采集及监控

    在数字化时代的浪潮中,工业界正面临着前所未有的变革与机遇。而在这场变革中,基于MQTT协议的物联网网关崭露头角,成为连接工业设备、实现远程数据采集与监控的利器。其中,HiWoo Box作为一款出色的工业边缘网关,引领着这股数字化风潮,下面我们一起探寻其在实现远

    2024年02月11日
    浏览(63)
  • 【web3py】批量创建eth账号

    ____tz_zs 创建可在eth链及其侧链上使用的账号。内容包括:远程节点、本地节点、本地密钥对等。 前言:建议使用方式三的方法,在本地生成密钥对。 使用远程节点(如 Infura)创建帐户时,会报如下错误: web3py the method personal_newAccount does not exist/is not available 。出于安全原因,

    2024年02月02日
    浏览(44)
  • 多串口数据采集网关有什么功能

    数据采集网关是一种通信终端设备,也称物联网网关,它具备数据采集、存储、传输等功能。物通博联WG系列数据采集网关提供多种数据传输方式和接口通道,包括有线、无线和串口传输等(5G、4G、WIFI、以太网),可以广泛应用于智能工厂、环境监测、智慧水务、能耗监测、

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包