internal bool Mine(Block seed, CancellationToken token = default(CancellationToken)) { var rnd = new Random(); var nonceSeed = new byte[sizeof(ulong)]; rnd.NextBytes(nonceSeed); ulong nonce = BitConverter.ToUInt64(nonceSeed, 0); while (!token.IsCancellationRequested) { seed.Nonce = nonce++; seed.Timestamp = DateTime.UtcNow; var data = MessagePack.MessagePackSerializer.Serialize(seed); var blockId = BlockUtils.ComputeBlockId(data); if (CryptoUtils.Difficulty(blockId) > seed.Difficulty) { seed.Id = ReadonlyBytes.CopyFrom(blockId); seed.Original = data; return(true); } } return(false); }