From a783c9d7f52c8e0cb0a59d6d2ccabeea63a76fb1 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 29 Jan 2019 07:10:01 -1100 Subject: [PATCH] sudoku_captcha --- src/cc/sudoku.cpp | 61 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 55 insertions(+), 6 deletions(-) diff --git a/src/cc/sudoku.cpp b/src/cc/sudoku.cpp index db2ea24bd..bdc47ea61 100644 --- a/src/cc/sudoku.cpp +++ b/src/cc/sudoku.cpp @@ -515,6 +515,46 @@ void sudoku_gen(uint8_t key32[32],uint8_t unsolved[9][9],uint32_t srandi) } */ +int32_t sudoku_captcha(uint32_t timestamps[81]) +{ + int32_t i,solvetime,avetime,n = 0; uint64_t variance = 0; std::vector list; + for (i=0; i<81; i++) + { + if ( timestamps[i] != 0 ) + { + list.push_back(timestamps[i]); + n++; + } + } + if ( n > 81/2 ) + { + std::sort(list.begin(),list.end()); + solvetime = (list[0] - list[n-1]); + if ( list[0] < list[n-1] ) + return(-1); + else if ( list[0] > chainActive.LastTip()->nTime+200 ) + return(-1); + else if ( solvetime >= 777 ) + return(0); + else + { + avetime = (solvetime / (n-1)); + if ( avetime == 0 ) + return(-1); + for (i=0; i data; int32_t i,j; @@ -730,7 +770,7 @@ UniValue sudoku_solution(uint64_t txfee,struct CCcontract_info *cp,cJSON *params for (i=1; i= balance ) + if ( sudoku_captcha(timestamps) < 0 ) { - mtx.vout.push_back(CTxOut(balance-txfee,CScript() << ParseHex(HexStr(mypk)) << OP_CHECKSIG)); - CCaddr2set(cp,cp->evalcode,pk,priv32,CCaddr); - rawtx = FinalizeCCTx(0,cp,mtx,pubkey2pk(Mypubkey()),txfee,sudoku_solutionopret(solution,timestamps)); + result.push_back(Pair("result","error")); + result.push_back(Pair("error","captcha failure")); + return(result); + } + else + { + if ( (inputsum= AddCClibInputs(cp,mtx,pk,balance,16,CCaddr)) >= balance ) + { + mtx.vout.push_back(CTxOut(balance-txfee,CScript() << ParseHex(HexStr(mypk)) << OP_CHECKSIG)); + CCaddr2set(cp,cp->evalcode,pk,priv32,CCaddr); + rawtx = FinalizeCCTx(0,cp,mtx,pubkey2pk(Mypubkey()),txfee,sudoku_solutionopret(solution,timestamps)); + } } } } @@ -756,7 +805,7 @@ UniValue sudoku_solution(uint64_t txfee,struct CCcontract_info *cp,cJSON *params if ( rawtx.size() > 0 ) result.push_back(Pair("hex",rawtx)); else result.push_back(Pair("error","couldnt finalize CCtx")); - printf("params.(%s)\n",jprint(params,0)); + //printf("params.(%s)\n",jprint(params,0)); return(result); } else