CentralMine.NET.JobInfo.GenerateWork C# (CSharp) Method

GenerateWork() public method

public GenerateWork ( ) : void
return void
        public void GenerateWork()
        {
            byte[] en2b = new byte[mExtraNonceSize];
            for( int i = 0; i < mExtraNonceSize; i++ )
            {
                ulong mask = (ulong)0xFF << (i * 8);
                ulong masked = (mExtraNonceB & mask) >> (i * 8);
                en2b[mExtraNonceSize - (1 + i)] = (byte)masked;
            }
            mExtraNonceB++;

            mExtraNonce2 = Utils.ByteArrayToHexString(en2b);
            string coinbase = mCoinBaseA + mExtraNonce + mExtraNonce2 + mCoinBaseB;

            byte[] cb = Utils.HexStringToByteArray(coinbase);
            byte[] cbHash = MinerLib_cs.Scrypt.SHA2562(cb);
            string merkleRoot = Utils.ByteArrayToHexString(cbHash);

            foreach (string merkle in mMerkleBranch)
            {
                byte[] hashData = Utils.HexStringToByteArray(merkleRoot + merkle);
                byte[] merkleHash = MinerLib_cs.Scrypt.SHA2562(hashData);
                merkleRoot = Utils.ByteArrayToHexString(merkleHash);
            }

            // byteswap the merkle root section
            byte[] merkleData = Utils.HexStringToByteArray(merkleRoot);
            Utils.ByteSwapIntegers(merkleData);
            merkleRoot = Utils.ByteArrayToHexString(merkleData);

            uint time = (uint)Utils.UnixTime() + 120;
            mTimeStr = Utils.UIntToHexString(time);

            strData = mVersion + mPrevHash + merkleRoot + mTimeStr + mDifficulty + "00000000" + "000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000";
            data = Utils.HexStringToByteArray(strData);
        }

Usage Example

Example #1
0
        public override WorkBlock GetWorkBlock()
        {
            if (mStatus != Status.Ready)
            {
                return(null);
            }

            if (mJobs.Count <= 0)
            {
                return(null);
            }

            JobInfo ji = mJobs[mJobs.Count - 1];

            ji.GenerateWork();
            mNewBlockReady = false;
            Console.WriteLine("GetWork job: " + ji.mJobID);
            return(ji);
        }