Merge branch 'jl777' into nSPV

This commit is contained in:
jl777
2019-07-08 23:46:53 -11:00
4 changed files with 19 additions and 13 deletions

View File

@@ -290,7 +290,7 @@ void SetCCtxids(std::vector<std::pair<CAddressIndexKey, CAmount> > &addressIndex
int64_t AddNormalinputs(CMutableTransaction &mtx,CPubKey mypk,int64_t total,int32_t maxinputs); int64_t AddNormalinputs(CMutableTransaction &mtx,CPubKey mypk,int64_t total,int32_t maxinputs);
int64_t AddNormalinputs2(CMutableTransaction &mtx,int64_t total,int32_t maxinputs); int64_t AddNormalinputs2(CMutableTransaction &mtx,int64_t total,int32_t maxinputs);
int64_t CCutxovalue(char *coinaddr,uint256 utxotxid,int32_t utxovout,int32_t CCflag); int64_t CCutxovalue(char *coinaddr,uint256 utxotxid,int32_t utxovout,int32_t CCflag);
bool NSPV_SignTx(CMutableTransaction &mtx,int32_t vini,int64_t utxovalue,const CScript scriptPubKey); bool NSPV_SignTx(CMutableTransaction &mtx,int32_t vini,int64_t utxovalue,const CScript scriptPubKey,uint32_t nTime);
// curve25519 and sha256 // curve25519 and sha256
bits256 curve25519_shared(bits256 privkey,bits256 otherpub); bits256 curve25519_shared(bits256 privkey,bits256 otherpub);

View File

@@ -160,7 +160,7 @@ std::string FinalizeCCTx(uint64_t CCmask,struct CCcontract_info *cp,CMutableTran
} }
else else
{ {
if ( NSPV_SignTx(mtx,i,vintx.vout[utxovout].nValue,vintx.vout[utxovout].scriptPubKey) == 0 ) if ( NSPV_SignTx(mtx,i,vintx.vout[utxovout].nValue,vintx.vout[utxovout].scriptPubKey,0) == 0 )
fprintf(stderr,"NSPV signing error for vini.%d of %llx\n",i,(long long)vinimask); fprintf(stderr,"NSPV signing error for vini.%d of %llx\n",i,(long long)vinimask);
} }
} }

View File

@@ -422,9 +422,9 @@ int32_t NSPV_txextract(CTransaction &tx,uint8_t *data,int32_t datalen)
else return(-1); else return(-1);
} }
bool NSPV_SignTx(CMutableTransaction &mtx,int32_t vini,int64_t utxovalue,const CScript scriptPubKey); bool NSPV_SignTx(CMutableTransaction &mtx,int32_t vini,int64_t utxovalue,const CScript scriptPubKey,uint32_t nTime);
int32_t NSPV_fastnotariescount(CTransaction tx,uint8_t elected[64][33]) int32_t NSPV_fastnotariescount(CTransaction tx,uint8_t elected[64][33],uint32_t nTime)
{ {
CPubKey pubkeys[64]; uint8_t sig[512]; CScript scriptPubKeys[64]; CMutableTransaction mtx(tx); int32_t vini,j,siglen,retval; uint64_t mask = 0; char *str; std::vector<std::vector<unsigned char>> vData; CPubKey pubkeys[64]; uint8_t sig[512]; CScript scriptPubKeys[64]; CMutableTransaction mtx(tx); int32_t vini,j,siglen,retval; uint64_t mask = 0; char *str; std::vector<std::vector<unsigned char>> vData;
for (j=0; j<64; j++) for (j=0; j<64; j++)
@@ -447,7 +447,7 @@ int32_t NSPV_fastnotariescount(CTransaction tx,uint8_t elected[64][33])
if ( ((1LL << j) & mask) != 0 ) if ( ((1LL << j) & mask) != 0 )
continue; continue;
char coinaddr[64]; Getscriptaddress(coinaddr,scriptPubKeys[j]); char coinaddr[64]; Getscriptaddress(coinaddr,scriptPubKeys[j]);
NSPV_SignTx(mtx,vini,10000,scriptPubKeys[j]); // sets SIG_TXHASH NSPV_SignTx(mtx,vini,10000,scriptPubKeys[j],nTime); // sets SIG_TXHASH
if ( (retval= pubkeys[j].Verify(SIG_TXHASH,vData[0])) != 0 ) if ( (retval= pubkeys[j].Verify(SIG_TXHASH,vData[0])) != 0 )
{ {
fprintf(stderr,"(vini.%d %s.%d) ",vini,coinaddr,retval); fprintf(stderr,"(vini.%d %s.%d) ",vini,coinaddr,retval);
@@ -511,7 +511,7 @@ uint256 NSPV_opretextract(int32_t *heightp,uint256 *blockhashp,char *symbol,std:
int32_t NSPV_notarizationextract(int32_t verifyntz,int32_t *ntzheightp,uint256 *blockhashp,uint256 *desttxidp,CTransaction tx) int32_t NSPV_notarizationextract(int32_t verifyntz,int32_t *ntzheightp,uint256 *blockhashp,uint256 *desttxidp,CTransaction tx)
{ {
int32_t numsigs=0; uint8_t elected[64][33]; char *symbol; std::vector<uint8_t> opret; int32_t numsigs=0; uint8_t elected[64][33]; char *symbol; std::vector<uint8_t> opret; uint32_t nTime;
if ( tx.vout.size() >= 2 ) if ( tx.vout.size() >= 2 )
{ {
symbol = (ASSETCHAINS_SYMBOL[0] == 0) ? (char *)"KMD" : ASSETCHAINS_SYMBOL; symbol = (ASSETCHAINS_SYMBOL[0] == 0) ? (char *)"KMD" : ASSETCHAINS_SYMBOL;
@@ -520,8 +520,9 @@ int32_t NSPV_notarizationextract(int32_t verifyntz,int32_t *ntzheightp,uint256 *
{ {
sleep(1); sleep(1);
*desttxidp = NSPV_opretextract(ntzheightp,blockhashp,symbol,opret,tx.GetHash()); *desttxidp = NSPV_opretextract(ntzheightp,blockhashp,symbol,opret,tx.GetHash());
komodo_notaries(elected,*ntzheightp,NSPV_blocktime(*ntzheightp)); nTime = NSPV_blocktime(*ntzheightp);
if ( verifyntz != 0 && (numsigs= NSPV_fastnotariescount(tx,elected)) < 12 ) komodo_notaries(elected,*ntzheightp,nTime);
if ( verifyntz != 0 && (numsigs= NSPV_fastnotariescount(tx,elected,nTime)) < 12 )
{ {
fprintf(stderr,"numsigs.%d error\n",numsigs); fprintf(stderr,"numsigs.%d error\n",numsigs);
return(-3); return(-3);

View File

@@ -121,9 +121,9 @@ int64_t NSPV_addinputs(struct NSPV_utxoresp *used,CMutableTransaction &mtx,int64
return(0); return(0);
} }
bool NSPV_SignTx(CMutableTransaction &mtx,int32_t vini,int64_t utxovalue,const CScript scriptPubKey) bool NSPV_SignTx(CMutableTransaction &mtx,int32_t vini,int64_t utxovalue,const CScript scriptPubKey,uint32_t nTime)
{ {
CTransaction txNewConst(mtx); SignatureData sigdata; CBasicKeyStore keystore; CTransaction txNewConst(mtx); SignatureData sigdata; CBasicKeyStore keystore; int64_t branchid = NSPV_BRANCHID;
keystore.AddKey(NSPV_key); keystore.AddKey(NSPV_key);
if ( 0 ) if ( 0 )
{ {
@@ -132,7 +132,12 @@ bool NSPV_SignTx(CMutableTransaction &mtx,int32_t vini,int64_t utxovalue,const C
fprintf(stderr,"%02x",((uint8_t *)&scriptPubKey)[i]); fprintf(stderr,"%02x",((uint8_t *)&scriptPubKey)[i]);
fprintf(stderr," scriptPubKey\n"); fprintf(stderr," scriptPubKey\n");
} }
if ( ProduceSignature(TransactionSignatureCreator(&keystore,&txNewConst,vini,utxovalue,SIGHASH_ALL),scriptPubKey,sigdata,NSPV_BRANCHID) != 0 ) if ( nTime < KOMODO_SAPLING_ACTIVATION )
{
fprintf(stderr,"use legacy sig validation\n");
branchid = 0;
}
if ( ProduceSignature(TransactionSignatureCreator(&keystore,&txNewConst,vini,utxovalue,SIGHASH_ALL),scriptPubKey,sigdata,branchid) != 0 )
{ {
UpdateTransaction(mtx,vini,sigdata); UpdateTransaction(mtx,vini,sigdata);
// fprintf(stderr,"SIG_TXHASH %s vini.%d %.8f\n",SIG_TXHASH.GetHex().c_str(),vini,(double)utxovalue/COIN); // fprintf(stderr,"SIG_TXHASH %s vini.%d %.8f\n",SIG_TXHASH.GetHex().c_str(),vini,(double)utxovalue/COIN);
@@ -179,7 +184,7 @@ std::string NSPV_signtx(UniValue &retcodes,CMutableTransaction &mtx,uint64_t txf
fprintf(stderr,"vintx vout mismatch %d != %d\n",utxovout,used[i].vout); fprintf(stderr,"vintx vout mismatch %d != %d\n",utxovout,used[i].vout);
return(""); return("");
} }
else if ( NSPV_SignTx(mtx,i,vintx.vout[utxovout].nValue,vintx.vout[utxovout].scriptPubKey) == 0 ) else if ( NSPV_SignTx(mtx,i,vintx.vout[utxovout].nValue,vintx.vout[utxovout].scriptPubKey,0) == 0 )
{ {
fprintf(stderr,"signing error for vini.%d\n",i); fprintf(stderr,"signing error for vini.%d\n",i);
return(""); return("");
@@ -259,7 +264,7 @@ UniValue NSPV_spend(char *srcaddr,char *destaddr,int64_t satoshis) // what its a
result.push_back(Pair("error","wif expired")); result.push_back(Pair("error","wif expired"));
return(result); return(result);
} }
hex = NSPV_signtx(retcodes,mtx,txfee,opret,used); hex = NSPV_signtx(retcodes,mtx,txfee,opret,used,0);
if ( hex.size() > 0 ) if ( hex.size() > 0 )
{ {
if ( DecodeHexTx(tx,hex) != 0 ) if ( DecodeHexTx(tx,hex) != 0 )