clayop님의 개발 요청에 도움이 될까 싶어 올립니다.

in #kr6 years ago (edited)

@clayop 님의 어뷰징 감지를 위한 개발을 요청드립니다 에 대한 포스트입니다.

제가 전부 완성할 능력은 없고, steem-python의 테두리 내에서 도움이 될까 싶어 올립니다.
GitHub로 공유드리고 싶지만... 아직 안만들어서 그냥 포스트로 올립니다.

  • kr 유저를 구분해야하는지에 대한 내용이 본문에 없었고
  • 만약 그러하다면 whitelist를 만들어야하며
  • 유저명을 implicit suffix tree로 따로 저장하고
  • 매 번 모든 유저를 검색해야하는지, 상위 100명 정도를 후보군으로 만들고 마크를 하면서 후보군 갱신은 주 또는 월단위가 좋을 것 같다는 생각입니다.

실행 시 결과는 그림처럼 나옵니다.

02.PNG

from steem import Steem
from steem.steem import Steem
from steem.account import Account
from steem.converter import Converter

from dateutil.parser import parse
from datetime import datetime, timedelta
import re

s = Steem(nodes=["https://api.steemit.com"])
converter = Converter(steemd_instance=s)

def diff_in_seconds(vtime):
    return (datetime.utcnow() - parse(vtime)).total_seconds()

# 계정명
acc_name = 'whoami'
print('계정명 : ', acc_name)

# 계정 정보
acc_info = s.get_account(acc_name)

# 계정 보유 SP (acc_sp)
acc_svs = float(re.findall("([0-9]+(?:\.[0-9]+)?)(?:\s)", acc_info['vesting_shares'])[0])
acc_dvs = float(re.findall("([0-9]+(?:\.[0-9]+)?)(?:\s)", acc_info['delegated_vesting_shares'])[0])
acc_rvs = float(re.findall("([0-9]+(?:\.[0-9]+)?)(?:\s)", acc_info['received_vesting_shares'])[0])
acc_vs = acc_svs + acc_rvs - acc_dvs
acc_sp = round(converter.vests_to_sp(acc_vs))
print('보유 스파 : ', acc_sp)

# 보팅한 목록
acc_given_votes = s.get_account_votes(acc_name)

# 기간 설정
days = 14
acc_vote_info = [ vote for vote in acc_given_votes
                  if diff_in_seconds(vote['time']) < (days * 86400) ]
print('기간 : ', days)

# 총 voting weight, rshares 및 셀프 rshares
all_vweight = 0
all_rshares = 0
self_rshares = 0

for v in acc_vote_info:
    all_vweight += float(v['percent'])
    all_rshares += float(v['rshares'])

    if v['authorperm'].split("/")[0] == acc_name:
        self_rshares += float(v['rshares'])

print('기간 내 총 rshares : ', all_rshares)
print('기간 내 총 Voting Weight : ', all_vweight)

# 셀프 보팅 비율
print( '셀프보팅 비율 : %.3f' % (self_rshares / all_rshares) )

# 기간 내 Inverse Simpson
vtarget = dict()

## 인원별 보팅횟수와 rshares의 총합
for vote in acc_vote_info:
    name = vote['authorperm'].split("/")[0]

    if name not in vtarget:
        vtarget[name] = {'count':0, 'sum_of_rshares':0}

    vtarget[name]['count'] += 1
    vtarget[name]['sum_of_rshares'] += float(vote['rshares'])

# Inverse Simpson 값
sum_of_percent = 0
sum_of_percent_square = 0
for v in vtarget:
    sum_of_percent_square += (vtarget[v]['sum_of_rshares'] / float(all_rshares)) ** 2

Inverse_Simpson = 1.0 / float(sum_of_percent_square)
print( 'Inverse Simpson(rshare) : %.3f' % Inverse_Simpson)
Sort:  

으악... get_account_votes로 하면 되었던거군요 ㅠ 전 왜 뻘짓을.... ㅠㅠ

유저 whitelist(혹은 blacklist)는 SP 기준으로 미니멈을 정한 다음에 한달 혹은 일주일 단위로 갱신하면 좋을 것 같습니다. 이미 코드에서 위임받은 물량과 위임한 물량 다 고려하셨기에 금방 만들겠네요 ^^

함수 하나가 사람을 울고 웃게 만드는게 다반사죠 뭐 ㅠㅜ... 도움이 되었다니 기쁩니다. 웹 서비스에 조금 더 정통했더라면 더 도와드릴 수 있었을텐데 아쉽습니다. 댓글에 보팅으로 보상까지 남겨주시고... 감사합니다. @tpdns90321님이 솔선해서 작업 중이시니 추가적인 내용을 요청하시면 돕도록 하겠습니다. ^^/

어제는 비몽사몽해서 감사의 말을 드리지 못했습니다. 님이 우리의 뻘짓을 막으셨습니다. 와~~ 일감 줄었다. 이제 신규 어뷰저 감지 부분을 잡을 필요가 있을 것 같습니다.

단체로 뻘짓하고 전 과제하고 오늘은 기절하게 씀다. 오늘은 뭐가 할 일이 많은지.

참... 물들어올 때 노 저을 줄 모르는 분... 순수해...

순수해 보이려는 의도는 없었지만요.. -0- 경고봇으로 하루에 두 번이나 같은 내용을 썼어서 밸런스를 맞추려고 했을 뿐입니다...

후훗... 그렇게 말하지만 프사가 너무 순수한 걸요...

아... 좀 순수멍청해보이긴 하죠...

아유 무슨.... 정말 건장하고 청순한 아가씨 느낌입니다..

프로그램 하시는 분들은 정말 대단하신 것 같아요.+_+

+_+; 가만히 있어도 멋져보이는 직업... 전 울곰님처럼 그림 귀엽고 잘 그리시는게 더 대단합니다. 서로 대단한 사람 합시다 :D

프로그램이 더 대단해요~ 전 고등학교때 프로그램 포기했거든요.=ㅅ=;;

딱 필요한 자료가 여기 있네요. 감사합니다.
어차피 파이썬이 주언어라서 steem-python 자료가 많이 필요했습니다. 열심히 분석하겠습니다.

' -' 넵 파이팅입니다.

뭐.. 뭔가 잘 모르지만 여전히 멋지시네요 +_+

요즘 어뷰징때문에 피드가 시끄러운것 같던데;;
금번 사태를 통해 어뷰징(?)비스무리 한 것을 유발한 자로써 그냥 입닥치고 조용히 있습니다;; 아직도 어뷰징이 뭔지 확실하게는 모르겠지만 뭔가 자정하려는 좋은 노력들을 하시는것 같아 댓글로 응원하고 갑니다!!!

저는 도덕윤리라고 생각하고 있습니다. 법이나 시스템을 어긴 것은 아니지만, 다수가 눈살을 찌푸리는 행동을 주로 어뷰징이라고 하지요. 씽키님의 행동은 어뷰징도 아니고, 비스무리하다고도 하시면 안됩니다. 도와주신 분들을 생각하셔야지요. 쓰담쓰담. 응원 감사합니다 :D

네! 그렇게 말씀해 주시니 안심이 됩니다!!
주로 어뷰징 골라낼때 보팅도넛이나 횟수 등을 기준으로 하시게 되는거 같아서, 의도치 않게 그렇게 취급되는 분들이 계실까봐 걱정되서 그랬어요;;
도덕윤리라면 당연히 지탄받아 마땅한거겠죠!!^^

오오...개발자분들은 참 멋진거 같아요..ㅎㅎ
멋진 포스팅 감사합니다!!

끝까지 개발할 수 있으면 좋았겠지만 제가 하면 시간이 지체되기 때문에 아쉽습니다. 저야말로 응원 감사합니다~

재능기여...
이런 사례들이 있기에
제가 스팀잇을 하는 듯합니다.

감사합니다.

칭찬 감사합니다... +_+/

코드 조각 이라고 표현하셨지만 너무 멋지십니다
응원합니다!!

감사합니다 ' -')// 저도 이게 도움이 되길 바랍니다.

@maanya님 정리 완전 잘하셨네요 :) 마저 만드셔도 될 것 같은데요...?

프론트엔드는 또 다른 능력자분들이 해주실 것입니다... 제가 웹과 서비스까지 손대기엔 시간효용성이 떨어지기 때문에... 감사합니다 :)

이런 분들이 있어 스팀잇이 사람냄새가 나는군요. 코드는 뭔지 하나도 모르지만, 코드가 감동적이네요. ㅠㅠ

칭찬 감사합니다 :)

헐 이런 대단한걸 왜 보상 거부로 올리셨어요 ㅜㅜ 미약하나마 댓글에라도 보팅하고 갑니다.

핰.. 부끄러워서 그랬어요.. ;ㅂ; 요 며칠 알람봇 하면서 너무 관심을 많이 받아서... 감사합니다.

여기에 풀봇드리고 갑니다 ㅎ

Coin Marketplace

STEEM 0.31
TRX 0.11
JST 0.035
BTC 66739.07
ETH 3228.97
USDT 1.00
SBD 4.23