굳헬로의 스팀 프로그램 일기!! 어느덧 스물번째 #20 시행착오... 그리고 시련... 하지만 원사마님 덕분으로 엄청난 레벨업!! 감사합니다. 더욱 발전하겠습니다.

in sct •  17 days ago 

steem.jpg

오늘 흐릿흐릿한 날씨에 행사 준비를 위해 지리산 대원사 계곡에 다녀왔습니다.

무더웠지만 구름이 햇살을 가려주었기에 그럭저럭 걸을만 했고, 시원한 계곡물에 발 담그고 동동주 한잔 하고 왔답니다.

피곤한 하루를 보냈지만 오늘도 프로그램 일기 남겨보도록 하겠습니다.


프로그램일기도 어느덧 20번째가 되었고, 요즘 부쩍 자신감이 늘어 뭘 만들어야지 욕심만 늘어가고 있는데, 스팀엔진 블록익스플로러가 자주 먹통이 되고, 스팀엔진 API로부터 데이터를 가져오는데 시간이 오래 걸리다 보니.. 필요한 모든 데이터를 데이터베이스에 저장하려는 생각을 하고 있었습니다.

하지만 생각지도 못한 난관을 만났네요.

데이터베이스에 블록넘버를 키 값으로 잡아 데이터를 넣고 있었는데.....

하나의 블록에는

Object
blockNumber:1046770
refSteemBlockNumber:35262111
refSteemBlockId:"021a0e9fdd7ff2244b858b125ebd2258fe835d3d"
prevRefSteemBlockId:"021a0e9ec81c509fdacb4ad4bd253a851ddaf294"
previousHash:"1c1413da1c53143189e9b6f50aefc043f35223a2e801cee9c329300ef4ef98cd"
previousDatabaseHash:"0addd00908e68e10c36fac38a1a32297ec40bec2feb77ffdec75d60e020fb3f7"
timestamp:"2019-08-04T15:35:30"
transactions:Array[4]
0:Object
refSteemBlockNumber:35262111
transactionId:"afc4890dc0d3598fcfe13942f9c894703540939d"
sender:"team1p"
contract:"tokens"
action:"transfer"
payload:"{"symbol":"SCT","to":"lucky2","quantity":"2.16","memo":"19.08.05 operation cost","isSignedWithActiveKey":true}"
executedCodeHash:"e293e14a1fab43569615253d8bc7457a86ca4eeb647906f13658ede5c467459c"
hash:"14401e681436732892c65cf5e0b9737b9307a7a9915d5f9dcf284a66c713abed"
databaseHash:"85fbc9e18c47dc52016788de7ab56c20b3da8b90f5e4e731db9d90dac6c63735"
logs:"{"events":[{"contract":"tokens","event":"transfer","data":{"from":"team1p","to":"lucky2","symbol":"SCT","quantity":"2.16"}}]}"
1:Object
refSteemBlockNumber:35262111
transactionId:"55d76c4045cdb892a364025560be1f9caeae3ae1"
sender:"mancer-sm-alt"
contract:"market"
action:"cancel"
payload:"{"id":"7b3139c6bdc78219c03f9208a3da73e72a3c3bb1","type":"buy","isSignedWithActiveKey":true}"
executedCodeHash:"0e2a4ba3fd4b651d9897a208888fd3ebfe85e5c32d350e602876fefacc995901e293e14a1fab43569615253d8bc7457a86ca4eeb647906f13658ede5c467459c"
hash:"b4fcb04c77a7e13c6decd110f40a9e69419ee99b3985bb0bb53396ee75693605"
databaseHash:"9331ef201b454322c50670aff7aa473a07cb77e9a49bab89bcf528bbcd0e6443"
logs:"{"events":[{"contract":"tokens","event":"transferFromContract","data":{"from":"market","to":"mancer-sm-alt","symbol":"STEEMP","quantity":"198.23020000"}}]}"
2:Object
refSteemBlockNumber:35262111
transactionId:"9dfe73a24b80b19dc48b275e05d89d068d17d8e2"
sender:"steemmonsters"
contract:"tokens"
action:"transfer"
payload:"{"symbol":"DEC","to":"dolov","quantity":"800","memo":"Transfer DEC to Steem Engine.","isSignedWithActiveKey":true}"
executedCodeHash:"e293e14a1fab43569615253d8bc7457a86ca4eeb647906f13658ede5c467459c"
hash:"ac410f3b8c0683db449b02ecc42e2edf03f7bbada9ff33dfd2cfc47dc40d85f0"
databaseHash:"128138ade3ec7742ce844310e0b6a55c5e13f0197aa7abfa2ff6fb4c36e70edb"
logs:"{"events":[{"contract":"tokens","event":"transfer","data":{"from":"steemmonsters","to":"dolov","symbol":"DEC","quantity":"800"}}]}"
3:Object
refSteemBlockNumber:35262111
transactionId:"708cdb3e17a542c8786936a79ba5c27d841206b2"
sender:"tipu"
contract:"tokens"
action:"transfer"
payload:"{"symbol":"TPU","to":"lookplz","quantity":"0.008","memo":"reinvest_tokens","isSignedWithActiveKey":true}"
executedCodeHash:"e293e14a1fab43569615253d8bc7457a86ca4eeb647906f13658ede5c467459c"
hash:"f28912d550382197c0feee13cc72d2022e8fd840bb609cabaf4d4e2dafdd4012"
databaseHash:"bf85e77b71822a1b65cb26d54ff5da747309ff08bb672833e7721606fc2cbab9"
logs:"{"events":[{"contract":"tokens","event":"transfer","data":{"from":"tipu","to":"lookplz","symbol":"TPU","quantity":"0.008"}}]}"
virtualTransactions:Array[0]
hash:"97b21d4b299246cbb131197109d4e7df1ca82a9a0a53d950334aa87a071316f9"
databaseHash:"d0118c96241ff112920d52cf1874f5c0a9c965045db40128a95484daab6373c3"
merkleRoot:"fee9c7ae5a9889e41262b595a3f8a551f4de5f6524161999830da76c252f1cb7"
signature:"1f6fb4fd47221b6e6ef6d880a4f4dfb3e2b289f7175649374d22717c3281a19fb87b5aac384ea44f2bd6faa967f08cfabdb33bbfd7e031c574b08e9775b993de84"
$loki:1046771

위와 같이 여러개의 컨트랙들이 모여서 들어 있더라구요.

아... 바보... 분명히 알고는 있었는데... 엄청나게 오해를 하고 있었더라구요.

이제까지 해왔던 일들이 순식간에 물거품이.... 는 아니고 다시 설계를 해야 하게 되었답니다.

그나저나 스팀엔진의 엄청난 데이터를 데이터베이스에 저장하려니...

대용량 정보를 관리하는건 익숙하지 못하다 보니 설계도 쉽지 않더라구요.

이 와중에 어제 원사마 @wonsama 님으로부터 놀라운 이야기를 들었습니다.

데이터를 한번에 많이 가지고 와서 저장을 하면된다고...

그동안 블록을 하나 하나 검사하면서 데이터를 뽑고 있었는데...

그리고 벌써 스팀엔진의 블록도 100만개를 넘어가고 있어 설계를 바꾸고 새로운 데이터를 뽑아내려면 또 엄청난 시간이...

그런데 원사마님이 한번에 많이 불러와서 처리하면 빠르게 할수 있다고... 하시더군요.

와우~ 왜 이생각을 못했을까요.

그리고 또 어려운 이야기였지만 스팀엔진에서 데이터를 뽑아오는 rpc20 rest api ssc 등에 대해 이야기를 하시는데...

저는 다 생소하고 모르는 것들이라 이게 뭔가 했는데...

시간을 내어 하나씩 차근 차근 알아보기 시작했습니다.

그런데 여기에 정말 놀라운 신세계가 보이더라구요.

아직 정확히 개념을 잡진 못했지만 프로토콜을 이해하면 데이터를 더욱 쉽게 뽑아올수 있다고 합니다.

예를 들어 이전에 공부할때 사용했던 토큰의 정보를 가져오는 steemengine.api.find()

from steemengine.api import Api
api = Api()
print(api.find("tokens", "tokens"))

이렇게 사용을 하고 출력을 하면

각 토큰들의 정보를 가져올 수 있었습니다.

그리고 여기에

print(api.find("tokens", "tokens", query = { "symbol" : "SCT" }))

위와같이 query를 넣어서

특정 토큰의 정보만 빼오도록 할 수 있었답니다.

여기까지가 저의 한계였는데...

이 query를 이용하여 특정 정보를 뽑아올수 있더라구요.

query = {"symbol":"SCT"}
print(api.find("tokens", "delegations", query, 10))

이렇게 symbol을 SCT로 주고 delegations 내역을 10개만 가지고 오라고 할수도 있구요.

query = {"to":"team1p", "symbol":"SCT"}
print(api.find("tokens", "delegations", query, 100))

이렇게 특정 계정으로 특정한 토큰이 임대된 내역을 가지고 올수도 있더라구요.

이렇게 원하는 데이터를 가져와서 데이터베이스에 넣어 사용할 수 있게 되었답니다.

그동안 하루에 조금씩 경험치를 쌓아왔는데, 하루만에 엄청난 경험치를 쌓게 된 것 같네요.

저에게 큰 가르침을 주신 원사마님께 무한한 감사의 인사를 올립니다.

처음엔 정말 무슨말인지 몰랐는데... 이해가 되는 순간 엄청난 레벨업이 되버렸네요.

조만간 인사만 말고 큰(?) 보답도 준비해 보겠습니다.

아직 모르는것이 많이 끊임없이 공부를 해야겠지만, 앞으로는 더욱 빠르게 진도가 나갈 것 같습니다.

임대내역과, 자동분배는 완성이 되었고 이를 더욱 가공하여 누구나 쉽게 사용할 수 있도록 만들 예정이고, 자동보팅도 테스를 해봤는데 잘 되고 있는것 같습니다.

조건문만 조금 더 가다듬으면 원하는 방식으로 자동보팅 프로그램도 돌릴수 있게 될 것 같습니다.

그리고 다음 과제로는 스팀몬스터 공략!!

또 욕심이 늘어만 가고 있네요.

그래도 하나씩 하나씩 배워가는게 너무 너무 즐겁고 재미 있네요.

그럼 다음 시간에는 실전으로 멋진 프로그램 하나 만들어서 찾아오겠습니다.

태풍이 지나가고 있는 오늘 부디 별탈없는 하루 보내시길 바래요.


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

#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 텔레그램 봇을 이용해 알림을 받아보자!! && 무한 반복 자동 클레임의 정보를 텔레그램으로 받아보기!!

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

#10 굳헬로의 스팀 프로그램 일기!! 열번째 #10 토큰 전송내역을 검사하고, 토큰을 전송 받으면 텔레그램으로 알림을 받아보기!!

#11 굳헬로의 스팀 프로그램 일기!! 열한번째 #11 스팀엔진 토큰 임대내역 추적. 쉽지 않았던 머나먼 여정 (1/2)

#12 굳헬로의 스팀 프로그램 일기!! 열두번째 #12 스팀엔진 토큰 임대내역 추적. 쉽지 않았던 머나먼 여정 (2/2) 스팀엔진 토큰 임대내역 추적 완료!!

#13 굳헬로의 스팀 프로그램 일기!! 열세번째 #13 웹 프로그래밍의 시작!! 파이썬을 이용하여 정보를 MySQL 데이터 베이스에 저장해보기!!

#14 굳헬로의 스팀 프로그램 일기!! 열네번째 #14 파이썬을 이용하여 데이터베이스로부터 정보를 가져오기 && 스팀코인판 3대풀 임대내역 데이터베이스 작업 완료!!

#15 굳헬로의 스팀 프로그램 일기!! 열다섯번째 #15 웹 프로그래밍을 이용하여 스팀코인판 3대조합의 임대 내역을 웹으로 확인해보자 !!

#16 굳헬로의 스팀 프로그램 일기!! 열여섯번째 #16 스팀엔진 최신 블록을 검사하여 필요한 정보를 데이터베이스에 저장하기!! 3대 조합의 임대내역을 최신으로 저장하기!!

#17 굳헬로의 스팀 프로그램 일기!! 열일곱번째 #17 조합들이 필요한 기능 드디어 완성!! 자동 클레임과 자동 분배 기능!!

#18 굳헬로의 스팀 프로그램 일기!! 열여덟번째 #18 스팀코인판 3대 조합의 임대내역과 실시간 예상 분배 금액을 웹으로 확인해보자!!

#19 굳헬로의 스팀 프로그램 일기!! 열아홉번째 #19 어제 만든 프로그램 업그레이드!! 개별 상세내역보기 기능 추가!!

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:  

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

... 13 19 2차 추가 goodhello/td> 3000 2.59% 13 <td...

덕분에 저도 좋은 정보 알았네요. 감사합니다.
스몬까지 진출하시나요? 조만간 상위 권에서 볼 수 있겠군요. 화이팅!!

도움이 됐다니 좋네요~

스몬도 코딩 공부하면 재미있을것 같아서요~

원사마님 부기님 트아님 굿헬로님 다들 스몬 AI 돌리는 날이 오는 것 아닌가요?ㅎㅎ

ㅎㅎㅎ 스몬 자동화는 거의 만들었었는데... 덱 을 일일이 다 넣어줘야 하는점이 귀찮아서 미루고 있었는데, 조만간 다시 해보려구요.

막힌게 풀리셨으니 다음번엔 더 도약할 수 있겠네요 ㅎ

네~ 오늘부터도 더 새로운걸 도전해 봐야죠~

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.

Hi @goodhello!

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

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

Evaluation of your UA score:
  • Some people are already following you, keep going!
  • Your contribution has not gone unnoticed, keep up the good work!
  • Try to work on user engagement: the more people that interact with you via the comments, the higher your UA score!

Feel free to join our @steem-ua Discord server