[스파업게임] 개발기록 - 2021.03.07

스파업게임

변경이력

사전 고지

  • 아래 기술한 금액 / 기간 / 시간 / 요건 등은 OPEN 이전일 까지 자체판단 또는 피드백을 받아 변경될 수 있음
  • OPEN 이후에는 커뮤니티 의견 수렴 (또는 스파기반 투표 시스템) 이후 합의를 통해 변경

개요 및 효과

로터리 기반 스파업 게임.
로터리는 STEEM 으로 참여하고, 당첨시 STEEM POWER UP 수행. 낙첨이 되더라도 서비스 차원에서 참여일 이후 10일 동안 1일 1회 보팅 예정(최소 30,000 SP 이상의 계정)

참여방법

운영시간 ( 1일 1회 진행 )
00 ~ 01 : 정산 및 배분 / 이때 입금되면 모두 반환(join 메모포함 된 항목만) 예정
01 ~ 24 : 게임 참여 가능

  • 참여자는 @??? 계정으로 1~50 스팀을 전송하면 로터리에 참여 할 수 있습니다. (1 게임에 1 STEEM)

로직

  1. 참여자는 @??? 계정으로 1~50 스팀을 전송.
  2. 송금 시 발생한 TXID + 01 ~ 50 (금액만큼 생성) 을 기반으로 로터리 번호 생성.
  3. TXID 기반으로 검증 가능한 숫자를 생성
  4. 로터리 번호는 1 ~ 14 의 숫자를 생성하며 4개로 이뤄지며 중복된 숫자가 출현할 수 있음.
  5. 매 00:05 분 트랜젝션 발생으로 로터리 번호 생성 ( custom_json 전송후 해당 txid 기반으로 로터리 번호 생성 )
  6. 4개의 숫자와 위치가 일치하면 해당 숫자는 당첨
  7. 2~4개의 숫자가 당첨되면 해당 등수에 맞춰 당첨 금액만큼 참여 계정에 스팀 파워업 수행

로직소스

TXID 기준 항상 동일한 값이 나옴 :)

const seedrandom = require('seedrandom');

/**
 * 시드 값 기준으로 번호를 추출한다 
 * @param {String} seed 시드 
 * @param {Number} drawCount 추출 카운트 / DEF : 4
 * @param {Number} maxnum 최대 출현 번호 ( 1부터 시작 ) / DEF : 14
 * @param {Boolean} isDup 중복 허용 여부 / DEF : true (허용)
 * @param {Boolean} useSort 정렬 여부  / DEF : false (하지않음)
 * @returns 추출한 번호 목록
 */
function draw(seed, drawCount=4, maxnum=14,isDup=true,useSort=false){
    let rnd = seedrandom(seed)();
    let num_arr = parseInt(rnd*Math.pow(10,drawCount*2+2)).toString().match(/.{1,2}/g).map(x=>parseInt(x));
    let nums = Array.from(Array(maxnum).keys()).map(x=>x+1);
    let results = [];

    for(let i=0;i<drawCount;i++){
        let drawn;
        if(isDup){
            drawn = num_arr[i]%nums.length + 1;
        }else{
            drawn = nums.splice(num_arr[i]%nums.length, 1)
        }
        results = results.concat(drawn);
    }

    if(useSort){
        results.sort((a,b)=>a-b); 
    }
    return results;
}

/**
 * TXID 기준으로 번호를 N개 추출한다 
 * @param {String} txid 트렌젝션 아이디 
 * @param {Number} drawCount 추출 수량 
 * @returns 추출된 번호 목록
 */
function drawWithTxid(txid, drawCount=1){
    let results = [];
    for(let i=0;i<drawCount;i++){
        results.push( draw(`${txid}${(i+1).toString().padStart(2,'0')}`) );
    }
    return results;
}

/**
 * 진입점
 */
function init(){
    let txid = '2323fecb92cd473c414eaef5c88a1bef01c2cde1';
    let drawCount = 20;
    console.log( drawWithTxid(txid, drawCount) );
}
init();

상금

동시 당첨자가 발생한 경우 1/N 으로 나눠 가짐
상금 지급은 1주일 이내 이뤄지며 자동화 및 안정화 이후에는 마감 10분이내 지급 예정
상금풀이 1,000 이하가 또는 예상 될 경우 상금 마련을 위한 운영 계정의 파워다운이 발생될 수 있음

  1. 4개 숫자 및 위치 일치 - 풀의 50%
  2. 3개 숫자 및 위치 일치 - 풀의 20%
  3. 2개 숫자 및 위치 일치 - 풀의 10%
  4. 15% 운영 계정 스파업
  5. 4% 홍보 비용 ( 홍보 전용 계정으로 송금 )
  6. 1% 개발비 및 서버 운용비 ( 개발자 계정으로 송금 )
  • 해당 등수의 당첨자가 없는 경우 해당 금액은 이월
  • 전체 상금 풀이 1,000 STEEM 이하가 되면 운영팀에서 최소 당첨금 풀인 1,000 STEEM 보전
  • 당첨금 지급은 스팀이 아닌 참여자 계정으로 스파업 진행

홍보

  • 홍보 계정으로 모여진 금액을 기반으로 홍보 진행
  • 참여자 페이백 이벤트 등등
  • 홍보 계정의 금액이 많이 모인 경우에는 운영 계정 스파업에 사용될 수 있음.

서비스 보팅

서버 재기동/다운/오류 등 으로 인한 보팅 보전은 하지 않음.
하지만 위 사항이 발생하지 않도록 최대한의 노력예정
보팅 비율 재 계산은 매일 01시에 갱신, 최근 10일치 데이터를 산출
10분단위 체크 후 보팅 파워가 99% 이상인 경우에는 보팅파워 운용을 위해 weight 10% 로 하여 개별 운용

  • 최근 10일 간의 참여 금액 기준으로 전체 참여 금액 대비 비율을 계산하여 보팅 수행
  • 최근 10일 간의 참여자가 10명이하인 경우 모두 풀보팅 수행 ( weight 100% )
  • 1일 1회 보팅 수행 / 글쓴 이후 5~30분 이내 보팅 수행
  • 최대 받을 수 있는 보팅 weight 100%
  • 최소 받을 수 있는 보팅 weight 0.01%
  • 최소 비율이 0.01 이하의 비중인 경우에는 보팅 수행 안함

기록정보

참여정보

  • 계정명
  • 날짜
  • 블록번호, 트랜젝션아이디
  • 참여금액

공통정보

  • 당첨번호
  • 당첨내역

로드맵

단기 작업이 마무리 되면 일단 안정화를 위한 BETA TEST 진행 후 OPEN 예정
OPEN 이후 중장기 프로젝트를 진행할 예정
이후, 피드백을 받아 개선 및 미정 항목 등 진행 예정

단기

  • (O) 메모가 포함된 입금을 감지
  • (O) TXID 기반 로터리 번호 생성
  • (X) 0.001 메모 입금으로 생성된 로터리 번호 전달
  • (X) 0.001 메모 입금으로 참여한 TXID 전달
  • (X) 내역기록 입금정보, 생성 로터리번호 등등 (계정이력, 일별, 최근10일 등등)
  • (X) 기타 마무리 작업

중장기

  • 당첨금액 자동스파업
  • 웹 - 참여하기
  • 웹 - 당회 참여정보 (당첨예상금액)
  • 웹 - 계정 참여이력
  • 웹 - 회차별 당첨 정보

미정

  • 통화 스와핑 - 스팀 <-> TRON (일정량의 수수료를 수반)
  • 로터리 대행 - 스팀으로 팬케잌 로터리 참여 및 당첨시 1/N
  • TRON 또는 BSC 체인의 연계를 통한 스마트컨트렉트 지원
  • react native - mobile app
  • flutter - mobile app, web app, desktop app
  • steem mobile wallet

서비스 변경 알림

  • 서비스 내용 변경 예정시 최소 1주 전에 공지

서비스 종료 알림

  • 서비스 종료시 상금 풀에 대한 분배 등은 이뤄지지 않음. ( 초기 풀 자금 운영팀에서 공급 )
  • 서비스 종료 예정시 최소 1달 전에 공지

맺음말

변동사항이 있는 경우 포스팅 예정, 댓글로 피드백 주시면 반영하겠습니다.

Sort:  

@wonsama transfered 4 KRWP to @krwp.burn. voting percent : 7.73%, voting power : 78.68%, steem power : 1722450.12, STU KRW : 1200.
@wonsama staking status : 822.929 KRWP
@wonsama limit for KRWP voting service : 1.645 KRWP (rate : 0.002)
What you sent : 4 KRWP
Refund balance : 2.355 KRWP [51788750 - a8a7a4d1dfca46276ae832ac91d691317bbe62e7]

재미있겠네요~ 한 번 참여해보겠습니다.

조금씩 준비중이라 ㅋ / 나중에 완성되면 참여 부탁드릴께요 ㅎㅎ