public override bool SubmitWork(WorkBlock work, uint solution) { JobInfo ji = (JobInfo)work; // {"params": ["slush.miner1", "bf", "00000001", "504e86ed", "b2957c02"], "id": 4, "method": "mining.submit"} // Values in particular order: worker_name (previously authorized!), job_id, extranonce2, ntime, nonce. string[] parms = new string[5]; parms[0] = mUser; parms[1] = ji.mJobID; parms[2] = ji.mExtraNonce2; parms[3] = ji.mTimeStr; parms[4] = Utils.UIntToHexString(solution); mSubmitString = String.Format("Submit Job({0}), Time({1}), Solution({2})", parms[1], parms[3], parms[4]) + "\n" + ji.strData + "\n" + ji.strTarget; Console.WriteLine(mSubmitString); mLog.WriteLine(mSubmitString); mAwaitingSubmitResult = true; SendRPC("mining.submit", parms); while (mAwaitingSubmitResult) { Thread.Sleep(50); } return(mSubmitResult); }
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); }