굳헬로의 스팀 프로그램 일기!! 아홉번째 #9 무한 반복 자동 클레임 업그레이드!! && 토큰 잔고 확인 && 토큰 전송과 토큰 전송 내역을 텔레그램으로 받아보기!!

in sct •  last year 

steem.jpg

어느덧 이번주도 신나는 불금이로군요.

전 오늘만 마치면 내일부터 휴가에 들어간답니다.

그래서 그런지 일도 손에 안 잡히고... 마음이 붕 뜬 느낌이로군요.

그래도 힘내서 오늘도 열심히 프로그램 일기 남겨 보겠습니다.


어제는 텔레그램 봇을 만들고 파이썬으로 텔레그램과 대화를 주고 받는 예제를 살펴보고, 이틀전 만들었던 무한 반복 자동 클레임 프로그램의 내역을 텔레그램으로 받아보는 코드를 만들어 보았습니다.

그런데 조금 미흡한 점이 있어 오늘 그 부분을 고쳐보기로 하겠습니다.

스팀엔진 토큰 리워드에 1.756 SCT 토큰이 클레임을 기다리고 있습니다.

어제 코드를 실행하면

클레임 가능한 SCT 토큰 1756개를 발견하고 클레임을 진행합니다.

그리고 텔레그램으로 SCT 토큰이 1756개 클레임되었다고 메시지가 잘 전송되었습니다.

하지만 실제 SCT 토큰은 1.756개인데 1756개라고 나오고 있네요.

그 이유는 먼저 알아보겠습니다.

얼마전 스팀엔진 토큰의 정보를 가져오는 steemengine.api.findOne() 예제 기억나시나요??

굳헬로의 스팀 프로그램 일기!! 세번째 #3 스팀엔진 토큰의 정보를 가져오는 findOne() && 누군가의 토큰 사용 내역을 가져오는 get_history() && JSON 데이터 출력

굳헬로의 스팀 프로그램 일기 세번째에서 공부를 했었죠.

from steemengine.api import Api
api = Api()
print(api.find_one("tokens", "tokens", query = { "symbol" : "SCT" }))

steemengine.api.findOne() 을 이용하여 SCT 토큰의 정보를 가져올 수 있습니다.

그 결과를 살펴보면 precision' : 3 이라고 되어 있는 부분을 확인할 수 있는데요.

토큰 정밀도(precision)를 설정하는 수치입니다.

precision' : 3 이라하면 소수점 세째자리 이하에서 반올림 한다는 말이죠.

그래서 그런지는 모르겠지만 scot["pending_token"] 값을 출력할때 소수점 세째자리를 1의 자리로 해서 보여주더라구요.

그래서 정확한 수치를 계산하려면 scot["pending_token"] 의 값을 1000으로 나눠 주면 됩니다.

여기에 출력된 1756을 1000으로 나누면

1.756이 되겠죠.

전 그냥 심플하게

if token == "SCT" :
     pending_token = str(int(scot["pending_token"])/1000)

클레임 받을 토큰이 SCT 라면 scot["pending_token"] 의 값을 1000으로 나누어서 pending_token에 저장하도록 코드를 추가했습니다.

그런데 여기서 고려해야 할 사항은 각 토큰마다 precision값이 다르게 적용되어 있습니다.

따라서 각 토큰마다 scot["pending_token"]의 값을 모두 따로 계산을 해야 합니다.

if token == "SCT" :
    pending_token = str(int(scot["pending_token"])/1000)
elif token == "AAA" :
    pending_token = str(int(scot["pending_token"])/10000)
elif token == "PAL" :
    pending_token = str(int(scot["pending_token"])/1000)            
elif token == "LEO" :
    pending_token = str(int(scot["pending_token"])/1000)            
elif token == "SPT" :
    pending_token = str(int(scot["pending_token"])/1000000)
elif token == "ZZAN" :
    pending_token = str(int(scot["pending_token"])/100000)
....

이런식으로 각 토큰별로 if 조건문으로 검사하여 해당 되는 pending_token 토큰의 값을 계산하는 코드를 삽입하면 이제 제대로 된 토큰 클레임 수량을 알림으로 받을 수 있게 된답니다.


그럼 이제 다시 본론으로 들어가서 오늘은 스팀엔진 토큰을 전송하는 예제를 살펴보도록 하겠습니다.

그리고 스팀엔진 토큰을 전송해보고 그 내역을 텔레그램 알림으로 받도록 코드를 짜보도록 하겠습니다.

먼저 토큰을 전송하려면 active key가 필요한데 active key 관리 잘 하셔야 하는거 아시죠!!!

토큰을 전송하기에 앞서 먼저 토큰 잔고를 알아보는 예제부터 살펴보겠습니다.

steemengine.wallet을 이용하여 스팀엔진 토큰의 정보를 가지고 올 수 있습니다.

from steemengine.wallet import Wallet
wallet = Wallet("goodhello")
print(wallet)

스팀엔진 토큰 잔고를 확인 하는 코드는 정말 간단해 보이네요.

하지만 출력된 결과는 알아보기가 힘드네요.

import json
from steemengine.wallet import Wallet
wallet = Wallet("goodhello")
get_balance = json.dumps(wallet, sort_keys=True, indent=2, separators=(',', ': '))
print(get_balance)

깔끔하게 출력하기 위해 json.dumps()를 시켜주었습니다.

steemengine.wallet을 이용하니 제가 가지고 있는 토큰들의 잔고뿐만이 아니라 스테이킹 량이라던지, 임대 보낸 양이라던지 등등의 정보를 확인할 수 있습니다.

그럼 이제 원하는 토큰의 정보만 가져올 수 있는 wallet.get_token()을 이용해 보겠습니다.

import json
from steemengine.wallet import Wallet
wallet = Wallet("goodhello")
get_token = wallet.get_token("SCT")
get_balance = json.dumps(get_token, sort_keys=True, indent=2, separators=(',', ': '))
print(get_balance)

wallet.get_token("SCT") 코드를 추가하여 제가 가진 SCT의 정보만을 가져옵니다.

이제 원하는 토큰의 잔고를 쉽게 확인할 수 있게 되었네요.

다음으로 토큰을 전송하는 예제를 살펴보겠습니다.

Splintertalk 토큰인 SPT를 부계정으로 보내서 스테이킹 하고 있는데요.

SPT를 부계정으로 전송을 해보겠습니다.

토큰 전송은 wallet.transfer()를 이용합니다.

from beem import Steem
from steemengine.wallet import Wallet
stm = Steem(keys=["active key"])
wallet = Wallet("goodhello", steem_instance=stm)
wallet.transfer("goodhello.spt",1,"SPT", memo="SPT token transfer")

토큰 전송을 위해서는 active key 가 필요하기 때문에 키가 유출되지 않도록 신중히 작업을 하시기 바랍니다.

wallet.transfer()에 받는 사람과 수량, 토큰종류, 메모를 입력하고 코드를 실행하니 간편하게 전송이 되는군요.

이렇게 블록체인에 custom_json이 기록되게 되며

토큰도 무사히 잘 전송이 되었네요.

그러나 토큰 전송은 다양한 상황에 대하여 문제점이 발생할 수 있다고 하는데요.

custom_json 작업은 블록체인에 올라가더라도 실행이 안되는 경우도 있다고 하고, 전송 수량에 오류가 있거나, 받는 사람의 존재 여부 등등 토큰 전송은 너무나도 중요한 작업인 만큼 모든 경우를 대비하여 만들어야 할 것 같습니다.

이 부분은 공부하면서 차차 연구해 보도록 하고 오늘은 마지막으로 토큰 전송 내역을 검사하여 성공적으로 전송이 되었다면 그 결과를 텔레그램으로 받아보도록 하겠습니다.

def token_transfer(telegram_token, telegram_chat_id, sender, active_key, receiver, amount, token, token_momo):
    bot = telegram.Bot(token = telegram_token)    
    stm = Steem(keys=[active_key])
    wallet = Wallet(sender, steem_instance=stm)    

    token_momo = sender + "님이 " + receiver + "님에게 " + token + "토큰을 " + str(amount) + "개 전송하였습니다."

    wallet.transfer(receiver,amount,token, memo=token_momo)
    
    bot.sendMessage(chat_id = telegram_chat_id, text = token_momo)   

먼저 토큰을 전송하는 부분과, 텔레그램으로 메시지를 보내는 부분을 하나로 모아 함수로 만들었는데요.

텔레그램 토큰 telegram_token,
텔레그램 챗 아이디 telegram_chat_id,
토큰을 보내는 사람 sender,
토큰을 보내는 사람의 액티브 키가 필요하겠죠. active_key ,
그리고 토큰을 받는 사람 receiver, amount,
또 어떤 토큰을 보내는지 토큰 이름 token,
그리고 토큰 메모 token_memo 이 값은 필요시 사용
이 모든 값을 넣어 token_transfer() 함수를 호출하면 토큰을 전송하고, 텔레그램으로 알림을 보내게 됩니다.

token_transfer("텔레그램 토큰", "텔레그램 챗 아이디", "보내는 사람", "보내는 사람 액티브 키", "받는사람", "수량", "토큰 이름", "토큰 메모")

이런식으로 token_transfer() 함수를 호출하면 됩니다.

 telegram_token = '텔레그램 토큰'    
    telegram_chat_id = '텔레그램 챗 아이디'
    sender = "goodhello"
    active_key = "액티브 키"
    receiver = "goodhello.spt"
    amount = 1
    token = "SPT"
    token_momo = "1 SPT transfer"
    token_transfer(telegram_token, telegram_chat_id, sender, active_key, receiver, amount, token, token_momo)

goodhello 가 goodhello.spt 에게 1개의 SPT를 전송하도록 값을 넣어 보았습니다.

프로그램을 실행하니 토큰이 잘 전송되었네요.

스팀엔진에서 확인할 수 있습니다.

전송된 내역을 마우스로 눌러보면 세부 내역이 나옵니다.

그리고 텔레그램으로도 알림이 잘 전송되었습니다.

블록체인에는 이렇게 기록이 되었는 걸 확인할 수 있습니다.

이렇게 해서 파이썬을 이용하여 토큰을 전송하고 그것을 텔레그램으로 알림까지 받을수 있도록 하는 코드가 완성되었습니다.

아직 가다듬을 부분은 많지만, 앞으로 계속 공부해 나가면서 살을 덧붙여 나가도록 하겠습니다.


앞으로 여기에 덧붙이고 싶은것은, 토큰 전송시 전송이 제대로 이루어졌는지 검사하여 토큰을 받는 사람에게도 텔레그램 메시지를 보내고 싶네요.

이 작업을 하기 위해서는 토큰 전송 내역을 가져와서 방금 전송한 내역이 성공적으로 전송되었는지 확인하는 작업과 텔레그램 받는 사람의 텔레그램 챗 아이디가 필요하겠네요.

그리고 다음으로는 이 작업을 웹에서 실행하고 확인할 수 있도록 만들려는 계획도 있습니다.

최종적으로 제가 속한 스팀코인판 조합에서 지분률에 따라 토큰 분배를 자동으로 하는 프로그램으로 완성하고 싶네요.

시간이 좀 걸리겠지만 앞으로도 열심히 힘내서 공부해보겠습니다.

그럼 신나는 불금 보내시구요~

휴가 가시는 분들 행복한 휴가 보내시길 바랍니다.


굳헬로의 스팀 프로그램 일기!! 시리즈

#1 굳헬로의 스팀 프로그램 일기!! 대망의 시작 #1 Python 프로그램 설치 && steemengine 파이썬 api 설치 && 간단한 steemengine 예제

#2 굳헬로의 스팀 프로그램 일기!! 그 두번째 #2 비주얼 스튜디오 코드 프로그램 설치 && 비주얼 스튜디오 코드를 사용하여 파이썬 다루기 && 간단한 steemengine 예제

#3 굳헬로의 스팀 프로그램 일기!! 세번째 #3 스팀엔진 토큰의 정보를 가져오는 findOne() && 누군가의 토큰 사용 내역을 가져오는 get_history() && JSON 데이터 출력

#4 굳헬로의 스팀 프로그램 일기!! 네번째 #4 steemengine Token 클래스 && Token.get_holder() && Token.get_market_info() && Token.get_buy_book() && Token.get_sell_book()

#5 굳헬로의 스팀 프로그램 일기!! 다섯번째 #5 스팀엔진 블록을 뒤져서 원하는 정보를 찾아보자!! 스팀엔진 마켓 거래 내역을 뽑아내는 예제

#6 굳헬로의 스팀 프로그램 일기!! 여섯번째 #6 파이썬으로 스팀엔진 토큰들을 클레임 해보자.

#7 굳헬로의 스팀 프로그램 일기!! 일곱번째 #7 프로그램 일기도 어느덧 1주일!! 드디어 첫 실전!! 무한 반복 작업 수행하기!! 이제 직접 클레임 하는 손맛은 잊자. 무한 반복 자동 클레임!!

#8 굳헬로의 스팀 프로그램 일기!! 여덟번째 #8 텔레그램 봇을 이용해 알림을 받아보자!! && 무한 반복 자동 클레임의 정보를 텔레그램으로 받아보기!!

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

tradingideas님이 goodhello님을 멘션하셨습니당. 아래 링크를 누르시면 연결되용~ ^^
tradingideas님의 [암호화폐] 그것이 알고 싶다!! claim, transfer 자동화 파이썬 소스](/sct/@tradingideas/claim-transfer)

...는 각각 posting키와 activie 키가 필요하기 때문에 공공서버에서는 동작하기가 어렵습니다. 따라서 goodhello이 작성하신 파이썬, beem, steem-engine 설치법[1]을 참고하시어 본인의 PC에 파이썬과 관련...

telegram 봇은 정말 간단하게 사용할 수 있군요. 혹시 카카오톡을 사용할 수 있는 파이썬 패키지가 있는지요?

찾아보니 있긴하네요. 그런데 이제 서비스가 종료 되고 비지니스 서비스로 유료화 한다고 하네요.

아쉽습니다.

이런. 아쉽군요.

Posted using Partiko Android

네.. 저도 텔레그램보다 카카오톡으로 메시지 받고 싶었는데...

방법을 찾아봐야 겠습니다.

능력자~!! 점점 더 진도가 나가시네요 굳!! 입니다 ㅎ

ㅎㅎ 아직 능력자는 아니에요.

열심히 해서 능력자가 되보겠습니다.

오~ 괄호쳐서 나누기 1000하는데도 뭔가 있어보이네요~ ^^ 화이팅입니다!!!

ㅎㅎ 쉽게 하려고 저렇게 했는데 제대로 하려면 조금 더 복잡해져서... 걍 쉽게 해버렸네요 ㅎㅎ

파이팅!!

Thank you for your continued support towards JJM. For each 1000 JJM you are holding, you can get an additional 1% of upvote. 10,000JJM would give you a 11% daily voting from the 700K SP virus707 account.

완전 멋지십니다
1화부터 따라하면 이렇게 할수 있는건가요?
즐거운 휴가 되시길^^

네~ 차근차근 따라오시면 충분히 가능하지 않을까 생각합니다.

궁금한 점이 있으면 언제든 문의주세요.

tradingideas님이 goodhello님을 멘션하셨습니당. 아래 링크를 누르시면 연결되용~ ^^
tradingideas님의 [암호화폐] 그것이 알고 싶다!! claim, transfer 자동화 파이썬 소스](/sct/@tradingideas/claim-transfer#@tradingideas/pv9ek8)

파이썬이 쉽다고는 하지만 공부할 양이 많습니다. goodhello님 연재를 따라가시다 보면 간단한 프로그램은 가능하실 듯 합니다.

union.sct님이 goodhello님을 멘션하셨습니당. 아래 링크를 누르시면 연결되용~ ^^
union.sct님의 [공지] 스판유니언 조합원 대상 10차 큐레이션 수익배분 완료 안내

...% 7 31 2차 추가 goodhello/td> 1000 1.21% 7 ...

Hi @goodhello!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 3.948 which ranks you at #4236 across all Steem accounts.
Your rank has improved 11 places in the last three days (old rank 4247).

In our last Algorithmic Curation Round, consisting of 150 contributions, your post is ranked at #64.

Evaluation of your UA score:
  • You're on the right track, try to gather more followers.
  • The readers like your work!
  • Good user engagement!

Feel free to join our @steem-ua Discord server