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; }
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; }