추천 게시물

비트코인 반감기를 코딩해서 만들기

목차

비트코인 반감기를 계산하기 위해서는 현재까지의 블록 높이(발행량)와 다음 반감기 까지 남은 블록, 해쉬 파워, 난이도 등을 확인하고 적용해야 한다. 현재 나는 그런 정보를 실시간으로 취합해서 계산할 능력은 없으므로, 웹에서 쉽게 계산해서 API로 뿌려주는 정보를 받아서 사용하는 것이 더 간단하다.

blockchair라는 사이트에서는 손쉽게 반감기 정보를 API로 뿌려준다. json으로 얻은 정보를 잘 가공하여 자바 스크립트로 만들면 되는 것이다.

만든 결과는 다음과 같다.

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <title>Bitcoin Halving Info</title>

  <script>

    // Fetch halving information when the document is ready

    document.addEventListener('DOMContentLoaded', () => {

      const url = 'https://api.blockchair.com/tools/halvening';


      fetch(url)

        .then(response => response.json())

        .then(data => {

          const { current_block, halvening_block, halvening_time, seconds_left } = data.data.bitcoin;

          const blocksRemaining = halvening_block - current_block;

          const countdownDate = new Date(Date.now() + seconds_left * 1000);

          const days = Math.floor(seconds_left / (60 * 60 * 24));

          const hours = Math.floor((seconds_left % (60 * 60 * 24)) / (60 * 60));

          const minutes = Math.floor((seconds_left % (60 * 60)) / 60);


          const countdownFormatted = `${days}일 : ${hours}시 : ${minutes}분`;

          

          document.getElementById('halving-info').innerHTML = `

            <p>현재 블록: ${current_block}</p>

            <p>반감기 블록: ${halvening_block}</p>

            <p>남은 블록: ${blocksRemaining}</p>

            <p>다음 반감기 날짜: ${halvening_time}</p>

            <p>카운트 다운: ${countdownFormatted}</p>

          `;

        })

        .catch(error => {

          document.getElementById('halving-info').innerHTML = `<p>오류: ${error.message}</p>`;

        });

    });

  </script>

</head>

<body>

  <div id="halving-info">

    <p>반감기 정보를 불러오는 중...</p>

  </div>

</body>

</html>


이를 실행하면 다음과 같은 결과를 얻을 수 있다.


Bitcoin Halving Info

반감기 정보를 불러오는 중...

여기서 문제점은 여러 번 실행하면 어느 순간 API의 호출 회수를 넘어서는 문제가 생기는 점이다. 그래서 실시간으로 초 단위로 카운트 다운을 표현하기는 어려웠다. 

다만 반감기를 얼마나 많은 사람이 분, 초 단위까지 알고 싶을까 하는 부분에서 크게 문제가 되지 않을 것 같다. 게다가 난이도와 해쉬 파워에 따라 반감기는 오차가 몇 시간도 생길 수 있으므로 분, 초 단위까지 확인하는 것은 무의미해 보인다.

댓글