WorldLand 채굴 실험 보고

WorldLand 채굴 기대 수익 예측 방법

WorldLand
12 min readFeb 28, 2024

Summary

WorldLand 네트워크에는 블록을 채굴하는 데 필요한 자체 난이도 (필요 계산량) 측정 단위인 디코딩 수(decoding)가 있습니다. 채굴 장비 (CPU/GPU) 제조사가 제공하는 스펙을 이용하여 이론적 최대 decoding/s 성능을 계산할 수 있습니다. 그러나 채굴 장비의 실제 decoding/s 처리량은 이 수치보다 훨씬 낮습니다. 본 보고서에서는 이론적 최대 decoding/s 값과 네트워크에서 측정한 실제(유효) decoding/s 성능을 비교하는 것을 목표로 합니다. 결론적으로, ETH-ECC 채굴 SW의 유효 처리량은 이론상 최대치보다 수백 배 낮습니다. 우리는 마이닝 SW 구성의 비효율성이 이러한 성능 저하의 주요 원인이라고 의심합니다. 실험으로 얻은 유효 처리량 계산법을 사용하여, 잠재적 채굴자들이 기대 수익을 근사할 수 있는 공식을 제시합니다.

Motivation

WorldLand 네트워크에는 블록을 채굴하는 데 필요한 디코딩 수(decodings)라는 자체 난이도 척도가 있습니다. 그러나 머신(CPU 또는 GPU)의 decoding/s 성능을 이론적으로 분석하는 것은 다음 두 가지 이유로 간단하지 않습니다.

  1. 머신의 유효 decoding/s는 채굴 SW 구성에 크게 의존합니다.
  2. decoding/s 는 직관적이지 않고 비전문가가 이해하기 쉽지 않습니다.

현재 WorldLand Scan 에서는 WorldLand 네트워크의 난이도를 두 가지 단위 (decodings 및 FLOP)로 제공합니다. 잠재적 채굴자는 이 네트워크 난이도와 본인의 HW의 FLOPS 성능을 활용하여 채굴 기대 수익을 계산할 수 있습니다. 하지만 이를 위해 채굴 장비의 이론적 최대 FLOPS 성능값을 직접 대입하면 매우 잘못된 결과를 얻을 수 있습니다.

채굴에 사용되는 장비의 이론적 최대 FLOPS 성능은 이상적인 조건에서 파생됩니다. 즉, 채굴 SW가 오버헤드 없이 해당 HW에 최적화되어 있으며, HW 성능은 이론적 최대치에 근접한다고 가정합니다. 결과적으로, 장비의 실제 decoding/s 처리량은 (아래 공식으로 계산된) 카탈로그 스펙보다 훨씬 낮습니다.

CPU의 이론적 최대 FLOPS 계산공식 및 예제

따라서, 채굴 기대 수익을 계산하기 위해서는 채굴 장비의 실제 (유효) decoding/s 성능을 측정해야 합니다.

Objective

이 보고서에서 우리는 이론적 최대 decoding/s 값과 네트워크에 의해 측정된 실제(유효) decoding/s 를 비교합니다.

Step 1) 카탈로그 스펙을 이용하여 장비의 이론적 최대 decoding/s 성능을 계산합니다.

Step 2) Step 1의 장비를 이용하여 실제 채굴 실험을 진행하고, 채굴 성공률 을 측정합니다.

Step 3) ​​네트워크 총 decoding/s와 2단계에서 계산된 승률을 사용하여 채굴 장비의 유효 decoding/s 를 측정합니다.

Step 4) Step 1의 이론적 최대 decoding/s 값과 Step 3의 유효 decoding/s 를 비교합니다.

1단계와 3단계의 두 값을 비교하는 것으로 이론과 실제 유효 decoding/s 성능 사이의 격차를 평가할 수 있을 것으로 기대합니다.

Experiment

채굴 실험 결과
  • Step 1) 이론적 최대 decoding/s:

6 코어 * 4.3GHz * 16 FLOP
= 412.8 GFLOPS
= 4.3971 M decoding/s
(n = 156 로 가정)

  • Step 2) 채굴 성공률

356블록 / 20715블록
= 1.71856%

  • Step 3) 채굴 장비의 유효 decoding/s

네트워크 유효 decoding/s:
77,624,782,672 decoding / 65h
= 331,729.84 decoding/s

장비의 유효 decoding/s:
331,729.84 * 0.0171856
= 5700.98 decoding/s = 535.21 MFLOPS (n = 156 로 가정)

  • Step 4) 비교
이론적 최대 NOD 성능 및 유효 처리량 비교

실험 결과, ETH-ECC 채굴 SW의 유효 처리량은 이론적 최대치보다 약 750배 낮았습니다. 그 이유 의심되는 요소들은 다음과 같습니다.

  1. 마이닝 SW 구성이 HW의 최대 성능을 활용할 수 있을 정도로 효율적이지 않습니다 (FMA 단위, 벡터 처리 아키텍처, 산술 단위 간 스위치 오버헤드, 추상화된 함수 호출, 흐름 제어 등의 원인으로).
  2. CPU 자원 할당: 작업 우선 순위, OS별 에너지 효율성 설정 등으로 인해 채굴 SW에는 장비의 계산 자원중 일부만 할당할 수 있습니다. 또한 할당된 자원 중 일부는 네트워킹, tx 처리, 블록 작성, 다른 피어의 블록 검증 등의 오버헤드를 처리하는 데 낭비됩니다. 우리가 지금 계산한 네트워크 FLOP (difficulty) 는 이러한 오버헤드를 고려하지 않은 값입니다.

Conclusion

실험 결과, 월드랜드 마이닝 SW의 유효 처리량은 표준 CPU의 이론적 최대 FLOPS의 1/750 수준인 것으로 나타났습니다. 이는 채굴 SW 비효율성과 유효 FLOP에 대한 보수적인 가정이라는 두 가지 이유 때문으로 추측됩니다. 다른 CPU 모델도 이론적 최대 성능의 1/750 만 발휘할 수 있다고 가정하면, 잠재적인 채굴자는 예상 채굴 보상을 다음과 같이 추정할 수 있습니다.

  1. 다음 공식을 사용하여 CPU의 유효 처리량을 계산합니다.

{유효 FLOPS} = {코어 수} * {최대 클럭 속도} * 16 / 750

예) Intel Core i5–11600 CPU(6코어 @4.3GHz)의 경우,
{유효 FLOPS} = 6 * 4.3G * 16 / 750 = 550.5 MFLOPS

2. 최근 블록의 난이도를 목표(또는 평균) 블록 시간으로 나누어 WorldLand 네트워크의 총 FLOPS를 계산합니다.

{난이도(FLOP)} = 난이도(decodings) * ( 435 * codeword length + 26020)
{네트워크 FLOPS} = 난이도 (FLOP) / 평균 블록 시간

예) 1600000 블록의 경우
{블록 난이도} = 6,708,800 decodings = 641,495,456,000 FLOP
{네트워크 FLOPS} = 641,495,456,000 FLOP / 10초 = 64.15 GFLOPS

3. 앞서 계산한 {유효FLOPS} 와 {네트워크FLOPS}를 사용하여 채굴 성공률을 계산합니다.

{채굴 성공률} = {유효FLOPS} / {유효FLOPS + 네트워크FLOPS}

예) {채굴 성공률} = 550.5 MFLOPS / 64.70 GFLOPS = 0.00851 (0.851 %)

4. 마지막으로 블록 보상량과 승리 확률을 곱하여 예상 보상량을 계산합니다.

예) {예상 보상량} = 4 WLC * 0.00851 = 0.03404 WLC/블록
= 0.003404 WLC/sec
= 12.2544 WLC/h
= 294.1056 WLC/day

Energy Cost

채굴 장비의 전력 비용을 계산하여 채굴의 수익성을 예측할 수 있습니다. 일반적인 PC로 채굴을 진행할 시 예상 소모 전력은 200 ~ 300W 정도입니다. 300W 전력 소모 및 $0.1/kWh 전력 비용을 가정할 시 일간 $ 0.72 의 전력 비용이 필요합니다. 이 전력 비용에 다른 비용 요소들을 더한 후, 앞서 계산한 예상 채굴 보상량과 비교하면 예상 채굴 수익률을 구할 수 있습니다. 예를 들어, 실험에 사용한 장비 (i5–11600 PC)로 채굴을 진행할 시 전력 비용 대비 예상 수익률은 다음과 같습니다:

294.1056 / 0.72 = 408.48 {WLC / USD}

APPENDIX I: Network FLOPS

위의 공식을 사용하여 예상 채굴 수익을 계산하기 위해서는 최근 네트워크의 난이도 값이 필요합니다.

  • 현재 WorldLand 블록 난이도:

6.12 M decodings = 577 GFLOP (2024년 1월 28일 기준)

APPENDIX II: Block Statistics

더 정확한 블록 난이도 통계를 직접 얻고 싶다면 WorldLand 클라이언트의 JSON RPC API를 활용할 수 있습니다.

  • 파이썬을 이용하여 특정 블록의 정보를 가져오는 예제 코드:
import request

def genBlockByNumberQuery(requestId, blockNumber):
query = {
"method": "eth_getBlockByNumber",
"params": [hex(blockNumber), False],
"id": id,
"jsonrpc": "2.0"
}
return query

def fetchBlocks(endpoint, blockFrom, blockTo):
batchRequest = []
for i in range(blockFrom, blockTo):
batchRequest.append(genBlockByNumberQuery(i-blockFrom, i))
response = requests.post(endpoint, json=batchRequest)
print(response.json())
  • 실행 결과:
[
{
'jsonrpc': '2.0',
'id': 0,
'result':
{
'baseFeePerGas': '0x7',
'codelength': '0x9c',
'codeword': '0xfc0363c360fc6f5f30c3f9a5039fc550f90a3900',
'difficulty': '0x3f1d3c',
'extraData': '0xde8301000389776f726c646c616e6489676f312e32302e3130856c696e7578',
'gasLimit': '0x1c9c380',
'gasUsed': '0x0',
'hash': '0x3d89c74c4a7fca0619e85a47075fea9bea3f38da7f235c3d37319a506ede3c7e',
'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
'miner': '0xc29bb8bb0f508ac5bccd9a98065caf94c0d3121c',
'mixHash': '0x2ff81b31ff0f6c067dda192c99c4557f7b1cbbb7e84eab58b9adb6a8a325153e',
'nonce': '0x1cf3feda54c0fb3d',
'number': '0x124f80',
'parentHash': '0x953a85def042bdc80c9bab988bc4e86ca807a55569f0a88c83838ce114e08b35',
'receiptsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
'size': '0x23a',
'stateRoot': '0x917dcb3c44fc1512e6fd93ba15ca11619984a07f9e5bfe19b996362a73bab45f',
'timestamp': '0x6596761c',
'totalDifficulty': '0x309ffbf88c4',
'transactions': [],
'transactionsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
'uncles': []
}
},
]
  • 난이도를 FLOP 단위로 환산할 때는 아래의 공식을 사용합니다.

난이도[FLOP] = 난이도[decoding] * (435 * code length + 26020 )

  • 100,000 블록 단위의 난이도 (FLOP 단위) 통계 (box plot)

--

--

WorldLand
WorldLand

Written by WorldLand

WorldLand 🌍, where technology fosters global trade, quantum-safe security, and sustainable growth. Embracing diversity and peace for a better digital future.

No responses yet