본문 바로가기
블록체인/On Chain Analysis

[On-Chain 데이터분석] ETH 블록 내 Smart Contract 갯수 확인 (feat python, web3)

by 일등박사 2024. 2. 23.
728x90

 

2024.02.21 - [블록체인/On Chain Analysis] - [On-Chain 데이터분석] ETH 블록 내 모든 transaction 확인하기(python, web3 ,eth, 온체인분석)

 

[On-Chain 데이터분석] ETH 블록 내 모든 transaction 확인하기(python, web3 ,eth, 온체인분석)

온체인데이터분석!! 블록체인의 특징중 하나가 모든 거래내역(원장)이 공개된다는점인데요! 이에 이 공개된 원장을 기반으로 분석을 하는 것을 온체인 데이터 분석이라고 합니다! 이런분석을

drfirst.tistory.com

 

 

지난 포스팅에 이어 온체인 분석을 이어가겠습니다!!

 

오늘의 핵심은!! 아래 파이썬 함수입니다!

def is_contract_address(address):
    """
    주어진 주소가 스마트 계약인지 여부를 확인하는 함수
    :param address: 확인할 주소
    :return: True(스마트 계약), False(지갑)
    """
    # 주소가 이더리움 주소 형식인지 확인
    if not Web3.is_address(address):
        return False
#         raise ValueError("Invalid Ethereum address")
    
    # 주소에 대한 코드를 가져옴
    code = web3.eth.get_code(address)
    
    # 스마트 계약 주소의 코드 길이는 2보다 큼 (Paying contract는 1일수도 있음)
    return len(code) > 2

# 예시: 주소가 스마트 계약인지 여부 확인
address = "0xD4416b13d2b3a9aBae7AcD5D6C2BbDBE25686401"
if is_contract_address(address):
    print("Smart Contract")
else:
    print("Wallet")

 

위 함수가 무슨뜻인가하면,  block의 ETH 수신 주소가 이더리움 지갑인지 혹은 스마트컨트랙트 주소인지를 확인하는 함수입니다!

 

이를 통해서!!  블록 내 transaction 정보가 smart contract 였는지 혹은 단순 eth 송금이었는지를 확인해볼 수 있습니다!

 

한번 19272508 블록의 내부 거래정보를 펼처볼까요~?

 

block_time = from_timestamp_to_seoul(block.timestamp)
key_l = []
from_l = []
to_l = []
value_l = []
gas_price_l = []
smartcontract_yn_l = []
block_number = 19272508
block_number

block = web3.eth.get_block(block_number)

# Print block details
print("Block Number:", block['number'])
print("Block Hash:", block['hash'])
print("Transactions in this block:")
for tx_hash in block['transactions']:
    tx = web3.eth.get_transaction(tx_hash)
    key_l.append(tx['hash'])
    from_l.append(tx['from'])
    to_l.append(tx['to'])
    value_l.append(web3.from_wei(tx['value'], 'ether'))
    gas_price_l.append(web3.from_wei(tx['gasPrice'], 'gwei'))
    smartcontract_yn_l.append(is_contract_address(tx['to']))
    print("Transaction Hash:", tx['hash'])
    print("From:", tx['from'])
    print("To:", tx['to'])
    print("Value:", web3.from_wei(tx['value'], 'ether'), "ETH")
    print("Gas Used:", tx['gas'])
    print("Gas Price:", web3.from_wei(tx['gasPrice'], 'gwei'), "Gwei")
    if is_contract_address(tx['to']):
        print("<<<<<<<<<<<<<SMART CONTRACT >>>>>>>>>>>>>")
    else:
        print("<<<<<<<<<<<<<SEND TOKEN >>>>>>>>>>>>>")
        
df = pd.DataFrame()
df['key'] = key_l
df['block_time'] = block_time
df['from'] = from_l
df['to'] = to_l
df['value'] = value_l 
df['gas_price'] = gas_price_l 
df['smartcontract_yn'] = smartcontract_yn_l
df

 

 

이를 통하여!!

19272508 의 91개 거래 중 87개가 Smart Contract 였음을 확인할 수 있습니다~!^^

728x90

댓글