Пример #1
0
        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);
        }