我正在尝试对加密货币(例如比特币、以太坊)数据进行一些分析,但找不到数据源。例如,我想收集以太坊的输入地址、输出地址、交易时间、交易金额等交易数据。
我发现我可以使用 web3py 访问以太坊数据,但是是否可以获取最近在整个以太坊网络中进行的“所有”交易的数据,而不仅仅是连接到我自己的钱包(地址)的交易?例如,我想获取今天发生的所有以太坊交易的数据。
另外,我是否必须拥有自己的以太坊钱包(地址)才能使用 web3py 访问他们的数据?我想知道我是否需要一个特定的地址作为起点,或者我可以直接抓取数据而不创建钱包。
谢谢。
例如,我想收集以太坊的输入地址、输出地址、交易时间、交易金额等交易数据。
您可以使用 web3.eth.get_block 调用迭代所有区块和交易。但是,您需要自己解析交易内容。
要访问所有数据,建议您运行自己的节点以获得 JSON-RPC 调用的最大网络带宽。
另外,我是否必须拥有自己的以太坊钱包(地址)才能使用 web3py 访问他们的数据?
假设您已经有 Infura 项目 ID,以下代码应该可以帮助您访问最新的区块:
ethereum_mainnet_endpoint = f'https://mainnet.infura.io/v3/{INFURA_PROJ_ID}'
web3 = Web3(Web3.HTTPProvider(ethereum_mainnet_endpoint))
assert web3.isConnected()
eth_block_df = pd.DataFrame(ethBlocks).set_index('number')
访问最近的交易后,您可以循环每个交易哈希并用它创建一个新的数据集:
def decoder(txns):
block = []
for i in txns:
hash = '0x' + bytes(i).hex()
block.append(hash)
return block
eth_block_df['transactions_0x'] = eth_block_df['transactions'].apply(lambda x: decoder(x))
def transaction_decoder(hashes):
"""
Generates a list of ETH transactions per row
"""
txn_dets = []
for i in hashes:
txn = web3.eth.get_transaction(str(i))
txn_dets.append(dict(txn))
return txn_dets
def transaction_df(series):
"""
Converts a list of lists of Ethereum transactions into a single DataFrame.
"""
obj = series.apply(transaction_decoder)
main = []
for row in obj:
for txn in row:
main.append(txn)
eth_txns_df = pd.DataFrame(main, columns=main[0].keys())
return eth_txns_df
eth_txns_df = transaction_df(eth_block_df['transactions_0x'])
print(eth_txns_df.shape)
我最近在一个仍在工作的项目中使用了这段代码,所以它可能不是最有效或最干净的解决方案,但它完成了工作。
希望有帮助!