Node.js로 스티밋에서 할 수 있는 것(4): 보팅하기

in #kr8 years ago (edited)

오늘은 특정글에 보팅을 하는 방법을 알아보겠다. 이번 글에서는 우선 특정 글에 보팅하는 함수에 대하여 알아보고, 실질적으로 보팅을 할 때 어떤 조건에서 보팅을 해야하는지를 살펴보겠다.

1. 특정글에 보팅하기

steem.js에 있는 아래 함수를 사용하면 된다.

var voter = 'tradingideas'      // 보팅할 사람
var wif = '5xxxx'               // posting key  
var author = 'tradingideas'     // 작가
var permlink = '5nnwke-test'    // 글 링크
var weight = 100                // 보팅 가중치 1.0%
steem.broadcast.vote(wif, voter, author, permlink, weight, function (err, voted) {

여기에서 wif는 posting에 사용하는 key 값이다. 지갑/권한/포스팅 옆에 있는 개인키보기를 눌렀을 때 나오는 값이다. weight는 보팅하고자 하는 퍼센트 값에 100을 곱한 값이다.

node.js를 이용하여 보팅을 하면 weight를 결정할 때 소숫점까지 사용이 가능하다. 정확하게 $1.00을 줄 수도 있다.

소스코드
https://github.com/multiwhs/steem-js/blob/master/auto_voting_simple.js

2. 보팅하면서 발생할 수 있는 경우의 수

보팅은 함수 한번만 부르면 되기 때문에 아주 간단하다.하지만 제대로 된 프로그램을 개발할려면 여러가지 이상 상황에 대한 고려가 필요하고 이에 대응하는 코드를 모두 짜야한다. 각종 오류에 대한 대응코드도 짜야한다. 한줄이면 될 것 같은 코드가 실제로 모든 경우를 다 고려하면 수백라인의 코드가 되기도 한다.

문제가 될 만한 상황을 정리해보자.

  • 이미 보팅을 한 경우
  • 보팅할 수 있는 기한을 넘긴 경우 (보팅은 글을 쓴 후 6일 +12시간까지 가능하다. )

그리고 어떤 이유로 보팅이 성공하지 않은 경우에 대한 이유를 알아야 원인을 파악할 수 있다.

이런 경우의 수를 모두 반영하는 코드는 이런 형태가 될 것이다.

01   vshares를 $로 변환할 때 필요한 값들을 얻는다.
02  보팅할 글에 이미 보팅한 사람들의 리스트를 구한다.
03   for (# voters ) {
04      보팅한 사람 중에 자기가 있는지 확인한다. 
05   }
06   if (아직 보팅하지 않은 글이면)  {
07      보팅한다.
08      보팅한 사람들의 리스트를 구한다.
09      for (# voters) {
10          내가 보팅한 rshares를 얻은 후 $로 변환하여 보여준다.
11      }
12   }

소스코드를 직접 보면 머리가 아프기 때문에 관심있는 분들만 보기를. 링크는 아래에

소스코드
https://github.com/multiwhs/steem-js/blob/master/auto_voting_final.js

3. 보팅하면서 발생할 수 있는 오류들

steem.js에서 제공하는 함수는 아래와 같은 형태로 사용하여야 한다. 오류가 발생하면 err.message에 자세한 내용이 기술되어 있다.

steem.broadcast.vote(wif, voter, author, permlink, weight, function (err, voted) {
    if (err === null) {
        // do something
    }
    else {
            console.log(err.message.split("{}")[0])
    }
});

이 함수에서 발생할 수 있는 오류는 아래와 같다.

  • 한 post에 보팅할 수 있는 횟수를 초과하였다 (4-5회 이상은 할 수 없는 것 같다.)
  • 너무 적은 weight로는 보팅할 수 없다.
  • 입력값이 틀린 경우(post 키 오류, 글 링크오류, 저자 오류 등등)

소스코드를 보면 알겠지만 node.js는 비동기적 함수로 이루어져 있기 때문에 가독성이 떨어지는 코드가 만들어진다. 이 말이 무슨 의미인지는 아래 글을 보면 이해가 될 것이다.
[개발] nodejs + steem-js 콜백 지옥을 탈출해보자. - synchronize.js 편

동기식으로 변경하기 위해서는 fibers를 설치해야 하는데, 내 노트북에서는 설치가 안된다. 어제 @nhj12311 님이 원격으로 내 노트북에 접속하여 설치 시도를 하였으나 실패하였다.

제대로 작업을 할려면 fibers를 설치해야 하는데, 방법을 모르겠다. 일단은 부분 부분 steem.js API 사용법 확인하는 작업을 먼저 해야겠다.


이전 글 보기

Node.js로 ..(1) :원하는 작가들의 최신 글 리스트 받기

Node.js로 ..(2): 디버깅 방법 및 excel로 활용하기

Node.js로 ..(3) : 보팅한 이웃과 금액 보기

Sort:  

A very useful post. Thank you very much for the information @tradingideas. Good luck always for you.

이렇게 노력해주시는 분들이 계시기에
추후 이용자들이 편안한 사용을 할수있겠어요 ㅎㅎ

참조할게여.
많은 도움이 되었네요.

아직은
당최 뭔 말씀이신지 이해가 어렵지만
1.2.3 차근차근 읽으며
공부해야겠네요
큰 도움이 될 것 같아요
고맙습니다

공부값은 한 잔의 차로 대신할게요

1편의 최신글 목록을 받은 후에 본 4편의 보팅을 엮에 봐야 겠어요~ ^^
감사합니다~!!

이 상태로는 어려워요. synchronize이용해서 동기식으로 바꾸어야 작업하시기가 용이할 겁니다.

참고 하겠습니다~
감사합니다~

리스팀 해갑니다!

제가 요새 집에를 잘 못가서 ㅠㅠ 다시 한번 설정을 하면서 빠진 차례가 있는지 기억을 되살려봐야할 듯 합니다. 좀 환경이 되면 해보겠습니다. ㅎㅎ

바쁘신데 괜히 신경을 쓰시는 것 같네요. 제가 해 볼께요. 안되면 그냥.. 다시 파이썬으로.. 가야죠.

스팀잇 플랫폼 관련된 개발도 재미있겠네요
팔로우하고 갑니다 ~

Coin Marketplace

STEEM 0.05
TRX 0.32
JST 0.082
BTC 63156.33
ETH 1678.97
USDT 1.00
SBD 0.41