【问题标题】:Crawling Ethereum transactions from one address从一个地址抓取以太坊交易
【发布时间】:2021-11-29 08:01:09
【问题描述】:

我想抓取 ETH 区块链并获取来自给定钱包地址的交易。 我在web3.py 的帮助下编写了一个代码,但我得到了一些奇怪的结果。 我正在查找交易,但交易的价值为 0。 这怎么可能? 我认为钱包地址和智能合约地址之间存在差异,但我找不到如何在它们之间产生差异。另外,如何抓取交易中的ERC20代币数量?

from web3 import Web3
from datetime import datetime

# Defining url for collecting ETH transactions
infura_url = "https://mainnet.infura.io/v3/xxxxxxxxxxxx"

# Making connections with infra url
web3 = Web3(Web3.HTTPProvider(infura_url))
print("Connection is successful:", web3.isConnected())


# Wallet Address
account = "0xaa7a9ca87d3694b5755f213b5d04094b8d0f0a6f"
# Checking the balance for that address (in WEIs)
try:
    print("Input Address:", account)
    balance = web3.eth.getBalance(account)
except:
    # If its not a lowercase()
    account = Web3.toChecksumAddress(account)
    print("Input Address:", account)
    balance = web3.eth.getBalance(account)

# Print balance in WEIs
print("Balance in WEIs:", balance)

# Converting account balance to ETH
balanceWEI = web3.fromWei(balance, "ether")
print("Balance in ETH:", balanceWEI)


# Defining start block and latest block
start_block = web3.eth.blockNumber-3000
end_block = web3.eth.blockNumber


for block_num in range(start_block, end_block):

    current_block = block_num
    remaining_num_of_blocks = end_block - block_num
    progress = round(100*(block_num - start_block) / (end_block - start_block), 2)
    #print('Fetching block {}, remaining:{}, progress: {}%'.format(current_block, remaining_num_of_blocks, progress))

    # Get block with specific number with all transactions
    block = web3.eth.getBlock(block_num, full_transactions=True)
    block_time = block.timestamp
    block_time = datetime.fromtimestamp(block_time)
    print("Time of the processed block:", block_time)

    list_of_block_transactions = block.transactions

    for transaction in list_of_block_transactions:

        to_account = transaction['to']
        from_account = transaction['from']

        if to_account == account:
            print("To account:", to_account)         
            to_match = True
        else:
            to_match = False            


        if from_account == account:
            print("From account:", from_account)
            from_account = True
            
        else:
            from_account = False            

    
        if to_match == True or from_account == True:
            print("Found Transaction with HASH:", transaction['hash'])
            print("Found Transaction with HASH-HEX:", transaction['hash'].hex())
            print("Found Transaction with value:", transaction['value']) # this value is always 0
            print("Found Transaction with gas:", transaction['gas']) # this value is more than 0
            
            print()

这怎么可能,我爬过最后3000个块,但我也尝试了最后25000个块,结果是一样的。 这是我得到的交易的一个例子。

    AttributeDict({'blockHash': HexBytes('0xb8a0c912053a6e89658158a30912fc9974e280b1009967ed0c5658b89324aaeb'), 'blockNumber': 13385037, 
    'from': '0xC0e32e544A82D9396B0b52d90B484f831f89Fd83', 
    'gas': 106070, 
    'gasPrice': 70000000000, 
    'hash': HexBytes('0x62f0eefbedc7445de511a1d09682f7674152335bce0eec52c8c3f517990e5602'), 
'input': '0xa9059cbb000000000000000000000000a1d8d972560c2f8144af871db508f0b0b10a3fbf0000000000000000000000000000000000000000000003ecdc77a726c9df8000', 
    'nonce': 446, 
    'r': HexBytes('0x482fde01e1a71ae4328a2ddab169e56fe9be095c9ebd26c2ddd022caedb2924d'), 
    's': HexBytes('0x7bce8c69d5832dbe59c9742ba53f714be8693383dee895c333855a3f85391c70'), 
   'to': '0xaA7a9CA87d3694B5755f213B5D04094b8d0F0A6F', 
    'transactionIndex': 296, 
    'type': '0x0', 
    'v': 37, 
    'value': 0})

【问题讨论】:

    标签: python ethereum web3py


    【解决方案1】:

    发送到智能合约的交易不需要价值。从input可以看出,这是一个智能合约交易。

    【讨论】:

    • 你能告诉我更多吗?我如何从输入中看到这一点,如何在智能合约中获取 eth 值?
    • 不幸的是,以太坊交易的一般工作方式超出了这个问题的范围。这里有一些随机教程,学习更多ethereum.org/en/developers/docs/transactions - 建议学习和理解上下文中不同项目的含义,一般寻找以太坊学习资料
    • 我了解 ETH 交易是如何运作的,但是我如何从输入中看到它的智能合约交易呢?如何查看已交易的金额?
    猜你喜欢
    • 1970-01-01
    • 2023-02-17
    • 2022-07-19
    • 2021-10-02
    • 2019-12-09
    • 1970-01-01
    • 2018-09-22
    • 2020-01-27
    • 2022-11-11
    相关资源
    最近更新 更多