Browse Source

Merge pull request #712 from jl777/jl777

Fix mainnet MoM CPU usage
patch-3
jl777 7 years ago
committed by GitHub
parent
commit
32c5e1fd28
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      crypto777/bitcoind_RPC.c
  2. 19
      iguana/dpow/dpow_fsm.c
  3. 1
      iguana/iguana_init.c
  4. 17
      iguana/iguana_wallet.c
  5. 2
      includes/iguana_structs.h

4
crypto777/bitcoind_RPC.c

@ -73,8 +73,8 @@ char *post_process_bitcoind_RPC(char *debugstr,char *command,char *rpcstr,char *
long i,j,len; long i,j,len;
char *retstr = 0; char *retstr = 0;
cJSON *json,*result,*error; cJSON *json,*result,*error;
#ifdef FROM_MARKETMAKER #ifndef FROM_MARKETMAKER
//usleep(1000); usleep(1000);
#endif #endif
//printf("<<<<<<<<<<< bitcoind_RPC: %s post_process_bitcoind_RPC.%s.[%s]\n",debugstr,command,rpcstr); //printf("<<<<<<<<<<< bitcoind_RPC: %s post_process_bitcoind_RPC.%s.[%s]\n",debugstr,command,rpcstr);
if ( command == 0 || rpcstr == 0 || rpcstr[0] == 0 ) if ( command == 0 || rpcstr == 0 || rpcstr[0] == 0 )

19
iguana/dpow/dpow_fsm.c

@ -260,19 +260,22 @@ int32_t dpow_txhasnotarization(uint64_t *signedmaskp,int32_t *nothtp,struct supe
if ( numnotaries >= DPOW_MIN_ASSETCHAIN_SIGS ) if ( numnotaries >= DPOW_MIN_ASSETCHAIN_SIGS )
{ {
hasnotarization = 1; hasnotarization = 1;
*nothtp = height - 10; *nothtp = 0;
if ( (vouts= jarray(&numvouts,txobj,"vout")) != 0 ) if ( (vouts= jarray(&numvouts,txobj,"vout")) != 0 )
{ {
bits256 blockhash,txid,MoM; uint32_t MoMdepth; char symbol[65];//,str[65],str2[65],str3[65]; bits256 blockhash,txid,MoM; uint32_t MoMdepth; char symbol[65];//,str[65],str2[65],str3[65];
vout = jitem(vouts,numvouts-1); vout = jitem(vouts,numvouts-1);
if ( (sobj= jobj(vout,"scriptPubKey")) != 0 && (hexstr= jstr(sobj,"hex")) != 0 && (len= is_hexstr(hexstr,0)) > 35*2 && len < sizeof(script)*2 ) if ( (sobj= jobj(vout,"scriptPubKey")) != 0 && (hexstr= jstr(sobj,"hex")) != 0 && (len= is_hexstr(hexstr,0)) > 36*2 && len < sizeof(script)*2 )
{ {
len >>= 1; len >>= 1;
decode_hex(script,len,hexstr); decode_hex(script,len,hexstr);
if ( dpow_opreturn_parsesrc(&blockhash,nothtp,&txid,symbol,&MoM,&MoMdepth,script,len) > 0 ) if ( dpow_opreturn_parsesrc(&blockhash,nothtp,&txid,symbol,&MoM,&MoMdepth,script,len) > 0 )
{
if ( Notaries_port != DPOW_SOCKPORT )
{ {
if ( bits256_nonz(MoM) == 0 || MoMdepth == 0 || *nothtp >= height || *nothtp < 0 ) if ( bits256_nonz(MoM) == 0 || MoMdepth == 0 || *nothtp >= height || *nothtp < 0 )
*nothtp = 0; *nothtp = 0;
}
//printf("%s.%d notarizationht.%d %s -> %s MoM.%s [%d]\n",symbol,height,*nothtp,bits256_str(str,blockhash),bits256_str(str2,txid),bits256_str(str3,MoM),MoMdepth); //printf("%s.%d notarizationht.%d %s -> %s MoM.%s [%d]\n",symbol,height,*nothtp,bits256_str(str,blockhash),bits256_str(str2,txid),bits256_str(str3,MoM),MoMdepth);
} }
} }
@ -309,7 +312,7 @@ bits256 dpow_calcMoM(uint32_t *MoMdepthp,struct supernet_info *myinfo,struct igu
bits256 MoM,blockhash,merkle,*merkles; cJSON *blockjson; uint64_t signedmask; int32_t breakht=0,notht=0,ht,maxdepth = 1440,MoMdepth = 0; bits256 MoM,blockhash,merkle,*merkles; cJSON *blockjson; uint64_t signedmask; int32_t breakht=0,notht=0,ht,maxdepth = 1440,MoMdepth = 0;
memset(MoM.bytes,0,sizeof(MoM)); memset(MoM.bytes,0,sizeof(MoM));
blockhash = dpow_getblockhash(myinfo,coin,height); blockhash = dpow_getblockhash(myinfo,coin,height);
//printf("start MoM calc %s height.%d\n",coin->symbol,height); printf("start MoM calc %s height.%d\n",coin->symbol,height);
if ( (blockjson= dpow_getblock(myinfo,coin,blockhash)) != 0 ) if ( (blockjson= dpow_getblock(myinfo,coin,blockhash)) != 0 )
{ {
merkle = jbits256(blockjson,"merkleroot"); merkle = jbits256(blockjson,"merkleroot");
@ -329,7 +332,7 @@ bits256 dpow_calcMoM(uint32_t *MoMdepthp,struct supernet_info *myinfo,struct igu
{ {
breakht = notht; breakht = notht;
//free_json(blockjson); //free_json(blockjson);
//printf("%s has notarization at %d for breakht.%d\n",coin->symbol,ht,notht); printf("%s has notarization at %d for breakht.%d\n",coin->symbol,ht,notht);
} }
merkle = jbits256(blockjson,"merkleroot"); merkle = jbits256(blockjson,"merkleroot");
free_json(blockjson); free_json(blockjson);
@ -349,6 +352,7 @@ bits256 dpow_calcMoM(uint32_t *MoMdepthp,struct supernet_info *myinfo,struct igu
break; break;
} }
ht = height - MoMdepth; ht = height - MoMdepth;
usleep(10000);
} }
if ( MoMdepth > 0 ) if ( MoMdepth > 0 )
{ {
@ -364,7 +368,7 @@ bits256 dpow_calcMoM(uint32_t *MoMdepthp,struct supernet_info *myinfo,struct igu
} else printf("%s.ht%d null merkles\n",coin->symbol,height); } else printf("%s.ht%d null merkles\n",coin->symbol,height);
} else printf("%s.ht%d null block\n",coin->symbol,height); } else printf("%s.ht%d null block\n",coin->symbol,height);
*MoMdepthp = MoMdepth; *MoMdepthp = MoMdepth;
//printf("done MoM calc %s height.%d MoMdepth.%d\n",coin->symbol,height,MoMdepth); printf("done MoM calc %s height.%d MoMdepth.%d\n",coin->symbol,height,MoMdepth);
return(MoM); return(MoM);
} }
@ -400,10 +404,9 @@ void dpow_statemachinestart(void *ptr)
else if ( strcmp(dest->symbol,"KMD") == 0 ) else if ( strcmp(dest->symbol,"KMD") == 0 )
{ {
kmdheight = dest->longestchain; kmdheight = dest->longestchain;
//portable_mutex_lock(&myinfo->MoM_mutex); portable_mutex_lock(&src->MoM_mutex);
//if ( Notaries_port != DPOW_SOCKPORT )
MoM = dpow_calcMoM(&MoMdepth,myinfo,src,checkpoint.blockhash.height); MoM = dpow_calcMoM(&MoMdepth,myinfo,src,checkpoint.blockhash.height);
//portable_mutex_unlock(&myinfo->MoM_mutex); portable_mutex_unlock(&src->MoM_mutex);
} }
if ( (bp= dp->blocks[checkpoint.blockhash.height]) == 0 ) if ( (bp= dp->blocks[checkpoint.blockhash.height]) == 0 )
{ {

1
iguana/iguana_init.c

@ -68,6 +68,7 @@ void iguana_initcoin(struct iguana_info *coin,cJSON *argjson)
portable_mutex_init(&coin->RTmutex); portable_mutex_init(&coin->RTmutex);
portable_mutex_init(&coin->kmdmutex); portable_mutex_init(&coin->kmdmutex);
portable_mutex_init(&coin->peers_mutex); portable_mutex_init(&coin->peers_mutex);
portable_mutex_init(&coin->MoM_mutex);
portable_mutex_init(&coin->blocks_mutex); portable_mutex_init(&coin->blocks_mutex);
portable_mutex_init(&coin->special_mutex); portable_mutex_init(&coin->special_mutex);
portable_mutex_init(&coin->allcoins_mutex); portable_mutex_init(&coin->allcoins_mutex);

17
iguana/iguana_wallet.c

@ -1342,7 +1342,7 @@ ZERO_ARGS(bitcoinrpc,walletlock)
TWOSTRINGS_AND_INT(bitcoinrpc,walletpassphrase,password,permanentfile,timeout) TWOSTRINGS_AND_INT(bitcoinrpc,walletpassphrase,password,permanentfile,timeout)
{ {
char *retstr; char *retstr,*tmpstr; cJSON *retjson;
if ( remoteaddr != 0 ) if ( remoteaddr != 0 )
return(clonestr("{\"error\":\"no remote\"}")); return(clonestr("{\"error\":\"no remote\"}"));
if ( timeout <= 0 ) if ( timeout <= 0 )
@ -1368,11 +1368,24 @@ TWOSTRINGS_AND_INT(bitcoinrpc,walletpassphrase,password,permanentfile,timeout)
bitcoin_address(coin->changeaddr,coin->chain->pubtype,myinfo->persistent_pubkey33,33); bitcoin_address(coin->changeaddr,coin->chain->pubtype,myinfo->persistent_pubkey33,33);
if ( coin->FULLNODE < 0 ) if ( coin->FULLNODE < 0 )
{ {
char wifstr[64]; char wifstr[64]; int32_t destvalid = 0; cJSON *ismine;
if ( (tmpstr= dpow_validateaddress(myinfo,coin,coin->changeaddr)) != 0 )
{
retjson = cJSON_Parse(tmpstr);
if ( (ismine= jobj(json,"ismine")) != 0 && is_cJSON_True(ismine) != 0 )
destvalid = 1;
else destvalid = 0;
free(tmpstr);
free(retjson);
tmpstr = 0;
}
if ( destvalid == 0 )
{
bitcoin_priv2wif(wifstr,myinfo->persistent_priv,coin->chain->wiftype); bitcoin_priv2wif(wifstr,myinfo->persistent_priv,coin->chain->wiftype);
jumblr_importprivkey(myinfo,coin,wifstr); jumblr_importprivkey(myinfo,coin,wifstr);
} }
} }
}
if ( bits256_nonz(myinfo->persistent_priv) != 0 ) if ( bits256_nonz(myinfo->persistent_priv) != 0 )
{ {
char *jumblrstr,jumblr_passphrase[1024],coinaddr[64],KMDaddr[64]; bits256 privkey; char *jumblrstr,jumblr_passphrase[1024],coinaddr[64],KMDaddr[64]; bits256 privkey;

2
includes/iguana_structs.h

@ -511,7 +511,7 @@ struct iguana_info
struct OS_memspace TXMEM,MEM,MEMB[IGUANA_MAXBUNDLESIZE]; struct OS_memspace TXMEM,MEM,MEMB[IGUANA_MAXBUNDLESIZE];
queue_t acceptQ,hdrsQ,blocksQ,priorityQ,possibleQ,cacheQ,recvQ,msgrequestQ,jsonQ,finishedQ; queue_t acceptQ,hdrsQ,blocksQ,priorityQ,possibleQ,cacheQ,recvQ,msgrequestQ,jsonQ,finishedQ;
double parsemillis,avetime; uint32_t Launched[8],Terminated[8]; double parsemillis,avetime; uint32_t Launched[8],Terminated[8];
portable_mutex_t peers_mutex,blocks_mutex,special_mutex,RTmutex,allcoins_mutex; portable_mutex_t peers_mutex,blocks_mutex,special_mutex,RTmutex,allcoins_mutex,MoM_mutex;
char changeaddr[64]; char changeaddr[64];
struct iguana_bundle *bundles[IGUANA_MAXBUNDLES],*current,*lastpending; struct iguana_bundle *bundles[IGUANA_MAXBUNDLES],*current,*lastpending;
struct OS_memspace RTrawmem,RTmem,RThashmem; // struct iguana_ramchain RTramchain; struct OS_memspace RTrawmem,RTmem,RThashmem; // struct iguana_ramchain RTramchain;

Loading…
Cancel
Save