본문 바로가기
코인 트레이딩/트레이딩 관련 생각

[디파이 관련 투자 일기] Timelock 트랜젝션 텔레그램으로 가져오기(2)

by Kwants 2021. 6. 27.
반응형

이전 글에서는 트랜젝션을 가져오기 위해 필요한 사전 작업을 해봤습니다. 이번 글에서는 코드 실행에 관해 설명드리겠습니다. 코드의 세부적인 내용보다는"실행방법"에 초점을 맞추겠습니다. 먼저 목표로하는 결과물은 아래 그림과 같습니다.

 

 새로운 트랜젝션이 없는 경우  새로운 트랜젝션이 발생한 경우

 

 

코드 실행을 위해 파이썬 IDLE를 실행해봅시다. 파이썬 IDLE은 시작>python 검색으로 찾을 수 있습니다. 

 

 

해당 IDLE을 실행하시면 하얀 메모장 같은 창이 나옵니다. 이제 해당 창에 코드를 작성하기만하면 됩니다. 먼저 아래 코드를 복붙 해주세요. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import requests
from bs4 import BeautifulSoup
import os
import telegram
import time
import threading
 
 
 
base_dir = os.path.dirname(os.path.abspath(__file__))
f= open("timelock.txt" , "w"## 파일명은 언제든지 변경하셔도 괜찮습니다. 
f.close()
 
 
def thread_run():
    
    bot = telegram.Bot(token = ''## 이전에 만드신 텔레그램 봇의 API 주소를 넣으시면됩니다. 
    chat_id = ## 자신의 텔레그램 고유번호를 넣어주시면됩니다. 
    req = requests.get("https://bscscan.com/address/0x3209b471c2A37203502A0a7d002A449c742c5A93")
    ## 주기적으로 긁어오실 스마트컨트랙트를 bscscan에 검색하시고 해당 주소를 채워넣으시면 됩니다. 
    html = req.text
    soup = BeautifulSoup(html, 'html.parser')
 
    block = soup.find_all('a' , class_= 'hash-tag text-truncate myFnExpandBox_searchVal')
    time = soup.find_all(class_ = 'showAge')
 
 
    with open(os.path.join(base_dir , 'timelock.txt') , 'r+'as f_read:
        latest_block = f_read.readline()
 
        for i in rangelen(block) ):
 
            if block[i].text ==  latest_block:
                sending_list = i
                break
            else: sending_list = len(block)
 
        if sending_list ==0:
            Message = "새로운 블락이 없습니다."
            bot.sendMessage(chat_id = chat_id , text = Message)
 
        for j in range(sending_list):
            Message = "\n"
            Message = Message+ block[j].text+'\n'+ time[j].text+'\n'+ "https://bscscan.com/address/0x3209b471c2A37203502A0a7d002A449c742c5A93"
            bot.sendMessage(chat_id = chat_id , text = Message)
                
        f_read.close()
  
    
    threading.Timer(3600, thread_run).start()  ## 얼마나 자주 볼지를 설정하는 곳입니다. 
    
thread_run()
 
        
 
cs

 

 

해당 코드에서 변경하셔야 될 부분은 크게 4가지입니다. 

 

(1) 텔레그램 봇 API token address

(2) chat_id 

(3) Timelock 주소(BSCSCAN에서 검색하시면 됩니다)

(4) 해당 코드를 얼마나 자주 실행할지 

 

먼저 (1), (2)에 대해서 설명하겠습니다.  (1)은 17번 줄, (2)은 18번 줄에 있으며 빨간색 사각형으로 표시한 부분입니다. 텔레그램 봇의 API 토큰 및 자신의 chat_id를 각각 채워 넣으면 됩니다. 

bot = telegram.Bot(token = '&&&&&&&&&')의 &&&&위치에 조회하신 API 토큰 주소를 넣어주시면 되고 chat_id는 chat_id = 142039과 같은 방식으로 넣어주시면 됩니다.  API주소는 문자열 주소이기 때문에 '' 안에 위치해야 됩니다. 

 

다음으로 bscscan에서 검색한 타임락 주소입니다. bscscan은 바이낸스스마트체인 내에 있는 모든 계정의 트랜젝션 내역이 있는 사이트입니다. bscscan에서 timelock 주소를 검색하시면 해당 계정의 트랜젝션 내역이 나오게 됩니다. 여기서 가져와야 될 것은 윗 상단에 있는 주소입니다.(빨간색 점선 사각형으로 표시해뒀습니다)

 

 

해당 주소를 가져오셨으면 총 두 곳에 해당 주소를 붙여 넣어야 됩니다. 빨간색 사각형으로 표시된 부근에 가져오신 주소를 넣어주시면 됩니다. 문자열 주소기 때문에 "" 사이에 해당 주소를 넣어주세요. 

 

마지막으로 설정해주셔야 될 부분입니다. 얼마나 자주 해당 코드를 실행할지에 관한 변수입니다. 

원 코드에서는 3600초(60분)로 설정되어 있습니다. 취향에 맞게 설정하시면 됩니다. 단 너무 짧게(5초 이하) 설정하시면  해당 사이트가 사용자  IP를 차단할 가능성이 있어 여유 있게(10분~60분) 설정하시는 것을 추천드립니다. 

 

이제 기본적인 설정은 끝났습니다. 이제 해당 코드를 실행하시기만 하면 됩니다. 파이썬 IDLE 창의 윗 상단 Run> Run Module로 실행할 수 있습니다. 코드가 정상적으로 실행된다면 텔레그램으로 바로 알람이 갈 겁니다. 이후에는 설정하신 시간이 지난 뒤에 알람이 발생합니다. 

 

 

코드의 내용적인 면을 이해하는게 좋긴 하지만 사용에 목적이 있다면 코드에 관한 내용적 설명은 생략하는게 좋다고 봤습니다. 다음글에서는 해당 코드에 대한 간략한 내용 설명을 드리고 타임락에 어떤 트랜젝션이 올라오면 주의 깊게봐야되는지 설명드리겠습니다. 

 

댓글