public BlockHeader Clone() { var block = new BlockHeader(); block.Version = Version; block.PrevBlockHash = PrevBlockHash.Duplicate(); block.MerkleRoot = MerkleRoot.Duplicate(); block.Time = Time; block.DifficultyTarget = DifficultyTarget; block.Nonce = Nonce; block.MinNonce = MinNonce; block.MaxNonce = MaxNonce; block.TaskUID = TaskUID; block.WriteHeader(); return block; }
internal void CheckShareAsync(BaseMiner miner, BlockHeader block) { Task.Run(() => CheckShare(miner, block)); }
internal void CheckShare(BaseMiner miner, BlockHeader block) { var data = new WorkResult(); data.Time = block.Time; data.Nonce = block.Nonce; data.TaskUID = block.TaskUID; string hash = block.CalculateHash().ToString(); try { var res = CheckWork(data); miner.ProcessShareStatus(res ,hash); } catch (Exception ex) { miner.ProcessShareStatus(new OperationResult() { Message = "Send error" }, hash); } }
private void StartMining() { Miners.Clear(); uint range = (uint)((_currWork.MaxNonce - _currWork.MinNonce) / ThreadCount); for (int i = 0; i < ThreadCount; i++) { var block = new BlockHeader(); block.Version = _currWork.Version; block.PrevBlockHash = new Sha256Hash(_currWork.PrevBlockHash); block.MerkleRoot = new Sha256Hash(_currWork.MerkleRoot); block.DifficultyTarget = _currWork.Bits; block.Time = _currWork.Time; block.MinNonce = (uint)(_currWork.MinNonce + (i * range)); block.MaxNonce = (uint) (_currWork.MinNonce + ((i+1)*range)); block.Nonce = block.MinNonce; block.TaskUID = _currWork.TaskUID; block.WriteHeader(); var t = new Thread(MinerWorker); Miners.Add(t); t.Start(block); } _mining = true; }
public static uint MScanHash_CryptoPP(BlockHeader block, /*ref byte[] phash,*/ ref uint hashCnt) { byte[] phash = new byte[32]; uint res = ScanHash_CryptoPP(block.Header, phash, ref hashCnt); return res; }