From 42080831038cf40a6a176050c4062c782381ee2e Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 25 Aug 2018 09:20:57 -1100 Subject: [PATCH 1/3] +print --- src/cc/rewards.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cc/rewards.cpp b/src/cc/rewards.cpp index 33c5f01d4..d50b9ffb3 100644 --- a/src/cc/rewards.cpp +++ b/src/cc/rewards.cpp @@ -244,6 +244,8 @@ bool RewardsValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &t //vout.0: funding CC change or recover normal payout //vout.1: normal output to unlock address //vout.n-1: opreturn 'U' sbits fundingtxid + char str[65],str2[65]; + fprintf(stderr,"funding.%s vs %s\n",uint256_str(str,fundingtxid),uint256_str(str2,txid)); if ( fundingtxid == txid ) return eval->Invalid("cant unlock fundingtxid"); else if ( eval->GetTxUnconfirmed(tx.vin[0].prevout.hash,vinTx,hashBlock) == 0 ) From 8254d65aa1616f7a08028de6abdfd13cc60c94ba Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 25 Aug 2018 09:36:07 -1100 Subject: [PATCH 2/3] Prevent unlocking the fundingtxid --- src/cc/rewards.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc/rewards.cpp b/src/cc/rewards.cpp index d50b9ffb3..0f002ecf1 100644 --- a/src/cc/rewards.cpp +++ b/src/cc/rewards.cpp @@ -245,8 +245,8 @@ bool RewardsValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &t //vout.1: normal output to unlock address //vout.n-1: opreturn 'U' sbits fundingtxid char str[65],str2[65]; - fprintf(stderr,"funding.%s vs %s\n",uint256_str(str,fundingtxid),uint256_str(str2,txid)); - if ( fundingtxid == txid ) + fprintf(stderr,"funding.%s vs %s\n",uint256_str(str,fundingtxid),uint256_str(str2,tx.vin[0].prevout.hash)); + if ( fundingtxid == tx.vin[0].prevout.hash ) return eval->Invalid("cant unlock fundingtxid"); else if ( eval->GetTxUnconfirmed(tx.vin[0].prevout.hash,vinTx,hashBlock) == 0 ) return eval->Invalid("always should find vin.0, but didnt"); From 717ede079e4c14cdf159a080abfa3e5692678396 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 25 Aug 2018 09:43:48 -1100 Subject: [PATCH 3/3] Required locked tx --- src/cc/rewards.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/cc/rewards.cpp b/src/cc/rewards.cpp index 0f002ecf1..8d9a9fa78 100644 --- a/src/cc/rewards.cpp +++ b/src/cc/rewards.cpp @@ -196,7 +196,7 @@ bool RewardsExactAmounts(struct CCcontract_info *cp,Eval *eval,const CTransactio bool RewardsValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &tx) { - uint256 txid,fundingtxid,hashBlock; uint64_t sbits,APR,minseconds,maxseconds,mindeposit,amount,reward,txfee=10000; int32_t numvins,numvouts,preventCCvins,preventCCvouts,i; uint8_t funcid; CScript scriptPubKey; CTransaction fundingTx,vinTx; + uint256 txid,fundingtxid,hashBlock,vinfundingtxid; uint64_t vinsbits,sbits,APR,minseconds,maxseconds,mindeposit,amount,reward,txfee=10000; int32_t numvins,numvouts,preventCCvins,preventCCvouts,i; uint8_t funcid; CScript scriptPubKey; CTransaction fundingTx,vinTx; numvins = tx.vin.size(); numvouts = tx.vout.size(); preventCCvins = preventCCvouts = -1; @@ -244,12 +244,16 @@ bool RewardsValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &t //vout.0: funding CC change or recover normal payout //vout.1: normal output to unlock address //vout.n-1: opreturn 'U' sbits fundingtxid - char str[65],str2[65]; - fprintf(stderr,"funding.%s vs %s\n",uint256_str(str,fundingtxid),uint256_str(str2,tx.vin[0].prevout.hash)); + //char str[65],str2[65]; + //fprintf(stderr,"funding.%s vs %s\n",uint256_str(str,fundingtxid),uint256_str(str2,tx.vin[0].prevout.hash)); if ( fundingtxid == tx.vin[0].prevout.hash ) return eval->Invalid("cant unlock fundingtxid"); else if ( eval->GetTxUnconfirmed(tx.vin[0].prevout.hash,vinTx,hashBlock) == 0 ) return eval->Invalid("always should find vin.0, but didnt"); + else if ( DecodeRewardsOpRet(tx.vin[0].prevout.hash,vinTx.vout[vinTx.vout.size()-1].scriptPubKey,vinsbits,vinfundingtxid) != 'L' ) + return eval->Invalid("can only unlock locktxid"); + else if ( fundingtxid != vinfundingtxid ) + return eval->Invalid("mismatched vinfundingtxid"); for (i=0; iismyvin)(tx.vin[i].scriptSig) == 0 )