]> Git Repo - VerusCoin.git/commitdiff
Add allMoMs
authorjl777 <[email protected]>
Thu, 12 Apr 2018 15:45:25 +0000 (18:45 +0300)
committerjl777 <[email protected]>
Thu, 12 Apr 2018 15:45:25 +0000 (18:45 +0300)
src/komodo_ccdata.h
src/komodo_structs.h
src/rpcblockchain.cpp
src/rpcclient.cpp
src/rpcserver.cpp
src/rpcserver.h

index 68a45e3d8c3497323b5ad462ad79fb2a8574f3ee..f08a13a71f3ab6ee06b78b1990dc44643e2712c7 100644 (file)
@@ -42,6 +42,44 @@ bits256 iguana_merkle(bits256 *tree,int32_t txn_count)
     return(tree[n]);
 }
 
+struct komodo_ccdata_entry *komodo_allMoMs(int32_t *nump,uint256 *MoMoMp,int32_t *MoMoMdepthp,int32_t kmdstarti,int32_t kmdendi)
+{
+    struct komodo_ccdata_entry *allMoMs=0; bits256 *tree,tmp; struct komodo_ccdata *ccdata,*tmpptr; int32_t i,num,max;
+    num = max = 0;
+    portable_mutex_lock(&KOMODO_CC_mutex);
+    DL_FOREACH_SAFE(CC_data,ccdata,tmpptr)
+    {
+        if ( ccdata->MoMdata.height <= kmdendi && ccdata->MoMdata.height >= kmdstarti )
+        {
+            if ( num >= max )
+            {
+                max += 100;
+                allMoMs = (struct komodo_ccdata_entry *)realloc(allMoMs,max * sizeof(*allMoMs));
+            }
+            allMoMs[num].MoM = ccdata->MoMdata.MoM;
+            allMoMs[num].notarized_height = ccdata->MoMdata.notarized_height;
+            allMoMs[num].height = ccdata->MoMdata.height;
+            allMoMs[num].txi = ccdata->MoMdata.txi;
+            strcpy(allMoMs[num].symbol,ccdata->symbol);
+            num++;
+        }
+    }
+    if ( (*nump= num) > 0 )
+    {
+        tree = (bits256 *)calloc(sizeof(bits256),num*3);
+        for (i=0; i<num; i++)
+            memcpy(&tree[i],&allMoMs[i].MoM,sizeof(tree[i]));
+        tmp = iguana_merkle(tree,num);
+        memcpy(MoMoMp,&tree,sizeof(*MoMoMp));
+    }
+    else
+    {
+        free(allMoMs);
+        allMoMs = 0;
+    }
+    return(allMoMs);
+}
+
 int32_t komodo_MoMoMdata(char *hexstr,int32_t hexsize,struct komodo_ccdataMoMoM *mdata,char *symbol,int32_t kmdheight,int32_t notarized_height)
 {
     uint8_t hexdata[8192]; struct komodo_ccdata *ccdata,*tmpptr; int32_t len,maxpairs,i,retval=-1,max,offset,starti,endi; bits256 *tree=0,tmp; uint256 MoMoM;
@@ -69,13 +107,15 @@ int32_t komodo_MoMoMdata(char *hexstr,int32_t hexsize,struct komodo_ccdataMoMoM
                 if ( (mdata->numpairs == 1 && notarized_height == 0) || ccdata->MoMdata.notarized_height <= notarized_height )
                 {
                     starti = ccdata->MoMdata.height + 1;
+                    if ( notarized_height == 0 )
+                        notarized_height = ccdata->MoMdata.notarized_height;
                     break;
                 }
                 if ( mdata->numpairs >= maxpairs )
                 {
                     maxpairs += 100;
                     mdata->pairs = (struct komodo_ccdatapair *)realloc(mdata->pairs,sizeof(*mdata->pairs)*maxpairs);
-                    fprintf(stderr,"pairs reallocated to %p num.%d\n",mdata->pairs,mdata->numpairs);
+                    //fprintf(stderr,"pairs reallocated to %p num.%d\n",mdata->pairs,mdata->numpairs);
                 }
                 mdata->pairs[mdata->numpairs].notarized_height = ccdata->MoMdata.notarized_height;
                 mdata->pairs[mdata->numpairs].MoMoMoffset = offset;
@@ -85,7 +125,7 @@ int32_t komodo_MoMoMdata(char *hexstr,int32_t hexsize,struct komodo_ccdataMoMoM
             {
                 max += 100;
                 tree = (bits256 *)realloc(tree,sizeof(*tree)*max);
-                fprintf(stderr,"tree reallocated to %p max.%d\n",tree,max);
+                //fprintf(stderr,"tree reallocated to %p max.%d\n",tree,max);
             }
             memcpy(&tree[offset],&ccdata->MoMdata.MoM,sizeof(bits256));
             offset++;
@@ -124,7 +164,7 @@ int32_t komodo_MoMoMdata(char *hexstr,int32_t hexsize,struct komodo_ccdataMoMoM
                 if ( i == mdata->numpairs && len*2+1 < hexsize )
                 {
                     init_hexbytes_noT(hexstr,hexdata,len);
-                    fprintf(stderr,"hexstr.(%s)\n",hexstr);
+                    //fprintf(stderr,"hexstr.(%s)\n",hexstr);
                     retval = 0;
                 } else fprintf(stderr,"%s %d %d too much hexdata[%d] for hexstr[%d]\n",symbol,kmdheight,notarized_height,len,hexsize);
             }
@@ -132,7 +172,7 @@ int32_t komodo_MoMoMdata(char *hexstr,int32_t hexsize,struct komodo_ccdataMoMoM
     }
     if ( tree != 0 )
     {
-        fprintf(stderr,"free tree.%p\n",tree);
+        //fprintf(stderr,"free tree.%p\n",tree);
         free(tree);
     }
     return(retval);
index df9cd2154352a9ba85e1c2edde6cce00674fb65b..634edf74c597c71b15e5a564b49fc99c3a2c6b77 100644 (file)
@@ -95,7 +95,8 @@ struct komodo_ccdataMoM
     int32_t MoMdepth,notarized_height,height,txi;
 };
 
-struct komodo_ccdatapair { int32_t notarized_height; uint32_t MoMoMoffset; };
+struct komodo_ccdata_entry { uint256 MoM; int32_t notarized_height,height,txi; char symbol[65]; };
+struct komodo_ccdatapair { int32_t notarized_height,MoMoMoffset; };
 
 struct komodo_ccdataMoMoM
 {
index 8b296a66bd0849fb544a3e86abbd0115228be845..770feb4e79277a25028a43560b1b6648e9ee21d1 100644 (file)
@@ -555,6 +555,7 @@ int32_t komodo_minerids(uint8_t *minerids,int32_t height,int32_t width);
 int32_t komodo_kvsearch(uint256 *refpubkeyp,int32_t current_height,uint32_t *flagsp,int32_t *heightp,uint8_t value[IGUANA_MAXSCRIPTSIZE],uint8_t *key,int32_t keylen);
 int32_t komodo_MoM(int32_t *notarized_htp,uint256 *MoMp,uint256 *kmdtxidp,int32_t nHeight,uint256 *MoMoMp,int32_t *MoMoMoffsetp,int32_t *MoMoMdepthp,int32_t *kmdstartip,int32_t *kmdendip);
 int32_t komodo_MoMoMdata(char *hexstr,int32_t hexsize,struct komodo_ccdataMoMoM *mdata,char *symbol,int32_t kmdheight,int32_t notarized_height);
+struct komodo_ccdata_entry *komodo_allMoMs(int32_t *nump,int32_t kmdstarti,int32_t kmdendi);
 
 UniValue kvsearch(const UniValue& params, bool fHelp)
 {
@@ -591,6 +592,36 @@ UniValue kvsearch(const UniValue& params, bool fHelp)
     return ret;
 }
 
+struct komodo_ccdata_entry { uint256 MoM; int32_t notarized_height,height,txi; char symbol[65]; };
+
+UniValue allMoMs(const UniValue& params, bool fHelp)
+{
+    struct komodo_ccdata_entry *allMoMs; uint256 MoMoM; int32_t num,i,kmdstarti,kmdendi; UniValue ret(UniValue::VOBJ); UniValue a(UniValue::VARR);
+    if ( fHelp || params.size() != 2 )
+        throw runtime_error("allMoMs kmdstarti kmdendi\n");
+    LOCK(cs_main);
+    kmdstarti = atoi(params[0].get_str().c_str());
+    kmdendi = atoi(params[1].get_str().c_str());
+    ret.push_back(Pair("kmdstarti",kmdstarti));
+    ret.push_back(Pair("kmdendi",kmdendi));
+    if ( (allMoMs= komodo_allMoMs(&num,&MoMoM,&MoMoMdepth,kmdstarti,kmdendi)) != 0 )
+    {
+        for (i=0; i<num; i++)
+        {
+            UniValue item(UniValue::VOBJ);
+            item.push_back(Pair("MoM",allMoMs[i].ToString()));
+            item.push_back(Pair("coin",allMoMs[i].symbol));
+            item.push_back(Pair("notarized_height",allMoMs[i].notarized_height));
+            a.push_back(item);
+        }
+        ret.push_back(Pair("MoMs",a));
+        ret.push_back(Pair("MoMoM",MoMoM.ToString()));
+        ret.push_back(Pair("MoMoMdepth",(int)MoMoMdepth));
+        free(allMoMs);
+    }
+    return(ret);
+}
+
 UniValue MoMoMdata(const UniValue& params, bool fHelp)
 {
     char *symbol,hexstr[16384+1]; struct komodo_ccdataMoMoM mdata; int32_t i,kmdheight,notarized_height; UniValue ret(UniValue::VOBJ); UniValue a(UniValue::VARR);
@@ -613,7 +644,7 @@ UniValue MoMoMdata(const UniValue& params, bool fHelp)
         ret.push_back(Pair("numnotarizations",mdata.numpairs));
         if ( mdata.pairs != 0 )
         {
-            fprintf(stderr,"mdata.pairs free %p, numpairs.%d\n",mdata.pairs,mdata.numpairs);
+            //fprintf(stderr,"mdata.pairs free %p, numpairs.%d\n",mdata.pairs,mdata.numpairs);
             for (i=0; i<mdata.numpairs; i++)
             {
                 UniValue item(UniValue::VOBJ);
index 475a8bf6970131233751702c0b80dcceece2c2df..4b44a8f59956c97a72e13143c9ba21bfafded774 100644 (file)
@@ -127,6 +127,7 @@ static const CRPCConvertParam vRPCConvertParams[] =
     { "notaries", 2 },
     { "height_MoM", 1 },
     { "MoMoMdata", 3 },
+    { "allMoMs", 2 },
     { "txMoMproof", 1 },
     { "minerids", 1 },
     { "kvsearch", 1 },
index dffe2d4d9c2873a9dfa44a015cea605a994d1ada..cc5f364b41e314b1b5acb7b9cb68b114b65b681a 100644 (file)
@@ -296,6 +296,7 @@ static const CRPCCommand vRPCCommands[] =
     { "blockchain",         "paxpending",             &paxpending,             true  },
     { "blockchain",         "paxprices",              &paxprices,              true  },
     { "blockchain",         "notaries",               &notaries,               true  },
+    { "blockchain",         "allMoMs",                &allMoMs,                true  },
     { "blockchain",         "MoMoMdata",              &MoMoMdata,              true  },
     { "blockchain",         "height_MoM",             &height_MoM,             true  },
     { "blockchain",         "txMoMproof",             &txMoMproof,             true  },
index f3e0d5d890068d1e187beb5421fd71e11faa39b3..a042d56f6c327d00949b016c2cbf2c7541699b15 100644 (file)
@@ -304,6 +304,7 @@ extern UniValue z_validateaddress(const UniValue& params, bool fHelp); // in rpc
 extern UniValue z_getpaymentdisclosure(const UniValue& params, bool fHelp); // in rpcdisclosure.cpp
 extern UniValue z_validatepaymentdisclosure(const UniValue &params, bool fHelp); // in rpcdisclosure.cpp
 
+extern UniValue allMoMs(const UniValue& params, bool fHelp);
 extern UniValue MoMoMdata(const UniValue& params, bool fHelp);
 extern UniValue height_MoM(const UniValue& params, bool fHelp);
 extern UniValue txMoMproof(const UniValue& params, bool fHelp);
This page took 0.032606 seconds and 4 git commands to generate.