반응형
유니티 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";
}
}
반응형