[암호화폐] 그것이 알고싶다!! SCTM 채굴 알고리즘

in #sct5 years ago (edited)

지난주 SCTM 채굴이 시작되면서 SCT 가격이 1.5 이상에서 거래가 되고 있습니다. 그 이유는 SCTM의 가격을 3 steemp로 책정을 하고, 2 SCT로도 구입이 가능하게 하였기 때문입니다.

채굴에 대한 개략적인 정보입니다.

  • 2019년 6월 21일 09시부터 채굴 시작
  • 일 1,920개 채굴
  • 매시간 당첨된 10명이 일 채굴량의 1/24를 나누어 가짐.
    [1]번 사이트에서 확인 가능
    아래 그림은 10명의 당첨자가 각각 12개씩 채굴을 한 경우임

채굴과 관련된 통계 자료입니다. (6/27일 16:50분 기준)

  • 스테이킹된 SCTM : 총 275,826개
  • 채굴된 수량 : 총 9,436개
  • 채굴된 transaction : 104개 (이 중 9개 이상 채굴된 경우는 52개)

채굴된 내용을 보면 어떤 시간에는 6개 정도, 어떤 시간에는 11-12개가 채굴되는 경우가 있습니다. 매시간 채굴이 되기 때문에 6개 정도가 정상입니다. 그런데 알 수 없는 이유로 매시간 채굴이 되지 않습니다. 만약 채굴이 안되고 1시간이 지나가면 그다음 채굴 시에 2시간 물량인 11-12개가 배당이 됩니다. 따라서 당첨되는 확률도 중요하지만 언제 당첨되느냐에 따라서 수익률 차이는 날 수 있는 구조입니다.


가장 궁금해하는 채굴 알고리즘에 대하여 살펴 보겠습니다. scot bot와 채굴 알고리즘은 공개되어 있지 않기 때문에 그 동작 원리를 알 수가 없습니다. 하지만 개발자 올린 글을 보면 개략적인 채굴알고리즘을 파악할 수 있습니다[4].

이 글을 보기 전까지는 채굴 알고리즘에 대하여 여러 가지 추측을 했었습니다. 균등한 당첨 확률을 제공하기 위하여 그동안 당첨된 내역을 다음 추첨 시에 반영할 것으로 생각을 하였으나, 아주 단순한 방식을 사용하고 있습니다.

1. 스테이킹된 마이닝 파워의 합(sum)을 구한다.

    for holder in token_holder:
        if float(holder["stake"]) == 0:
            continue
        if holder["account"] not in accounts_by_name:
            accounts_by_name[holder["account"]] = {"name": holder["account"], "staked_mining_power": float(holder["stake"]) * mining_power, "loki": holder["$loki"]}
        else:
            accounts_by_name[holder["account"]]["staked_mining_power"] += float(holder["stake"]) * mining_power
            if accounts_by_name[holder["account"]]["loki"] > holder["$loki"]:
                accounts_by_name[holder["account"]]["loki"] = holder["$loki"]                  
        mining_power_sum += float(holder["stake"]) * mining_power

2. 마이닝 파워로 오름차순으로 소팅을 한다.

accounts = []
for acc in accounts_by_name:
    accounts.append(accounts_by_name[acc])
sorted_accounts = sorted(accounts, key=lambda m: (m["staked_mining_power"], m["loki"]))

3. 추첨시 임의의 수를 찾을 때 사용할 seed를 구한다.

4. 당첨자 수 만큼 3에서 구한 시드로 임의의 값을 구한 후 2번 소팅된 리스트에서 해당 위치에 있는 당첨자를 찾는다.

for i in range(N):
    x = get_random_range(0, mining_power_sum)
    sum_mining_power = 0
    winner_found = False
    for acc_data in sorted_accounts:
        sum_mining_power += acc_data["staked_mining_power"]
        
        if sum_mining_power > x and not winner_found:
            winner_accs.append(acc_data["name"])
            winner_found = True

알고리즘이 너무 간단합니다. 그냥 홀더 각자의 지분만큼 당첨 확률이 올라가는 방식이라고 보시면 됩니다. 동전의 양면 맞추기와 같이 이전 결과가 다음 결과에 전혀 영향을 미치고 있지 않습니다.

뭔가 대단한 것이 있을 것 같았던 채굴 알고리즘이 너무 단순해서 한편으로는 놀랍군요. 소스가 공개되어 있지 않았기 때문에 다른 무언가가 추가되었을 수도 있지만 큰 틀은 변경되지 않았을 것입니다.


dice 게임을 해 보신 분들은 아실 겁니다. 다이스를 많이 돌리다 보면 1도 나오고 100도 나오고 하죠. 100번 던지면 1이 한번은 나와야 확률적으로 맞는데, 300번을 던져도 나오지 않는 경우가 있습니다. 그러다가 100번 2-3번 나오기도 하고요. 단기적으로는 확률을 벗어나는 기대값이 나오기도 하지만 결국은 확률에 따라 갑니다. 따라서 아직 채굴이 안되신 분들도 확률의 힘을 믿고 기다리다 보면 채굴이 될 것으로 생각이 됩니다.


채굴과 관련된 글들
[1] 채굴 현황을 알 수 있는 곳 :
https://steemd.com/@sct
https://ayogom.github.io/steemexplorer/#/@sct
[2] 채굴 transaction을 볼 수 있는 파이썬 코드 : https://steemit.com/sct/@tradingideas/6-23-11-50-sctm
[3] SCTM 홀더 현황을 알 수 있는 곳 : https://wonsama.github.io/steemengine/index.html?symbol=SCTM#!
[4] 채굴 알고리즘 : https://steemit.com/steem-engine/@holger80/validating-the-mining-results-of-eng-token

Sort:  

앗~ 코딩으로 이걸 읽어내시는게 더 신기합니다. ㅋㅋ 덕분에 궁금했던 사항이 일부라도 풀렸네요~^^

채굴 알고리즘을 궁금해하시는 것 같아서 정리한번 해 봤어요.

약간의 사행심(?)이 들어가는 것도 나쁘지 않네요.
운이 없어도 언젠가는 체굴되리라 봅니다.

인내가 필요합니다.

저는 읽기도 벅차요.
얼마나 컴 앞에서 도를 닦아야 할지 ㅎㅎㅎ

Thank you for your continued support towards JJM. For each 1000 JJM you are holding, you can get an additional 1% of upvote. 10,000JJM would give you a 11% daily voting from the 700K SP virus707 account.

Hi @tradingideas!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 3.571 which ranks you at #5792 across all Steem accounts.
Your rank has dropped 4 places in the last three days (old rank 5788).

In our last Algorithmic Curation Round, consisting of 154 contributions, your post is ranked at #84.

Evaluation of your UA score:
  • You're on the right track, try to gather more followers.
  • The readers like your work!
  • Good user engagement!

Feel free to join our @steem-ua Discord server

jcar토큰 보팅합니다.

Coin Marketplace

STEEM 0.19
TRX 0.18
JST 0.033
BTC 88172.86
ETH 3116.36
USDT 1.00
SBD 2.77