[SPS] 제안 시스템 개선 방안(제안자: jga)

in #sct5 years ago

HF21에서 도입된 제안 시스템은 스팀 블록체인 개선과 발전에 크게 기여할 것이라고 생각합니다. SPS 덕분에 스팀은 지속가능한 개발 및 공헌 환경을 갖추게 되었습니다.

이러한 흐름에 맞춰, 저 역시 스팀 생태계에 공헌을 하려고 합니다. 이 제안의 목적은 스팀 제안 시스템 관련 코드를 개선하는 것입니다. @blocktrades와 그의 팀의 노력으로 SPS는 매우 훌륭한 모습으로 소개되었지만, 여전히 수정이 필요한 부분이 있으며, 제안 작성자와 투표자 모두에게 필요한 기능 추가도 필요한 상황입니다.

개선 사항

개발을 통해 제가 개선할 내용은 다음과 같습니다:

  • 투표 가중치
  • 최대 지급액 설정
  • 총 지급액 계산
  • 확장성 이슈 수정

투표 가중치

현재 사용자가 특정 제안에 투표할 때 사용자의 모든 스팀 파워가 반영되며 가중치를 조절할 수 있는 방법이 없습니다.

스팀 파워를 많이 가진 사용자에게 이부분은 문제가 될 수 있습니다. 고래가 리턴 제안서(return proposal)와 새로운 개발과 관련된 제안서 모두 투표했다고 가정해봅시다. 이 사용자는 새로운 개발 제안이 통과되는 바램을 가지고 행동했겠지만 해당 제안서의 투표 결과가 리턴 제안서의 문턱을 넘지 못하는 상황이 발생할 수 있습니다. 만약 이 사용자가 리턴 제안서에 대한 투표를 취소하면 신규 개발 제안은 자금을 지원받을 수 있을지도 모릅니다. 하지만, 리턴 제안서의 경우 고래의 투표 취소로 인해 상당한 투표 수 감소가 발생하고, 이로 인해 다른 제안들이 리턴 제안서가 구축해놓은 유효 투표수 범위를 가볍게 뛰어넘어 SPS로부터 자금을 지원받게 되는 상황이 발생할 수 있습니다.

이러한 문제는 투표 가중치(투표할 때 vests를 조절할 수 있는)를 통해 해결할 수 있습니다. 이 경우, 투표자는 개발 제안서의 유효 투표 기준을 낮추기 위해 리턴 제안서에 대한 투표를 약간 줄일 수 있습니다. 이러한 방식을 통해 리턴 제안서는 자금 지원을 받기 위한 유효 투표 기준으로 계속해서 자기 역할을 수행할 수 있을 것입니다.

최대 지급액 설정

다음과 같은 상황을 가정해볼까요? 일일 지급 수량이 100 SBD 이고, 15일 동안 진행될 예정으로 올라온 제안서가 있습니다. 15일 동안 지원을 받는다면 총 1,500 SBD를 지원받게 됩니다. 만약, 15일동안 지원받은 총 금액이 1,000 SBD 라면, 현재 구현된 SPS 버전에서는 다음과 같은 상황이 발생할 수 있습니다:

(1) 공헌자는 지원받은 총 금액이 예상보다 작더라도 자신의 제안에서 약속한 작업을 마무리합니다. 이부분은 전적으로 공헌자의 선의에 따라 달라질 수 있습니다. 하지만 예산 부족으로 인해 작업을 완료하기 힘들 때도 종종 있습니다.
(2) 공헌자가 부족한 예산을 요청하는 새로운 제안을 올립니다. 괜찮은 해결책이지만 새로운 제안에 대한 투표를 확보하기 위해 다시 한번 유권자들에게 관심을 받아야하는 문제가 있습니다.
(3) 제안한 내용이 미완성 상태로 종료되거나 일부만 완료될 수 있습니다.

이러한 문제는 지급액 최대치를 정의하는 방법을 통해 해결할 수 있을 것 같습니다. 위의 예시의 경우, 공헌자가 일일 지급 수량이 100 SBD 이고 25일 동안 진행되는 제안을 생성하고 최대 지급액은 1,500 SBD로 설정할 수 있게 하는 것이죠. 이를 통해, 일일 지원금을 받을 수 있는 기간은 10 일이 늘었났지만 1,500 SBD 이상은 받을 수 없는 구조를 만들 수 있습니다.

총 지급액 계산

현재 구현된 SPS 버전에서는 투표 진행 중인 제안에 지급되는 총 지급액을 계산할 때, history API를 통해 찾은 모든 단일 지급액을 기준으로 계산하는 방식을 채택하고 있습니다.

위에서 제안한 최대 지급액을 구현하고 총 지급액도 함께 추가된다면 제안 세부사항을 호출함으로써 총 지급액 정보를 쉽게 얻을 수 있게될 것입니다.

확장성 이슈 - 투표 합계

현재는 1 시간마다 제안서 순위를 정하고 지원금을 분배하기 위해, 투표가 진행 중인 제안서에 대한 모든 투표가 반영되고 있습니다.
어떤 제안이 사용자 12,000 명으로부터 투표받은 경우, 블록체인은 매 시간마다 이들 사용자의 스팀 파워를 더할 것입니다. 이러한 구조는 수많은 제안이나 사용자를 수용할 수 있는 방식으로 확장할 수 없는 방식입니다.

이러한 문제를 해결하기 위해 가장 좋은 방법은 증가한 부분만 계산하는 것입니다. 투표가 새롭게 발생하면 투표 합계가 증가하는 방식이죠. 투표가 취소되면 투표 합계가 줄어들겠죠. 사용자가 파워 다운을 하면 투표 합계가 줄어들게 됩니다. 파워업을 하면 투표 합계가 증가하구요.

이렇게 되면, 분배시점이 다가오더라도 투표 수를 계산할 필요가 없습니다. 제안서 순위를 정하고 지급액을 분배하기만 하면 됩니다.

이 방식은 현재 투표가 진행되고 있지 않은 제안과 관련된 문제도 함께 해결할 수 있습니다. 현재는 지급 일정에 포함되지 않은 제안(아직 투표 기간이 아닌)에 대한 총 득표 수는 계산되지 않는 문제가 존재합니다.

일정 및 요건

이 제안과 관련해 필요한 자금은 4,800 SBD 이며 일일 자금 160 SBD 기준으로 30일 동안 분배되길 희망합니다.

제안을 통해서 작성된 코드는 스팀 코드 저장소에 PR(pull request)로 제출될 것입니다.

제안자 작업 이력 소개

저는 작년부터 European Commission에서 진행하는 파일럿 프로젝트에서 블록체인 개발자(principal blockchain developer)로 일하고 있습니다. 이 기간동안 스팀 블록체인 메인넷과 관련해 많은 경험을 쌓을 수 있었고, 스팀 블록체인 개선 작업을 이어나가고 싶습니다.

스팀 저장소에 다음과 같은 공헌 활동을 했습니다:

dsteem 자바스크립트 라이브러리와 관련해 다음과 같은 공헌을 했습니다:

SPS 제안 투표 참여 방법

이 제안에 투표하고 싶은 분들은 이 링크를 클릭하세요.

제안은 아래 링크를 통해서도 확인하실 수 있습니다:

감사인사

이 아이디어들은 다음 번 하드포크에서 구현하고자 하는 개선 사항과 관련해 다양한 사용자와 증인(특히 @smooth)과 논의하는 과정에서 얻은 결과물입니다.

제안서 원문은 https://steempeak.com/proposals/@jga/proposal1 에서 확인하실 수 있으며, 스팀 코인판 공식 번역가 @dakeshi가 번역을 담당했습니다.


SPS 투표 참여 가이드

SPS 투표 참여 가이드를 작성해주신 @donekim 님께 다시 한번 감사 인사를 전합니다.

Sort:  

fenrir78님이 sct.han님의 이 포스팅에 따봉(20 SCT)을 하였습니다.

@proxy.token의 지지 투표를 실행하였습니다. 번역 내용이 판단에 많은 도움이 되었습니다. 감사합니다.