BitCoinClient.Form1.DoWork C# (CSharp) Метод

DoWork() приватный Метод

private DoWork ( WorkBlock work ) : void
work WorkBlock
Результат void
        void DoWork(WorkBlock work)
        {
            byte[] data = new byte[64];
            Array.Copy(work.data, 64, data, 0, 64);
            uint[] midstate = ByteArrayToUIntArray(work.midstate, 0);

            uint[] targetA = ByteArrayToUIntArray(work.target, 0);
            uint[] targetSwapped = new uint[8];
            for( int i = 0; i < 8; i++ )
                targetSwapped[i] = targetA[7 - i];

            uint max = 0xFFFFFFFF;
            long start, end, freq;
            Win32Wrapper.QueryPerformanceFrequency(out freq);
            Win32Wrapper.QueryPerformanceCounter(out start);
            for(uint n = 0; n < max; n++)
            {
                WriteUIntToByteArray(n, data, 12);

                uint[] output = new uint[8];
                SHATransform(output, data, midstate);

                byte[] input = new byte[64];
                Buffer.BlockCopy(output, 0, input, 0, 32);
                Buffer.BlockCopy(work.hash1, 32, input, 32, 32);
                SHATransform(output, input, staticData);

                if (output[7] == 0)
                {
                    uint[] swapped = new uint[8];
                    for (int i = 0; i < 8; i++)
                    {
                        swapped[i] = Program.Byteswap(output[7 - i]);
                    }

                    for (int i = 1; i < 8; i++)
                    {
                        if (swapped[i] < targetSwapped[i])
                        {
                            // Found a solution
                            WriteUIntToByteArray(n, work.data, 76);     // Write the nonce value into the data block
                            return;
                        }

                        if (swapped[i] > targetSwapped[i])
                            break;
                    }
                }
            }

            Win32Wrapper.QueryPerformanceCounter(out end);
            long clocks = end - start;
            double seconds = (double)clocks / (double)freq;
            double hashesPerSecond = max / seconds;
            Console.WriteLine(hashesPerSecond.ToString() + " hashes per second");
        }