유니티 C# 비트코인 코인 채굴 시뮬레이션 코드 작성 Bitcoin Mining

반응형

유니티 C# 비트코인 코인 채굴 시뮬레이션 코드 작성

using UnityEngine;
using UnityEngine.UI;
using System.Security.Cryptography;
using System.Text;

public class BitcoinMiningSimulator : MonoBehaviour
{
    public Text minedBlocksText; // 채굴된 블록 수를 표시할 텍스트
    public Text hashRateText;    // 해시 속도를 표시할 텍스트
    public Button startMiningButton; // 채굴 시작 버튼
    public Button stopMiningButton;  // 채굴 중지 버튼

    private bool isMining = false; // 채굴 중인지 여부
    private int blocksMined = 0;   // 채굴된 블록 수
    private float hashRate = 100000f; // 초당 해시 속도 (단위는 가상값, 실제와 다름)
    private string targetPrefix = "0000"; // 간단한 타겟 난이도 설정

    void Start()
    {
        // 버튼에 클릭 이벤트 연결
        startMiningButton.onClick.AddListener(StartMining);
        stopMiningButton.onClick.AddListener(StopMining);

        // 초기 UI 업데이트
        UpdateUI();
    }

    void Update()
    {
        if (isMining)
        {
            MineBlock();
        }
    }

    void StartMining()
    {
        isMining = true;
    }

    void StopMining()
    {
        isMining = false;
    }

    void MineBlock()
    {
        string newHash = "";
        int nonce = 0;
        
        // 타겟 난이도에 맞는 해시를 찾을 때까지 반복
        do
        {
            nonce++;
            string data = "Block#" + blocksMined + "Nonce:" + nonce;
            newHash = CalculateHash(data);
        } while (!newHash.StartsWith(targetPrefix));

        // 블록이 채굴된 경우
        blocksMined++;
        UpdateUI();
    }

    string CalculateHash(string input)
    {
        using (SHA256 sha256 = SHA256.Create())
        {
            byte[] inputBytes = Encoding.ASCII.GetBytes(input);
            byte[] hashBytes = sha256.ComputeHash(inputBytes);
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < hashBytes.Length; i++)
            {
                sb.Append(hashBytes[i].ToString("X2"));
            }
            return sb.ToString();
        }
    }

    void UpdateUI()
    {
        minedBlocksText.text = "Mined Blocks: " + blocksMined;
        hashRateText.text = "Hash Rate: " + hashRate + " H/s";
    }
}
반응형