Scotbot 매개변수 매뉴얼

in #sct5 years ago (edited)

여러분이 아실지 모르겠지만 scotbot 백엔드 개발은 @holdger80이 담당하고 있습니다. 파이썬 프로그래밍 언어를 이용해 scotbot을 만들었고 @holdger80이 만든 beem 라이브러리가 사용되었습니다. scotbot에 여러분의 토큰을 추가하려면 토큰 발행 계정의 액티브 키를 봇에게 제공해야 하며, 해당 토큰을 충분히 보유하고 있는 별도의 계정(토큰 발행 계정 이외)도 필요합니다. 사용자가 아직 보상받지 않은 충분한 양의 토큰이 있고 이에 대해 보상을 요청할 때, 봇은 토큰 발행 계정의 액티브 키를 이용해 사용자에게 토큰을 전송합니다.

이 문서도 함께 참고해주시길 바랍니다.

이 글에서는 https://sto.steem-engine.com/#/launch/scotbot 에서 설정할 수 있는 매개변수(parameter)에 대해 알려드리겠습니다.

json_metadata_key, json_metadata_value

이 매개변수는 글의 json_metadata 안에서 어떤 매개변수를 체크할 것인지 정의하는 것이기 때문에 매우 중요합니다. 선택 가능한 후보 중 하나는 "tags" 입니다. json metadata 필드에 설정된 json_metadata_value와 관련된 포스팅만 커뮤니티/tribes에 노출되며, 커뮤니티에서 발행한 토큰을 보상받을 수 있는 대상이 됩니다. json_metadata에서 json_metadata_key의 값은 별도로 설정하거나 json_metadata_value의 값과 같아야 합니다.


역자 주) json_metadata_key 의 값은 별도로 설정하거나 json_metadata_value의 값과 같아야 한다는 내용을 코드와 예시를 통해 좀 더 알아보겠습니다. json_metadata_value는 값 또는 배열로 제공할 수 있으며 scotbot에서는

json_metadata[json_metadata_key] == json_metadata_value

또는

json_metadata[json_metadata_key] in json_metadata_value

와 같은 상황을 체크합니다. sct를 예로 들어 살펴보겠습니다.

예시 1) json_metadata_value가 값 인 경우

json_metadata = {"tags": "sct"},
json_metadata_key  ="tags"
json_metadata_value = "sct"

예시 2) json_metadata_value가 배열인 경우

json_metadata = {"tags": "tag2"},
json_metadata_key  ="tags"
json_metadata_value = ["sct", "tag2"]

json_metadata_key="tags", json_metadata_value="scottest" 인 경우, "scottest" 태그를 사용한 글만 아직 보상받지 않은 토큰(pending token)을 보유할 수 있습니다. 아직 보상받지 않은 토큰은 토큰 보유자가 이 글에 대해 업보팅할 때 생성될 것입니다.

json_metadata_key는 scot_token과 같은 새로운 매개변수를 설정할 수도 있습니다. 이 경우, json_metadata 필드 안에 이 매개변수를 가진 글을 브로드캐스트하는 새로운 프론트엔드가 필요합니다.

json_metadata_key="scot_token", json_metadata_value="MYTOKEN" 인 경우, 글의 json_metadata는 아래와 같은 모습일 것이며 MYTOKEN 보상 풀에서 토큰을 받을 것입니다.

json_metadata": {
"scot_token": [ "MYTOKEN"]
}

현재는 보상 풀에서 토큰을 받기 위해 글에서 반드시 사용해야 하는 특정 태그(sct, zzan 같은)에 대한 정의와 tags 매개변수 사용을 권장하고 있습니다.

rewards_token, rewards_token_every_n_block

이 두 가지 매개변수는 보상 풀의 크기를 정의합니다. rewards_token_every_n_block 스팀 블록마다, 보상 풀은 rewards_token 개씩 증가합니다.

예를 들어, rewards_token_every_n_block=3, rewards_token=8 인 경우, 9초(스팀 3 블록)마다 8개의 토큰이 보상 풀에 추가됩니다. 1 시간이면 3,200개의 토큰이 추가되고, 하루 기준으로는 76,800 개의 토큰이 추가됩니다.

보상 풀은 저자와 큐레이터(voters)에게 모두 분배됩니다.

reduction_every_n_block, reduction_percentage

reduction_every_n_block 스팀 블록마다, 풀에 추가되는 토큰의 수량은 reduction_percentage 만큼 감소합니다.

reduction_every_n_block = 10512000, reduction_percentage = 0.5 라면, 보상은 매년 0.5%씩 감소합니다. 기존에 보상되는 토큰 수량이 8개였다면, 1년 후에는 다음과 같이 줄어듭니다.

8 / (1.005) = 7.96

cashout_window_days

이 매개변수는 글에 대한 보팅이 가능한 시기와 아직 보상받지 못한 토큰에 대해 보상을 요청할 수 있는 시기를 정의합니다. steem의 경우 cashout_window_days는 7입니다.

issue_token

이 매개변수가 true 이면, 보상 요청된 토큰은 issue 명령어를 통해 전송됩니다. 이것은 토큰 보유 계정과 토큰 생성 계정이 일치할 때만 가능한 동작입니다. issue_token이 false라면 토큰은 transfer 명령어를 통해 전송됩니다. 이 경우 토큰 보유 계정은 지갑 안에 토큰을 충분히 보유하고 있기만 하면 됩니다.

author_reward_percentage

저자와 큐레이터 보상을 나누는 기준을 정의합니다. author_reward_percentage = 50 이라면, 아직 보상받지 않는 토큰 중 50%가 저자에게 돌아가며 나머지 50%는 큐레이터에게 지급됩니다.

author_curve_exponent

이 매개변수는 1 ~ 2 사이의 숫자로 설정할 수 있습니다. author_curve_exponent = 1 이면, 선형 보상을 의미하며, author_curve_exponent > 1 이면 초 선형(super linear) 보상을 의미합니다.

글에 대한 아직 보상받지 않은 토큰(pending_token)은 다음과 같이 계산됩니다:

y = token_config[token]["author_curve_exponent"]
weight_rshares = int_pow(sum_rshares, y)
pending_token = int(weight_rshares / pending_rshares * reward_pool)

author_curve_exponent > 1 이라면, 보팅을 더 많이 받은 글이 보상 풀로부터 더 많은 토큰(share)을 받을 것입니다.

예시

author_curve_exponent = 1 이고, 2개의 글이 존재하며 첫 번째 글은 100 rshares, 두 번째 글은 1,000 rshares, 보상 풀에는 토큰이 1 개 있다고 가정해보겠습니다. 첫 번째 글의 pending_token은 다음과 같습니다.

pending_token = 100 / 1100 * 1 = 0.09

두 번째 글의 pending_token은 다음과 같습니다.

pending_token = 1000 / 1100 * 1 = 0.91

author_curve_exponent = 2 라면, pending_rshares는 100 * 100 + 1000*1000 = 1,010,000 입니다.
author_curve_exponent = 2 일 때, 첫 번째 글의 pending_token은 다음과 같습니다.

pending_token = 100 * 100 / 1010000 * 1 = 0.009

두 번째 글의 pending_token은 다음과 같습니다.

pending_token = 1000 * 1000 / 1010000 * 1 = 0.991

curation_curve_exponent

이 매개변수는 큐레이션 보상을 정의합니다. 0.5 ~ 2 사이의 숫자로 설정할 수 있습니다.

보팅을 한 큐레이터에게 제공되는 큐레이션 보상 수식은 다음과 같습니다.

curation_reward = pending_token - author_reward

각 보팅에는 가중치가 반영됩니다. curation_curve_exponent = 1 이라면, 가중치는 vote rshares에 정비례합니다.

y = token_config[token]["curation_curve_exponent"]
vote_weight = (int_pow(sum_rshares + vote['rshares'], y) - int_pow(sum_rshares, y))
sum_rshares += vote["rshares"]

모든 큐레이터들의 vote_weight는 total_vote_weight 로 합산됩니다.
큐레이션 보상은 다음과 같습니다.

pending_curation_token  = int(curation_reward * vote_weight / total_vote_weight)

예시

curation_curve_exponent = 0.5, curation_reward = 1 , 첫 번째 보팅은 100 rshares, 두 번째 보팅은 1000 rshares 라고 가정하겠습니다.

sum_rshares = 0
vote_weight_1 = sqrt(100) = 10
sum_rshares = 100
vote_weight_2 = sqrt(100 + 1000) - sqrt(100) = 23.166
total_vote_weight = 33.166

첫 번째로 보팅한 큐레이터가 받는 pending_curation_token 은 다음과 같습니다.

1 * 10 / 33.166 = 0.302

두 번째로 보팅한 큐레이터가 받는 pending_curation_token 은 다음과 같습니다.

1 * 23.166 / 33.166 = 0.698

vote_regeneration_seconds, vote_power_consumption

얼마나 자주 보팅할 수 있는지에 대해 정의하는 매개변수입니다. 이 매개변수는 스팀 백분율 표기법을 사용하며, 100은 1%를 의미합니다.

vote_power_consumption은 100%로 보팅했을 때 보팅 파워가 얼마나 줄어드는지를 정의합니다. 200(2%)로 설정한 경우, 풀 보팅 파워 상태에서 가중치 100%로 보팅했을 때 보팅 파워가 98%로 줄어듭니다.

vote_regeneration_seconds는 보팅 파워가 0에서 다시 100%가 될 때까지 걸리는 시간을 정의합니다.

downvote_regeneration_seconds, downvote_power_consumption

얼마나 자주 다운보팅할 수 있는지에 대해 정의하는 매개변수입니다. downvote_regeneration_seconds가 양의 정수로 설정되어 있으면 두 번째 다운보트 풀이 활성화됩니다.

다운보트 풀이 활성화되어 있다면, 다운보팅을 하더라도 보팅 파워가 줄어들지는 않을 것입니다.

downvote_power_consumption 100%로 다운보팅했을 때 다운보팅 파워가 얼마나 줄어드는지를 정의합니다. 200(2%)로 설정한 경우, 풀 다운보팅 파워 상태에서 가중치 100%로 다운보팅했을 때 다운보팅 파워가 98%로 줄어듭니다.

vote_regeneration_seconds는 다운보팅 파워가 0에서 다시 100%가 될 때까지 걸리는 시간을 정의합니다. 이 매개변수를 음의 정수로 설정하면 다운보팅 풀이 비활성화되고 다운보팅 발생시 보팅 파워가 줄어들 것입니다.

원문은 https://steempeak.com/steem-engine/@holger80/scotbot-parameter-manual 이며 @holger80 동의하에 번역을 진행했고, 스팀 코인판 공식 번역가 @dakeshi가 번역을 담당했습니다.


참고 자료


scot 및 스팀 엔진, SPS 관련 글 목록(정렬: 발행일 순)

Coin Marketplace

STEEM 0.27
TRX 0.13
JST 0.031
BTC 61918.40
ETH 2900.39
USDT 1.00
SBD 3.64