欢迎一起交流:wx:54516204
在平常的工作和交流过程中,很多同学,总是想找一些接口,希望能查到以态链上的某个币种的所有交易信息,但目前在网上,提供这一类信息的网站比较少,有些甚至收比较高的费用,下面我简单的介绍一下,如何解析eth的区块信息,并提取我们需要的信息。
本人后台主要是用python,所以,下面以python为基础,提供一下用python如何解析区块信息的。下面是本人已经写好的程序,对程序做一些说明和注解,需要的同学,可以做一些参考。
首先,来一段eth接口说明的文件:
#encoding=utf-8
import os
import json
import random
import string
from web3 import Web3
# from web3.utils.encoding import (hexstr_if_str, to_bytes)
from eth_account import Account
from ethereum.tools import keys
from eth_keys import keys as ethkeys
from . import config
import requests
# from web3.middleware import geth_poa_middleware
from decimal import Decimal,getcontext
#上面有些引用是没有什么作用的,由于时间关系,这里就不做说明和删除了
class EthOP:
#首先初始化一下eth的环境信息。
def __init__(self,config):
self.provider = Web3.HTTPProvider(config.eth_url)
self.w3 = Web3(self.provider)
# self.w3.middleware_stack.inject(geth_poa_middleware, layer=0)
def load_keyfile(self,type,keyfile, password):
'''加载钱包keyfile
:param password: 密码
:param filename: keyfile路径
'''
if type=='file':
with open(keyfile, 'r') as f:
keystore = json.loads(f.read())
if not keys.check_keystore_json(keystore):
raise ValueError('invalid keyfile format')
return keys.decode_keystore_json(keystore, password)
else:
try:
return keys.decode_keystore_json(keyfile, password)
except Exception as e:
raise ValueError('invalid keyfile format',e.args)
def get_random_letter(self,length):
salt = ''.join(random.sample(string.ascii_letters + string.digits, length))
return salt
def get_new_address(self,password=None, filename=None):
try:
'''创建钱包keyfile
'''
if password==None:
password=self.get_random_letter(8)
account = Account.create('')
private_key = account.privateKey
address = account.address
keyfile_json = keys.make_keystore_json(private_key, password, kdf='scrypt')
keyfile_json['id'] = str(keyfile_json['id'], encoding='utf-8')
keyfile_json['address'] = address
private_key= ''.join(["%02X" % x for x in private_key]).strip()
return {
'address': address, 'privatekey': private_key,'keystore':keyfile_json,'password':password}
except IOError as e:
print(e)
else:
return address, private_key
# finally:
# os.umask(oldumask)
def get_address_privatekey(self,type,keystore,password):
keystorehex=load_keyfile(type,keystore,password)
private_key_bytes = hexstr_if_str(to_bytes, keystorehex)
pk = ethkeys.PrivateKey(private_key_bytes)
address = pk.public_key.to_checksum_address()
private_key = ''.join(["%02X" % x for x in private_key_bytes]).strip()
return {
'address':address,'privatekey':private_key}
def get_balance(self