Skip to content

Instantly share code, notes, and snippets.

@redjade
Last active June 27, 2018 14:26
Show Gist options
  • Save redjade/3662a3ccb5e3f415907986517edef9dc to your computer and use it in GitHub Desktop.
Save redjade/3662a3ccb5e3f415907986517edef9dc to your computer and use it in GitHub Desktop.
producerping sketch

프로듀서핑 소개

꼼꼼하게 블록 프로듀싱 노드를 준비해서 프로듀서로 등록했으나 당선 상태가 아닌 당신. 헐, 그런데 BP로 당선된 후보들 중에서 블록을 만들지 못한 후보도 있었네요.

프로듀서핑에 참여해서 내가 준비한 블록 프로듀싱 노드가 매우 작동하고 있다고 보여줍시다!

프로듀서핑이 해결하려는 의문들

  • "Standby BP가 된 후보들이 당선 상태가 되었을 때 제대로 블록을 만들 수 있을까?"
  • "Active BP와 Standby BP 모두가 긴급 상황이 발생했을 때 연락이 될까? 그런 운영 연습을 하고 있을까?"

의도

우리는 이 코드를 이용하여 BPC의 운영 상태를 점검한 데이터를 만들고 EOS 홀더들에게 모든 정보를 제공할 것입니다.

actions

  • register
    • 목적 : 등록 / 플레이어가 자신을 등록함
    • 파라미터 : prodpubkey, timezone
  • unregister
    • 플레이어가 자신을 목록에서 삭제함
  • roll, unroll
    • 등록 후 라인업에 참여할 의사가 있음을 표시함
  • start
    • 목적 : 게임 시작 / 체인 또는 체인 관리자가 게임을 시작함
  • pause
    • 목적 : 게임 잠깐 멈춤 / 체인 또는 체인 관리자가 게임을 멈춤
  • lineup
    • 목적 : 라운드별 라인업 / 체인이 라운드 라인업을 게시함
    • 라운드 처음에 deferred trx로 실행됨
  • ball
    • 체인이 라인업 중 해당 스케줄의 프로듀서에게 공을 던짐
    • 6초마다 deferred trx로 실행
    • 파라미터 : lineup_index, ball_index, prodname, prodpubkey, sha256_of_random_token
  • signball
    • 해당 스케줄의 프로듀서가 비밀키로 sha256_of_random_token을 서명해서 체인에게 던짐
    • 플러긴으로 구현하고, ball 트랜잭션이 발견된 후 5초 안에 완료되어야 함
    • 파라미터 : lineup_index, ball_index, prodpubkey, signature
  • ballreceived, ballmissed
    • 체인이 해당 스케줄의 프로듀서가 ball에 서명한 결과가 검증되었는지 아니면 놓쳤거나 잘못되었는지 알림
    • 파라미터 : lineup_index, ball_index, prodname
  • call
    • 체인이 register하고 roll된 상태의 모든 플레이어에게 자신의 타임존 로컬타임 14시에 임의의 문자열을 보냄
  • signcall
    • call을 받은 후 3시간 이내에 임의의 문자열을 프로듀서 비밀키로 서명해서 체인에게 던짐
    • cleos 등을 이용해서 프로듀서 비밀키로 직접 서명해야 함
  • callreceived, callmissed
    • 체인이 해당 스케줄의 프로듀서가 call에 서명한 결과가 검증되었는지 아니면 놓쳤거나 잘못되었는지 알림
    • 파라미터 : lineup_date_utc, prodname
  • stats
    • 통계 보기

multi_index

  • players : prodname, prodpubkey, roll(default false)
  • player_stats: prodname, lineups, balls, ball_verified, ball_missed, calls, call_verified, call_missed
  • game_stats : lineups, balls, ball_verified, ball_missed, calls, call_verified, call_missed

규칙

  • lineup 도중에 register/unregister가 가능하지만, 라인업은 라운드가 끝날 때까지 변경되지 않음
  • 라인업에 올라와 있다면 끝까지 마치고 unroll 또는 unregister하는 것을 추천
  • 라인업에 올라온 플레이어들을 UTC 순서대로 6초마다 하나씩 ball을 던지고 그것을 6초 뒤에 확인함
    • producer_plugin이 활성화되고 producergame_plugin도 활성화한 노드에서 자동적으로 응답할 수 있게 하려고 함
  • 라인업에 올라온 플레이어들을 매일 등록한 타임존 기준 오후 2시에 call을 보내고 그것을 8시간 뒤에 확인함

확인이 필요한 사항

  • 플러긴에서 트랜잭션을 모니터링할 수 있는지.
  • 수동 작업이 아니라 producergame_plugin에서만 응답하게 할 수 있는지.
    • 가령, 블록체인 데이터로는 확인하지 못하고 plugin 환경에서만 접근할 수 있는 정보가 있나??? 없을 것 같은데....
  • 플러긴을 추가로 활성화하면 nodeos 버전 정보 같은 것이 바뀌지는 않는지.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment