From ab91876752f093be6c1345bdde46d7d72b141a1c Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 11:48:56 -0300 Subject: [PATCH 001/139] test --- src/bitcoind.cpp | 9 +--- src/komodo.h | 60 +++++++--------------- src/komodo_events.h | 105 ++++++++++++++++----------------------- src/komodo_gateway.h | 86 ++++++++++++++++++++------------ src/komodo_globals.h | 9 +--- src/komodo_notary.h | 2 +- src/komodo_structs.h | 36 +++++++++++++- src/komodo_utils.h | 85 ++++++++++++++++++++++++++----- src/miner.cpp | 13 ++--- src/util.cpp | 8 +-- src/wallet/rpcwallet.cpp | 4 +- 11 files changed, 235 insertions(+), 182 deletions(-) diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index 1f7267701..5cb5a92fc 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -33,9 +33,7 @@ static bool fDaemon; extern char ASSETCHAINS_SYMBOL[16]; -void komodo_gateway_iteration(char *symbol); -void komodo_iteration(char *symbol); -int32_t komodo_is_issuer(); +void komodo_passport_iteration(); void WaitForShutdown(boost::thread_group* threadGroup) { @@ -44,10 +42,7 @@ void WaitForShutdown(boost::thread_group* threadGroup) while (!fShutdown) { MilliSleep(10000); - if ( komodo_is_issuer() != 0 ) - komodo_gateway_iteration(ASSETCHAINS_SYMBOL); - else komodo_iteration((char *)"EUR"); - + komodo_passport_iteration(); fShutdown = ShutdownRequested(); } if (threadGroup) diff --git a/src/komodo.h b/src/komodo.h index ed05c1a46..18d8a5a0d 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -41,21 +41,16 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block); #include "komodo_globals.h" #include "komodo_utils.h" -void komodo_setkmdheight(int32_t kmdheight) -{ - if ( kmdheight > KMDHEIGHT ) - KMDHEIGHT = kmdheight; -} - #include "cJSON.c" #include "komodo_bitcoind.h" #include "komodo_interest.h" #include "komodo_pax.h" #include "komodo_notary.h" + +int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char *dest); #include "komodo_gateway.h" #include "komodo_events.h" - void komodo_currentheight_set(int32_t height) { char symbol[16],dest[16]; struct komodo_state *sp; @@ -177,25 +172,7 @@ void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotar return; if ( fp == 0 ) { -#ifdef WIN32 - sprintf(fname,"%s\\%s",GetDataDir(false).string().c_str(),(char *)"komodostate"); - //sprintf(fname2,"%s\\%s",GetDataDir(false).string().c_str(),(char *)"minerids"); -#else - sprintf(fname,"%s/%s",GetDataDir(false).string().c_str(),(char *)"komodostate"); - //sprintf(fname2,"%s/%s",GetDataDir(false).string().c_str(),(char *)"minerids"); -#endif - /*memset(Minerids,0xfe,sizeof(Minerids)); - if ( (Minerfp= fopen(fname2,"rb+")) == 0 ) - { - if ( (Minerfp= fopen(fname2,"wb")) != 0 ) - { - fwrite(Minerids,1,sizeof(Minerids),Minerfp); - fclose(Minerfp); - } - Minerfp = fopen(fname2,"rb+"); - } - if ( Minerfp != 0 && fread(Minerids,1,sizeof(Minerids),Minerfp) != sizeof(Minerids) ) - printf("read error Minerids\n");*/ + komodo_statefname(fname,ASSETCHAINS_SYMBOL); if ( (fp= fopen(fname,"rb+")) != 0 ) { while ( komodo_parsestatefile(sp,fp,symbol,dest) >= 0 ) @@ -212,7 +189,7 @@ void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotar if ( fp != 0 ) // write out funcid, height, other fields, call side effect function { //printf("fpos.%ld ",ftell(fp)); - if ( KMDheight > 0 ) + if ( KMDheight != 0 ) { fputc('K',fp); if ( fwrite(&height,1,sizeof(height),fp) != sizeof(height) ) @@ -368,6 +345,7 @@ int32_t komodo_voutupdate(int32_t *isratificationp,int32_t notaryid,uint8_t *scr sp->NOTARIZED_HASH = kmdtxid; sp->NOTARIZED_DESTTXID = desttxid; komodo_stateupdate(height,0,0,0,zero,0,0,0,0,0,0,0,0,0); + // extract X opreturns here } else printf("reject ht.%d NOTARIZED.%d %s.%s DESTTXID.%s (%s)\n",height,*notarizedheightp,ASSETCHAINS_SYMBOL[0]==0?"KMD":ASSETCHAINS_SYMBOL,kmdtxid.ToString().c_str(),desttxid.ToString().c_str(),(char *)&scriptbuf[len]); } else if ( i == 0 && j == 1 && opretlen == 149 ) @@ -407,7 +385,7 @@ int32_t komodo_isratify(int32_t isspecial,int32_t numvalid) // if all outputs to notary -> notary utxo // if txi == 0 && 2 outputs and 2nd OP_RETURN, len == 32*2+4 -> notarized, 1st byte 'P' -> pricefeed // OP_RETURN: 'D' -> deposit, 'W' -> withdraw -void komodo_currentheight_set(int32_t height); + int32_t gettxout_scriptPubKey(uint8_t *scriptPubKey,int32_t maxsize,uint256 txid,int32_t n); int32_t komodo_notarycmp(uint8_t *scriptPubKey,int32_t scriptlen,uint8_t pubkeys[64][33],int32_t numnotaries,uint8_t rmd160[20]) @@ -428,9 +406,12 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) { static int32_t hwmheight; uint64_t signedmask,voutmask; char symbol[16],dest[16]; struct komodo_state *sp; - uint8_t scriptbuf[4096],pubkeys[64][33],rmd160[20],scriptPubKey[35]; uint256 kmdtxid,btctxid,txhash; + uint8_t scriptbuf[4096],pubkeys[64][33],rmd160[20],scriptPubKey[35]; uint256 kmdtxid,zero,btctxid,txhash; int32_t i,j,k,numnotaries,scriptlen,isratification,nid,numvalid,specialtx,notarizedheight,notaryid,len,numvouts,numvins,height,txn_count; + memset(zero.bytes,0,sizeof(zero)); komodo_init(pindex->nHeight); + if ( (sp= komodo_stateptr(symbol,dest)) == 0 ) + return; numnotaries = komodo_notaries(pubkeys,pindex->nHeight); calc_rmd160_sha256(rmd160,pubkeys[0],33); if ( pindex->nHeight > hwmheight ) @@ -438,20 +419,19 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) else { printf("hwmheight.%d vs pindex->nHeight.%d reorg.%d\n",hwmheight,pindex->nHeight,hwmheight-pindex->nHeight); - if ( (sp= komodo_stateptr(symbol,dest)) != 0 ) - komodo_event_rewind(sp,symbol,pindex->nHeight); - // komodo_stateupdate(); + komodo_event_rewind(sp,symbol,pindex->nHeight); + komodo_stateupdate(pindex->nHeight,0,0,0,zero,0,0,0,0,-pindex->nHeight,0,0,0,0); } komodo_currentheight_set(chainActive.Tip()->nHeight); - if ( komodo_is_issuer() != 0 ) + /*if ( komodo_is_issuer() != 0 ) { while ( KOMODO_REALTIME == 0 || time(NULL) <= KOMODO_REALTIME ) { fprintf(stderr,"komodo_connect.(%s) waiting for realtime RT.%u now.%u\n",ASSETCHAINS_SYMBOL,KOMODO_REALTIME,(uint32_t)time(NULL)); sleep(30); } - } - KOMODO_REALTIME = KOMODO_INITDONE = (uint32_t)time(NULL); + }*/ + sp->KOMODO_REALTIME = KOMODO_INITDONE = (uint32_t)time(NULL); if ( pindex != 0 ) { height = pindex->nHeight; @@ -481,10 +461,6 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) } } } - if ( i != 0 && notaryid >= 0 && notaryid < 64 && voutmask != 0 ) - { - //komodo_stateupdate(height,0,0,notaryid,txhash,voutmask,numvouts,0,0,0,0,0,0,0); - } signedmask = 0; numvins = block.vtx[i].vin.size(); for (j=0; j= 0 ) signedmask |= (1LL << k); } - /*if ( (k= komodo_nutxofind(height,block.vtx[i].vin[j].prevout.hash,block.vtx[i].vin[j].prevout.n)) >= 0 ) - signedmask |= (1LL << k); - else if ( signedmask != 0 ) - printf("signedmask.%llx but ht.%d i.%d j.%d not found (%s %d)\n",(long long)signedmask,height,i,j,block.vtx[i].vin[j].prevout.hash.ToString().c_str(),block.vtx[i].vin[j].prevout.n);*/ } if ( signedmask != 0 ) printf("ht.%d signedmask.%llx numvins.%d numvouts.%d\n",height,(long long)signedmask,numvins,numvouts); @@ -537,6 +509,8 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) } } } + if ( pindex->nHeight == hwmheight && (hwmheight % 100) == 0 ) + komodo_stateupdate(height,0,0,0,zero,0,0,0,0,height,0,0,0,0); } else printf("komodo_connectblock: unexpected null pindex\n"); KOMODO_INITDONE = (uint32_t)time(NULL); } diff --git a/src/komodo_events.h b/src/komodo_events.h index 017fcb145..e006803c1 100644 --- a/src/komodo_events.h +++ b/src/komodo_events.h @@ -16,45 +16,7 @@ #ifndef H_KOMODOEVENTS_H #define H_KOMODOEVENTS_H - -#ifdef WIN32 -#define PACKED -#else -#define PACKED __attribute__((packed)) -#endif - -#define KOMODO_EVENT_RATIFY 'P' -#define KOMODO_EVENT_NOTARIZED 'N' -#define KOMODO_EVENT_UTXO 'U' -#define KOMODO_EVENT_KMDHEIGHT 'K' -#define KOMODO_EVENT_REWIND 'B' -//#define KOMODO_EVENT_DELETE 'D' -#define KOMODO_EVENT_PRICEFEED 'V' -#define KOMODO_EVENT_OPRETURN 'R' -#define KOMODO_OPRETURN_DEPOSIT 'D' -#define KOMODO_OPRETURN_ISSUED 'I' // assetchain -#define KOMODO_OPRETURN_WITHDRAW 'W' // assetchain -#define KOMODO_OPRETURN_REDEEMED 'X' - -struct komodo_event_notarized { uint256 blockhash,desttxid; int32_t notarizedheight; char dest[16]; }; -struct komodo_event_pubkeys { uint8_t num; uint8_t pubkeys[64][33]; }; -struct komodo_event_utxo { uint256 txid; uint64_t voutmask; uint8_t numvouts; }; -struct komodo_event_opreturn { uint256 txid; uint64_t value; uint16_t vout,oplen; uint8_t opret[]; }; -struct komodo_event_pricefeed { uint8_t num; uint32_t prices[35]; }; - -struct komodo_event -{ - struct komodo_event *related; - uint16_t len; - int32_t height; - uint8_t type,reorged; - char symbol[16]; - uint8_t space[]; -} PACKED; - -struct komodo_event **Komodo_events; int32_t Komodo_numevents; - -struct komodo_event *komodo_eventadd(int32_t height,char *symbol,uint8_t type,uint8_t *data,uint16_t datalen) +struct komodo_event *komodo_eventadd(struct komodo_state *sp,int32_t height,char *symbol,uint8_t type,uint8_t *data,uint16_t datalen) { struct komodo_event *ep; uint16_t len = (uint16_t)(sizeof(*ep) + datalen); ep = (struct komodo_event *)calloc(1,len); @@ -64,8 +26,8 @@ struct komodo_event *komodo_eventadd(int32_t height,char *symbol,uint8_t type,ui strcpy(ep->symbol,symbol); if ( datalen != 0 ) memcpy(ep->space,data,datalen); - Komodo_events = (struct komodo_event **)realloc(Komodo_events,(1 + Komodo_numevents) * sizeof(*Komodo_events)); - Komodo_events[Komodo_numevents++] = ep; + sp->Komodo_events = (struct komodo_event **)realloc(sp->Komodo_events,(1 + sp->Komodo_numevents) * sizeof(*Komodo_events)); + sp->Komodo_events[sp->Komodo_numevents++] = ep; return(ep); } @@ -77,7 +39,7 @@ void komodo_eventadd_notarized(struct komodo_state *sp,char *symbol,int32_t heig N.desttxid = notarized_desttxid; N.notarizedheight = notarizedheight; strcpy(N.dest,dest); - komodo_eventadd(height,symbol,KOMODO_EVENT_NOTARIZED,(uint8_t *)&N,sizeof(N)); + komodo_eventadd(sp,height,symbol,KOMODO_EVENT_NOTARIZED,(uint8_t *)&N,sizeof(N)); if ( sp != 0 ) komodo_notarized_update(sp,height,notarizedheight,notarized_hash,notarized_desttxid); } @@ -89,7 +51,7 @@ void komodo_eventadd_pubkeys(struct komodo_state *sp,char *symbol,int32_t height memset(&P,0,sizeof(P)); P.num = num; memcpy(P.pubkeys,pubkeys,33 * num); - komodo_eventadd(height,symbol,KOMODO_EVENT_RATIFY,(uint8_t *)&P,(int32_t)(sizeof(P.num) + 33 * num)); + komodo_eventadd(sp,height,symbol,KOMODO_EVENT_RATIFY,(uint8_t *)&P,(int32_t)(sizeof(P.num) + 33 * num)); if ( sp != 0 ) komodo_notarysinit(height,pubkeys,num); } @@ -112,18 +74,11 @@ void komodo_eventadd_pricefeed(struct komodo_state *sp,char *symbol,int32_t heig memset(&F,0,sizeof(F)); F.num = num; memcpy(F.prices,prices,sizeof(*F.prices) * num); - komodo_eventadd(height,symbol,KOMODO_EVENT_PRICEFEED,(uint8_t *)&F,(int32_t)(sizeof(F.num) + sizeof(*F.prices) * num)); + komodo_eventadd(sp,height,symbol,KOMODO_EVENT_PRICEFEED,(uint8_t *)&F,(int32_t)(sizeof(F.num) + sizeof(*F.prices) * num)); if ( sp != 0 ) komodo_pvals(height,prices,num); } -void komodo_eventadd_kmdheight(struct komodo_state *sp,char *symbol,int32_t height,int32_t kmdheight) -{ - komodo_eventadd(height,symbol,KOMODO_EVENT_KMDHEIGHT,(uint8_t *)&kmdheight,sizeof(kmdheight)); - if ( sp != 0 ) - komodo_setkmdheight(kmdheight); -} - void komodo_eventadd_opreturn(struct komodo_state *sp,char *symbol,int32_t height,uint256 txid,uint64_t value,uint16_t vout,uint8_t *buf,uint16_t opretlen) { struct komodo_event_opreturn O; uint8_t opret[10000]; @@ -134,21 +89,26 @@ void komodo_eventadd_opreturn(struct komodo_state *sp,char *symbol,int32_t heigh memcpy(opret,&O,sizeof(O)); memcpy(&opret[sizeof(O)],buf,opretlen); O.oplen = (int32_t)(opretlen + sizeof(O)); - komodo_eventadd(height,symbol,KOMODO_EVENT_OPRETURN,opret,O.oplen); + komodo_eventadd(sp,height,symbol,KOMODO_EVENT_OPRETURN,opret,O.oplen); if ( sp != 0 ) komodo_opreturn(height,value,buf,opretlen,txid,vout); } -void komodo_event_undo(struct komodo_event *ep) +void komodo_event_undo(struct komodo_state *sp,struct komodo_event *ep) { switch ( ep->type ) { - case KOMODO_EVENT_RATIFY: - case KOMODO_EVENT_NOTARIZED: - case KOMODO_EVENT_UTXO: + case KOMODO_EVENT_RATIFY: printf("rewind of ratify, needs to be coded.%d\n",ep->height); break; + case KOMODO_EVENT_NOTARIZED: printf("unexpected rewind of notarization.%d\n",ep->height); break; case KOMODO_EVENT_KMDHEIGHT: + if ( ep->height <= sp->SAVEDHEIGHT ) + sp->SAVEDHEIGHT = ep->height; + break; case KOMODO_EVENT_PRICEFEED: + // backtrack prices; + break; case KOMODO_EVENT_OPRETURN: + // backtrack opreturns break; } } @@ -156,23 +116,46 @@ void komodo_event_undo(struct komodo_event *ep) void komodo_event_rewind(struct komodo_state *sp,char *symbol,int32_t height) { struct komodo_event *ep; - komodo_eventadd(height,symbol,KOMODO_EVENT_REWIND,(uint8_t *)&height,sizeof(height)); if ( sp != 0 ) { - while ( Komodo_numevents > 0 ) + while ( sp->Komodo_events != 0 && sp->Komodo_numevents > 0 ) { - if ( (ep= Komodo_events[Komodo_numevents-1]) != 0 ) + if ( (ep= sp->Komodo_events[sp->Komodo_numevents-1]) != 0 ) { if ( ep->height < height ) break; printf("undo event.%c ht.%d for rewind.%d\n",ep->type,ep->height,height); - komodo_event_undo(ep); - Komodo_numevents--; + komodo_event_undo(sp,ep); + sp->Komodo_numevents--; } } } } +void komodo_setkmdheight(struct komodo_state *sp,int32_t kmdheight) +{ + if ( kmdheight > sp->SAVEDHEIGHT ) + sp->SAVEDHEIGHT = kmdheight; +} + +void komodo_eventadd_kmdheight(struct komodo_state *sp,char *symbol,int32_t height,int32_t kmdheight) +{ + if ( kmdheight > 0 ) + { + komodo_eventadd(sp,height,symbol,KOMODO_EVENT_KMDHEIGHT,(uint8_t *)&kmdheight,sizeof(kmdheight)); + if ( sp != 0 ) + komodo_setkmdheight(sp,kmdheight); + } + else + { + kmdheight = -kmdheight; + komodo_eventadd(so,height,symbol,KOMODO_EVENT_REWIND,(uint8_t *)&height,sizeof(height)); + if ( sp != 0 ) + komodo_event_rewind(sp,symbol,height); + } +} + + /*void komodo_eventadd_deposit(int32_t actionflag,char *symbol,int32_t height,uint64_t komodoshis,char *fiat,uint64_t fiatoshis,uint8_t rmd160[20],bits256 kmdtxid,uint16_t kmdvout,uint64_t price) { uint8_t opret[512]; uint16_t opretlen; diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index d72c4b1c0..01702f303 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -110,12 +110,9 @@ void komodo_gateway_deposit(char *coinaddr,uint64_t value,int32_t shortflag,char } } -int32_t komodo_issued_opreturn(uint8_t *shortflagp,char *base,uint256 *txids,uint16_t *vouts,uint8_t *opretbuf,int32_t opretlen,int32_t iskomodo) +int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,uint8_t *opretbuf,int32_t opretlen,int32_t iskomodo) { int32_t i,n=0,j,len; - if ( opretbuf[opretlen-5] == '-' ) - *shortflagp = 1; - else *shortflagp = 0; for (i=0; i<4; i++) base[i] = opretbuf[opretlen-4+i]; if ( ASSETCHAINS_SYMBOL[0] == 0 || strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0 ) // shortflag @@ -143,7 +140,7 @@ int32_t komodo_issued_opreturn(uint8_t *shortflagp,char *base,uint256 *txids,uin for (i=0; opretbuf[len+i]!=0&&i<3; i++) symbol[i] = opretbuf[len+i]; symbol[i] = 0; - printf(">>>>>>> iskomodo X: (%s) fiat %.8f kmdheight.%d other.%d short.%d\n",symbol,dstr(fiatoshis),height,otherheight,shortflag); + printf(">>>>>>> iskomodo X: (%s) fiat %.8f kmdheight.%d other.%d\n",symbol,dstr(fiatoshis),height,otherheight); } } } @@ -223,7 +220,7 @@ int32_t komodo_gateway_deposits(CMutableTransaction *txNew,int32_t shortflag,cha int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above block is valid pax pricing { - int32_t i,j,n,num,opretlen,offset=1,errs=0,matched=0; uint256 hash,txids[64]; uint8_t shortflag; char symbol[16],base[16]; uint16_t vouts[64]; uint8_t *script,opcode; struct pax_transaction *pax,space; + int32_t i,j,n,num,opretlen,offset=1,errs=0,matched=0; uint256 hash,txids[64]; char symbol[16],base[16]; uint16_t vouts[64]; uint8_t *script,opcode; struct pax_transaction *pax,space; n = block.vtx[0].vout.size(); script = (uint8_t *)block.vtx[0].vout[n-1].scriptPubKey.data(); if ( n <= 2 || script[0] != 0x6a ) @@ -244,7 +241,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above } if ( script[offset] == opcode && opretlen < block.vtx[0].vout[n-1].scriptPubKey.size() ) { - if ( (num= komodo_issued_opreturn(&shortflag,base,txids,vouts,&script[offset],opretlen,opcode == 'X')) > 0 ) + if ( (num= komodo_issued_opreturn(base,txids,vouts,&script[offset],opretlen,opcode == 'X')) > 0 ) { for (i=1; i= checktoshis || (seed == 0 && diff < .01) ) { - for (i=0; i<32; i++) - printf("%02x",((uint8_t *)&txid)[i]); - printf(" <- txid.v%u ",vout); - for (i=0; i<33; i++) - printf("%02x",pubkey33[i]); - printf(" checkpubkey check %.8f v %.8f dest.(%s) kmdheight.%d height.%d\n",dstr(checktoshis),dstr(value),destaddr,kmdheight,height); - if ( value >= checktoshis || (seed == 0 && diff < .01) ) + if ( komodo_paxfind(&space,txid,vout) == 0 ) { - if ( komodo_paxfind(&space,txid,vout) == 0 ) - { - komodo_gateway_deposit(coinaddr,value,shortflag,base,fiatoshis,rmd160,txid,vout,kmdheight,height); - } else printf("duplicate deposit\n"); - } - } - else // short - { - for (i=0; i 0 && shortflag == ASSETCHAINS_SHORTFLAG ) + if ( (n= komodo_issued_opreturn(&shortflag,base,txids,vouts,opretbuf,opretlen,0)) > 0 ) { for (i=0; i= kmdheight ) - KOMODO_REALTIME = (uint32_t)time(NULL); + sp->KOMODO_REALTIME = (uint32_t)time(NULL); } free_json(infoobj); } @@ -570,3 +555,38 @@ void komodo_iteration(char *symbol) } } } +#else + +void komodo_gateway_iteration() +{ + static long lastpos[33]; + FILE *fp; int32_t baseid,refid; struct komodo_state *sp; char fname[512],*base,dest[16]; + if ( ASSETCHAINS_SYMBOL[0] == 0 ) + refid = 32; + else refid = komodo_baseid(ASSETCHAINS_SYMBOL); + if ( refid >= 0 ) + { + for (baseid=0; baseid<=32; baseid++) + { + if ( baseid != refid ) // use direct data for yourself + { + komodo_statefname(fname,""); + komodo_nameset(symbol,dest,source); + if ( (fp= fopen(fname,"rb")) != 0 ) + { + fseek(fp,lastpos,SEEK_SET); + if ( ftell(fp) > lastpos[baseid] ) + { + while ( komodo_parsestatefile(sp,fp,symbol,dest) >= 0 ) + ; + lastpos[baseid] = ftell(fp); + printf("%s lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]); + } + fclose(fp); + } + } + } + } +} +#endif + diff --git a/src/komodo_globals.h b/src/komodo_globals.h index f5eba4929..db4b55be4 100644 --- a/src/komodo_globals.h +++ b/src/komodo_globals.h @@ -20,19 +20,15 @@ char *komodo_issuemethod(char *method,char *params,uint16_t port); void komodo_init(int32_t height); void komodo_assetchain_pubkeys(char *jsonstr); int32_t komodo_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33); +int32_t komodo_isrealtime(int32_t *kmdheightp,char *target); pthread_mutex_t komodo_mutex; -//FILE *Minerfp; -//int8_t Minerids[KOMODO_MAXBLOCKS]; // 5 million blocks #define KOMODO_ELECTION_GAP ((ASSETCHAINS_SYMBOL[0] == 0) ? 2000 : 100) -int32_t KMDHEIGHT = 43000; - struct pax_transaction *PAX; int32_t NUM_PRICES; uint32_t *PVALS; struct knotaries_entry *Pubkeys; -//struct nutxo_entry *NUTXOS; int32_t Num_nutxos; struct notarized_checkpoint *NPOINTS; int32_t NUM_NPOINTS; struct komodo_state KOMODO_STATES[33]; @@ -43,13 +39,12 @@ int32_t IS_KOMODO_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED, std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES; uint8_t NOTARY_PUBKEY33[33]; -int32_t ASSETCHAINS_SHORTFLAG; char ASSETCHAINS_SYMBOL[16]; uint16_t ASSETCHAINS_PORT; uint32_t ASSETCHAIN_INIT; uint32_t ASSETCHAINS_MAGIC = 2387029918; uint64_t ASSETCHAINS_SUPPLY = 10; -uint32_t KOMODO_INITDONE,KOMODO_REALTIME; +uint32_t KOMODO_INITDONE; char KMDUSERPASS[1024]; uint16_t BITCOIND_PORT = 7771; uint64_t PENDING_KOMODO_TX; diff --git a/src/komodo_notary.h b/src/komodo_notary.h index 954c029a5..64ffb21fd 100644 --- a/src/komodo_notary.h +++ b/src/komodo_notary.h @@ -208,7 +208,7 @@ void komodo_notarized_update(struct komodo_state *sp,int32_t nHeight,int32_t not sp->NOTARIZED_DESTTXID = np->notarized_desttxid = notarized_desttxid; } -struct komodo_state *komodo_stateptr(char *symbol,char *dest); +//struct komodo_state *komodo_stateptr(char *symbol,char *dest); int32_t komodo_notarized_height(uint256 *hashp,uint256 *txidp) { char symbol[16],dest[16]; struct komodo_state *sp; diff --git a/src/komodo_structs.h b/src/komodo_structs.h index dd653fc37..a5e17e8ae 100644 --- a/src/komodo_structs.h +++ b/src/komodo_structs.h @@ -16,10 +16,42 @@ #include "uthash.h" #include "utlist.h" +#ifdef WIN32 +#define PACKED +#else +#define PACKED __attribute__((packed)) +#endif + #define GENESIS_NBITS 0x1f00ffff #define KOMODO_MINRATIFY 7 #define KOMODO_MAXBLOCKS 5000000 +#define KOMODO_EVENT_RATIFY 'P' +#define KOMODO_EVENT_NOTARIZED 'N' +#define KOMODO_EVENT_KMDHEIGHT 'K' +#define KOMODO_EVENT_REWIND 'B' +#define KOMODO_EVENT_PRICEFEED 'V' +#define KOMODO_EVENT_OPRETURN 'R' +#define KOMODO_OPRETURN_DEPOSIT 'D' +#define KOMODO_OPRETURN_ISSUED 'I' // assetchain +#define KOMODO_OPRETURN_WITHDRAW 'W' // assetchain +#define KOMODO_OPRETURN_REDEEMED 'X' + +struct komodo_event_notarized { uint256 blockhash,desttxid; int32_t notarizedheight; char dest[16]; }; +struct komodo_event_pubkeys { uint8_t num; uint8_t pubkeys[64][33]; }; +struct komodo_event_opreturn { uint256 txid; uint64_t value; uint16_t vout,oplen; uint8_t opret[]; }; +struct komodo_event_pricefeed { uint8_t num; uint32_t prices[35]; }; + +struct komodo_event +{ + struct komodo_event *related; + uint16_t len; + int32_t height; + uint8_t type,reorged; + char symbol[16]; + uint8_t space[]; +} PACKED; + struct pax_transaction { UT_hash_handle hh; @@ -38,6 +70,6 @@ struct notarized_checkpoint { uint256 notarized_hash,notarized_desttxid; int32_t struct komodo_state { uint256 NOTARIZED_HASH,NOTARIZED_DESTTXID; - int32_t CURRENT_HEIGHT,NOTARIZED_HEIGHT,rewinding; - // gateway state + int32_t SAVEDHEIGHT,CURRENT_HEIGHT,NOTARIZED_HEIGHT,rewinding; + struct komodo_event **Komodo_events; int32_t Komodo_numevents; }; diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 78d38141d..dc753a3e6 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1261,6 +1261,36 @@ void komodo_userpass(char *username,char *password,FILE *fp) free(rpcpassword); } +void komodo_statefname(char *fname,char *symbol) +{ + int32_t n,len; + sprintf(fname,"%s",GetDataDir(false).string().c_str()); + if ( (n= (int32_t)strlen(ASSETCHAINS_SYMBOL)) != 0 ) + { + len = (int32_t)strlen(fname); + if ( strcmp(ASSETCHAINS_SYMBOL,&fname[len - n]) == 0 ) + { + fname[len - n] = 0; + if ( symbol[0] != 0 ) + { + strcpy(&fname[len - n],symbol); +#ifdef WIN32 + strcat(fname,"\\"); +#else + strcat(fname,"//"); +#endif + } + } + else + { + printf("unexpected fname.(%s) vs %s\n",fname,ASSETCHAINS_SYMBOL); + return; + } + } + strcat(fname,(char *)"komodostate"); + printf("statename.(%s) %s\n",symbol,fname); +} + void komodo_configfile(char *symbol,uint16_t port) { static char myusername[512],mypassword[8192]; @@ -1327,7 +1357,7 @@ uint32_t komodo_assetmagic(char *symbol,uint64_t supply) return(calc_crc32(0,buf,len)); } -int32_t komodo_shortflag(char *symbol) +/*int32_t komodo_shortflag(char *symbol) { int32_t i,shortflag = 0; if ( symbol[0] == '-' ) @@ -1338,17 +1368,16 @@ int32_t komodo_shortflag(char *symbol) symbol[i] = 0; } return(shortflag); -} +}*/ uint16_t komodo_assetport(uint32_t magic,int32_t shortflag) { return(8000 + shortflag*7777 + (magic % 7777)); } -uint16_t komodo_port(char *symbol,uint64_t supply,uint32_t *magicp,int32_t *shortflagp) +uint16_t komodo_port(char *symbol,uint64_t supply,uint32_t *magicp) { *magicp = komodo_assetmagic(symbol,supply); - *shortflagp = komodo_shortflag(symbol); return(komodo_assetport(*magicp,*shortflagp)); } @@ -1381,8 +1410,7 @@ void komodo_args() if ( strlen(addn.c_str()) > 0 ) ASSETCHAINS_SEED = 1; strncpy(ASSETCHAINS_SYMBOL,name.c_str(),sizeof(ASSETCHAINS_SYMBOL)-1); - ASSETCHAINS_PORT = komodo_port(ASSETCHAINS_SYMBOL,ASSETCHAINS_SUPPLY,&ASSETCHAINS_MAGIC,&ASSETCHAINS_SHORTFLAG); - //fprintf(stderr,"after args: %c%s port.%u magic.%08x supply.%u\n",ASSETCHAINS_SHORTFLAG!=0?'-':'+',ASSETCHAINS_SYMBOL,ASSETCHAINS_PORT,ASSETCHAINS_MAGIC,(int32_t)ASSETCHAINS_SUPPLY); + ASSETCHAINS_PORT = komodo_port(ASSETCHAINS_SYMBOL,ASSETCHAINS_SUPPLY,&ASSETCHAINS_MAGIC); while ( (dirname= (char *)GetDataDir(false).string().c_str()) == 0 || dirname[0] == 0 ) { fprintf(stderr,"waiting for datadir\n"); @@ -1395,7 +1423,7 @@ void komodo_args() extern int COINBASE_MATURITY; komodo_configfile(ASSETCHAINS_SYMBOL,ASSETCHAINS_PORT + 1); //if ( komodo_baseid(ASSETCHAINS_SYMBOL) >= 0 ) - COINBASE_MATURITY = 1; + COINBASE_MATURITY = 1; } ASSETCHAINS_NOTARIES = GetArg("-ac_notaries",""); komodo_assetchain_pubkeys((char *)ASSETCHAINS_NOTARIES.c_str()); @@ -1419,21 +1447,30 @@ void komodo_args() //fprintf(stderr,"%s chain params initialized\n",ASSETCHAINS_SYMBOL); } -struct komodo_state *komodo_stateptr(char *symbol,char *dest) +void komodo_nameset(char *symbol,char *dest,char *source) { - int32_t baseid; struct komodo_state *sp; - if ( ASSETCHAINS_SYMBOL[0] == 0 ) + if ( source[0] == 0 ) { strcpy(symbol,"KMD"); strcpy(dest,"BTC"); - sp = &KOMODO_STATES[0]; } else { - strcpy(symbol,ASSETCHAINS_SYMBOL); + strcpy(symbol,source); strcpy(dest,"KMD"); + } +} + +struct komodo_state *komodo_stateptr(char *symbol,char *dest) +{ + int32_t baseid; struct komodo_state *sp; + komodo_nameset(symbol,dest,ASSETCHAINS_SYMBOL); + if ( ASSETCHAINS_SYMBOL[0] == 0 ) + sp = &KOMODO_STATES[0]; + else + { if ( (baseid= komodo_baseid(ASSETCHAINS_SYMBOL)) >= 0 ) - sp = &KOMODO_STATES[baseid]; + sp = &KOMODO_STATES[baseid+1]; else { fprintf(stderr,"komodo_stateupdate.(%s) not supported\n",ASSETCHAINS_SYMBOL); @@ -1442,3 +1479,25 @@ struct komodo_state *komodo_stateptr(char *symbol,char *dest) } return(sp); } + +struct komodo_state *komodo_stateptrget(char *base) +{ + int32_t baseid; + if ( base == 0 || base[0] == 0 || strcmp(base,"KMD") == 0 ) + return(KOMODO_STATES[0]); + else if ( (baseid= komodo_baseid(base)) >= 0 ) + return(&KOMODO_STATES[baseid+1]); + else return(0); +} + +int32_t komodo_isrealtime(int32_t *kmdheightp,char *target) +{ + char symbol[16],dest[16]; struct komodo_state *sp; + *kmdheightp = 0; + if ( (sp= komodo_stateptrget(target)) != 0 ) + { + *kmdheightp = sp->CURRENT_HEIGHT; + return(sp->KOMODO_REALTIME); + } + return(0); +} diff --git a/src/miner.cpp b/src/miner.cpp index 90fd460f6..42b2b87c9 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -100,7 +100,7 @@ void UpdateTime(CBlockHeader* pblock, const Consensus::Params& consensusParams, #define ASSETCHAINS_MINHEIGHT 100 #define ROUNDROBIN_DELAY 45 -extern int32_t ASSETCHAINS_SEED,IS_KOMODO_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAIN_INIT,KOMODO_INITDONE,KOMODO_ON_DEMAND,KOMODO_INITDONE,ASSETCHAINS_SHORTFLAG,KOMODO_REALTIME; +extern int32_t ASSETCHAINS_SEED,IS_KOMODO_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAIN_INIT,KOMODO_INITDONE,KOMODO_ON_DEMAND,KOMODO_INITDONE; extern char ASSETCHAINS_SYMBOL[16]; extern std::string NOTARY_PUBKEY; extern uint8_t NOTARY_PUBKEY33[33]; @@ -114,7 +114,7 @@ int32_t komodo_gateway_deposits(CMutableTransaction *txNew,int32_t shortflag,cha CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) { - uint64_t deposits; const CChainParams& chainparams = Params(); + uint64_t deposits; int32_t isrealtime,kmdheight; const CChainParams& chainparams = Params(); // Create new block unique_ptr pblocktemplate(new CBlockTemplate()); if(!pblocktemplate.get()) @@ -122,13 +122,14 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) CBlock *pblock = &pblocktemplate->block; // pointer for convenience if ( ASSETCHAINS_SYMBOL[0] != 0 && chainActive.Tip()->nHeight >= 100 ) { - fprintf(stderr,"start CreateNewBlock %s initdone.%d deposit %.8f mempool.%d RT.%u KOMODO_ON_DEMAND.%d\n",ASSETCHAINS_SYMBOL,KOMODO_INITDONE,(double)komodo_paxtotal()/COIN,(int32_t)mempool.GetTotalTxSize(),KOMODO_REALTIME,KOMODO_ON_DEMAND); - while ( KOMODO_ON_DEMAND == 0 )//mempool.GetTotalTxSize() <= 0 ) + isrealtime = komodo_isrealtime(&kmdheight,ASSETCHAINS_SYMBOL); + fprintf(stderr,"start CreateNewBlock %s initdone.%d deposit %.8f mempool.%d RT.%u KOMODO_ON_DEMAND.%d\n",ASSETCHAINS_SYMBOL,KOMODO_INITDONE,(double)komodo_paxtotal()/COIN,(int32_t)mempool.GetTotalTxSize(),isrealtime,KOMODO_ON_DEMAND); + while ( KOMODO_ON_DEMAND == 0 ) { deposits = komodo_paxtotal(); - if ( KOMODO_INITDONE == 0 || KOMODO_REALTIME == 0 ) + if ( KOMODO_INITDONE == 0 || komodo_isrealtime(&kmdheight,ASSETCHAINS_SYMBOL) == 0 ) { - //fprintf(stderr,"INITDONE.%d RT.%d deposits %.8f\n",KOMODO_INITDONE,KOMODO_REALTIME,(double)deposits/COIN); + //fprintf(stderr,"INITDONE.%d RT.%d deposits %.8f\n",KOMODO_INITDONE,isrealtime,(double)deposits/COIN); } else if ( deposits != 0 ) break; diff --git a/src/util.cpp b/src/util.cpp index a586a7516..4dfe13919 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -401,18 +401,14 @@ void PrintExceptionContinue(const std::exception* pex, const char* pszThread) } extern char ASSETCHAINS_SYMBOL[16]; -extern int32_t ASSETCHAINS_SHORTFLAG; boost::filesystem::path GetDefaultDataDir() { namespace fs = boost::filesystem; char symbol[16]; if ( ASSETCHAINS_SYMBOL[0] != 0 ) - { - if ( ASSETCHAINS_SHORTFLAG != 0 ) - sprintf(symbol,"-%s",ASSETCHAINS_SYMBOL); - else strcpy(symbol,ASSETCHAINS_SYMBOL); - } else symbol[0] = 0; + strcpy(symbol,ASSETCHAINS_SYMBOL); + else symbol[0] = 0; // Windows < Vista: C:\Documents and Settings\Username\Application Data\Zcash // Windows >= Vista: C:\Users\Username\AppData\Roaming\Zcash // Mac: ~/Library/Application Support/Zcash diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 1f2cb706b..8b1eab8a3 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -521,7 +521,6 @@ Value paxdeposit(const Array& params, bool fHelp) Value paxwithdraw(const Array& params, bool fHelp) { - extern int32_t KMDHEIGHT,KOMODO_REALTIME; CWalletTx wtx; std::string dest; int32_t kmdheight; uint64_t seed,komodoshis = 0; char destaddr[64]; uint8_t i,pubkey37[37]; bool fSubtractFeeFromAmount = false; if ( ASSETCHAINS_SYMBOL[0] == 0 ) return(0); @@ -529,14 +528,13 @@ Value paxwithdraw(const Array& params, bool fHelp) return 0; if (fHelp || params.size() != 2) throw runtime_error("paxwithdraw \"address\" fiatamount"); - if ( KOMODO_REALTIME == 0 ) + if ( komodo_isrealtime(&kmdheight,"KMD") == 0 ) return(0); LOCK2(cs_main, pwalletMain->cs_wallet); CBitcoinAddress address(params[0].get_str()); if (!address.IsValid()) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Bitcoin address"); int64_t fiatoshis = atof(params[1].get_str().c_str()) * COIN; - kmdheight = KMDHEIGHT; komodoshis = PAX_fiatdest(&seed,1,destaddr,pubkey37,(char *)params[0].get_str().c_str(),kmdheight,ASSETCHAINS_SYMBOL,fiatoshis); dest.append(destaddr); CBitcoinAddress destaddress(CRYPTO777_KMDADDR); From 35fc5e6674a94602bb0d5f14fb45f7ffca75d3ff Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 11:51:19 -0300 Subject: [PATCH 002/139] test --- src/bitcoind.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index 5cb5a92fc..8f0037c0d 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -59,6 +59,7 @@ void WaitForShutdown(boost::thread_group* threadGroup) extern int32_t IS_KOMODO_NOTARY,USE_EXTERNAL_PUBKEY,ASSETCHAIN_INIT; extern std::string NOTARY_PUBKEY; int32_t komodo_is_issuer(); +void komodo_passport_iteration(); bool AppInit(int argc, char* argv[]) { @@ -101,8 +102,8 @@ bool AppInit(int argc, char* argv[]) fprintf(stderr,"call komodo_args NOTARY_PUBKEY.(%s)\n",NOTARY_PUBKEY.c_str()); while ( ASSETCHAIN_INIT == 0 ) { - if ( komodo_is_issuer() != 0 ) - komodo_gateway_iteration(ASSETCHAINS_SYMBOL); + //if ( komodo_is_issuer() != 0 ) + komodo_passport_iteration(); sleep(1); } if (!boost::filesystem::is_directory(GetDataDir(false))) From e7a90cf93c645ca01b4806cb00cddc10c8d4e724 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 11:53:53 -0300 Subject: [PATCH 003/139] test --- src/komodo_structs.h | 3 ++- src/komodo_utils.h | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/komodo_structs.h b/src/komodo_structs.h index a5e17e8ae..eefcf09c2 100644 --- a/src/komodo_structs.h +++ b/src/komodo_structs.h @@ -70,6 +70,7 @@ struct notarized_checkpoint { uint256 notarized_hash,notarized_desttxid; int32_t struct komodo_state { uint256 NOTARIZED_HASH,NOTARIZED_DESTTXID; - int32_t SAVEDHEIGHT,CURRENT_HEIGHT,NOTARIZED_HEIGHT,rewinding; + int32_t SAVEDHEIGHT,CURRENT_HEIGHT,NOTARIZED_HEIGHT; + uint32_t KOMODO_REALTIME; struct komodo_event **Komodo_events; int32_t Komodo_numevents; }; diff --git a/src/komodo_utils.h b/src/komodo_utils.h index dc753a3e6..d4ee31f3b 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1370,9 +1370,9 @@ uint32_t komodo_assetmagic(char *symbol,uint64_t supply) return(shortflag); }*/ -uint16_t komodo_assetport(uint32_t magic,int32_t shortflag) +uint16_t komodo_assetport(uint32_t magic) { - return(8000 + shortflag*7777 + (magic % 7777)); + return(8000 + (magic % 7777)); } uint16_t komodo_port(char *symbol,uint64_t supply,uint32_t *magicp) @@ -1383,10 +1383,10 @@ uint16_t komodo_port(char *symbol,uint64_t supply,uint32_t *magicp) void komodo_ports(uint16_t ports[MAX_CURRENCIES]) { - int32_t i,shortflag; uint32_t magic; + int32_t i; uint32_t magic; for (i=0; i= 0 ) return(&KOMODO_STATES[baseid+1]); else return(0); From 76984d2ec5c4d071000cfc206c7ae2b689ad2fd1 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 11:56:33 -0300 Subject: [PATCH 004/139] test --- src/komodo_gateway.h | 6 +++--- src/komodo_utils.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 01702f303..cc1a5e3e6 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -295,7 +295,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int32_t opretlen,uint256 txid,uint16_t vout) { - uint8_t rmd160[20],addrtype,shortflag,pubkey33[33]; int32_t i,j,n,len,tokomodo,kmdheight; char base[4],coinaddr[64],destaddr[64]; struct pax_transaction space; uint256 txids[64]; uint16_t vouts[64]; double diff; uint64_t seed; int64_t fiatoshis,checktoshis; const char *typestr = "unknown"; + uint8_t rmd160[20],addrtype,pubkey33[33]; int32_t i,j,n,len,tokomodo,kmdheight; char base[4],coinaddr[64],destaddr[64]; struct pax_transaction space; uint256 txids[64]; uint16_t vouts[64]; double diff; uint64_t seed; int64_t fiatoshis,checktoshis; const char *typestr = "unknown"; tokomodo = (komodo_is_issuer() == 0); if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 ) { @@ -344,7 +344,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 { if ( tokomodo == 0 && opretbuf[0] == 'I' ) // assetchain coinbase { - if ( (n= komodo_issued_opreturn(&shortflag,base,txids,vouts,opretbuf,opretlen,0)) > 0 ) + if ( (n= komodo_issued_opreturn(base,txids,vouts,opretbuf,opretlen,0)) > 0 ) { for (i=0; i Date: Sat, 19 Nov 2016 11:58:24 -0300 Subject: [PATCH 005/139] test --- src/komodo_gateway.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index cc1a5e3e6..0dcfb7dd5 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -295,7 +295,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int32_t opretlen,uint256 txid,uint16_t vout) { - uint8_t rmd160[20],addrtype,pubkey33[33]; int32_t i,j,n,len,tokomodo,kmdheight; char base[4],coinaddr[64],destaddr[64]; struct pax_transaction space; uint256 txids[64]; uint16_t vouts[64]; double diff; uint64_t seed; int64_t fiatoshis,checktoshis; const char *typestr = "unknown"; + uint8_t rmd160[20],addrtype,shortflag,pubkey33[33]; int32_t i,j,n,len,tokomodo,kmdheight; char base[4],coinaddr[64],destaddr[64]; struct pax_transaction space; uint256 txids[64]; uint16_t vouts[64]; double diff; uint64_t seed; int64_t fiatoshis,checktoshis; const char *typestr = "unknown"; tokomodo = (komodo_is_issuer() == 0); if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 ) { @@ -568,10 +568,11 @@ void komodo_gateway_iteration() { for (baseid=0; baseid<=32; baseid++) { + base = (char *)CURRENCIES[baseid]; if ( baseid != refid ) // use direct data for yourself { - komodo_statefname(fname,""); - komodo_nameset(symbol,dest,source); + komodo_statefname(fname,(char *)""); + komodo_nameset(symbol,dest,base); if ( (fp= fopen(fname,"rb")) != 0 ) { fseek(fp,lastpos,SEEK_SET); From 2b983c8068eed67ddcb1c456cdb24e9bdece1cf1 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 12:00:09 -0300 Subject: [PATCH 006/139] test --- src/komodo_events.h | 4 ++-- src/komodo_gateway.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo_events.h b/src/komodo_events.h index e006803c1..774083f71 100644 --- a/src/komodo_events.h +++ b/src/komodo_events.h @@ -26,7 +26,7 @@ struct komodo_event *komodo_eventadd(struct komodo_state *sp,int32_t height,char strcpy(ep->symbol,symbol); if ( datalen != 0 ) memcpy(ep->space,data,datalen); - sp->Komodo_events = (struct komodo_event **)realloc(sp->Komodo_events,(1 + sp->Komodo_numevents) * sizeof(*Komodo_events)); + sp->Komodo_events = (struct komodo_event **)realloc(sp->Komodo_events,(1 + sp->Komodo_numevents) * sizeof(*sp->Komodo_events)); sp->Komodo_events[sp->Komodo_numevents++] = ep; return(ep); } @@ -149,7 +149,7 @@ void komodo_eventadd_kmdheight(struct komodo_state *sp,char *symbol,int32_t heig else { kmdheight = -kmdheight; - komodo_eventadd(so,height,symbol,KOMODO_EVENT_REWIND,(uint8_t *)&height,sizeof(height)); + komodo_eventadd(sp,height,symbol,KOMODO_EVENT_REWIND,(uint8_t *)&height,sizeof(height)); if ( sp != 0 ) komodo_event_rewind(sp,symbol,height); } diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 0dcfb7dd5..c83f87a3a 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -575,7 +575,7 @@ void komodo_gateway_iteration() komodo_nameset(symbol,dest,base); if ( (fp= fopen(fname,"rb")) != 0 ) { - fseek(fp,lastpos,SEEK_SET); + fseek(fp,lastpos[baseid],SEEK_SET); if ( ftell(fp) > lastpos[baseid] ) { while ( komodo_parsestatefile(sp,fp,symbol,dest) >= 0 ) From 878d396188329dc1bb5fe81a3e0ec79fada2a190 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 12:01:11 -0300 Subject: [PATCH 007/139] test --- src/komodo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo.h b/src/komodo.h index 18d8a5a0d..ad253e032 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -408,7 +408,7 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) uint64_t signedmask,voutmask; char symbol[16],dest[16]; struct komodo_state *sp; uint8_t scriptbuf[4096],pubkeys[64][33],rmd160[20],scriptPubKey[35]; uint256 kmdtxid,zero,btctxid,txhash; int32_t i,j,k,numnotaries,scriptlen,isratification,nid,numvalid,specialtx,notarizedheight,notaryid,len,numvouts,numvins,height,txn_count; - memset(zero.bytes,0,sizeof(zero)); + memset(&zero,0,sizeof(zero)); komodo_init(pindex->nHeight); if ( (sp= komodo_stateptr(symbol,dest)) == 0 ) return; From ae204823639599370e3ad7de787672f9c6c1557a Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 12:03:01 -0300 Subject: [PATCH 008/139] test --- src/miner.cpp | 1 + src/wallet/rpcwallet.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/miner.cpp b/src/miner.cpp index 42b2b87c9..04c31633d 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -111,6 +111,7 @@ int32_t komodo_pax_opreturn(uint8_t *opret,int32_t maxsize); uint64_t komodo_paxtotal(); int32_t komodo_is_issuer(); int32_t komodo_gateway_deposits(CMutableTransaction *txNew,int32_t shortflag,char *symbol,int32_t tokomodo); +int32_t komodo_isrealtime(int32_t *kmdheightp,char *target); CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) { diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 8b1eab8a3..6b203af30 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -481,6 +481,7 @@ int32_t komodo_opreturnscript(uint8_t *script,uint8_t type,uint8_t *opret,int32_ extern char ASSETCHAINS_SYMBOL[16]; int32_t komodo_is_issuer(); int32_t iguana_rwnum(int32_t rwflag,uint8_t *serialized,int32_t len,void *endianedp); +int32_t komodo_isrealtime(int32_t *kmdheightp,char *target); Value paxdeposit(const Array& params, bool fHelp) { From 6c4ad6931754d7a8514ebd4e1bf507e1caf31fb1 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 12:04:34 -0300 Subject: [PATCH 009/139] test --- src/wallet/rpcwallet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 6b203af30..c0ae4f319 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -529,7 +529,7 @@ Value paxwithdraw(const Array& params, bool fHelp) return 0; if (fHelp || params.size() != 2) throw runtime_error("paxwithdraw \"address\" fiatamount"); - if ( komodo_isrealtime(&kmdheight,"KMD") == 0 ) + if ( komodo_isrealtime(&kmdheight,(char *)"KMD") == 0 ) return(0); LOCK2(cs_main, pwalletMain->cs_wallet); CBitcoinAddress address(params[0].get_str()); From 30d79208cc45d97844620b289487c134717ab655 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 12:06:03 -0300 Subject: [PATCH 010/139] test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index c83f87a3a..6fbf479b9 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -557,7 +557,7 @@ void komodo_iteration(char *symbol) } #else -void komodo_gateway_iteration() +void komodo_passport_iteration() { static long lastpos[33]; FILE *fp; int32_t baseid,refid; struct komodo_state *sp; char fname[512],*base,symbol[16],dest[16]; From 68503edfd9f51c222ac82574f1d5197581e43135 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 12:12:43 -0300 Subject: [PATCH 011/139] test --- src/komodo_utils.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 325fdc9d8..3327d3999 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1272,14 +1272,7 @@ void komodo_statefname(char *fname,char *symbol) { fname[len - n] = 0; if ( symbol[0] != 0 ) - { strcpy(&fname[len - n],symbol); -#ifdef WIN32 - strcat(fname,"\\"); -#else - strcat(fname,"//"); -#endif - } } else { From 214fa084f035b89e37a2e8a04aa9aa5066258e5a Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 12:17:06 -0300 Subject: [PATCH 012/139] test --- src/bitcoind.cpp | 2 +- src/komodo_utils.h | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index 8f0037c0d..2e753c812 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -103,7 +103,7 @@ bool AppInit(int argc, char* argv[]) while ( ASSETCHAIN_INIT == 0 ) { //if ( komodo_is_issuer() != 0 ) - komodo_passport_iteration(); + // komodo_passport_iteration(); sleep(1); } if (!boost::filesystem::is_directory(GetDataDir(false))) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 3327d3999..325fdc9d8 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1272,7 +1272,14 @@ void komodo_statefname(char *fname,char *symbol) { fname[len - n] = 0; if ( symbol[0] != 0 ) + { strcpy(&fname[len - n],symbol); +#ifdef WIN32 + strcat(fname,"\\"); +#else + strcat(fname,"//"); +#endif + } } else { From de2a9ca648473778cec74a8cef906927a458e855 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 12:21:33 -0300 Subject: [PATCH 013/139] test --- src/komodo_utils.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 325fdc9d8..2ae912776 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1274,6 +1274,7 @@ void komodo_statefname(char *fname,char *symbol) if ( symbol[0] != 0 ) { strcpy(&fname[len - n],symbol); + printf("statefname.(%s)\n",fname); #ifdef WIN32 strcat(fname,"\\"); #else From faa6ce59ba99b99b6b01607eab3a79d9d8f1abdc Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 12:25:25 -0300 Subject: [PATCH 014/139] test --- src/komodo_utils.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 2ae912776..cc22feb84 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1274,11 +1274,11 @@ void komodo_statefname(char *fname,char *symbol) if ( symbol[0] != 0 ) { strcpy(&fname[len - n],symbol); - printf("statefname.(%s)\n",fname); + //printf("statefname.(%s)\n",fname); #ifdef WIN32 strcat(fname,"\\"); #else - strcat(fname,"//"); + strcat(fname,"/"); #endif } } @@ -1289,7 +1289,7 @@ void komodo_statefname(char *fname,char *symbol) } } strcat(fname,(char *)"komodostate"); - printf("statename.(%s) %s\n",symbol,fname); + //printf("statename.(%s) %s\n",symbol,fname); } void komodo_configfile(char *symbol,uint16_t port) From 1ebb14e7407874dfaa15ad1a071879c6050e3baa Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 12:45:28 -0300 Subject: [PATCH 015/139] test --- src/komodo.h | 18 +++++++++--------- src/komodo_events.h | 12 ------------ src/komodo_notary.h | 35 ++--------------------------------- 3 files changed, 11 insertions(+), 54 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index ad253e032..990438a9b 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -87,7 +87,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char else { printf("updated %d pubkeys at ht.%d\n",num,ht); - if ( matched != 0 ) + if ( matched != 0 ) // private state -> global Pubkeys komodo_eventadd_pubkeys(sp,symbol,ht,num,pubkeys); } } else printf("illegal num.%d\n",num); @@ -100,11 +100,11 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char errs++; if ( fread(¬arized_desttxid,1,sizeof(notarized_desttxid),fp) != sizeof(notarized_desttxid) ) errs++; - printf("load NOTARIZED %d %s\n",notarized_height,notarized_hash.ToString().c_str()); - if ( matched != 0 ) - komodo_eventadd_notarized(sp,symbol,ht,dest,notarized_hash,notarized_desttxid,notarized_height); + printf("load %s NOTARIZED %d %s\n",ASSETCHAINS_SYMBOL,notarized_height,notarized_hash.ToString().c_str()); + //if ( matched != 0 ) global independent states -> inside *sp + komodo_eventadd_notarized(sp,symbol,ht,dest,notarized_hash,notarized_desttxid,notarized_height); } - else if ( func == 'U' ) + else if ( func == 'U' ) // deprecated { uint8_t n,nid; uint256 hash; uint64_t mask; n = fgetc(fp); @@ -122,7 +122,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char int32_t kheight; if ( fread(&kheight,1,sizeof(kheight),fp) != sizeof(kheight) ) errs++; - if ( matched != 0 ) + //if ( matched != 0 ) global independent states -> inside *sp komodo_eventadd_kmdheight(sp,symbol,ht,kheight); } else if ( func == 'R' ) @@ -140,7 +140,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char { if ( fread(opret,1,olen,fp) != olen ) errs++; - if ( matched != 0 ) + //if ( matched != 0 ) global shared state -> global PAX komodo_eventadd_opreturn(sp,symbol,ht,txid,ovalue,v,opret,olen); } else printf("illegal olen.%u\n",olen); } @@ -154,7 +154,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char numpvals = fgetc(fp); if ( numpvals*sizeof(uint32_t) <= sizeof(pvals) && fread(pvals,sizeof(uint32_t),numpvals,fp) == numpvals ) { - if ( matched != 0 ) + //if ( matched != 0 ) global shared state -> global PVALS komodo_eventadd_pricefeed(sp,symbol,ht,pvals,numpvals); //printf("load pvals ht.%d numpvals.%d\n",ht,numpvals); } else printf("error loading pvals[%d]\n",numpvals); @@ -340,7 +340,7 @@ int32_t komodo_voutupdate(int32_t *isratificationp,int32_t notaryid,uint8_t *scr len += iguana_rwbignum(0,&scriptbuf[len],32,(uint8_t *)&desttxid); if ( *notarizedheightp > sp->NOTARIZED_HEIGHT && *notarizedheightp < height ) { - printf("ht.%d NOTARIZED.%d %s.%s %sTXID.%s (%s)\n",height,*notarizedheightp,ASSETCHAINS_SYMBOL[0]==0?"KMD":ASSETCHAINS_SYMBOL,kmdtxid.ToString().c_str(),ASSETCHAINS_SYMBOL[0]==0?"BTC":"KMD",desttxid.ToString().c_str(),(char *)&scriptbuf[len]); + printf("%s ht.%d NOTARIZED.%d %s.%s %sTXID.%s (%s)\n",ASSETCHAINS_SYMBOL,height,*notarizedheightp,ASSETCHAINS_SYMBOL[0]==0?"KMD":ASSETCHAINS_SYMBOL,kmdtxid.ToString().c_str(),ASSETCHAINS_SYMBOL[0]==0?"BTC":"KMD",desttxid.ToString().c_str(),(char *)&scriptbuf[len]); sp->NOTARIZED_HEIGHT = *notarizedheightp; sp->NOTARIZED_HASH = kmdtxid; sp->NOTARIZED_DESTTXID = desttxid; diff --git a/src/komodo_events.h b/src/komodo_events.h index 774083f71..296824b6e 100644 --- a/src/komodo_events.h +++ b/src/komodo_events.h @@ -56,18 +56,6 @@ void komodo_eventadd_pubkeys(struct komodo_state *sp,char *symbol,int32_t height komodo_notarysinit(height,pubkeys,num); } -/*void komodo_eventadd_utxo(struct komodo_state *sp,char *symbol,int32_t height,uint8_t notaryid,uint256 txid,uint64_t voutmask,uint8_t numvouts) -{ - struct komodo_event_utxo U; - memset(&U,0,sizeof(U)); - U.txid = txid; - U.voutmask = voutmask; - U.numvouts = numvouts; - komodo_eventadd(height,symbol,KOMODO_EVENT_UTXO,(uint8_t *)&U,sizeof(U)); - if ( sp != 0 ) - komodo_nutxoadd(height,notaryid,txid,voutmask,numvouts); -}*/ - void komodo_eventadd_pricefeed(struct komodo_state *sp,char *symbol,int32_t height,uint32_t *prices,uint8_t num) { struct komodo_event_pricefeed F; diff --git a/src/komodo_notary.h b/src/komodo_notary.h index 64ffb21fd..b58819f30 100644 --- a/src/komodo_notary.h +++ b/src/komodo_notary.h @@ -52,46 +52,15 @@ const char *Notaries_genesis[][2] = { "titomane_SH", "035f49d7a308dd9a209e894321f010d21b7793461b0c89d6d9231a3fe5f68d9960" }, }; -/*void komodo_nutxoadd(int32_t height,int32_t notaryid,uint256 txhash,uint64_t voutmask,int32_t numvouts) -{ - struct nutxo_entry *np; - if ( numvouts > 1 && notaryid < 64 ) - { - pthread_mutex_lock(&komodo_mutex); - np = (struct nutxo_entry *)calloc(1,sizeof(*np)); - np->height = height; - np->txhash = txhash; - np->voutmask = voutmask; - np->notaryid = notaryid; - HASH_ADD_KEYPTR(hh,NUTXOS,&np->txhash,sizeof(np->txhash),np); - //printf("Add NUTXO[%d] <- %s notaryid.%d t%u %s %llx\n",Num_nutxos,Notaries[notaryid][0],notaryid,komodo_txtime(txhash),txhash.ToString().c_str(),(long long)voutmask); - Num_nutxos++; - pthread_mutex_unlock(&komodo_mutex); - } -} - -int32_t komodo_nutxofind(int32_t height,uint256 txhash,int32_t vout) -{ - struct nutxo_entry *np; - pthread_mutex_lock(&komodo_mutex); - HASH_FIND(hh,NUTXOS,&txhash,sizeof(txhash),np); - pthread_mutex_unlock(&komodo_mutex); - if ( np != 0 && ((1LL << vout) & np->voutmask) != 0 ) - return(np->notaryid); - return(-1); -}*/ - int32_t komodo_ratify_threshold(int32_t height,uint64_t signedmask) { int32_t htind,numnotaries,i,wt = 0; - if ( ASSETCHAINS_SYMBOL[0] != 0 ) - return(2); htind = height / KOMODO_ELECTION_GAP; - numnotaries = Pubkeys[htind].numnotaries; + numnotaries = sp->Pubkeys[htind].numnotaries; for (i=0; i (numnotaries >> 1) || (wt > 7 && (signedmask & 3) != 0) ) + if ( wt > (numnotaries >> 1) || (wt > 7 && (signedmask & 1) != 0) ) return(1); else return(0); } From 0b4c2bd1d372de253011f18cea8aabef440f9603 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 12:47:11 -0300 Subject: [PATCH 016/139] test --- src/komodo_notary.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_notary.h b/src/komodo_notary.h index b58819f30..b362aa017 100644 --- a/src/komodo_notary.h +++ b/src/komodo_notary.h @@ -56,7 +56,7 @@ int32_t komodo_ratify_threshold(int32_t height,uint64_t signedmask) { int32_t htind,numnotaries,i,wt = 0; htind = height / KOMODO_ELECTION_GAP; - numnotaries = sp->Pubkeys[htind].numnotaries; + numnotaries = Pubkeys[htind].numnotaries; for (i=0; i Date: Sat, 19 Nov 2016 12:56:34 -0300 Subject: [PATCH 017/139] test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 6fbf479b9..cdf398631 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -584,7 +584,7 @@ void komodo_passport_iteration() printf("%s lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]); } fclose(fp); - } + } else printf("fname.(%s) cant open\n",fname); } } } From aa6b61528d5647cfb6d15c48fa0983cff71df991 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 12:59:46 -0300 Subject: [PATCH 018/139] test --- src/bitcoind.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index 2e753c812..590d91463 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -106,6 +106,7 @@ bool AppInit(int argc, char* argv[]) // komodo_passport_iteration(); sleep(1); } + printf("initialized %s\n",ASSETCHAINS_SYMBOL); if (!boost::filesystem::is_directory(GetDataDir(false))) { fprintf(stderr, "Error: Specified data directory \"%s\" does not exist.\n", mapArgs["-datadir"].c_str()); @@ -140,7 +141,6 @@ bool AppInit(int argc, char* argv[]) fDaemon = GetBoolArg("-daemon", false); if (fDaemon) { - extern char ASSETCHAINS_SYMBOL[16]; fprintf(stdout, "Komodo %s server starting\n",ASSETCHAINS_SYMBOL); // Daemonize From 61b59007d757925a966ce1042ccb33970459722b Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 13:07:32 -0300 Subject: [PATCH 019/139] test --- src/komodo_gateway.h | 3 ++- src/komodo_globals.h | 2 +- src/komodo_notary.h | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index cdf398631..b5b0e3dbd 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -561,6 +561,7 @@ void komodo_passport_iteration() { static long lastpos[33]; FILE *fp; int32_t baseid,refid; struct komodo_state *sp; char fname[512],*base,symbol[16],dest[16]; + printf("PASSPORT\n"); if ( ASSETCHAINS_SYMBOL[0] == 0 ) refid = 32; else refid = komodo_baseid(ASSETCHAINS_SYMBOL); @@ -587,7 +588,7 @@ void komodo_passport_iteration() } else printf("fname.(%s) cant open\n",fname); } } - } + } else printf("passport disabled for refid.%d (%s)\n",refid,ASSETCHAINS_SYMBOL); } #endif diff --git a/src/komodo_globals.h b/src/komodo_globals.h index db4b55be4..b63b59c07 100644 --- a/src/komodo_globals.h +++ b/src/komodo_globals.h @@ -35,7 +35,7 @@ struct komodo_state KOMODO_STATES[33]; int COINBASE_MATURITY = 100; -int32_t IS_KOMODO_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND; +int32_t IS_KOMODO_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES; std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES; uint8_t NOTARY_PUBKEY33[33]; diff --git a/src/komodo_notary.h b/src/komodo_notary.h index b362aa017..f8ae0fe39 100644 --- a/src/komodo_notary.h +++ b/src/komodo_notary.h @@ -268,6 +268,7 @@ void komodo_assetchain_pubkeys(char *jsonstr) { komodo_init(-1); komodo_notarysinit(0,pubkeys,n); + KOMODO_EXTERNAL_NOTARIES = 1; //printf("initialize pubkeys[%d]\n",n); } else fprintf(stderr,"komodo_assetchain_pubkeys i.%d vs n.%d\n",i,n); } else fprintf(stderr,"assetchain pubkeys n.%d\n",n); From e3e2dcdb823206d81dd8303c7044a5a07754604c Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 13:11:05 -0300 Subject: [PATCH 020/139] test --- src/komodo_gateway.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index b5b0e3dbd..3282220ee 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -561,17 +561,18 @@ void komodo_passport_iteration() { static long lastpos[33]; FILE *fp; int32_t baseid,refid; struct komodo_state *sp; char fname[512],*base,symbol[16],dest[16]; - printf("PASSPORT\n"); if ( ASSETCHAINS_SYMBOL[0] == 0 ) refid = 32; else refid = komodo_baseid(ASSETCHAINS_SYMBOL); + printf("PASSPORT %s refid.%d\n",ASSETCHAINS_SYMBOL,refid); if ( refid >= 0 ) { for (baseid=0; baseid<=32; baseid++) { - base = (char *)CURRENCIES[baseid]; if ( baseid != refid ) // use direct data for yourself { + base = (char *)CURRENCIES[baseid]; + fprintf(stderr,"%s ",base); komodo_statefname(fname,(char *)""); komodo_nameset(symbol,dest,base); if ( (fp= fopen(fname,"rb")) != 0 ) From f25dc96a15747d83cba2f7206f223773c55c381a Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 13:13:14 -0300 Subject: [PATCH 021/139] test --- src/komodo_gateway.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 3282220ee..1a5675345 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -572,14 +572,13 @@ void komodo_passport_iteration() if ( baseid != refid ) // use direct data for yourself { base = (char *)CURRENCIES[baseid]; - fprintf(stderr,"%s ",base); komodo_statefname(fname,(char *)""); komodo_nameset(symbol,dest,base); if ( (fp= fopen(fname,"rb")) != 0 ) { - fseek(fp,lastpos[baseid],SEEK_SET); if ( ftell(fp) > lastpos[baseid] ) { + fseek(fp,lastpos[baseid],SEEK_SET); while ( komodo_parsestatefile(sp,fp,symbol,dest) >= 0 ) ; lastpos[baseid] = ftell(fp); From 5fd9310d6ae5f7315c41bad7114b9795d8d00fe9 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 13:15:25 -0300 Subject: [PATCH 022/139] test --- src/komodo_gateway.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 1a5675345..571c15e62 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -576,6 +576,7 @@ void komodo_passport_iteration() komodo_nameset(symbol,dest,base); if ( (fp= fopen(fname,"rb")) != 0 ) { + fseek(fp,0,SEEK_END); if ( ftell(fp) > lastpos[baseid] ) { fseek(fp,lastpos[baseid],SEEK_SET); @@ -583,7 +584,7 @@ void komodo_passport_iteration() ; lastpos[baseid] = ftell(fp); printf("%s lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]); - } + } else fprintf(stderr,"%s.%ld ",CURRENCIES[baseid],ftell(fp)); fclose(fp); } else printf("fname.(%s) cant open\n",fname); } From a5e3ab13bee622c97559face903e808bfdb46f14 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 13:25:36 -0300 Subject: [PATCH 023/139] test --- src/komodo_gateway.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 571c15e62..573e708d2 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -572,9 +572,9 @@ void komodo_passport_iteration() if ( baseid != refid ) // use direct data for yourself { base = (char *)CURRENCIES[baseid]; - komodo_statefname(fname,(char *)""); + komodo_statefname(fname,baseid<32?base:""); komodo_nameset(symbol,dest,base); - if ( (fp= fopen(fname,"rb")) != 0 ) + if ( (fp= fopen(fname,"rb")) != 0 && (sp= komodo_stateptrget(symbol)) != 0 ) { fseek(fp,0,SEEK_END); if ( ftell(fp) > lastpos[baseid] ) From 1bcfe35d6925081adc1d8400ac86a35aebb0dbe1 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 13:26:22 -0300 Subject: [PATCH 024/139] test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 573e708d2..f8bd0aa55 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -572,7 +572,7 @@ void komodo_passport_iteration() if ( baseid != refid ) // use direct data for yourself { base = (char *)CURRENCIES[baseid]; - komodo_statefname(fname,baseid<32?base:""); + komodo_statefname(fname,baseid<32?base:(char *)""); komodo_nameset(symbol,dest,base); if ( (fp= fopen(fname,"rb")) != 0 && (sp= komodo_stateptrget(symbol)) != 0 ) { From 15724d022157ad65736e1dc1e72b7ae66736eafe Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 13:34:10 -0300 Subject: [PATCH 025/139] test --- src/komodo.h | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index 990438a9b..7dd14d1ed 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -86,8 +86,8 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char errs++; else { - printf("updated %d pubkeys at ht.%d\n",num,ht); - if ( matched != 0 ) // private state -> global Pubkeys + printf("updated %d pubkeys at %s ht.%d\n",num,symbol,ht); + if ( (KOMODO_EXTERNAL_NOTARIES != 0 && matched != 0) || (strcmp(symbol,"KMD") == 0 && KOMODO_EXTERNAL_NOTARIES == 0) ) komodo_eventadd_pubkeys(sp,symbol,ht,num,pubkeys); } } else printf("illegal num.%d\n",num); @@ -100,7 +100,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char errs++; if ( fread(¬arized_desttxid,1,sizeof(notarized_desttxid),fp) != sizeof(notarized_desttxid) ) errs++; - printf("load %s NOTARIZED %d %s\n",ASSETCHAINS_SYMBOL,notarized_height,notarized_hash.ToString().c_str()); + printf("%s load[%s] NOTARIZED %d %s\n",ASSETCHAINS_SYMBOL,symbol,notarized_height,notarized_hash.ToString().c_str()); //if ( matched != 0 ) global independent states -> inside *sp komodo_eventadd_notarized(sp,symbol,ht,dest,notarized_hash,notarized_desttxid,notarized_height); } @@ -123,7 +123,8 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char if ( fread(&kheight,1,sizeof(kheight),fp) != sizeof(kheight) ) errs++; //if ( matched != 0 ) global independent states -> inside *sp - komodo_eventadd_kmdheight(sp,symbol,ht,kheight); + printf("%s load[%s] ht.%d\n",ASSETCHAINS_SYMBOL,symbol,kheight); + komodo_eventadd_kmdheight(sp,symbol,ht,kheight); } else if ( func == 'R' ) { @@ -141,7 +142,8 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char if ( fread(opret,1,olen,fp) != olen ) errs++; //if ( matched != 0 ) global shared state -> global PAX - komodo_eventadd_opreturn(sp,symbol,ht,txid,ovalue,v,opret,olen); + printf("%s load[%s] opret[%c] %.8f\n",ASSETCHAINS_SYMBOL,symbol,opret[0],(double)ovalue/COIN); + komodo_eventadd_opreturn(sp,symbol,ht,txid,ovalue,v,opret,olen); } else printf("illegal olen.%u\n",olen); } else if ( func == 'D' ) @@ -155,7 +157,8 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char if ( numpvals*sizeof(uint32_t) <= sizeof(pvals) && fread(pvals,sizeof(uint32_t),numpvals,fp) == numpvals ) { //if ( matched != 0 ) global shared state -> global PVALS - komodo_eventadd_pricefeed(sp,symbol,ht,pvals,numpvals); + printf("%s load[%s] prices %d\n",ASSETCHAINS_SYMBOL,symbol,ht); + komodo_eventadd_pricefeed(sp,symbol,ht,pvals,numpvals); //printf("load pvals ht.%d numpvals.%d\n",ht,numpvals); } else printf("error loading pvals[%d]\n",numpvals); } From e155dbe9c3c67c67fe260d4a27f9878b0ce75824 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 13:47:18 -0300 Subject: [PATCH 026/139] test --- src/bitcoin-cli.cpp | 2 +- src/komodo.h | 52 ++++++++++++++++++++++++++++++++------------ src/komodo_events.h | 14 ++++++++---- src/komodo_gateway.h | 4 ++-- src/komodo_globals.h | 2 +- src/komodo_notary.h | 2 +- src/komodo_pax.h | 2 +- src/komodo_structs.h | 2 +- 8 files changed, 55 insertions(+), 25 deletions(-) diff --git a/src/bitcoin-cli.cpp b/src/bitcoin-cli.cpp index 53204a8c4..a03dca4ad 100644 --- a/src/bitcoin-cli.cpp +++ b/src/bitcoin-cli.cpp @@ -66,7 +66,7 @@ public: #include "cJSON.c" #include "komodo_notary.h" -void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotaries,uint8_t notaryid,uint256 txhash,uint64_t voutmask,uint8_t numvouts,uint32_t *pvals,uint8_t numpvals,int32_t KMDheight,uint64_t opretvalue,uint8_t *opretbuf,uint16_t opretlen,uint16_t vout) +void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotaries,uint8_t notaryid,uint256 txhash,uint64_t voutmask,uint8_t numvouts,uint32_t *pvals,uint8_t numpvals,int32_t KMDheight,uint32_t KMDtimestamp,uint64_t opretvalue,uint8_t *opretbuf,uint16_t opretlen,uint16_t vout) { } diff --git a/src/komodo.h b/src/komodo.h index 7dd14d1ed..ffae64609 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -124,7 +124,18 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char errs++; //if ( matched != 0 ) global independent states -> inside *sp printf("%s load[%s] ht.%d\n",ASSETCHAINS_SYMBOL,symbol,kheight); - komodo_eventadd_kmdheight(sp,symbol,ht,kheight); + komodo_eventadd_kmdheight(sp,symbol,ht,kheight,0); + } + else if ( func == 'T' ) + { + int32_t kheight,ktimestamp; + if ( fread(&kheight,1,sizeof(kheight),fp) != sizeof(kheight) ) + errs++; + if ( fread(&ktimestamp,1,sizeof(ktimestamp),fp) != sizeof(ktimestamp) ) + errs++; + //if ( matched != 0 ) global independent states -> inside *sp + printf("%s load[%s] ht.%d t.%u\n",ASSETCHAINS_SYMBOL,symbol,kheight,ktimestamp); + komodo_eventadd_kmdheight(sp,symbol,ht,kheight,ktimestamp); } else if ( func == 'R' ) { @@ -167,7 +178,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char } else return(-1); } -void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotaries,uint8_t notaryid,uint256 txhash,uint64_t voutmask,uint8_t numvouts,uint32_t *pvals,uint8_t numpvals,int32_t KMDheight,uint64_t opretvalue,uint8_t *opretbuf,uint16_t opretlen,uint16_t vout) +void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotaries,uint8_t notaryid,uint256 txhash,uint64_t voutmask,uint8_t numvouts,uint32_t *pvals,uint8_t numpvals,int32_t KMDheight,uint32_t KMDtimestamp,uint64_t opretvalue,uint8_t *opretbuf,uint16_t opretlen,uint16_t vout) { static FILE *fp; static int32_t errs; struct komodo_state *sp; char fname[512],symbol[16],dest[16]; int32_t ht,func; uint8_t num,pubkeys[64][33]; @@ -194,12 +205,25 @@ void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotar //printf("fpos.%ld ",ftell(fp)); if ( KMDheight != 0 ) { - fputc('K',fp); - if ( fwrite(&height,1,sizeof(height),fp) != sizeof(height) ) - errs++; - if ( fwrite(&KMDheight,1,sizeof(KMDheight),fp) != sizeof(KMDheight) ) - errs++; - komodo_eventadd_kmdheight(sp,symbol,height,KMDheight); + if ( KMDtimestamp != 0 ) + { + fputc('T',fp); + if ( fwrite(&height,1,sizeof(height),fp) != sizeof(height) ) + errs++; + if ( fwrite(&KMDheight,1,sizeof(KMDheight),fp) != sizeof(KMDheight) ) + errs++; + if ( fwrite(&KMDtimestamp,1,sizeof(KMDtimestamp),fp) != sizeof(KMDtimestamp) ) + errs++; + } + else + { + fputc('K',fp); + if ( fwrite(&height,1,sizeof(height),fp) != sizeof(height) ) + errs++; + if ( fwrite(&KMDheight,1,sizeof(KMDheight),fp) != sizeof(KMDheight) ) + errs++; + } + komodo_eventadd_kmdheight(sp,symbol,height,KMDheight,KMDtimestamp); } else if ( opretbuf != 0 && opretlen > 0 ) { @@ -347,7 +371,7 @@ int32_t komodo_voutupdate(int32_t *isratificationp,int32_t notaryid,uint8_t *scr sp->NOTARIZED_HEIGHT = *notarizedheightp; sp->NOTARIZED_HASH = kmdtxid; sp->NOTARIZED_DESTTXID = desttxid; - komodo_stateupdate(height,0,0,0,zero,0,0,0,0,0,0,0,0,0); + komodo_stateupdate(height,0,0,0,zero,0,0,0,0,0,0,0,0,0,0); // extract X opreturns here } else printf("reject ht.%d NOTARIZED.%d %s.%s DESTTXID.%s (%s)\n",height,*notarizedheightp,ASSETCHAINS_SYMBOL[0]==0?"KMD":ASSETCHAINS_SYMBOL,kmdtxid.ToString().c_str(),desttxid.ToString().c_str(),(char *)&scriptbuf[len]); } @@ -370,7 +394,7 @@ int32_t komodo_voutupdate(int32_t *isratificationp,int32_t notaryid,uint8_t *scr } } if ( *isratificationp == 0 ) - komodo_stateupdate(height,0,0,0,txhash,0,0,0,0,0,value,&scriptbuf[len],opretlen,j); + komodo_stateupdate(height,0,0,0,txhash,0,0,0,0,0,0,value,&scriptbuf[len],opretlen,j); } } return(notaryid); @@ -423,7 +447,7 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) { printf("hwmheight.%d vs pindex->nHeight.%d reorg.%d\n",hwmheight,pindex->nHeight,hwmheight-pindex->nHeight); komodo_event_rewind(sp,symbol,pindex->nHeight); - komodo_stateupdate(pindex->nHeight,0,0,0,zero,0,0,0,0,-pindex->nHeight,0,0,0,0); + komodo_stateupdate(pindex->nHeight,0,0,0,zero,0,0,0,0,-pindex->nHeight,pindex->nTime,0,0,0,0); } komodo_currentheight_set(chainActive.Tip()->nHeight); /*if ( komodo_is_issuer() != 0 ) @@ -506,14 +530,14 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) if ( ((signedmask & 1) != 0 && numvalid >= KOMODO_MINRATIFY) || bitweight(signedmask) > (numnotaries>>1) ) { memset(&txhash,0,sizeof(txhash)); - komodo_stateupdate(height,pubkeys,numvalid,0,txhash,0,0,0,0,0,0,0,0,0); + komodo_stateupdate(height,pubkeys,numvalid,0,txhash,0,0,0,0,0,0,0,0,0,0); printf("RATIFIED! >>>>>>>>>> new notaries.%d newheight.%d from height.%d\n",numvalid,(((height+KOMODO_ELECTION_GAP/2)/KOMODO_ELECTION_GAP)+1)*KOMODO_ELECTION_GAP,height); } else printf("signedmask.%llx numvalid.%d wt.%d numnotaries.%d\n",(long long)signedmask,numvalid,bitweight(signedmask),numnotaries); } } } - if ( pindex->nHeight == hwmheight && (hwmheight % 100) == 0 ) - komodo_stateupdate(height,0,0,0,zero,0,0,0,0,height,0,0,0,0); + if ( pindex->nHeight == hwmheight ) + komodo_stateupdate(height,0,0,0,zero,0,0,0,0,height,pindex->nHeight,0,0,0,0); } else printf("komodo_connectblock: unexpected null pindex\n"); KOMODO_INITDONE = (uint32_t)time(NULL); } diff --git a/src/komodo_events.h b/src/komodo_events.h index 296824b6e..0e5439210 100644 --- a/src/komodo_events.h +++ b/src/komodo_events.h @@ -120,19 +120,25 @@ void komodo_event_rewind(struct komodo_state *sp,char *symbol,int32_t height) } } -void komodo_setkmdheight(struct komodo_state *sp,int32_t kmdheight) +void komodo_setkmdheight(struct komodo_state *sp,int32_t kmdheight,uint32_t timestamp) { if ( kmdheight > sp->SAVEDHEIGHT ) + { sp->SAVEDHEIGHT = kmdheight; + sp->SAVEDTIMESTAMP = timestamp; + } } -void komodo_eventadd_kmdheight(struct komodo_state *sp,char *symbol,int32_t height,int32_t kmdheight) +void komodo_eventadd_kmdheight(struct komodo_state *sp,char *symbol,int32_t height,int32_t kmdheight,uint32_t timestamp) { + uint32_t buf[2]; if ( kmdheight > 0 ) { - komodo_eventadd(sp,height,symbol,KOMODO_EVENT_KMDHEIGHT,(uint8_t *)&kmdheight,sizeof(kmdheight)); + buf[0] = (uint32_t)kmdheight; + buf[1] = timestamp; + komodo_eventadd(sp,height,symbol,KOMODO_EVENT_KMDHEIGHT,(uint8_t *)buf,sizeof(buf)); if ( sp != 0 ) - komodo_setkmdheight(sp,kmdheight); + komodo_setkmdheight(sp,kmdheight,timestamp); } else { diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index f8bd0aa55..ca5b80362 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -386,7 +386,7 @@ void komodo_gateway_voutupdate(char *symbol,int32_t isspecial,int32_t height,int komodo_paxpricefeed(height,&script[offset],opretlen); //printf("height.%d pricefeed len.%d\n",height,opretlen); } - else komodo_stateupdate(height,0,0,0,utxid,0,0,0,0,0,value,&script[offset],opretlen,vout); + else komodo_stateupdate(height,0,0,0,utxid,0,0,0,0,0,0,value,&script[offset],opretlen,vout); } else if ( numvouts >= KOMODO_MINRATIFY ) typestr = "ratify"; @@ -494,7 +494,7 @@ void komodo_gateway_iteration(char *symbol) if ( (KMDHEIGHT % 100) == 0 ) fprintf(stderr,"%s.%d ",symbol,KMDHEIGHT); memset(&zero,0,sizeof(zero)); - komodo_stateupdate(KMDHEIGHT,0,0,0,zero,0,0,0,0,KMDHEIGHT,0,0,0,0); + komodo_stateupdate(KMDHEIGHT,0,0,0,zero,0,0,0,0,KMDHEIGHT,0,0,0,0,0); } if ( komodo_gateway_block(symbol,KMDHEIGHT,port) < 0 ) { diff --git a/src/komodo_globals.h b/src/komodo_globals.h index b63b59c07..b69802edc 100644 --- a/src/komodo_globals.h +++ b/src/komodo_globals.h @@ -13,7 +13,7 @@ * * ******************************************************************************/ -void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotaries,uint8_t notaryid,uint256 txhash,uint64_t voutmask,uint8_t numvouts,uint32_t *pvals,uint8_t numpvals,int32_t kheight,uint64_t opretvalue,uint8_t *opretbuf,uint16_t opretlen,uint16_t vout); +void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotaries,uint8_t notaryid,uint256 txhash,uint64_t voutmask,uint8_t numvouts,uint32_t *pvals,uint8_t numpvals,int32_t kheight,uint32_t ktime,uint64_t opretvalue,uint8_t *opretbuf,uint16_t opretlen,uint16_t vout); void komodo_init(int32_t height); int32_t komodo_notarizeddata(int32_t nHeight,uint256 *notarized_hashp,uint256 *notarized_desttxidp); char *komodo_issuemethod(char *method,char *params,uint16_t port); diff --git a/src/komodo_notary.h b/src/komodo_notary.h index f8ae0fe39..055ecac9b 100644 --- a/src/komodo_notary.h +++ b/src/komodo_notary.h @@ -240,7 +240,7 @@ void komodo_init(int32_t height) // Minerids[i] = -2; didinit = 1; } - komodo_stateupdate(0,0,0,0,zero,0,0,0,0,0,0,0,0,0); + komodo_stateupdate(0,0,0,0,zero,0,0,0,0,0,0,0,0,0,0); } void komodo_assetchain_pubkeys(char *jsonstr) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index d63ffa0f6..f582a9721 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -454,7 +454,7 @@ void komodo_paxpricefeed(int32_t height,uint8_t *pricefeed,int32_t opretlen) double KMDBTC,BTCUSD,CNYUSD; uint32_t numpvals,timestamp,pvals[128]; uint256 zero; numpvals = dpow_readprices(pricefeed,×tamp,&KMDBTC,&BTCUSD,&CNYUSD,pvals); memset(&zero,0,sizeof(zero)); - komodo_stateupdate(height,0,0,0,zero,0,0,pvals,numpvals,0,0,0,0,0); + komodo_stateupdate(height,0,0,0,zero,0,0,pvals,numpvals,0,0,0,0,0,0); //printf("komodo_paxpricefeed vout OP_RETURN.%d prices numpvals.%d opretlen.%d\n",height,numpvals,opretlen); } diff --git a/src/komodo_structs.h b/src/komodo_structs.h index eefcf09c2..eed4103bd 100644 --- a/src/komodo_structs.h +++ b/src/komodo_structs.h @@ -71,6 +71,6 @@ struct komodo_state { uint256 NOTARIZED_HASH,NOTARIZED_DESTTXID; int32_t SAVEDHEIGHT,CURRENT_HEIGHT,NOTARIZED_HEIGHT; - uint32_t KOMODO_REALTIME; + uint32_t KOMODO_REALTIME,SAVEDTIMESTAMP; struct komodo_event **Komodo_events; int32_t Komodo_numevents; }; From 3085016b489ae623d2c867adba785a77e2a607a9 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 13:47:53 -0300 Subject: [PATCH 027/139] test --- src/komodo_gateway.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index ca5b80362..a447f444f 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -564,7 +564,7 @@ void komodo_passport_iteration() if ( ASSETCHAINS_SYMBOL[0] == 0 ) refid = 32; else refid = komodo_baseid(ASSETCHAINS_SYMBOL); - printf("PASSPORT %s refid.%d\n",ASSETCHAINS_SYMBOL,refid); + //printf("PASSPORT %s refid.%d\n",ASSETCHAINS_SYMBOL,refid); if ( refid >= 0 ) { for (baseid=0; baseid<=32; baseid++) @@ -584,7 +584,7 @@ void komodo_passport_iteration() ; lastpos[baseid] = ftell(fp); printf("%s lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]); - } else fprintf(stderr,"%s.%ld ",CURRENCIES[baseid],ftell(fp)); + } //else fprintf(stderr,"%s.%ld ",CURRENCIES[baseid],ftell(fp)); fclose(fp); } else printf("fname.(%s) cant open\n",fname); } From 335f2ea7407556d50ffdcb9675b412b73941d9f2 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 13:53:21 -0300 Subject: [PATCH 028/139] test --- src/komodo.h | 2 +- src/komodo_globals.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index ffae64609..34bf91c7a 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -168,7 +168,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char if ( numpvals*sizeof(uint32_t) <= sizeof(pvals) && fread(pvals,sizeof(uint32_t),numpvals,fp) == numpvals ) { //if ( matched != 0 ) global shared state -> global PVALS - printf("%s load[%s] prices %d\n",ASSETCHAINS_SYMBOL,symbol,ht); + //printf("%s load[%s] prices %d\n",ASSETCHAINS_SYMBOL,symbol,ht); komodo_eventadd_pricefeed(sp,symbol,ht,pvals,numpvals); //printf("load pvals ht.%d numpvals.%d\n",ht,numpvals); } else printf("error loading pvals[%d]\n",numpvals); diff --git a/src/komodo_globals.h b/src/komodo_globals.h index b69802edc..a4b718ec9 100644 --- a/src/komodo_globals.h +++ b/src/komodo_globals.h @@ -24,7 +24,7 @@ int32_t komodo_isrealtime(int32_t *kmdheightp,char *target); pthread_mutex_t komodo_mutex; -#define KOMODO_ELECTION_GAP ((ASSETCHAINS_SYMBOL[0] == 0) ? 2000 : 100) +#define KOMODO_ELECTION_GAP 2000 //((ASSETCHAINS_SYMBOL[0] == 0) ? 2000 : 100) struct pax_transaction *PAX; int32_t NUM_PRICES; uint32_t *PVALS; From ce169ae346f179a1f8a1cd8be311b3d21b9daf4e Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 14:03:02 -0300 Subject: [PATCH 029/139] test --- src/komodo.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index 34bf91c7a..cfb6c5c0d 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -499,10 +499,10 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) } } if ( signedmask != 0 ) - printf("ht.%d signedmask.%llx numvins.%d numvouts.%d\n",height,(long long)signedmask,numvins,numvouts); + printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); if ( signedmask != 0 && (notarizedheight != 0 || specialtx != 0) ) { - printf("NOTARY SIGNED.%llx numvins.%d ht.%d txi.%d notaryht.%d specialtx.%d\n",(long long)signedmask,numvins,height,i,notarizedheight,specialtx); + printf("%s NOTARY SIGNED.%llx numvins.%d ht.%d txi.%d notaryht.%d specialtx.%d\n",ASSETCHAINS_SYMBOL,(long long)signedmask,numvins,height,i,notarizedheight,specialtx); printf("ht.%d specialtx.%d isratification.%d numvouts.%d signed.%llx numnotaries.%d\n",height,specialtx,isratification,numvouts,(long long)signedmask,numnotaries); if ( specialtx != 0 && isratification != 0 && numvouts > 2 ) { From 9a3fc044a86ee880d3007a23add61339c4c1cb7f Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 14:03:56 -0300 Subject: [PATCH 030/139] test --- src/komodo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo.h b/src/komodo.h index cfb6c5c0d..4f82082fd 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -381,7 +381,7 @@ int32_t komodo_voutupdate(int32_t *isratificationp,int32_t notaryid,uint8_t *scr { int32_t k; for (k=0; k= 32*2+4 && strcmp(ASSETCHAINS_SYMBOL[0]==0?"KMD":ASSETCHAINS_SYMBOL,(char *)&scriptbuf[len+32*2+4]) == 0 ) { for (k=0; k<32; k++) From 8afdc8e7b10d9264c2c08f94308dd5dcc7698f67 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 14:08:12 -0300 Subject: [PATCH 031/139] test --- src/komodo.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index 4f82082fd..de05c938c 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -153,7 +153,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char if ( fread(opret,1,olen,fp) != olen ) errs++; //if ( matched != 0 ) global shared state -> global PAX - printf("%s load[%s] opret[%c] %.8f\n",ASSETCHAINS_SYMBOL,symbol,opret[0],(double)ovalue/COIN); + printf("%s load[%s] opret[%c] len.%d %.8f\n",ASSETCHAINS_SYMBOL,symbol,opret[0],olen,(double)ovalue/COIN); komodo_eventadd_opreturn(sp,symbol,ht,txid,ovalue,v,opret,olen); } else printf("illegal olen.%u\n",olen); } @@ -445,7 +445,7 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) hwmheight = pindex->nHeight; else { - printf("hwmheight.%d vs pindex->nHeight.%d reorg.%d\n",hwmheight,pindex->nHeight,hwmheight-pindex->nHeight); + printf("hwmheight.%d vs pindex->nHeight.%d t.%u reorg.%d\n",hwmheight,pindex->nHeight,(uint32_t)pindex->nTime,hwmheight-pindex->nHeight); komodo_event_rewind(sp,symbol,pindex->nHeight); komodo_stateupdate(pindex->nHeight,0,0,0,zero,0,0,0,0,-pindex->nHeight,pindex->nTime,0,0,0,0); } @@ -537,7 +537,7 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) } } if ( pindex->nHeight == hwmheight ) - komodo_stateupdate(height,0,0,0,zero,0,0,0,0,height,pindex->nHeight,0,0,0,0); + komodo_stateupdate(height,0,0,0,zero,0,0,0,0,height,(uint32_t)pindex->nTime,0,0,0,0); } else printf("komodo_connectblock: unexpected null pindex\n"); KOMODO_INITDONE = (uint32_t)time(NULL); } From 9f33e1766b4abb2b0762e65ca67ffeeb7fd01ab3 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 14:19:56 -0300 Subject: [PATCH 032/139] test --- src/komodo.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/komodo.h b/src/komodo.h index de05c938c..fa6794a39 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -153,7 +153,9 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char if ( fread(opret,1,olen,fp) != olen ) errs++; //if ( matched != 0 ) global shared state -> global PAX - printf("%s load[%s] opret[%c] len.%d %.8f\n",ASSETCHAINS_SYMBOL,symbol,opret[0],olen,(double)ovalue/COIN); + for (i=0; i Date: Sat, 19 Nov 2016 14:20:51 -0300 Subject: [PATCH 033/139] test --- src/komodo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo.h b/src/komodo.h index fa6794a39..4e0b0a4b6 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -153,7 +153,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char if ( fread(opret,1,olen,fp) != olen ) errs++; //if ( matched != 0 ) global shared state -> global PAX - for (i=0; i Date: Sat, 19 Nov 2016 14:22:31 -0300 Subject: [PATCH 034/139] test --- src/komodo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo.h b/src/komodo.h index 4e0b0a4b6..2086a868b 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -153,7 +153,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char if ( fread(opret,1,olen,fp) != olen ) errs++; //if ( matched != 0 ) global shared state -> global PAX - int32_t i; for (i=0; i Date: Sat, 19 Nov 2016 14:36:47 -0300 Subject: [PATCH 035/139] test --- src/komodo_globals.h | 2 +- src/komodo_utils.h | 30 +++++++++--------------------- 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/src/komodo_globals.h b/src/komodo_globals.h index a4b718ec9..cdd4cb5f3 100644 --- a/src/komodo_globals.h +++ b/src/komodo_globals.h @@ -31,7 +31,7 @@ int32_t NUM_PRICES; uint32_t *PVALS; struct knotaries_entry *Pubkeys; struct notarized_checkpoint *NPOINTS; int32_t NUM_NPOINTS; -struct komodo_state KOMODO_STATES[33]; +struct komodo_state KOMODO_STATES[34]; int COINBASE_MATURITY = 100; diff --git a/src/komodo_utils.h b/src/komodo_utils.h index cc22feb84..48f38e0f9 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1462,33 +1462,21 @@ void komodo_nameset(char *symbol,char *dest,char *source) } } -struct komodo_state *komodo_stateptr(char *symbol,char *dest) -{ - int32_t baseid; struct komodo_state *sp; - komodo_nameset(symbol,dest,ASSETCHAINS_SYMBOL); - if ( ASSETCHAINS_SYMBOL[0] == 0 ) - sp = &KOMODO_STATES[0]; - else - { - if ( (baseid= komodo_baseid(ASSETCHAINS_SYMBOL)) >= 0 ) - sp = &KOMODO_STATES[baseid+1]; - else - { - fprintf(stderr,"komodo_stateupdate.(%s) not supported\n",ASSETCHAINS_SYMBOL); - return(0); - } - } - return(sp); -} - struct komodo_state *komodo_stateptrget(char *base) { int32_t baseid; if ( base == 0 || base[0] == 0 || strcmp(base,"KMD") == 0 ) - return(&KOMODO_STATES[0]); + return(&KOMODO_STATES[33]); else if ( (baseid= komodo_baseid(base)) >= 0 ) return(&KOMODO_STATES[baseid+1]); - else return(0); + else return(&KOMODO_STATES[0]); +} + +struct komodo_state *komodo_stateptr(char *symbol,char *dest) +{ + int32_t baseid; + komodo_nameset(symbol,dest,ASSETCHAINS_SYMBOL); + return(komodo_stateptrget(symbol)); } int32_t komodo_isrealtime(int32_t *kmdheightp,char *target) From 52f1d7888b8c8d9866ae007ce28ea2f54b9a4cec Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 14:40:06 -0300 Subject: [PATCH 036/139] test --- src/komodo_gateway.h | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index a447f444f..4f76fc70d 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -565,31 +565,28 @@ void komodo_passport_iteration() refid = 32; else refid = komodo_baseid(ASSETCHAINS_SYMBOL); //printf("PASSPORT %s refid.%d\n",ASSETCHAINS_SYMBOL,refid); - if ( refid >= 0 ) + for (baseid=0; baseid<=32; baseid++) { - for (baseid=0; baseid<=32; baseid++) + if ( baseid != refid ) { - if ( baseid != refid ) // use direct data for yourself + base = (char *)CURRENCIES[baseid]; + komodo_statefname(fname,baseid<32?base:(char *)""); + komodo_nameset(symbol,dest,base); + if ( (fp= fopen(fname,"rb")) != 0 && (sp= komodo_stateptrget(symbol)) != 0 ) { - base = (char *)CURRENCIES[baseid]; - komodo_statefname(fname,baseid<32?base:(char *)""); - komodo_nameset(symbol,dest,base); - if ( (fp= fopen(fname,"rb")) != 0 && (sp= komodo_stateptrget(symbol)) != 0 ) + fseek(fp,0,SEEK_END); + if ( ftell(fp) > lastpos[baseid] ) { - fseek(fp,0,SEEK_END); - if ( ftell(fp) > lastpos[baseid] ) - { - fseek(fp,lastpos[baseid],SEEK_SET); - while ( komodo_parsestatefile(sp,fp,symbol,dest) >= 0 ) - ; - lastpos[baseid] = ftell(fp); - printf("%s lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]); - } //else fprintf(stderr,"%s.%ld ",CURRENCIES[baseid],ftell(fp)); - fclose(fp); - } else printf("fname.(%s) cant open\n",fname); - } - } - } else printf("passport disabled for refid.%d (%s)\n",refid,ASSETCHAINS_SYMBOL); + fseek(fp,lastpos[baseid],SEEK_SET); + while ( komodo_parsestatefile(sp,fp,symbol,dest) >= 0 ) + ; + lastpos[baseid] = ftell(fp); + printf("%s lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]); + } //else fprintf(stderr,"%s.%ld ",CURRENCIES[baseid],ftell(fp)); + fclose(fp); + } else printf("fname.(%s) cant open\n",fname); + } // else use direct data for self via connect + } } #endif From ea3aa592244dbc3fe2ecebbaf1c1af0bff3c668d Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 14:45:37 -0300 Subject: [PATCH 037/139] test --- src/komodo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo.h b/src/komodo.h index 2086a868b..9245fda78 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -100,7 +100,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char errs++; if ( fread(¬arized_desttxid,1,sizeof(notarized_desttxid),fp) != sizeof(notarized_desttxid) ) errs++; - printf("%s load[%s] NOTARIZED %d %s\n",ASSETCHAINS_SYMBOL,symbol,notarized_height,notarized_hash.ToString().c_str()); + //printf("%s load[%s] NOTARIZED %d %s\n",ASSETCHAINS_SYMBOL,symbol,notarized_height,notarized_hash.ToString().c_str()); //if ( matched != 0 ) global independent states -> inside *sp komodo_eventadd_notarized(sp,symbol,ht,dest,notarized_hash,notarized_desttxid,notarized_height); } From 4031bde05cd6df8364fb54f79cfa81588a1be51f Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 14:46:55 -0300 Subject: [PATCH 038/139] test --- src/assetchains | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/assetchains b/src/assetchains index 6341963fe..f3697bc2f 100755 --- a/src/assetchains +++ b/src/assetchains @@ -1,6 +1,8 @@ source pubkey.txt echo $pubkey +./komodod -pubkey=$pubkey -ac_name=REVS -ac_supply=1300000 -addnode=78.47.196.146 $1 & + ./komodod -pubkey=$pubkey -ac_name=USD -addnode=78.47.196.146 $1 & ./komodod -pubkey=$pubkey -ac_name=EUR -addnode=78.47.196.146 $1 & ./komodod -pubkey=$pubkey -ac_name=JPY -addnode=78.47.196.146 $1 & From fade6934fdb0ecd7e809d49ee6c4d4b73d632100 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 14:51:17 -0300 Subject: [PATCH 039/139] test --- src/komodo_utils.h | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 48f38e0f9..76df0d07e 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1272,15 +1272,12 @@ void komodo_statefname(char *fname,char *symbol) { fname[len - n] = 0; if ( symbol[0] != 0 ) - { strcpy(&fname[len - n],symbol); - //printf("statefname.(%s)\n",fname); #ifdef WIN32 - strcat(fname,"\\"); + strcat(fname,"\\"); #else - strcat(fname,"/"); + strcat(fname,"/"); #endif - } } else { From be7e899906ff6cfbfd411dac9bfc124b9955528c Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 14:52:41 -0300 Subject: [PATCH 040/139] test --- src/komodo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo.h b/src/komodo.h index 9245fda78..e2ce40cbf 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -500,7 +500,7 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) signedmask |= (1LL << k); } } - if ( signedmask != 0 ) + if ( 0 && signedmask != 0 ) printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); if ( signedmask != 0 && (notarizedheight != 0 || specialtx != 0) ) { From 1740e3aaa73b87dc3cd92e9106bd2cf596f6af26 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 14:53:55 -0300 Subject: [PATCH 041/139] test --- src/komodo_utils.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 76df0d07e..03fe4bad4 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1273,11 +1273,6 @@ void komodo_statefname(char *fname,char *symbol) fname[len - n] = 0; if ( symbol[0] != 0 ) strcpy(&fname[len - n],symbol); -#ifdef WIN32 - strcat(fname,"\\"); -#else - strcat(fname,"/"); -#endif } else { @@ -1285,6 +1280,11 @@ void komodo_statefname(char *fname,char *symbol) return; } } +#ifdef WIN32 + strcat(fname,"\\"); +#else + strcat(fname,"/"); +#endif strcat(fname,(char *)"komodostate"); //printf("statename.(%s) %s\n",symbol,fname); } From 803176150009423cf1ebcf1a121abb903dde3328 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 14:54:37 -0300 Subject: [PATCH 042/139] test --- src/komodo.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index e2ce40cbf..5a26cba76 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -123,7 +123,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char if ( fread(&kheight,1,sizeof(kheight),fp) != sizeof(kheight) ) errs++; //if ( matched != 0 ) global independent states -> inside *sp - printf("%s load[%s] ht.%d\n",ASSETCHAINS_SYMBOL,symbol,kheight); + //printf("%s load[%s] ht.%d\n",ASSETCHAINS_SYMBOL,symbol,kheight); komodo_eventadd_kmdheight(sp,symbol,ht,kheight,0); } else if ( func == 'T' ) @@ -134,7 +134,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char if ( fread(&ktimestamp,1,sizeof(ktimestamp),fp) != sizeof(ktimestamp) ) errs++; //if ( matched != 0 ) global independent states -> inside *sp - printf("%s load[%s] ht.%d t.%u\n",ASSETCHAINS_SYMBOL,symbol,kheight,ktimestamp); + //printf("%s load[%s] ht.%d t.%u\n",ASSETCHAINS_SYMBOL,symbol,kheight,ktimestamp); komodo_eventadd_kmdheight(sp,symbol,ht,kheight,ktimestamp); } else if ( func == 'R' ) From 5633157a446415df5662e5b91c765d6fe1466922 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 14:58:48 -0300 Subject: [PATCH 043/139] test --- src/komodo.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index 5a26cba76..bfa8f55d8 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -123,7 +123,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char if ( fread(&kheight,1,sizeof(kheight),fp) != sizeof(kheight) ) errs++; //if ( matched != 0 ) global independent states -> inside *sp - //printf("%s load[%s] ht.%d\n",ASSETCHAINS_SYMBOL,symbol,kheight); + printf("%s.%d load[%s] ht.%d\n",ASSETCHAINS_SYMBOL,ht,symbol,kheight); komodo_eventadd_kmdheight(sp,symbol,ht,kheight,0); } else if ( func == 'T' ) @@ -134,7 +134,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char if ( fread(&ktimestamp,1,sizeof(ktimestamp),fp) != sizeof(ktimestamp) ) errs++; //if ( matched != 0 ) global independent states -> inside *sp - //printf("%s load[%s] ht.%d t.%u\n",ASSETCHAINS_SYMBOL,symbol,kheight,ktimestamp); + printf("%s.%d load[%s] ht.%d t.%u\n",ASSETCHAINS_SYMBOL,ht,symbol,kheight,ktimestamp); komodo_eventadd_kmdheight(sp,symbol,ht,kheight,ktimestamp); } else if ( func == 'R' ) From 6d562a0e0e7d367b07cf131a5a00eff72173b549 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 15:01:07 -0300 Subject: [PATCH 044/139] test --- src/komodo_gateway.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 4f76fc70d..de0ebb7ab 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -574,6 +574,7 @@ void komodo_passport_iteration() komodo_nameset(symbol,dest,base); if ( (fp= fopen(fname,"rb")) != 0 && (sp= komodo_stateptrget(symbol)) != 0 ) { + printf("%s fname.(%s)\n",symbol,fname); fseek(fp,0,SEEK_END); if ( ftell(fp) > lastpos[baseid] ) { From 67cd296f20627f6f52c3337a08c4ad1086d0f8dc Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 15:02:15 -0300 Subject: [PATCH 045/139] test --- src/komodo_gateway.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index de0ebb7ab..1df1af8c0 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -559,11 +559,11 @@ void komodo_iteration(char *symbol) void komodo_passport_iteration() { - static long lastpos[33]; + static long lastpos[34]; FILE *fp; int32_t baseid,refid; struct komodo_state *sp; char fname[512],*base,symbol[16],dest[16]; if ( ASSETCHAINS_SYMBOL[0] == 0 ) - refid = 32; - else refid = komodo_baseid(ASSETCHAINS_SYMBOL); + refid = 33; + else refid = komodo_baseid(ASSETCHAINS_SYMBOL)+1; //printf("PASSPORT %s refid.%d\n",ASSETCHAINS_SYMBOL,refid); for (baseid=0; baseid<=32; baseid++) { @@ -574,7 +574,7 @@ void komodo_passport_iteration() komodo_nameset(symbol,dest,base); if ( (fp= fopen(fname,"rb")) != 0 && (sp= komodo_stateptrget(symbol)) != 0 ) { - printf("%s fname.(%s)\n",symbol,fname); + printf("refid.%d %s fname.(%s)\n",refid,symbol,fname); fseek(fp,0,SEEK_END); if ( ftell(fp) > lastpos[baseid] ) { From 0e0a794b43306cde58dd1bd00b90cebb38e4ce82 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 15:05:27 -0300 Subject: [PATCH 046/139] test --- src/komodo_gateway.h | 2 +- src/komodo_utils.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 1df1af8c0..38905b912 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -574,7 +574,7 @@ void komodo_passport_iteration() komodo_nameset(symbol,dest,base); if ( (fp= fopen(fname,"rb")) != 0 && (sp= komodo_stateptrget(symbol)) != 0 ) { - printf("refid.%d %s fname.(%s)\n",refid,symbol,fname); + printf("refid.%d %s fname.(%s) base.%s\n",refid,symbol,fname,base); fseek(fp,0,SEEK_END); if ( ftell(fp) > lastpos[baseid] ) { diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 03fe4bad4..e0e7ede32 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1265,10 +1265,10 @@ void komodo_statefname(char *fname,char *symbol) { int32_t n,len; sprintf(fname,"%s",GetDataDir(false).string().c_str()); - if ( (n= (int32_t)strlen(ASSETCHAINS_SYMBOL)) != 0 ) + if ( (n= (int32_t)strlen(symbol)) != 0 ) { len = (int32_t)strlen(fname); - if ( strcmp(ASSETCHAINS_SYMBOL,&fname[len - n]) == 0 ) + if ( strcmp(symbol,&fname[len - n]) == 0 ) { fname[len - n] = 0; if ( symbol[0] != 0 ) @@ -1276,7 +1276,7 @@ void komodo_statefname(char *fname,char *symbol) } else { - printf("unexpected fname.(%s) vs %s\n",fname,ASSETCHAINS_SYMBOL); + printf("unexpected fname.(%s) vs %s\n",fname,symbol); return; } } From 4eb91c7afeca67d56caa365352fb362ec7bfa9d3 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 15:11:44 -0300 Subject: [PATCH 047/139] test --- src/komodo_utils.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index e0e7ede32..3a9cc0d23 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1265,7 +1265,7 @@ void komodo_statefname(char *fname,char *symbol) { int32_t n,len; sprintf(fname,"%s",GetDataDir(false).string().c_str()); - if ( (n= (int32_t)strlen(symbol)) != 0 ) + if ( (n= (int32_t)strlen(ASSETCHAINS_SYMBOL)) != 0 ) { len = (int32_t)strlen(fname); if ( strcmp(symbol,&fname[len - n]) == 0 ) @@ -1280,6 +1280,7 @@ void komodo_statefname(char *fname,char *symbol) return; } } + printf("statefname.(%s) -> (%s)\n",symbol,fname); #ifdef WIN32 strcat(fname,"\\"); #else From 413d04bf228cd5d9b53d4f6c563de86961ab7442 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 15:16:36 -0300 Subject: [PATCH 048/139] test --- src/komodo_utils.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 3a9cc0d23..86c51206f 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1269,17 +1269,15 @@ void komodo_statefname(char *fname,char *symbol) { len = (int32_t)strlen(fname); if ( strcmp(symbol,&fname[len - n]) == 0 ) - { fname[len - n] = 0; - if ( symbol[0] != 0 ) - strcpy(&fname[len - n],symbol); - } else { printf("unexpected fname.(%s) vs %s\n",fname,symbol); return; } } + if ( symbol != 0 && symbol[0] != 0 ) + strcat(fname,symbol); printf("statefname.(%s) -> (%s)\n",symbol,fname); #ifdef WIN32 strcat(fname,"\\"); From 20533bd89a7a59442f95d765c07e123b87dd53d3 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 15:19:30 -0300 Subject: [PATCH 049/139] test --- src/komodo_utils.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 86c51206f..2942fc193 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1277,8 +1277,15 @@ void komodo_statefname(char *fname,char *symbol) } } if ( symbol != 0 && symbol[0] != 0 ) + { +#ifdef WIN32 + strcat(fname,"\\"); +#else + strcat(fname,"/"); +#endif strcat(fname,symbol); - printf("statefname.(%s) -> (%s)\n",symbol,fname); + } + //printf("statefname.(%s) -> (%s)\n",symbol,fname); #ifdef WIN32 strcat(fname,"\\"); #else From 95a6016df8dc7eeed3a386bcaaf723cf84240ff7 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 15:23:25 -0300 Subject: [PATCH 050/139] test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 38905b912..dda185d52 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -567,7 +567,7 @@ void komodo_passport_iteration() //printf("PASSPORT %s refid.%d\n",ASSETCHAINS_SYMBOL,refid); for (baseid=0; baseid<=32; baseid++) { - if ( baseid != refid ) + if ( baseid+1 != refid ) { base = (char *)CURRENCIES[baseid]; komodo_statefname(fname,baseid<32?base:(char *)""); From 29255d5ffb1881e0450646e50e7af690be0f953c Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 15:30:20 -0300 Subject: [PATCH 051/139] test --- src/komodo_utils.h | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 2942fc193..41738c012 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1268,7 +1268,7 @@ void komodo_statefname(char *fname,char *symbol) if ( (n= (int32_t)strlen(ASSETCHAINS_SYMBOL)) != 0 ) { len = (int32_t)strlen(fname); - if ( strcmp(symbol,&fname[len - n]) == 0 ) + if ( strcmp(ASSETCHAINS_SYMBOL,&fname[len - n]) == 0 ) fname[len - n] = 0; else { @@ -1276,15 +1276,13 @@ void komodo_statefname(char *fname,char *symbol) return; } } - if ( symbol != 0 && symbol[0] != 0 ) - { #ifdef WIN32 - strcat(fname,"\\"); + strcat(fname,"\\"); #else - strcat(fname,"/"); + strcat(fname,"/"); #endif + if ( symbol == 0 || symbol[0] == 0 || strcmp("KMD",symbol) == 0 ) strcat(fname,symbol); - } //printf("statefname.(%s) -> (%s)\n",symbol,fname); #ifdef WIN32 strcat(fname,"\\"); From 643d946e025a60f8096f1849141180bcbe4ef7bd Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 15:45:33 -0300 Subject: [PATCH 052/139] test --- src/komodo_utils.h | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 41738c012..cefdad2d6 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1261,7 +1261,7 @@ void komodo_userpass(char *username,char *password,FILE *fp) free(rpcpassword); } -void komodo_statefname(char *fname,char *symbol) +void komodo_statefname(char *fname,char *symbol,char *test) { int32_t n,len; sprintf(fname,"%s",GetDataDir(false).string().c_str()); @@ -1276,21 +1276,26 @@ void komodo_statefname(char *fname,char *symbol) return; } } + else + { #ifdef WIN32 - strcat(fname,"\\"); + strcat(fname,"\\"); #else - strcat(fname,"/"); + strcat(fname,"/"); #endif - if ( symbol == 0 || symbol[0] == 0 || strcmp("KMD",symbol) == 0 ) + } + if ( symbol != 0 && symbol[0] != 0 && strcmp("KMD",symbol) != 0 ) + { strcat(fname,symbol); - //printf("statefname.(%s) -> (%s)\n",symbol,fname); + //printf("statefname.(%s) -> (%s)\n",symbol,fname); #ifdef WIN32 - strcat(fname,"\\"); + strcat(fname,"\\"); #else - strcat(fname,"/"); + strcat(fname,"/"); #endif + } strcat(fname,(char *)"komodostate"); - //printf("statename.(%s) %s\n",symbol,fname); + //printf("test.(%s) -> [%s] statename.(%s) %s\n",test,ASSETCHAINS_SYMBOL,symbol,fname); } void komodo_configfile(char *symbol,uint16_t port) From 4f28bbed31e074fd2bc4466eeb2492367df5bb24 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 15:46:36 -0300 Subject: [PATCH 053/139] test --- src/komodo_utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index cefdad2d6..2a5cf4fec 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1261,7 +1261,7 @@ void komodo_userpass(char *username,char *password,FILE *fp) free(rpcpassword); } -void komodo_statefname(char *fname,char *symbol,char *test) +void komodo_statefname(char *fname,char *symbol) { int32_t n,len; sprintf(fname,"%s",GetDataDir(false).string().c_str()); From a4ddd7899c0766535245c8cae48da52f8e9e50aa Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 15:50:21 -0300 Subject: [PATCH 054/139] test --- src/komodo_utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 2a5cf4fec..eca8beb63 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1272,7 +1272,7 @@ void komodo_statefname(char *fname,char *symbol) fname[len - n] = 0; else { - printf("unexpected fname.(%s) vs %s\n",fname,symbol); + printf("unexpected fname.(%s) vs %s [%s] n.%d len.%d (%s)\n",fname,symbol,ASSETCHAINS_SYMBOL,n,len,&fname[len - n]); return; } } From a8f4e85e5023f2cc912ff7a52a71b97148fb1d97 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 15:57:18 -0300 Subject: [PATCH 055/139] test --- src/komodo.h | 4 ++-- src/komodo_gateway.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index bfa8f55d8..a36aab0b4 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -123,7 +123,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char if ( fread(&kheight,1,sizeof(kheight),fp) != sizeof(kheight) ) errs++; //if ( matched != 0 ) global independent states -> inside *sp - printf("%s.%d load[%s] ht.%d\n",ASSETCHAINS_SYMBOL,ht,symbol,kheight); + //printf("%s.%d load[%s] ht.%d\n",ASSETCHAINS_SYMBOL,ht,symbol,kheight); komodo_eventadd_kmdheight(sp,symbol,ht,kheight,0); } else if ( func == 'T' ) @@ -134,7 +134,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char if ( fread(&ktimestamp,1,sizeof(ktimestamp),fp) != sizeof(ktimestamp) ) errs++; //if ( matched != 0 ) global independent states -> inside *sp - printf("%s.%d load[%s] ht.%d t.%u\n",ASSETCHAINS_SYMBOL,ht,symbol,kheight,ktimestamp); + //printf("%s.%d load[%s] ht.%d t.%u\n",ASSETCHAINS_SYMBOL,ht,symbol,kheight,ktimestamp); komodo_eventadd_kmdheight(sp,symbol,ht,kheight,ktimestamp); } else if ( func == 'R' ) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index dda185d52..a3ea9dda1 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -574,7 +574,7 @@ void komodo_passport_iteration() komodo_nameset(symbol,dest,base); if ( (fp= fopen(fname,"rb")) != 0 && (sp= komodo_stateptrget(symbol)) != 0 ) { - printf("refid.%d %s fname.(%s) base.%s\n",refid,symbol,fname,base); + //printf("refid.%d %s fname.(%s) base.%s\n",refid,symbol,fname,base); fseek(fp,0,SEEK_END); if ( ftell(fp) > lastpos[baseid] ) { From 5f34a2242f4da6fa5a6501efb4b9d8a1f6648c24 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 16:05:53 -0300 Subject: [PATCH 056/139] test --- src/komodo_bitcoind.h | 2 +- src/komodo_gateway.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index 8e915a170..08a02f097 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -539,7 +539,7 @@ int32_t komodo_checkpoint(int32_t *notarized_heightp,int32_t nHeight,uint256 has } } else fprintf(stderr,"unexpected error notary_hash %s ht.%d at ht.%d\n",notarized_hash.ToString().c_str(),notarized_height,notary->nHeight); } else if ( notarized_height > 0 && notarized_height != 73880 ) - fprintf(stderr,"couldnt find notary_hash %s ht.%d\n",notarized_hash.ToString().c_str(),notarized_height); + fprintf(stderr,"[%s] couldnt find notary_hash %s ht.%d\n",ASSETCHAINS_SYMBOL,notarized_hash.ToString().c_str(),notarized_height); return(0); } diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index a3ea9dda1..0fb7cef87 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -582,7 +582,7 @@ void komodo_passport_iteration() while ( komodo_parsestatefile(sp,fp,symbol,dest) >= 0 ) ; lastpos[baseid] = ftell(fp); - printf("%s lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]); + printf("from.(%s) lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]); } //else fprintf(stderr,"%s.%ld ",CURRENCIES[baseid],ftell(fp)); fclose(fp); } else printf("fname.(%s) cant open\n",fname); From 92866aa17bb73be6064b761819be78194e2a2981 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 16:16:17 -0300 Subject: [PATCH 057/139] test --- src/komodo_notary.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_notary.h b/src/komodo_notary.h index 055ecac9b..0df2b8502 100644 --- a/src/komodo_notary.h +++ b/src/komodo_notary.h @@ -108,7 +108,7 @@ void komodo_notarysinit(int32_t origheight,uint8_t pubkeys[64][33],int32_t num) memcpy(kp->pubkey,pubkeys[k],33); kp->notaryid = k; HASH_ADD_KEYPTR(hh,N.Notaries,kp->pubkey,33,kp); - //if ( height > 0 ) + if ( height > 0 ) { for (i=0; i<33; i++) printf("%02x",pubkeys[k][i]); From a9bb99d2fe07aa0562e5a4c9620490757b622606 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 16:21:34 -0300 Subject: [PATCH 058/139] test --- src/komodo_bitcoind.h | 2 +- src/komodo_events.h | 2 +- src/komodo_gateway.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index 08a02f097..ebe2b8079 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -539,7 +539,7 @@ int32_t komodo_checkpoint(int32_t *notarized_heightp,int32_t nHeight,uint256 has } } else fprintf(stderr,"unexpected error notary_hash %s ht.%d at ht.%d\n",notarized_hash.ToString().c_str(),notarized_height,notary->nHeight); } else if ( notarized_height > 0 && notarized_height != 73880 ) - fprintf(stderr,"[%s] couldnt find notary_hash %s ht.%d\n",ASSETCHAINS_SYMBOL,notarized_hash.ToString().c_str(),notarized_height); + fprintf(stderr,"[%s] couldnt find notarized.(%s %d) ht.%d\n",ASSETCHAINS_SYMBOL,notarized_hash.ToString().c_str(),notarized_height,chainActive.Tip()->nHeight); return(0); } diff --git a/src/komodo_events.h b/src/komodo_events.h index 0e5439210..08b2db7fb 100644 --- a/src/komodo_events.h +++ b/src/komodo_events.h @@ -112,7 +112,7 @@ void komodo_event_rewind(struct komodo_state *sp,char *symbol,int32_t height) { if ( ep->height < height ) break; - printf("undo event.%c ht.%d for rewind.%d\n",ep->type,ep->height,height); + printf("[%s] undo %s event.%c ht.%d for rewind.%d\n",ASSETCHAINS_SYMBOL,symbol,ep->type,ep->height,height); komodo_event_undo(sp,ep); sp->Komodo_numevents--; } diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 0fb7cef87..5212b8d33 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -582,7 +582,7 @@ void komodo_passport_iteration() while ( komodo_parsestatefile(sp,fp,symbol,dest) >= 0 ) ; lastpos[baseid] = ftell(fp); - printf("from.(%s) lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]); + //printf("from.(%s) lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]); } //else fprintf(stderr,"%s.%ld ",CURRENCIES[baseid],ftell(fp)); fclose(fp); } else printf("fname.(%s) cant open\n",fname); From 03ef7187bc613ce41a5873c53f3406927475b38b Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 16:26:49 -0300 Subject: [PATCH 059/139] test --- src/komodo_globals.h | 1 - src/komodo_notary.h | 31 +++++++++++++++++-------------- src/komodo_structs.h | 1 + 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/komodo_globals.h b/src/komodo_globals.h index cdd4cb5f3..72ecc3eba 100644 --- a/src/komodo_globals.h +++ b/src/komodo_globals.h @@ -29,7 +29,6 @@ pthread_mutex_t komodo_mutex; struct pax_transaction *PAX; int32_t NUM_PRICES; uint32_t *PVALS; struct knotaries_entry *Pubkeys; -struct notarized_checkpoint *NPOINTS; int32_t NUM_NPOINTS; struct komodo_state KOMODO_STATES[34]; diff --git a/src/komodo_notary.h b/src/komodo_notary.h index 0df2b8502..d44eb5177 100644 --- a/src/komodo_notary.h +++ b/src/komodo_notary.h @@ -168,8 +168,8 @@ void komodo_notarized_update(struct komodo_state *sp,int32_t nHeight,int32_t not printf("komodo_notarized_update REJECT notarized_height %d > %d nHeight\n",notarized_height,nHeight); return; } - NPOINTS = (struct notarized_checkpoint *)realloc(NPOINTS,(NUM_NPOINTS+1) * sizeof(*NPOINTS)); - np = &NPOINTS[NUM_NPOINTS++]; + sp->NPOINTS = (struct notarized_checkpoint *)realloc(sp->NPOINTS,(sp->NUM_NPOINTS+1) * sizeof(*sp->NPOINTS)); + np = &sp->NPOINTS[NUM_NPOINTS++]; memset(np,0,sizeof(*np)); np->nHeight = nHeight; sp->NOTARIZED_HEIGHT = np->notarized_height = notarized_height; @@ -197,21 +197,24 @@ int32_t komodo_notarized_height(uint256 *hashp,uint256 *txidp) int32_t komodo_notarizeddata(int32_t nHeight,uint256 *notarized_hashp,uint256 *notarized_desttxidp) { - struct notarized_checkpoint *np = 0; int32_t i; - if ( NUM_NPOINTS > 0 ) + struct notarized_checkpoint *np = 0; int32_t i; char symbol[16],dest[16]; struct komodo_state *sp; + if ( (sp= komodo_stateptr(symbol,dest)) != 0 ) { - for (i=0; iNUM_NPOINTS > 0 ) { - if ( NPOINTS[i].nHeight >= nHeight ) - break; - np = &NPOINTS[i]; + for (i=0; iNUM_NPOINTS; i++) + { + if ( sp->NPOINTS[i].nHeight >= nHeight ) + break; + np = &sp->NPOINTS[i]; + } + } + if ( np != 0 ) + { + *notarized_hashp = np->notarized_hash; + *notarized_desttxidp = np->notarized_desttxid; + return(np->notarized_height); } - } - if ( np != 0 ) - { - *notarized_hashp = np->notarized_hash; - *notarized_desttxidp = np->notarized_desttxid; - return(np->notarized_height); } memset(notarized_hashp,0,sizeof(*notarized_hashp)); return(0); diff --git a/src/komodo_structs.h b/src/komodo_structs.h index eed4103bd..89ebcab33 100644 --- a/src/komodo_structs.h +++ b/src/komodo_structs.h @@ -72,5 +72,6 @@ struct komodo_state uint256 NOTARIZED_HASH,NOTARIZED_DESTTXID; int32_t SAVEDHEIGHT,CURRENT_HEIGHT,NOTARIZED_HEIGHT; uint32_t KOMODO_REALTIME,SAVEDTIMESTAMP; + struct notarized_checkpoint *NPOINTS; int32_t NUM_NPOINTS; struct komodo_event **Komodo_events; int32_t Komodo_numevents; }; From 2e98c3a27aadcc2ec9e30629b2e63ff31d245b1a Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 16:27:55 -0300 Subject: [PATCH 060/139] test --- src/komodo_notary.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_notary.h b/src/komodo_notary.h index d44eb5177..61c9473fa 100644 --- a/src/komodo_notary.h +++ b/src/komodo_notary.h @@ -169,7 +169,7 @@ void komodo_notarized_update(struct komodo_state *sp,int32_t nHeight,int32_t not return; } sp->NPOINTS = (struct notarized_checkpoint *)realloc(sp->NPOINTS,(sp->NUM_NPOINTS+1) * sizeof(*sp->NPOINTS)); - np = &sp->NPOINTS[NUM_NPOINTS++]; + np = &sp->NPOINTS[sp->NUM_NPOINTS++]; memset(np,0,sizeof(*np)); np->nHeight = nHeight; sp->NOTARIZED_HEIGHT = np->notarized_height = notarized_height; From f595c2e0f88583190c2bbd8153f6e897ed1ac094 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 17:01:44 -0300 Subject: [PATCH 061/139] test --- src/main.cpp | 2 +- src/rpcmisc.cpp | 2 ++ src/rpcnet.cpp | 30 ++++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 41d21c7b8..d070178d5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1179,7 +1179,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa view.GetBestBlock(); nValueIn = view.GetValueIn(chainActive.Tip()->nHeight,&interest,tx,chainActive.Tip()->nTime); - if ( interest != 0 ) + if ( 0 && interest != 0 ) fprintf(stderr,"add interest %.8f\n",(double)interest/COIN); // we have all inputs cached now, so switch back to dummy, so we don't need to keep lock on mempool view.SetBackend(dummy); diff --git a/src/rpcmisc.cpp b/src/rpcmisc.cpp index 9cc9d4d12..7f289723a 100644 --- a/src/rpcmisc.cpp +++ b/src/rpcmisc.cpp @@ -40,6 +40,7 @@ using namespace std; * Or alternatively, create a specific query method for the information. **/ uint64_t komodo_interestsum(); +int32_t komodo_longestchain(); int32_t komodo_notarized_height(uint256 *hashp,uint256 *txidp); Value getinfo(const Array& params, bool fHelp) @@ -98,6 +99,7 @@ Value getinfo(const Array& params, bool fHelp) } #endif obj.push_back(Pair("blocks", (int)chainActive.Height())); + obj.push_back(Pair("longestchain", komodo_longestchain())); obj.push_back(Pair("timeoffset", GetTimeOffset())); if ( chainActive.Tip() != 0 ) obj.push_back(Pair("tiptime", (int)chainActive.Tip()->nTime)); diff --git a/src/rpcnet.cpp b/src/rpcnet.cpp index e3d264a57..76c9fceb2 100644 --- a/src/rpcnet.cpp +++ b/src/rpcnet.cpp @@ -165,6 +165,36 @@ Value getpeerinfo(const Array& params, bool fHelp) return ret; } +int32_t komodo_longestchain() +{ + int32_t ht,n=0,num=0,maxheight=0,height = 0; + LOCK(cs_main); + vector vstats; + CopyNodeStats(vstats); + BOOST_FOREACH(const CNodeStats& stats, vstats) + { + CNodeStateStats statestats; + bool fStateStats = GetNodeStateStats(stats.nodeid,statestats); + ht = 0; + if ( stats.nStartingHeight > ht ) + ht = stats.nStartingHeight; + if ( stats.nSyncHeight > ht ) + ht = stats.nSyncHeight; + if ( stats.nCommonHeight > ht ) + ht = stats.nCommonHeight; + if ( maxheight == 0 || ht > maxheight*1.01 ) + maxheight = ht, num = 1; + else if ( ht > maxheight*0.99 ) + num++; + n++; + if ( ht > height ) + height = ht; + } + if ( num > (n >> 1) ) + return(height); + else return(0); +} + Value addnode(const Array& params, bool fHelp) { string strCommand; From ffaeceaed06a327adc90e0efb382581dfc03d5e9 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 17:04:59 -0300 Subject: [PATCH 062/139] test --- src/rpcnet.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/rpcnet.cpp b/src/rpcnet.cpp index 76c9fceb2..7e05c6efd 100644 --- a/src/rpcnet.cpp +++ b/src/rpcnet.cpp @@ -178,10 +178,10 @@ int32_t komodo_longestchain() ht = 0; if ( stats.nStartingHeight > ht ) ht = stats.nStartingHeight; - if ( stats.nSyncHeight > ht ) - ht = stats.nSyncHeight; - if ( stats.nCommonHeight > ht ) - ht = stats.nCommonHeight; + if ( statestats.nSyncHeight > ht ) + ht = statestats.nSyncHeight; + if ( statestats.nCommonHeight > ht ) + ht = statestats.nCommonHeight; if ( maxheight == 0 || ht > maxheight*1.01 ) maxheight = ht, num = 1; else if ( ht > maxheight*0.99 ) From a19b28ce5e132fb66315cdb446390e20efcac38d Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 17:10:01 -0300 Subject: [PATCH 063/139] test --- src/komodo_notary.h | 2 +- src/rpcmisc.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/komodo_notary.h b/src/komodo_notary.h index 61c9473fa..5cea65f95 100644 --- a/src/komodo_notary.h +++ b/src/komodo_notary.h @@ -108,7 +108,7 @@ void komodo_notarysinit(int32_t origheight,uint8_t pubkeys[64][33],int32_t num) memcpy(kp->pubkey,pubkeys[k],33); kp->notaryid = k; HASH_ADD_KEYPTR(hh,N.Notaries,kp->pubkey,33,kp); - if ( height > 0 ) + if ( height > 10000 ) { for (i=0; i<33; i++) printf("%02x",pubkeys[k][i]); diff --git a/src/rpcmisc.cpp b/src/rpcmisc.cpp index 7f289723a..e6bf47e4f 100644 --- a/src/rpcmisc.cpp +++ b/src/rpcmisc.cpp @@ -46,7 +46,7 @@ int32_t komodo_notarized_height(uint256 *hashp,uint256 *txidp); Value getinfo(const Array& params, bool fHelp) { uint256 notarized_hash,notarized_desttxid; - int32_t notarized_height; + int32_t notarized_height,longestchain; if (fHelp || params.size() != 0) throw runtime_error( "getinfo\n" @@ -99,7 +99,9 @@ Value getinfo(const Array& params, bool fHelp) } #endif obj.push_back(Pair("blocks", (int)chainActive.Height())); - obj.push_back(Pair("longestchain", komodo_longestchain())); + if ( (longestchain= komodo_longestchain()) != 0 && chainActive.Height() > longestchain ) + longestchain = chainActive.Height(); + obj.push_back(Pair("longestchain", longestchain)); obj.push_back(Pair("timeoffset", GetTimeOffset())); if ( chainActive.Tip() != 0 ) obj.push_back(Pair("tiptime", (int)chainActive.Tip()->nTime)); From 550824a80928c1f58e5f874458a0d2919d9bd305 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 17:28:13 -0300 Subject: [PATCH 064/139] test --- src/komodo.h | 2 +- src/komodo_events.h | 2 ++ src/komodo_gateway.h | 20 +++++++++++++++++++- src/komodo_utils.h | 11 ++++++++++- 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index a36aab0b4..a06b20faf 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -460,7 +460,7 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) sleep(30); } }*/ - sp->KOMODO_REALTIME = KOMODO_INITDONE = (uint32_t)time(NULL); + KOMODO_INITDONE = (uint32_t)time(NULL); if ( pindex != 0 ) { height = pindex->nHeight; diff --git a/src/komodo_events.h b/src/komodo_events.h index 08b2db7fb..b11b1e101 100644 --- a/src/komodo_events.h +++ b/src/komodo_events.h @@ -127,6 +127,8 @@ void komodo_setkmdheight(struct komodo_state *sp,int32_t kmdheight,uint32_t time sp->SAVEDHEIGHT = kmdheight; sp->SAVEDTIMESTAMP = timestamp; } + if ( kmdheight > sp->CURRENT_HEIGHT ) + sp->CURRENT_HEIGHT = kmdheight; } void komodo_eventadd_kmdheight(struct komodo_state *sp,char *symbol,int32_t height,int32_t kmdheight,uint32_t timestamp) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 5212b8d33..4e840e133 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -560,7 +560,7 @@ void komodo_iteration(char *symbol) void komodo_passport_iteration() { static long lastpos[34]; - FILE *fp; int32_t baseid,refid; struct komodo_state *sp; char fname[512],*base,symbol[16],dest[16]; + FILE *fp; int32_t baseid,isrealtime,refid,block,longest; struct komodo_state *sp; char *retstr,fname[512],*base,symbol[16],dest[16]; cJSON *infoobj; uint16_t port; uint32_t magic; if ( ASSETCHAINS_SYMBOL[0] == 0 ) refid = 33; else refid = komodo_baseid(ASSETCHAINS_SYMBOL)+1; @@ -572,6 +572,9 @@ void komodo_passport_iteration() base = (char *)CURRENCIES[baseid]; komodo_statefname(fname,baseid<32?base:(char *)""); komodo_nameset(symbol,dest,base); + port = komodo_port(base,10,&magic); + sp = 0; + isrealtime = 0; if ( (fp= fopen(fname,"rb")) != 0 && (sp= komodo_stateptrget(symbol)) != 0 ) { //printf("refid.%d %s fname.(%s) base.%s\n",refid,symbol,fname,base); @@ -585,7 +588,22 @@ void komodo_passport_iteration() //printf("from.(%s) lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]); } //else fprintf(stderr,"%s.%ld ",CURRENCIES[baseid],ftell(fp)); fclose(fp); + if ( (retstr= komodo_issuemethod((char *)"getinfo",0,port)) != 0 ) + { + if ( (infoobj= cJSON_Parse(retstr)) != 0 ) + { + blocks = juint(infoobj,"blocks"); + longest = juint(infoobj,"longestchain"); + printf("(%s %d %d) ",base,blocks,longest); + if ( blocks > 0 && blocks == longest ) + isrealtime = 1; + free_json(infoobj); + } + free(retstr); + } } else printf("fname.(%s) cant open\n",fname); + if ( sp != 0 ) + sp->KOMODO_REALTIME = isrealtime * (uint32_t)time(NULL); } // else use direct data for self via connect } } diff --git a/src/komodo_utils.h b/src/komodo_utils.h index eca8beb63..256e593f4 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1358,6 +1358,8 @@ void komodo_configfile(char *symbol,uint16_t port) uint32_t komodo_assetmagic(char *symbol,uint64_t supply) { uint8_t buf[512]; int32_t len = 0; + if ( strcmp(symbol,"KMD") == 0 ) + return(0x8de4eef9); len = iguana_rwnum(1,&buf[len],sizeof(supply),(void *)&supply); strcpy((char *)&buf[len],symbol); len += strlen(symbol); @@ -1379,11 +1381,18 @@ uint32_t komodo_assetmagic(char *symbol,uint64_t supply) uint16_t komodo_assetport(uint32_t magic) { - return(8000 + (magic % 7777)); + if ( magic == 0x8de4eef9 ) + return(7771); + else return(8000 + (magic % 7777)); } uint16_t komodo_port(char *symbol,uint64_t supply,uint32_t *magicp) { + if ( symbol == 0 || symbol[0] == 0 || strcmp("KMD",symbol) == 0 ) + { + *magicp = 0x8de4eef9; + return(7771); + } *magicp = komodo_assetmagic(symbol,supply); return(komodo_assetport(*magicp)); } From af125a4e83128037b17f3478a9645877e2389f52 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 17:29:16 -0300 Subject: [PATCH 065/139] test --- src/komodo_gateway.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 4e840e133..27b368a52 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -560,7 +560,7 @@ void komodo_iteration(char *symbol) void komodo_passport_iteration() { static long lastpos[34]; - FILE *fp; int32_t baseid,isrealtime,refid,block,longest; struct komodo_state *sp; char *retstr,fname[512],*base,symbol[16],dest[16]; cJSON *infoobj; uint16_t port; uint32_t magic; + FILE *fp; int32_t baseid,isrealtime,refid,blocks,longest; struct komodo_state *sp; char *retstr,fname[512],*base,symbol[16],dest[16]; cJSON *infoobj; uint16_t port; uint32_t magic; if ( ASSETCHAINS_SYMBOL[0] == 0 ) refid = 33; else refid = komodo_baseid(ASSETCHAINS_SYMBOL)+1; @@ -592,8 +592,8 @@ void komodo_passport_iteration() { if ( (infoobj= cJSON_Parse(retstr)) != 0 ) { - blocks = juint(infoobj,"blocks"); - longest = juint(infoobj,"longestchain"); + blocks = juint(infoobj,(char *)"blocks"); + longest = juint(infoobj,(char *)"longestchain"); printf("(%s %d %d) ",base,blocks,longest); if ( blocks > 0 && blocks == longest ) isrealtime = 1; From 1333a8c47d122d5ad2b016c16ddc709b59734105 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 17:32:53 -0300 Subject: [PATCH 066/139] test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 27b368a52..02c26f127 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -600,7 +600,7 @@ void komodo_passport_iteration() free_json(infoobj); } free(retstr); - } + } else printf("%s port.%u no getinfo\n",base,port); } else printf("fname.(%s) cant open\n",fname); if ( sp != 0 ) sp->KOMODO_REALTIME = isrealtime * (uint32_t)time(NULL); From 950baa0e6b3a37ad276af2df06b7e399f7b17642 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 17:37:44 -0300 Subject: [PATCH 067/139] test --- src/komodo_gateway.h | 2 +- src/komodo_utils.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 02c26f127..a2c1a6704 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -572,7 +572,7 @@ void komodo_passport_iteration() base = (char *)CURRENCIES[baseid]; komodo_statefname(fname,baseid<32?base:(char *)""); komodo_nameset(symbol,dest,base); - port = komodo_port(base,10,&magic); + port = komodo_port(base,10,&magic) + 1; sp = 0; isrealtime = 0; if ( (fp= fopen(fname,"rb")) != 0 && (sp= komodo_stateptrget(symbol)) != 0 ) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 256e593f4..049e0603b 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1382,7 +1382,7 @@ uint32_t komodo_assetmagic(char *symbol,uint64_t supply) uint16_t komodo_assetport(uint32_t magic) { if ( magic == 0x8de4eef9 ) - return(7771); + return(7770); else return(8000 + (magic % 7777)); } @@ -1391,7 +1391,7 @@ uint16_t komodo_port(char *symbol,uint64_t supply,uint32_t *magicp) if ( symbol == 0 || symbol[0] == 0 || strcmp("KMD",symbol) == 0 ) { *magicp = 0x8de4eef9; - return(7771); + return(7770); } *magicp = komodo_assetmagic(symbol,supply); return(komodo_assetport(*magicp)); From 51311cad6f5d55804879df63ead6fb037fbb8539 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 17:46:09 -0300 Subject: [PATCH 068/139] test --- src/komodo_gateway.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index a2c1a6704..88141b12d 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -599,6 +599,7 @@ void komodo_passport_iteration() isrealtime = 1; free_json(infoobj); } + printf("(%s)\n",retstr); free(retstr); } else printf("%s port.%u no getinfo\n",base,port); } else printf("fname.(%s) cant open\n",fname); From 0ded57c850c376d63af4f4d5415f059495d52ece Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 17:58:04 -0300 Subject: [PATCH 069/139] test --- src/komodo.h | 2 +- src/komodo_bitcoind.h | 4 ++-- src/komodo_gateway.h | 12 +++++++++--- src/komodo_globals.h | 2 +- src/komodo_utils.h | 20 ++++++++++++++++++-- 5 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index a06b20faf..970e088de 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -188,7 +188,7 @@ void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotar return; if ( fp == 0 ) { - komodo_statefname(fname,ASSETCHAINS_SYMBOL); + komodo_statefname(fname,ASSETCHAINS_SYMBOL,"komodostate"); if ( (fp= fopen(fname,"rb+")) != 0 ) { while ( komodo_parsestatefile(sp,fp,symbol,dest) >= 0 ) diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index ebe2b8079..fdd383c33 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -329,7 +329,7 @@ char *curl_post(CURL **cHandlep,char *url,char *userpass,char *postfields,char * return(chunk.memory); } -char *komodo_issuemethod(char *method,char *params,uint16_t port) +char *komodo_issuemethod(char *userpass,char *method,char *params,uint16_t port) { //static void *cHandle; char url[512],*retstr=0,*retstr2=0,postdata[8192]; @@ -340,7 +340,7 @@ char *komodo_issuemethod(char *method,char *params,uint16_t port) sprintf(url,(char *)"http://127.0.0.1:%u",port); sprintf(postdata,"{\"method\":\"%s\",\"params\":%s}",method,params); //printf("postdata.(%s) USERPASS.(%s)\n",postdata,KMDUSERPASS); - retstr2 = bitcoind_RPC(&retstr,(char *)"debug",url,KMDUSERPASS,method,params); + retstr2 = bitcoind_RPC(&retstr,(char *)"debug",url,userpass,method,params); //retstr = curl_post(&cHandle,url,USERPASS,postdata,0,0,0,0); } return(retstr2); diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 88141b12d..9ef29ef33 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -559,8 +559,14 @@ void komodo_iteration(char *symbol) void komodo_passport_iteration() { - static long lastpos[34]; + static long lastpos[34],didinit; static char userpass[33][1024]; FILE *fp; int32_t baseid,isrealtime,refid,blocks,longest; struct komodo_state *sp; char *retstr,fname[512],*base,symbol[16],dest[16]; cJSON *infoobj; uint16_t port; uint32_t magic; + if ( didinit == 0 ) + { + for (baseid=0; baseid<=32; baseid++) + komodo_userpass(userpass[baseid],CURRENCIES[baseid]) + didinit = 1; + } if ( ASSETCHAINS_SYMBOL[0] == 0 ) refid = 33; else refid = komodo_baseid(ASSETCHAINS_SYMBOL)+1; @@ -570,7 +576,7 @@ void komodo_passport_iteration() if ( baseid+1 != refid ) { base = (char *)CURRENCIES[baseid]; - komodo_statefname(fname,baseid<32?base:(char *)""); + komodo_statefname(fname,baseid<32?base:(char *)"","komodostate"); komodo_nameset(symbol,dest,base); port = komodo_port(base,10,&magic) + 1; sp = 0; @@ -588,7 +594,7 @@ void komodo_passport_iteration() //printf("from.(%s) lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]); } //else fprintf(stderr,"%s.%ld ",CURRENCIES[baseid],ftell(fp)); fclose(fp); - if ( (retstr= komodo_issuemethod((char *)"getinfo",0,port)) != 0 ) + if ( (retstr= komodo_issuemethod(userpass[baseid],(char *)"getinfo",0,port)) != 0 ) { if ( (infoobj= cJSON_Parse(retstr)) != 0 ) { diff --git a/src/komodo_globals.h b/src/komodo_globals.h index 72ecc3eba..f92b72248 100644 --- a/src/komodo_globals.h +++ b/src/komodo_globals.h @@ -16,7 +16,7 @@ void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotaries,uint8_t notaryid,uint256 txhash,uint64_t voutmask,uint8_t numvouts,uint32_t *pvals,uint8_t numpvals,int32_t kheight,uint32_t ktime,uint64_t opretvalue,uint8_t *opretbuf,uint16_t opretlen,uint16_t vout); void komodo_init(int32_t height); int32_t komodo_notarizeddata(int32_t nHeight,uint256 *notarized_hashp,uint256 *notarized_desttxidp); -char *komodo_issuemethod(char *method,char *params,uint16_t port); +char *komodo_issuemethod(char *userpass,char *method,char *params,uint16_t port); void komodo_init(int32_t height); void komodo_assetchain_pubkeys(char *jsonstr); int32_t komodo_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33); diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 049e0603b..82db20e39 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1261,7 +1261,7 @@ void komodo_userpass(char *username,char *password,FILE *fp) free(rpcpassword); } -void komodo_statefname(char *fname,char *symbol) +void komodo_statefname(char *fname,char *symbol,char *str) { int32_t n,len; sprintf(fname,"%s",GetDataDir(false).string().c_str()); @@ -1294,7 +1294,7 @@ void komodo_statefname(char *fname,char *symbol) strcat(fname,"/"); #endif } - strcat(fname,(char *)"komodostate"); + strcat(fname,str); //printf("test.(%s) -> [%s] statename.(%s) %s\n",test,ASSETCHAINS_SYMBOL,symbol,fname); } @@ -1355,6 +1355,22 @@ void komodo_configfile(char *symbol,uint16_t port) } else printf("couldnt open.(%s)\n",fname); } +int32_t komodo_userpass(char *userpass,char *symbol) +{ + FILE *fp; char fname[512],username[512],password[512],confname[16]; + userpass[0] = 0; + sprintf(confname,"%s.conf",symbol); + komodo_statefname(fname,symbol,confname); + if ( (fp= fopen(fname,"rb")) != 0 ) + { + komodo_userpass(username,password,fp); + sprintf(userpass,"%s:%s",username,password); + fclose(fp); + return((int32_t)strlen(userpass)); + } + return(-1); +} + uint32_t komodo_assetmagic(char *symbol,uint64_t supply) { uint8_t buf[512]; int32_t len = 0; From 055db9b60e27f6b2f239c7fe35b30f8e74fdbded Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 17:59:34 -0300 Subject: [PATCH 070/139] test --- src/komodo.h | 2 +- src/komodo_gateway.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index 970e088de..58dc8bb58 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -188,7 +188,7 @@ void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotar return; if ( fp == 0 ) { - komodo_statefname(fname,ASSETCHAINS_SYMBOL,"komodostate"); + komodo_statefname(fname,ASSETCHAINS_SYMBOL,(char *)"komodostate"); if ( (fp= fopen(fname,"rb+")) != 0 ) { while ( komodo_parsestatefile(sp,fp,symbol,dest) >= 0 ) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 9ef29ef33..aec40dab6 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -564,7 +564,7 @@ void komodo_passport_iteration() if ( didinit == 0 ) { for (baseid=0; baseid<=32; baseid++) - komodo_userpass(userpass[baseid],CURRENCIES[baseid]) + komodo_userpass(userpass[baseid],CURRENCIES[baseid]); didinit = 1; } if ( ASSETCHAINS_SYMBOL[0] == 0 ) @@ -576,7 +576,7 @@ void komodo_passport_iteration() if ( baseid+1 != refid ) { base = (char *)CURRENCIES[baseid]; - komodo_statefname(fname,baseid<32?base:(char *)"","komodostate"); + komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"komodostate"); komodo_nameset(symbol,dest,base); port = komodo_port(base,10,&magic) + 1; sp = 0; From 43450135b580c27628eaef8ad7e8bdacc36a7971 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 18:07:04 -0300 Subject: [PATCH 071/139] test --- src/komodo_gateway.h | 17 ++++++++++------- src/main.cpp | 4 ++-- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index aec40dab6..418774fad 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -560,7 +560,7 @@ void komodo_iteration(char *symbol) void komodo_passport_iteration() { static long lastpos[34],didinit; static char userpass[33][1024]; - FILE *fp; int32_t baseid,isrealtime,refid,blocks,longest; struct komodo_state *sp; char *retstr,fname[512],*base,symbol[16],dest[16]; cJSON *infoobj; uint16_t port; uint32_t magic; + FILE *fp; int32_t baseid,isrealtime,refid,blocks,longest; struct komodo_state *sp; char *retstr,fname[512],*base,symbol[16],dest[16]; cJSON *infoobj,*result; uint16_t port; uint32_t magic; if ( didinit == 0 ) { for (baseid=0; baseid<=32; baseid++) @@ -598,14 +598,17 @@ void komodo_passport_iteration() { if ( (infoobj= cJSON_Parse(retstr)) != 0 ) { - blocks = juint(infoobj,(char *)"blocks"); - longest = juint(infoobj,(char *)"longestchain"); - printf("(%s %d %d) ",base,blocks,longest); - if ( blocks > 0 && blocks == longest ) - isrealtime = 1; + if ( (result= jobj(infoobj,"result")) != 0 ) + { + blocks = juint(infoobj,(char *)"blocks"); + longest = juint(infoobj,(char *)"longestchain"); + printf("%s.(%d L%d) ",base,blocks,longest); + if ( blocks > 0 && blocks == longest ) + isrealtime = 1; + } free_json(infoobj); } - printf("(%s)\n",retstr); + //printf("(%s)\n",retstr); free(retstr); } else printf("%s port.%u no getinfo\n",base,port); } else printf("fname.(%s) cant open\n",fname); diff --git a/src/main.cpp b/src/main.cpp index d070178d5..822fc76ce 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -535,10 +535,10 @@ CBlockIndex* FindForkInGlobalIndex(const CChain& chain, const CBlockLocator& loc // Find the first block the caller has in the main chain BOOST_FOREACH(const uint256& hash, locator.vHave) { BlockMap::iterator mi = mapBlockIndex.find(hash); - if (mi != mapBlockIndex.end()) + if (mi != 0 && mi != mapBlockIndex.end()) { CBlockIndex* pindex = (*mi).second; - if (chain.Contains(pindex)) + if (pindex != 0 && chain.Contains(pindex)) return pindex; } } From e4d89f433c00722a514cc21cc0d15c36167c1da4 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 18:09:04 -0300 Subject: [PATCH 072/139] test --- src/komodo_gateway.h | 2 +- src/komodo_utils.h | 2 ++ src/main.cpp | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 418774fad..ac0ca7837 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -598,7 +598,7 @@ void komodo_passport_iteration() { if ( (infoobj= cJSON_Parse(retstr)) != 0 ) { - if ( (result= jobj(infoobj,"result")) != 0 ) + if ( (result= jobj(infoobj,(char *)"result")) != 0 ) { blocks = juint(infoobj,(char *)"blocks"); longest = juint(infoobj,(char *)"longestchain"); diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 82db20e39..75fdbfa69 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1361,6 +1361,8 @@ int32_t komodo_userpass(char *userpass,char *symbol) userpass[0] = 0; sprintf(confname,"%s.conf",symbol); komodo_statefname(fname,symbol,confname); + if ( strcmp(symbol,"KMD") == 0 ) + printf("conf.(%s)\n",fname); if ( (fp= fopen(fname,"rb")) != 0 ) { komodo_userpass(username,password,fp); diff --git a/src/main.cpp b/src/main.cpp index 822fc76ce..0e1b84341 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -535,7 +535,7 @@ CBlockIndex* FindForkInGlobalIndex(const CChain& chain, const CBlockLocator& loc // Find the first block the caller has in the main chain BOOST_FOREACH(const uint256& hash, locator.vHave) { BlockMap::iterator mi = mapBlockIndex.find(hash); - if (mi != 0 && mi != mapBlockIndex.end()) + if (mi != mapBlockIndex.end()) { CBlockIndex* pindex = (*mi).second; if (pindex != 0 && chain.Contains(pindex)) From ecf6256cab6e9e6aa064d18de5e6cbee0deceaff Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 18:14:44 -0300 Subject: [PATCH 073/139] test --- src/komodo_gateway.h | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index ac0ca7837..ef6a1c451 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -573,14 +573,14 @@ void komodo_passport_iteration() //printf("PASSPORT %s refid.%d\n",ASSETCHAINS_SYMBOL,refid); for (baseid=0; baseid<=32; baseid++) { + sp = 0; + isrealtime = 0; if ( baseid+1 != refid ) { base = (char *)CURRENCIES[baseid]; komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"komodostate"); komodo_nameset(symbol,dest,base); port = komodo_port(base,10,&magic) + 1; - sp = 0; - isrealtime = 0; if ( (fp= fopen(fname,"rb")) != 0 && (sp= komodo_stateptrget(symbol)) != 0 ) { //printf("refid.%d %s fname.(%s) base.%s\n",refid,symbol,fname,base); @@ -594,27 +594,27 @@ void komodo_passport_iteration() //printf("from.(%s) lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]); } //else fprintf(stderr,"%s.%ld ",CURRENCIES[baseid],ftell(fp)); fclose(fp); - if ( (retstr= komodo_issuemethod(userpass[baseid],(char *)"getinfo",0,port)) != 0 ) + } + } + if ( (retstr= komodo_issuemethod(userpass[baseid],(char *)"getinfo",0,port)) != 0 ) + { + if ( (infoobj= cJSON_Parse(retstr)) != 0 ) + { + if ( (result= jobj(infoobj,(char *)"result")) != 0 ) { - if ( (infoobj= cJSON_Parse(retstr)) != 0 ) - { - if ( (result= jobj(infoobj,(char *)"result")) != 0 ) - { - blocks = juint(infoobj,(char *)"blocks"); - longest = juint(infoobj,(char *)"longestchain"); - printf("%s.(%d L%d) ",base,blocks,longest); - if ( blocks > 0 && blocks == longest ) - isrealtime = 1; - } - free_json(infoobj); - } - //printf("(%s)\n",retstr); - free(retstr); - } else printf("%s port.%u no getinfo\n",base,port); - } else printf("fname.(%s) cant open\n",fname); - if ( sp != 0 ) - sp->KOMODO_REALTIME = isrealtime * (uint32_t)time(NULL); - } // else use direct data for self via connect + blocks = juint(result,(char *)"blocks"); + longest = juint(result,(char *)"longestchain"); + printf("%s.(%d L%d) ",base,blocks,longest); + if ( blocks > 0 && blocks == longest ) + isrealtime = 1; + } + free_json(infoobj); + } + //printf("(%s)\n",retstr); + free(retstr); + } else printf("%s port.%u no getinfo\n",base,port); + if ( sp != 0 ) + sp->KOMODO_REALTIME = isrealtime * (uint32_t)time(NULL); } } #endif From f394a03e91f1dd7cbb43cd2f24164a8cae2f46ab Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 18:19:03 -0300 Subject: [PATCH 074/139] test --- src/komodo_gateway.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index ef6a1c451..37025b4f3 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -604,13 +604,14 @@ void komodo_passport_iteration() { blocks = juint(result,(char *)"blocks"); longest = juint(result,(char *)"longestchain"); - printf("%s.(%d L%d) ",base,blocks,longest); + //printf("%s.(%d L%d) ",base,blocks,longest); if ( blocks > 0 && blocks == longest ) isrealtime = 1; } free_json(infoobj); } - //printf("(%s)\n",retstr); + if ( baseid == 32 ) + printf("(%s)\n",retstr); free(retstr); } else printf("%s port.%u no getinfo\n",base,port); if ( sp != 0 ) From 8e3649cb3cc51a25d6a4c3fe30cdc927eced8acf Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 18:23:34 -0300 Subject: [PATCH 075/139] test --- src/komodo_utils.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 75fdbfa69..c48eec5f9 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1361,8 +1361,7 @@ int32_t komodo_userpass(char *userpass,char *symbol) userpass[0] = 0; sprintf(confname,"%s.conf",symbol); komodo_statefname(fname,symbol,confname); - if ( strcmp(symbol,"KMD") == 0 ) - printf("conf.(%s)\n",fname); + printf("[%s] conf.(%s)\n",symbol,fname); if ( (fp= fopen(fname,"rb")) != 0 ) { komodo_userpass(username,password,fp); From 609fbcc2665febc1a8917fd85453c73c154c9049 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 18:27:28 -0300 Subject: [PATCH 076/139] test --- src/komodo_gateway.h | 2 +- src/komodo_utils.h | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 37025b4f3..56f7b53a3 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -613,7 +613,7 @@ void komodo_passport_iteration() if ( baseid == 32 ) printf("(%s)\n",retstr); free(retstr); - } else printf("%s port.%u no getinfo\n",base,port); + } // else printf("%s port.%u no getinfo\n",base,port); if ( sp != 0 ) sp->KOMODO_REALTIME = isrealtime * (uint32_t)time(NULL); } diff --git a/src/komodo_utils.h b/src/komodo_utils.h index c48eec5f9..e6d7d5f5e 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1359,9 +1359,11 @@ int32_t komodo_userpass(char *userpass,char *symbol) { FILE *fp; char fname[512],username[512],password[512],confname[16]; userpass[0] = 0; - sprintf(confname,"%s.conf",symbol); + if ( strcmp("KMD",symbol) == 0 ) + sprintf(confname,"komodo.conf"); + else sprintf(confname,"%s.conf",symbol); komodo_statefname(fname,symbol,confname); - printf("[%s] conf.(%s)\n",symbol,fname); + //printf("[%s] conf.(%s)\n",symbol,fname); if ( (fp= fopen(fname,"rb")) != 0 ) { komodo_userpass(username,password,fp); From 4961e57b81aaf43c5beac6601102750f55f8c303 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 18:33:04 -0300 Subject: [PATCH 077/139] test --- src/komodo_utils.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index e6d7d5f5e..cdb565722 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1363,12 +1363,13 @@ int32_t komodo_userpass(char *userpass,char *symbol) sprintf(confname,"komodo.conf"); else sprintf(confname,"%s.conf",symbol); komodo_statefname(fname,symbol,confname); - //printf("[%s] conf.(%s)\n",symbol,fname); + printf("[%s] conf.(%s)\n",symbol,fname); if ( (fp= fopen(fname,"rb")) != 0 ) { komodo_userpass(username,password,fp); sprintf(userpass,"%s:%s",username,password); fclose(fp); + printf("[%s] conf.(%s) %s\n",symbol,fname,userpass); return((int32_t)strlen(userpass)); } return(-1); From 7d4c1af6df097f4626dbd0b59f935ce5ceb459e1 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 18:36:16 -0300 Subject: [PATCH 078/139] test --- src/komodo_gateway.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 56f7b53a3..c2576903b 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -610,8 +610,7 @@ void komodo_passport_iteration() } free_json(infoobj); } - if ( baseid == 32 ) - printf("(%s)\n",retstr); + else printf("%s (%s)\n",base,retstr); free(retstr); } // else printf("%s port.%u no getinfo\n",base,port); if ( sp != 0 ) From be0e81d0d8040e5076c79ce16a410a316c0805e3 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 18:42:15 -0300 Subject: [PATCH 079/139] test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index c2576903b..41cc8d7fd 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -610,7 +610,7 @@ void komodo_passport_iteration() } free_json(infoobj); } - else printf("%s (%s)\n",base,retstr); + else printf("[%s] %s (%s)\n",ASSETCHAINS_SYMBOL,base,retstr); free(retstr); } // else printf("%s port.%u no getinfo\n",base,port); if ( sp != 0 ) From a7ef556c2b807b2edad96f0eba03e3ee7c68ac4f Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 18:53:52 -0300 Subject: [PATCH 080/139] test --- src/komodo_gateway.h | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 41cc8d7fd..b1f20bec4 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -560,13 +560,13 @@ void komodo_iteration(char *symbol) void komodo_passport_iteration() { static long lastpos[34],didinit; static char userpass[33][1024]; - FILE *fp; int32_t baseid,isrealtime,refid,blocks,longest; struct komodo_state *sp; char *retstr,fname[512],*base,symbol[16],dest[16]; cJSON *infoobj,*result; uint16_t port; uint32_t magic; - if ( didinit == 0 ) + FILE *fp; int32_t baseid,isrealtime,refid,blocks,longest; struct komodo_state *sp; char *retstr,fname[512],*base,symbol[16],dest[16]; cJSON *infoobj,*result; uint16_t port; uint32_t magic,buf[3]; + /*if ( didinit == 0 ) { for (baseid=0; baseid<=32; baseid++) komodo_userpass(userpass[baseid],CURRENCIES[baseid]); didinit = 1; - } + }*/ if ( ASSETCHAINS_SYMBOL[0] == 0 ) refid = 33; else refid = komodo_baseid(ASSETCHAINS_SYMBOL)+1; @@ -595,8 +595,32 @@ void komodo_passport_iteration() } //else fprintf(stderr,"%s.%ld ",CURRENCIES[baseid],ftell(fp)); fclose(fp); } + komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"realtime"); + if ( (fp= fopen(fname,"rb")) != 0 ) + { + if ( fread(buf,1,sizeof(buf),fp) == sizeof(buf) ) + { + if ( buf[0] != 0 && buf[0] == buf[1] ) + isrealtime = 1; + } + fclose(fp); + } } - if ( (retstr= komodo_issuemethod(userpass[baseid],(char *)"getinfo",0,port)) != 0 ) + else + { + komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"realtime"); + if ( (fp= fopen(fname,"wb")) != 0 ) + { + buf[0] = (uint32_t)chainActive.Tip()->nHeight; + buf[1] = (uint32_t)komodo_longestchain(); + if ( buf[0] != 0 && buf[0] == buf[1] ) + buf[2] = (uint32_t)time(NULL); + if ( fwrite(buf,1,sizeof(buf),fp) != sizeof(buf) ) + fprintf(stderr,"[%s] %s error writing realtime\n",ASSETCHAINS_SYMBOL,base); + fclose(fp); + } + } + /*if ( (retstr= komodo_issuemethod(userpass[baseid],(char *)"getinfo",0,port)) != 0 ) { if ( (infoobj= cJSON_Parse(retstr)) != 0 ) { @@ -612,7 +636,7 @@ void komodo_passport_iteration() } else printf("[%s] %s (%s)\n",ASSETCHAINS_SYMBOL,base,retstr); free(retstr); - } // else printf("%s port.%u no getinfo\n",base,port); + } // else printf("%s port.%u no getinfo\n",base,port);*/ if ( sp != 0 ) sp->KOMODO_REALTIME = isrealtime * (uint32_t)time(NULL); } From 44a80e607a90b6e9bc2dddcf64c0bc74fa02e0e6 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 18:57:48 -0300 Subject: [PATCH 081/139] test --- src/komodo_gateway.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index b1f20bec4..ecb55aa07 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -556,6 +556,7 @@ void komodo_iteration(char *symbol) } } #else +int32_t komodo_longestchain(); void komodo_passport_iteration() { From 6eb41a2f0b7b9643e522aba709379235cdf42085 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 19:03:56 -0300 Subject: [PATCH 082/139] test --- src/komodo_gateway.h | 38 +++++++++++++------------------------- 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index ecb55aa07..89e327063 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -560,14 +560,8 @@ int32_t komodo_longestchain(); void komodo_passport_iteration() { - static long lastpos[34],didinit; static char userpass[33][1024]; - FILE *fp; int32_t baseid,isrealtime,refid,blocks,longest; struct komodo_state *sp; char *retstr,fname[512],*base,symbol[16],dest[16]; cJSON *infoobj,*result; uint16_t port; uint32_t magic,buf[3]; - /*if ( didinit == 0 ) - { - for (baseid=0; baseid<=32; baseid++) - komodo_userpass(userpass[baseid],CURRENCIES[baseid]); - didinit = 1; - }*/ + static long lastpos[34]; static uint64_t prevRTmask; static char userpass[33][1024]; + FILE *fp; int32_t baseid,isrealtime,refid,blocks,longest; struct komodo_state *sp; char *retstr,fname[512],*base,symbol[16],dest[16]; cJSON *infoobj,*result; uint64_t RTmask = 0; uint16_t port; uint32_t magic,buf[3]; if ( ASSETCHAINS_SYMBOL[0] == 0 ) refid = 33; else refid = komodo_baseid(ASSETCHAINS_SYMBOL)+1; @@ -602,7 +596,10 @@ void komodo_passport_iteration() if ( fread(buf,1,sizeof(buf),fp) == sizeof(buf) ) { if ( buf[0] != 0 && buf[0] == buf[1] ) + { isrealtime = 1; + RTmask |= (1LL << baseid); + } } fclose(fp); } @@ -615,32 +612,23 @@ void komodo_passport_iteration() buf[0] = (uint32_t)chainActive.Tip()->nHeight; buf[1] = (uint32_t)komodo_longestchain(); if ( buf[0] != 0 && buf[0] == buf[1] ) + { buf[2] = (uint32_t)time(NULL); + RTmask |= (1LL << baseid); + } if ( fwrite(buf,1,sizeof(buf),fp) != sizeof(buf) ) fprintf(stderr,"[%s] %s error writing realtime\n",ASSETCHAINS_SYMBOL,base); fclose(fp); } } - /*if ( (retstr= komodo_issuemethod(userpass[baseid],(char *)"getinfo",0,port)) != 0 ) - { - if ( (infoobj= cJSON_Parse(retstr)) != 0 ) - { - if ( (result= jobj(infoobj,(char *)"result")) != 0 ) - { - blocks = juint(result,(char *)"blocks"); - longest = juint(result,(char *)"longestchain"); - //printf("%s.(%d L%d) ",base,blocks,longest); - if ( blocks > 0 && blocks == longest ) - isrealtime = 1; - } - free_json(infoobj); - } - else printf("[%s] %s (%s)\n",ASSETCHAINS_SYMBOL,base,retstr); - free(retstr); - } // else printf("%s port.%u no getinfo\n",base,port);*/ if ( sp != 0 ) sp->KOMODO_REALTIME = isrealtime * (uint32_t)time(NULL); } + if ( RTmask != prevRTmask ) + { + printf("[%s] new RTmask %llx\n",ASSETCHAINS_SYMBOL,RTmask); + prevRTmask = RTmask; + } } #endif From 2452d1558c278ca3db0dad8e0caae9c2e97fa1d1 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 19:06:46 -0300 Subject: [PATCH 083/139] test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 89e327063..12450e399 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -626,7 +626,7 @@ void komodo_passport_iteration() } if ( RTmask != prevRTmask ) { - printf("[%s] new RTmask %llx\n",ASSETCHAINS_SYMBOL,RTmask); + printf("[%s] new RTmask %llx\n",ASSETCHAINS_SYMBOL,(long long)RTmask); prevRTmask = RTmask; } } From fe0210c0d7e7aff4cd5adb32dd36f8d34a0c2d23 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 19:10:21 -0300 Subject: [PATCH 084/139] test --- src/komodo_gateway.h | 2 +- src/komodo_utils.h | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 12450e399..08d7a2b6b 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -595,7 +595,7 @@ void komodo_passport_iteration() { if ( fread(buf,1,sizeof(buf),fp) == sizeof(buf) ) { - if ( buf[0] != 0 && buf[0] == buf[1] ) + if ( buf[0] != 0 && buf[0] == buf[1] && buf[2] > time(NULL)-60 ) { isrealtime = 1; RTmask |= (1LL << baseid); diff --git a/src/komodo_utils.h b/src/komodo_utils.h index cdb565722..e071d5232 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1363,13 +1363,11 @@ int32_t komodo_userpass(char *userpass,char *symbol) sprintf(confname,"komodo.conf"); else sprintf(confname,"%s.conf",symbol); komodo_statefname(fname,symbol,confname); - printf("[%s] conf.(%s)\n",symbol,fname); if ( (fp= fopen(fname,"rb")) != 0 ) { komodo_userpass(username,password,fp); sprintf(userpass,"%s:%s",username,password); fclose(fp); - printf("[%s] conf.(%s) %s\n",symbol,fname,userpass); return((int32_t)strlen(userpass)); } return(-1); From 209dc96ca6e002943179342f23d0da6822d4e842 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 19:13:26 -0300 Subject: [PATCH 085/139] test --- src/komodo_gateway.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 08d7a2b6b..0206bc318 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -599,10 +599,10 @@ void komodo_passport_iteration() { isrealtime = 1; RTmask |= (1LL << baseid); - } - } + } else fprintf(stderr,"%s not RT\n",base); + } else fprintf(stderr,"%s size error RT\n",base); fclose(fp); - } + } else fprintf(stderr,"%s open error RT\n",base); } else { From f789eddea98d91d9a5089c60b240f2db84b49d70 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 19:19:16 -0300 Subject: [PATCH 086/139] test --- src/komodo_gateway.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 0206bc318..1e2afd236 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -570,9 +570,9 @@ void komodo_passport_iteration() { sp = 0; isrealtime = 0; + base = (char *)CURRENCIES[baseid]; if ( baseid+1 != refid ) { - base = (char *)CURRENCIES[baseid]; komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"komodostate"); komodo_nameset(symbol,dest,base); port = komodo_port(base,10,&magic) + 1; @@ -619,7 +619,7 @@ void komodo_passport_iteration() if ( fwrite(buf,1,sizeof(buf),fp) != sizeof(buf) ) fprintf(stderr,"[%s] %s error writing realtime\n",ASSETCHAINS_SYMBOL,base); fclose(fp); - } + } else fprintf(stderr,"%s create error RT\n",base); } if ( sp != 0 ) sp->KOMODO_REALTIME = isrealtime * (uint32_t)time(NULL); From 140fccf8b7c7e778a09bd16b87640a19b43f29e5 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 19:22:02 -0300 Subject: [PATCH 087/139] test --- src/komodo_gateway.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 1e2afd236..d2ffc4ff9 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -599,7 +599,7 @@ void komodo_passport_iteration() { isrealtime = 1; RTmask |= (1LL << baseid); - } else fprintf(stderr,"%s not RT\n",base); + } //else fprintf(stderr,"%s not RT\n",base); } else fprintf(stderr,"%s size error RT\n",base); fclose(fp); } else fprintf(stderr,"%s open error RT\n",base); @@ -626,7 +626,7 @@ void komodo_passport_iteration() } if ( RTmask != prevRTmask ) { - printf("[%s] new RTmask %llx\n",ASSETCHAINS_SYMBOL,(long long)RTmask); + printf("[%s] new RTmask %llx\n",ASSETCHAINS_SYMBOL[0]!=0?ASSETCHAINS_SYMBOL:"KMD",(long long)RTmask); prevRTmask = RTmask; } } From d7529fce685d508fbd5db048dc1a7bdb92ae7ae2 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 19:34:49 -0300 Subject: [PATCH 088/139] test --- src/komodo_gateway.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index d2ffc4ff9..32ac485d0 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -560,7 +560,7 @@ int32_t komodo_longestchain(); void komodo_passport_iteration() { - static long lastpos[34]; static uint64_t prevRTmask; static char userpass[33][1024]; + static long lastpos[34]; static uint64_t prevRTmask,lastRTheight; static char userpass[33][1024]; FILE *fp; int32_t baseid,isrealtime,refid,blocks,longest; struct komodo_state *sp; char *retstr,fname[512],*base,symbol[16],dest[16]; cJSON *infoobj,*result; uint64_t RTmask = 0; uint16_t port; uint32_t magic,buf[3]; if ( ASSETCHAINS_SYMBOL[0] == 0 ) refid = 33; @@ -604,12 +604,13 @@ void komodo_passport_iteration() fclose(fp); } else fprintf(stderr,"%s open error RT\n",base); } - else + else if ( chainActive.Tip()->nHeight != lastRTheight ) { + lastRTheight = chainActive.Tip()->nHeight; komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"realtime"); if ( (fp= fopen(fname,"wb")) != 0 ) { - buf[0] = (uint32_t)chainActive.Tip()->nHeight; + buf[0] = (uint32_t)lastRTheight; buf[1] = (uint32_t)komodo_longestchain(); if ( buf[0] != 0 && buf[0] == buf[1] ) { From 84ee07e9263f5b5270cc38b95cc5b4c95ab28cea Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 19 Nov 2016 19:38:23 -0300 Subject: [PATCH 089/139] test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 32ac485d0..81d6f89f0 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -604,7 +604,7 @@ void komodo_passport_iteration() fclose(fp); } else fprintf(stderr,"%s open error RT\n",base); } - else if ( chainActive.Tip()->nHeight != lastRTheight ) + else //if ( chainActive.Tip()->nHeight != lastRTheight ) { lastRTheight = chainActive.Tip()->nHeight; komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"realtime"); From 4411f74f0fb36bea9ef3f7056e9993d0e757a423 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 08:52:35 -0300 Subject: [PATCH 090/139] test --- src/fiat-cli | 1 + src/fiat/revs | 2 ++ 2 files changed, 3 insertions(+) create mode 100755 src/fiat/revs diff --git a/src/fiat-cli b/src/fiat-cli index 8dd0fc02b..1a4004be7 100755 --- a/src/fiat-cli +++ b/src/fiat-cli @@ -31,3 +31,4 @@ echo thb; fiat/thb $1 $2 $3 $4 echo try; fiat/try $1 $2 $3 $4 echo usd; fiat/usd $1 $2 $3 $4 echo zar; fiat/zar $1 $2 $3 $4 +echo revs; fiat/revs $1 $2 $3 $4 diff --git a/src/fiat/revs b/src/fiat/revs new file mode 100755 index 000000000..5c8782ae5 --- /dev/null +++ b/src/fiat/revs @@ -0,0 +1,2 @@ +#!/bin/bash +./komodo-cli -ac_name=REVS $1 $2 $3 $4 From 635dd34d59d982e728be25f0ee925fbf01dad9f8 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 10:15:01 -0300 Subject: [PATCH 091/139] test --- src/komodo.h | 1 - src/komodo_gateway.h | 33 +++++++++++++++++---------------- src/komodo_structs.h | 1 + src/miner.cpp | 6 +++--- 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index 58dc8bb58..7e8202be0 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -17,7 +17,6 @@ #define H_KOMODO_H // Todo: -// 0. optimize assetchains // 1. error check fiat redeem amounts // 2. net balance limiter // 3. verify: reorgs diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 81d6f89f0..3b1aa7e16 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -147,9 +147,10 @@ int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,uint8_t return(n); } -int32_t komodo_gateway_deposits(CMutableTransaction *txNew,int32_t shortflag,char *base,int32_t tokomodo) +int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t tokomodo) { - struct pax_transaction *pax,*tmp; char symbol[16]; uint8_t *script,opcode,opret[10000],data[10000]; int32_t i,len=0,opretlen=0,numvouts=1; + struct pax_transaction *pax,*tmp; char symbol[16],dest[16]; uint8_t *script,opcode,opret[10000],data[10000]; int32_t i,len=0,opretlen=0,numvouts=1; struct komodo_state *sp; + sp = komodo_stateptr(symbol,dest); strcpy(symbol,base); PENDING_KOMODO_TX = 0; if ( tokomodo == 0 ) @@ -157,10 +158,11 @@ int32_t komodo_gateway_deposits(CMutableTransaction *txNew,int32_t shortflag,cha else opcode = 'X'; HASH_ITER(hh,PAX,pax,tmp) { - if ( pax->marked != 0 ) + printf("pax.%s marked.%d %.8f -> %.8f\n",pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis)); + if ( pax->marked != 0 || strcmp(pax->symbol,ASSETCHAINS_SYMBOL) != 0 ) continue; if ( ASSETCHAINS_SYMBOL[0] != 0 ) - printf("pax.%p marked.%d %.8f -> %.8f\n",pax,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis)); + printf("pax.%s marked.%d %.8f -> %.8f\n",ASSETCHAINS_SYMBOL,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis)); txNew->vout.resize(numvouts+1); txNew->vout[numvouts].nValue = (opcode == 'I') ? pax->fiatoshis : pax->komodoshis; txNew->vout[numvouts].scriptPubKey.resize(25); @@ -186,9 +188,7 @@ int32_t komodo_gateway_deposits(CMutableTransaction *txNew,int32_t shortflag,cha len += iguana_rwnum(1,&data[len],sizeof(pax->fiatoshis),&pax->fiatoshis); len += iguana_rwnum(1,&data[len],sizeof(pax->height),&pax->height); len += iguana_rwnum(1,&data[len],sizeof(pax->otherheight),&pax->otherheight); - if ( pax->shortflag != 0 ) - data[len++] = '-'; - for (i=0; pax->symbol[i]!=0&&i<3; i++) + for (i=0; pax->symbol[i]!=0&&i<3; i++) // must be 3 letter currency data[len++] = pax->symbol[i]; data[len++] = 0; PENDING_KOMODO_TX += pax->komodoshis; @@ -560,11 +560,12 @@ int32_t komodo_longestchain(); void komodo_passport_iteration() { - static long lastpos[34]; static uint64_t prevRTmask,lastRTheight; static char userpass[33][1024]; - FILE *fp; int32_t baseid,isrealtime,refid,blocks,longest; struct komodo_state *sp; char *retstr,fname[512],*base,symbol[16],dest[16]; cJSON *infoobj,*result; uint64_t RTmask = 0; uint16_t port; uint32_t magic,buf[3]; + static long lastpos[34]; static char userpass[33][1024]; + FILE *fp; int32_t baseid,isrealtime,refid,blocks,longest; struct komodo_state *sp,*refsp; char *retstr,fname[512],*base,symbol[16],dest[16]; uint32_t buf[3]; cJSON *infoobj,*result; uint64_t RTmask = 0; + refsp = komodo_stateptr(symbol,dest); if ( ASSETCHAINS_SYMBOL[0] == 0 ) refid = 33; - else refid = komodo_baseid(ASSETCHAINS_SYMBOL)+1; + else refid = komodo_baseid(ASSETCHAINS_SYMBOL)+1; // illegal base -> baseid.-1 -> 0 //printf("PASSPORT %s refid.%d\n",ASSETCHAINS_SYMBOL,refid); for (baseid=0; baseid<=32; baseid++) { @@ -599,12 +600,13 @@ void komodo_passport_iteration() { isrealtime = 1; RTmask |= (1LL << baseid); + memcpy(refsp->RTbufs[baseid+1],buf,sizeof(refsp->RTbufs[baseid+1])); } //else fprintf(stderr,"%s not RT\n",base); } else fprintf(stderr,"%s size error RT\n",base); fclose(fp); } else fprintf(stderr,"%s open error RT\n",base); } - else //if ( chainActive.Tip()->nHeight != lastRTheight ) + else { lastRTheight = chainActive.Tip()->nHeight; komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"realtime"); @@ -616,6 +618,9 @@ void komodo_passport_iteration() { buf[2] = (uint32_t)time(NULL); RTmask |= (1LL << baseid); + memcpy(refsp->RTbufs[baseid+1],buf,sizeof(refsp->RTbufs[baseid+1])); + if ( refid != 0 ) + memcpy(refsp->RTbufs[0],buf,sizeof(refsp->RTbufs[0])); } if ( fwrite(buf,1,sizeof(buf),fp) != sizeof(buf) ) fprintf(stderr,"[%s] %s error writing realtime\n",ASSETCHAINS_SYMBOL,base); @@ -625,11 +630,7 @@ void komodo_passport_iteration() if ( sp != 0 ) sp->KOMODO_REALTIME = isrealtime * (uint32_t)time(NULL); } - if ( RTmask != prevRTmask ) - { - printf("[%s] new RTmask %llx\n",ASSETCHAINS_SYMBOL[0]!=0?ASSETCHAINS_SYMBOL:"KMD",(long long)RTmask); - prevRTmask = RTmask; - } + refsp->RTmask = RTmask; } #endif diff --git a/src/komodo_structs.h b/src/komodo_structs.h index 89ebcab33..8797dfb4d 100644 --- a/src/komodo_structs.h +++ b/src/komodo_structs.h @@ -74,4 +74,5 @@ struct komodo_state uint32_t KOMODO_REALTIME,SAVEDTIMESTAMP; struct notarized_checkpoint *NPOINTS; int32_t NUM_NPOINTS; struct komodo_event **Komodo_events; int32_t Komodo_numevents; + uint32_t RTbufs[64][3]; uint64_t RTmask; }; diff --git a/src/miner.cpp b/src/miner.cpp index 04c31633d..e74c07702 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -110,7 +110,7 @@ int32_t komodo_is_special(int32_t height,uint8_t pubkey33[33]); int32_t komodo_pax_opreturn(uint8_t *opret,int32_t maxsize); uint64_t komodo_paxtotal(); int32_t komodo_is_issuer(); -int32_t komodo_gateway_deposits(CMutableTransaction *txNew,int32_t shortflag,char *symbol,int32_t tokomodo); +int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *symbol,int32_t tokomodo); int32_t komodo_isrealtime(int32_t *kmdheightp,char *target); CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) @@ -376,7 +376,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) if ( ASSETCHAINS_SYMBOL[0] == 0 ) { int32_t i,opretlen; uint8_t opret[256],*ptr; - if ( komodo_gateway_deposits(&txNew,0,(char *)"EUR",1) == 0 ) + if ( komodo_gateway_deposits(&txNew,(char *)"KMD",1) == 0 ) { if ( (opretlen= komodo_pax_opreturn(opret,sizeof(opret))) > 0 ) { @@ -392,7 +392,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) } else if ( komodo_is_issuer() != 0 ) { - komodo_gateway_deposits(&txNew,0,ASSETCHAINS_SYMBOL,0); + komodo_gateway_deposits(&txNew,ASSETCHAINS_SYMBOL,0); fprintf(stderr,"txNew numvouts.%d\n",(int32_t)txNew.vout.size()); } pblock->vtx[0] = txNew; From 48e96ba114d1e103665b551e55e113fc69cb2cee Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 10:18:28 -0300 Subject: [PATCH 092/139] test --- src/komodo_gateway.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 3b1aa7e16..7303e59e3 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -149,12 +149,22 @@ int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,uint8_t int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t tokomodo) { - struct pax_transaction *pax,*tmp; char symbol[16],dest[16]; uint8_t *script,opcode,opret[10000],data[10000]; int32_t i,len=0,opretlen=0,numvouts=1; struct komodo_state *sp; + struct pax_transaction *pax,*tmp; char symbol[16],dest[16]; uint8_t *script,opcode,opret[10000],data[10000]; int32_t i,baseid,len=0,opretlen=0,numvouts=1; struct komodo_state *sp; uint64_t mask; sp = komodo_stateptr(symbol,dest); strcpy(symbol,base); PENDING_KOMODO_TX = 0; if ( tokomodo == 0 ) + { opcode = 'I'; + if ( (baseid= komodo_baseid(base)) < 0 ) + return(0); + mask = (1LL << 32) | (1LL << (baseid+1)); + if ( (sp->RTmask & mask) != mask ) + { + printf("%s not RT mask.%llx vs RTmask.%llx\n",ASSETCHAINS_SYMBOL,(long long)mask,(long long)sp->RTmask); + return(0); + } + } else opcode = 'X'; HASH_ITER(hh,PAX,pax,tmp) { From 30376a70dfcd7b3242a1d3b4755416b476a72a69 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 10:20:03 -0300 Subject: [PATCH 093/139] test --- src/komodo_gateway.h | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 7303e59e3..3b1a1845d 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -209,8 +209,6 @@ int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t to } if ( numvouts > 1 ) { - if ( shortflag != 0 ) - data[len++] = '-'; if ( tokomodo != 0 ) strcpy(symbol,(char *)"KMD"); for (i=0; symbol[i]!=0; i++) @@ -586,7 +584,7 @@ void komodo_passport_iteration() { komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"komodostate"); komodo_nameset(symbol,dest,base); - port = komodo_port(base,10,&magic) + 1; + //port = komodo_port(base,10,&magic) + 1; if ( (fp= fopen(fname,"rb")) != 0 && (sp= komodo_stateptrget(symbol)) != 0 ) { //printf("refid.%d %s fname.(%s) base.%s\n",refid,symbol,fname,base); @@ -618,11 +616,10 @@ void komodo_passport_iteration() } else { - lastRTheight = chainActive.Tip()->nHeight; komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"realtime"); if ( (fp= fopen(fname,"wb")) != 0 ) { - buf[0] = (uint32_t)lastRTheight; + buf[0] = (uint32_t)chainActive.Tip()->nHeight; buf[1] = (uint32_t)komodo_longestchain(); if ( buf[0] != 0 && buf[0] == buf[1] ) { From 90b09456312ceb28d321dc040e1c992aa5c558e2 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 10:34:14 -0300 Subject: [PATCH 094/139] test --- src/komodo_gateway.h | 188 --------------------------------------- src/wallet/rpcwallet.cpp | 2 +- 2 files changed, 1 insertion(+), 189 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 3b1a1845d..c99807b8d 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -377,193 +377,6 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 return(typestr); } -#ifdef pollmethod -void komodo_gateway_voutupdate(char *symbol,int32_t isspecial,int32_t height,int32_t txi,bits256 txid,int32_t vout,int32_t numvouts,uint64_t value,uint8_t *script,int32_t len) -{ - int32_t i,opretlen,offset = 0; uint256 zero,utxid; const char *typestr; - typestr = "unknown"; - memcpy(&utxid,&txid,sizeof(utxid)); - if ( script[offset++] == 0x6a ) - { - offset += komodo_scriptitemlen(&opretlen,&script[offset]); - if ( isspecial != 0 && len >= offset+32*2+4 && strcmp((char *)&script[offset+32*2+4],ASSETCHAINS_SYMBOL[0]==0?"KMD":ASSETCHAINS_SYMBOL) == 0 ) - typestr = "notarized"; - else if ( txi == 0 && vout == 1 && opretlen == 149 ) - { - typestr = "pricefeed"; - komodo_paxpricefeed(height,&script[offset],opretlen); - //printf("height.%d pricefeed len.%d\n",height,opretlen); - } - else komodo_stateupdate(height,0,0,0,utxid,0,0,0,0,0,0,value,&script[offset],opretlen,vout); - } - else if ( numvouts >= KOMODO_MINRATIFY ) - typestr = "ratify"; -} - -int32_t komodo_gateway_tx(char *symbol,int32_t height,int32_t txi,char *txidstr,uint32_t port) -{ - char *retstr,params[256],*hexstr; uint8_t script[10000]; cJSON *oldpub,*newpub,*json,*result,*vouts,*item,*sobj; int32_t vout,n,len,isspecial,retval = -1; uint64_t value; bits256 txid; - sprintf(params,"[\"%s\", 1]",txidstr); - if ( (retstr= komodo_issuemethod((char *)"getrawtransaction",params,port)) != 0 ) - { - if ( (json= cJSON_Parse(retstr)) != 0 ) - { - if ( (result= jobj(json,(char *)"result")) != 0 ) - { - oldpub = jobj(result,(char *)"vpub_old"); - newpub = jobj(result,(char *)"vpub_new"); - retval = 0; - if ( oldpub == 0 && newpub == 0 && (vouts= jarray(&n,result,(char *)"vout")) != 0 ) - { - isspecial = 0; - txid = jbits256(result,(char *)"txid"); - for (vout=0; vout> 1; - if ( vout == 0 && ((memcmp(&hexstr[2],CRYPTO777_PUBSECPSTR,66) == 0 && len == 35) || (memcmp(&hexstr[6],CRYPTO777_RMD160STR,40) == 0 && len == 25)) ) - isspecial = 1; - else if ( len <= sizeof(script) ) - { - decode_hex(script,len,hexstr); - komodo_gateway_voutupdate(symbol,isspecial,height,txi,txid,vout,n,value,script,len); - } - } - } - } - } - } else printf("error getting txids.(%s) %p\n",retstr,result); - free_json(json); - } - free(retstr); - } - return(retval); -} - -int32_t komodo_gateway_block(char *symbol,int32_t height,uint16_t port) -{ - char *retstr,*retstr2,params[128],*txidstr; int32_t i,n,retval = -1; cJSON *json,*tx=0,*result=0,*result2; - sprintf(params,"[%d]",height); - if ( (retstr= komodo_issuemethod((char *)"getblockhash",params,port)) != 0 ) - { - if ( (result= cJSON_Parse(retstr)) != 0 ) - { - if ( (txidstr= jstr(result,(char *)"result")) != 0 && strlen(txidstr) == 64 ) - { - sprintf(params,"[\"%s\"]",txidstr); - if ( (retstr2= komodo_issuemethod((char *)"getblock",params,port)) != 0 ) - { - //printf("getblock.(%s)\n",retstr2); - if ( (json= cJSON_Parse(retstr2)) != 0 ) - { - if ( (result2= jobj(json,(char *)"result")) != 0 && (tx= jarray(&n,result2,(char *)"tx")) != 0 ) - { - for (i=0; i= kmdheight ) - sp->KOMODO_REALTIME = (uint32_t)time(NULL); - } - free_json(infoobj); - } - free(retstr); - } - else - { - printf("error from %s\n",symbol); - sleep(30); - } -} - -void komodo_iteration(char *symbol) -{ - char *retstr,*base,*coinaddr,*txidstr,cmd[512]; uint64_t value,fiatoshis; cJSON *array,*item; int32_t i,n,vout,shortflag,height,fiatheight; uint256 txid; uint8_t rmd160[20],addrtype; - if ( ASSETCHAINS_SYMBOL[0] == 0 ) - { - sprintf(cmd,"{\"agent\":\"dpow\",\"method\":\"pending\",\"fiat\":\"%s\"}",symbol); - if ( (retstr= issue_curl(cmd)) != 0 ) - { - if ( (array= cJSON_Parse(retstr)) != 0 ) - { - if ( (n= cJSON_GetArraySize(array)) > 0 ) - { - for (i=0; i 0 && height > 0 ) - { - fiatoshis = jdouble(item,base) * COIN; - decode_hex((uint8_t *)&txid,sizeof(txid),txidstr); - bitcoin_addr2rmd160(&addrtype,rmd160,coinaddr); - komodo_gateway_deposit(coinaddr,value,shortflag,base,fiatoshis,rmd160,txid,vout,height,fiatheight); - } - } - } - } - //printf("retstr.(%s)\n",retstr); - free(retstr); - } - } -} -#else int32_t komodo_longestchain(); void komodo_passport_iteration() @@ -639,5 +452,4 @@ void komodo_passport_iteration() } refsp->RTmask = RTmask; } -#endif diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index c0ae4f319..fe3b2a854 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -492,7 +492,7 @@ Value paxdeposit(const Array& params, bool fHelp) if (!EnsureWalletIsAvailable(fHelp)) return Value::null; if (fHelp || params.size() != 3) - throw runtime_error("paxdeposit \"address\" [-]fiatoshis \"base\"\nnegative fiatoshis means a short position, long position capped at 100% gain"); + throw runtime_error("paxdeposit \"address\" fiatoshis base"); LOCK2(cs_main, pwalletMain->cs_wallet); CBitcoinAddress address(params[0].get_str()); if (!address.IsValid()) From f1db88ea001b9a3c286e9ad020b8c3b413abed54 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 10:54:09 -0300 Subject: [PATCH 095/139] test --- src/komodo_gateway.h | 56 ++++++++++++++++++++++---------------------- src/komodo_structs.h | 2 +- src/komodo_utils.h | 16 +++++++++++-- 3 files changed, 43 insertions(+), 31 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index c99807b8d..0c065ed67 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -15,21 +15,6 @@ // paxdeposit equivalent in reverse makes opreturn and KMD does the same in reverse -uint64_t komodo_paxtotal() -{ - struct pax_transaction *pax,*tmp; uint64_t total = 0; - HASH_ITER(hh,PAX,pax,tmp) - { - if ( pax->marked == 0 ) - { - if ( komodo_is_issuer() != 0 ) - total += pax->fiatoshis; - else total += pax->komodoshis; - } - } - return(total); -} - struct pax_transaction *komodo_paxfind(struct pax_transaction *space,uint256 txid,uint16_t vout) { struct pax_transaction *pax; @@ -68,7 +53,8 @@ struct pax_transaction *komodo_paxmark(int32_t height,struct pax_transaction *sp void komodo_gateway_deposit(char *coinaddr,uint64_t value,int32_t shortflag,char *symbol,uint64_t fiatoshis,uint8_t *rmd160,uint256 txid,uint16_t vout,int32_t height,int32_t otherheight) // assetchain context { - struct pax_transaction *pax; int32_t addflag = 0; + struct pax_transaction *pax; int32_t addflag = 0; struct komodo_state *sp; char symbol[16],dest[16]; + sp = komodo_stateptr(symbol,dest); pthread_mutex_lock(&komodo_mutex); HASH_FIND(hh,PAX,&txid,sizeof(txid),pax); if ( pax == 0 ) @@ -95,7 +81,7 @@ void komodo_gateway_deposit(char *coinaddr,uint64_t value,int32_t shortflag,char pax->fiatoshis = fiatoshis; memcpy(pax->rmd160,rmd160,20); pax->height = height; - pax->otherheight = otherheight; + pax->otherheight = sp->CURRENT_HEIGHT;//otherheight; if ( pax->marked == 0 ) { if ( addflag != 0 ) @@ -147,23 +133,36 @@ int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,uint8_t return(n); } +uint64_t komodo_paxtotal() +{ + struct pax_transaction *pax,*tmp; uint64_t total = 0; + if ( komodo_isrealtime(&ht,ASSETCHAINS_SYMBOL) == 0 ) + return(0); + HASH_ITER(hh,PAX,pax,tmp) + { + printf("pax.%s marked.%d %.8f -> %.8f\n",pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis)); + if ( pax->marked == 0 ) + { + if ( komodo_is_issuer() != 0 ) + total += pax->fiatoshis; + else total += pax->komodoshis; + } + } + printf("paxtotal %.8f\n",dstr(total)); + return(total); +} + int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t tokomodo) { - struct pax_transaction *pax,*tmp; char symbol[16],dest[16]; uint8_t *script,opcode,opret[10000],data[10000]; int32_t i,baseid,len=0,opretlen=0,numvouts=1; struct komodo_state *sp; uint64_t mask; + struct pax_transaction *pax,*tmp; char symbol[16],dest[16]; uint8_t *script,opcode,opret[10000],data[10000]; int32_t i,baseid,ht,len=0,opretlen=0,numvouts=1; struct komodo_state *sp; uint64_t mask; sp = komodo_stateptr(symbol,dest); strcpy(symbol,base); PENDING_KOMODO_TX = 0; if ( tokomodo == 0 ) { opcode = 'I'; - if ( (baseid= komodo_baseid(base)) < 0 ) + if ( komodo_isrealtime(&ht,ASSETCHAINS_SYMBOL) == 0 ) return(0); - mask = (1LL << 32) | (1LL << (baseid+1)); - if ( (sp->RTmask & mask) != mask ) - { - printf("%s not RT mask.%llx vs RTmask.%llx\n",ASSETCHAINS_SYMBOL,(long long)mask,(long long)sp->RTmask); - return(0); - } } else opcode = 'X'; HASH_ITER(hh,PAX,pax,tmp) @@ -337,7 +336,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 for (i=0; i<33; i++) printf("%02x",pubkey33[i]); printf(" checkpubkey check %.8f v %.8f dest.(%s) kmdheight.%d height.%d\n",dstr(checktoshis),dstr(value),destaddr,kmdheight,height); - if ( value >= checktoshis || (seed == 0 && diff < .01) ) + if ( value == checktoshis )//value >= checktoshis || (seed == 0 && diff < .01) ) { if ( komodo_paxfind(&space,txid,vout) == 0 ) { @@ -417,6 +416,7 @@ void komodo_passport_iteration() { if ( fread(buf,1,sizeof(buf),fp) == sizeof(buf) ) { + sp->CURRENT_HEIGHT = buf[0]; if ( buf[0] != 0 && buf[0] == buf[1] && buf[2] > time(NULL)-60 ) { isrealtime = 1; @@ -447,8 +447,8 @@ void komodo_passport_iteration() fclose(fp); } else fprintf(stderr,"%s create error RT\n",base); } - if ( sp != 0 ) - sp->KOMODO_REALTIME = isrealtime * (uint32_t)time(NULL); + if ( sp != 0 && isrealtime == 0 ) + refsp->RTbufs[0][2] = 0; } refsp->RTmask = RTmask; } diff --git a/src/komodo_structs.h b/src/komodo_structs.h index 8797dfb4d..4d09d5a81 100644 --- a/src/komodo_structs.h +++ b/src/komodo_structs.h @@ -71,7 +71,7 @@ struct komodo_state { uint256 NOTARIZED_HASH,NOTARIZED_DESTTXID; int32_t SAVEDHEIGHT,CURRENT_HEIGHT,NOTARIZED_HEIGHT; - uint32_t KOMODO_REALTIME,SAVEDTIMESTAMP; + uint32_t SAVEDTIMESTAMP; struct notarized_checkpoint *NPOINTS; int32_t NUM_NPOINTS; struct komodo_event **Komodo_events; int32_t Komodo_numevents; uint32_t RTbufs[64][3]; uint64_t RTmask; diff --git a/src/komodo_utils.h b/src/komodo_utils.h index e071d5232..7e187d835 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1514,12 +1514,24 @@ struct komodo_state *komodo_stateptr(char *symbol,char *dest) int32_t komodo_isrealtime(int32_t *kmdheightp,char *target) { - char symbol[16],dest[16]; struct komodo_state *sp; + char symbol[16],dest[16]; int32_t baseid; uint64_t mask; struct komodo_state *sp; *kmdheightp = 0; + if ( target == 0 || target[0] == 0 ) + target = (char *)"KMD"; if ( (sp= komodo_stateptrget(target)) != 0 ) { + if ( (baseid= komodo_baseid(target)) < 0 ) + return(0); + mask = (1LL << 32) | (1LL << (baseid+1)); + if ( (sp->RTmask & mask) != mask ) + { + printf("%s not RT mask.%llx vs RTmask.%llx\n",target,(long long)mask,(long long)sp->RTmask); + return(0); + } *kmdheightp = sp->CURRENT_HEIGHT; - return(sp->KOMODO_REALTIME); + return(sp->RTbufs[0][2]); } return(0); } + + From bffa91b20df0537f5ce2e20d15bd6c6d0141ff52 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 10:56:25 -0300 Subject: [PATCH 096/139] test --- src/komodo_gateway.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 0c065ed67..c9a92ac43 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -53,8 +53,8 @@ struct pax_transaction *komodo_paxmark(int32_t height,struct pax_transaction *sp void komodo_gateway_deposit(char *coinaddr,uint64_t value,int32_t shortflag,char *symbol,uint64_t fiatoshis,uint8_t *rmd160,uint256 txid,uint16_t vout,int32_t height,int32_t otherheight) // assetchain context { - struct pax_transaction *pax; int32_t addflag = 0; struct komodo_state *sp; char symbol[16],dest[16]; - sp = komodo_stateptr(symbol,dest); + struct pax_transaction *pax; int32_t addflag = 0; struct komodo_state *sp; char str[16],dest[16]; + sp = komodo_stateptr(str,dest); pthread_mutex_lock(&komodo_mutex); HASH_FIND(hh,PAX,&txid,sizeof(txid),pax); if ( pax == 0 ) @@ -135,7 +135,7 @@ int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,uint8_t uint64_t komodo_paxtotal() { - struct pax_transaction *pax,*tmp; uint64_t total = 0; + struct pax_transaction *pax,*tmp; int32_t ht; uint64_t total = 0; if ( komodo_isrealtime(&ht,ASSETCHAINS_SYMBOL) == 0 ) return(0); HASH_ITER(hh,PAX,pax,tmp) @@ -423,7 +423,7 @@ void komodo_passport_iteration() RTmask |= (1LL << baseid); memcpy(refsp->RTbufs[baseid+1],buf,sizeof(refsp->RTbufs[baseid+1])); } //else fprintf(stderr,"%s not RT\n",base); - } else fprintf(stderr,"%s size error RT\n",base); + } //else fprintf(stderr,"%s size error RT\n",base); fclose(fp); } else fprintf(stderr,"%s open error RT\n",base); } From b4116bb6f6225376b8986f2e62bf8c172dc45ba4 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 10:57:44 -0300 Subject: [PATCH 097/139] test --- src/komodo_globals.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/komodo_globals.h b/src/komodo_globals.h index f92b72248..83b8a0ae9 100644 --- a/src/komodo_globals.h +++ b/src/komodo_globals.h @@ -21,6 +21,7 @@ void komodo_init(int32_t height); void komodo_assetchain_pubkeys(char *jsonstr); int32_t komodo_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33); int32_t komodo_isrealtime(int32_t *kmdheightp,char *target); +uint64_t komodo_paxtotal(); pthread_mutex_t komodo_mutex; From 5461e2431dfe5d48023ee053cb3b4beaa92fe5b8 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 11:41:21 -0300 Subject: [PATCH 098/139] test --- src/komodo_utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 7e187d835..96e6a9905 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1522,7 +1522,7 @@ int32_t komodo_isrealtime(int32_t *kmdheightp,char *target) { if ( (baseid= komodo_baseid(target)) < 0 ) return(0); - mask = (1LL << 32) | (1LL << (baseid+1)); + mask = (1LL << 32) | (1LL << baseid); if ( (sp->RTmask & mask) != mask ) { printf("%s not RT mask.%llx vs RTmask.%llx\n",target,(long long)mask,(long long)sp->RTmask); From 48a3cd18c9c829e9f0e0298e2fcd8b3e4f27e1ad Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 11:50:57 -0300 Subject: [PATCH 099/139] test --- src/komodo_events.h | 2 +- src/komodo_gateway.h | 6 +++--- src/komodo_globals.h | 2 +- src/komodo_utils.h | 12 ++++-------- src/miner.cpp | 6 +++--- src/wallet/rpcwallet.cpp | 4 ++-- 6 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/komodo_events.h b/src/komodo_events.h index b11b1e101..d7411737f 100644 --- a/src/komodo_events.h +++ b/src/komodo_events.h @@ -112,7 +112,7 @@ void komodo_event_rewind(struct komodo_state *sp,char *symbol,int32_t height) { if ( ep->height < height ) break; - printf("[%s] undo %s event.%c ht.%d for rewind.%d\n",ASSETCHAINS_SYMBOL,symbol,ep->type,ep->height,height); + //printf("[%s] undo %s event.%c ht.%d for rewind.%d\n",ASSETCHAINS_SYMBOL,symbol,ep->type,ep->height,height); komodo_event_undo(sp,ep); sp->Komodo_numevents--; } diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index c9a92ac43..f36c71e98 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -136,7 +136,7 @@ int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,uint8_t uint64_t komodo_paxtotal() { struct pax_transaction *pax,*tmp; int32_t ht; uint64_t total = 0; - if ( komodo_isrealtime(&ht,ASSETCHAINS_SYMBOL) == 0 ) + if ( komodo_isrealtime(&ht) == 0 ) return(0); HASH_ITER(hh,PAX,pax,tmp) { @@ -161,7 +161,7 @@ int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t to if ( tokomodo == 0 ) { opcode = 'I'; - if ( komodo_isrealtime(&ht,ASSETCHAINS_SYMBOL) == 0 ) + if ( komodo_isrealtime(&ht) == 0 ) return(0); } else opcode = 'X'; @@ -437,7 +437,7 @@ void komodo_passport_iteration() if ( buf[0] != 0 && buf[0] == buf[1] ) { buf[2] = (uint32_t)time(NULL); - RTmask |= (1LL << baseid); + RTmask |= (1LL << baseid) | 1; memcpy(refsp->RTbufs[baseid+1],buf,sizeof(refsp->RTbufs[baseid+1])); if ( refid != 0 ) memcpy(refsp->RTbufs[0],buf,sizeof(refsp->RTbufs[0])); diff --git a/src/komodo_globals.h b/src/komodo_globals.h index 83b8a0ae9..9415a16d6 100644 --- a/src/komodo_globals.h +++ b/src/komodo_globals.h @@ -20,7 +20,7 @@ char *komodo_issuemethod(char *userpass,char *method,char *params,uint16_t port) void komodo_init(int32_t height); void komodo_assetchain_pubkeys(char *jsonstr); int32_t komodo_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33); -int32_t komodo_isrealtime(int32_t *kmdheightp,char *target); +int32_t komodo_isrealtime(int32_t *kmdheightp); uint64_t komodo_paxtotal(); pthread_mutex_t komodo_mutex; diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 96e6a9905..7f23d5af7 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1512,17 +1512,13 @@ struct komodo_state *komodo_stateptr(char *symbol,char *dest) return(komodo_stateptrget(symbol)); } -int32_t komodo_isrealtime(int32_t *kmdheightp,char *target) +int32_t komodo_isrealtime(int32_t *kmdheightp) { - char symbol[16],dest[16]; int32_t baseid; uint64_t mask; struct komodo_state *sp; + char symbol[16],dest[16]; uint64_t mask; struct komodo_state *sp; *kmdheightp = 0; - if ( target == 0 || target[0] == 0 ) - target = (char *)"KMD"; - if ( (sp= komodo_stateptrget(target)) != 0 ) + if ( (sp= komodo_stateptr(symbol,dest)) != 0 ) { - if ( (baseid= komodo_baseid(target)) < 0 ) - return(0); - mask = (1LL << 32) | (1LL << baseid); + mask = (1LL << 32) | 1LL; if ( (sp->RTmask & mask) != mask ) { printf("%s not RT mask.%llx vs RTmask.%llx\n",target,(long long)mask,(long long)sp->RTmask); diff --git a/src/miner.cpp b/src/miner.cpp index e74c07702..367584592 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -111,7 +111,7 @@ int32_t komodo_pax_opreturn(uint8_t *opret,int32_t maxsize); uint64_t komodo_paxtotal(); int32_t komodo_is_issuer(); int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *symbol,int32_t tokomodo); -int32_t komodo_isrealtime(int32_t *kmdheightp,char *target); +int32_t komodo_isrealtime(int32_t *kmdheightp); CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) { @@ -123,12 +123,12 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) CBlock *pblock = &pblocktemplate->block; // pointer for convenience if ( ASSETCHAINS_SYMBOL[0] != 0 && chainActive.Tip()->nHeight >= 100 ) { - isrealtime = komodo_isrealtime(&kmdheight,ASSETCHAINS_SYMBOL); + isrealtime = komodo_isrealtime(&kmdheight); fprintf(stderr,"start CreateNewBlock %s initdone.%d deposit %.8f mempool.%d RT.%u KOMODO_ON_DEMAND.%d\n",ASSETCHAINS_SYMBOL,KOMODO_INITDONE,(double)komodo_paxtotal()/COIN,(int32_t)mempool.GetTotalTxSize(),isrealtime,KOMODO_ON_DEMAND); while ( KOMODO_ON_DEMAND == 0 ) { deposits = komodo_paxtotal(); - if ( KOMODO_INITDONE == 0 || komodo_isrealtime(&kmdheight,ASSETCHAINS_SYMBOL) == 0 ) + if ( KOMODO_INITDONE == 0 || komodo_isrealtime(&kmdheight) == 0 ) { //fprintf(stderr,"INITDONE.%d RT.%d deposits %.8f\n",KOMODO_INITDONE,isrealtime,(double)deposits/COIN); } diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index fe3b2a854..b96b0a48a 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -481,7 +481,7 @@ int32_t komodo_opreturnscript(uint8_t *script,uint8_t type,uint8_t *opret,int32_ extern char ASSETCHAINS_SYMBOL[16]; int32_t komodo_is_issuer(); int32_t iguana_rwnum(int32_t rwflag,uint8_t *serialized,int32_t len,void *endianedp); -int32_t komodo_isrealtime(int32_t *kmdheightp,char *target); +int32_t komodo_isrealtime(int32_t *kmdheightp); Value paxdeposit(const Array& params, bool fHelp) { @@ -529,7 +529,7 @@ Value paxwithdraw(const Array& params, bool fHelp) return 0; if (fHelp || params.size() != 2) throw runtime_error("paxwithdraw \"address\" fiatamount"); - if ( komodo_isrealtime(&kmdheight,(char *)"KMD") == 0 ) + if ( komodo_isrealtime(&kmdheight) == 0 ) return(0); LOCK2(cs_main, pwalletMain->cs_wallet); CBitcoinAddress address(params[0].get_str()); From e557df4c1d74265f09ce469267ebc7fb1043f937 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 11:52:19 -0300 Subject: [PATCH 100/139] test --- src/komodo_utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 7f23d5af7..e4b80db04 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1521,7 +1521,7 @@ int32_t komodo_isrealtime(int32_t *kmdheightp) mask = (1LL << 32) | 1LL; if ( (sp->RTmask & mask) != mask ) { - printf("%s not RT mask.%llx vs RTmask.%llx\n",target,(long long)mask,(long long)sp->RTmask); + printf("%s not RT mask.%llx vs RTmask.%llx\n",ASSETCHAINS_SYMBOL,(long long)mask,(long long)sp->RTmask); return(0); } *kmdheightp = sp->CURRENT_HEIGHT; From 50373c3d53b30857aae0580170a9c4b01daf2fdd Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 11:59:36 -0300 Subject: [PATCH 101/139] test --- src/komodo_utils.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index e4b80db04..31cd4e8d8 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1514,11 +1514,13 @@ struct komodo_state *komodo_stateptr(char *symbol,char *dest) int32_t komodo_isrealtime(int32_t *kmdheightp) { - char symbol[16],dest[16]; uint64_t mask; struct komodo_state *sp; + char symbol[16],dest[16]; int32_t baseid; uint64_t mask; struct komodo_state *sp; *kmdheightp = 0; if ( (sp= komodo_stateptr(symbol,dest)) != 0 ) { - mask = (1LL << 32) | 1LL; + if ( (baseid= komodo_baseid(symbol)) < 0 ) + return(0); + mask = (1LL << 32) | (1LL << baseid); if ( (sp->RTmask & mask) != mask ) { printf("%s not RT mask.%llx vs RTmask.%llx\n",ASSETCHAINS_SYMBOL,(long long)mask,(long long)sp->RTmask); From 4fe186b7db1d9f6cd69195b29dccbf0ad9255d18 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 12:03:56 -0300 Subject: [PATCH 102/139] test --- src/miner.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/miner.cpp b/src/miner.cpp index 367584592..722042db6 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -128,9 +128,9 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) while ( KOMODO_ON_DEMAND == 0 ) { deposits = komodo_paxtotal(); - if ( KOMODO_INITDONE == 0 || komodo_isrealtime(&kmdheight) == 0 ) + if ( KOMODO_INITDONE == 0 || (isrealtime= komodo_isrealtime(&kmdheight)) == 0 ) { - //fprintf(stderr,"INITDONE.%d RT.%d deposits %.8f\n",KOMODO_INITDONE,isrealtime,(double)deposits/COIN); + fprintf(stderr,"INITDONE.%d RT.%d deposits %.8f ht.%d\n",KOMODO_INITDONE,isrealtime,(double)deposits/COIN,kmdheight); } else if ( deposits != 0 ) break; From 2f344fd0cb5432bc34a0845db3a8ce9442d7bf5a Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 12:11:14 -0300 Subject: [PATCH 103/139] test --- src/komodo_utils.h | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 31cd4e8d8..8d039fa54 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1514,22 +1514,10 @@ struct komodo_state *komodo_stateptr(char *symbol,char *dest) int32_t komodo_isrealtime(int32_t *kmdheightp) { - char symbol[16],dest[16]; int32_t baseid; uint64_t mask; struct komodo_state *sp; - *kmdheightp = 0; - if ( (sp= komodo_stateptr(symbol,dest)) != 0 ) - { - if ( (baseid= komodo_baseid(symbol)) < 0 ) - return(0); - mask = (1LL << 32) | (1LL << baseid); - if ( (sp->RTmask & mask) != mask ) - { - printf("%s not RT mask.%llx vs RTmask.%llx\n",ASSETCHAINS_SYMBOL,(long long)mask,(long long)sp->RTmask); - return(0); - } - *kmdheightp = sp->CURRENT_HEIGHT; - return(sp->RTbufs[0][2]); - } - return(0); + *kmdheightp = (int32_t)chainActive.Tip()->nHeight; + if ( *kmdheightp != 0 && *kmdheightp == (int32_t)komodo_longestchain() ) + return(1); + else return(0); } From 439e76aeef1531266b18c9cc0c7deb0510796d98 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 12:13:08 -0300 Subject: [PATCH 104/139] test --- src/komodo_gateway.h | 2 -- src/komodo_globals.h | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index f36c71e98..a042f1898 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -376,8 +376,6 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 return(typestr); } -int32_t komodo_longestchain(); - void komodo_passport_iteration() { static long lastpos[34]; static char userpass[33][1024]; diff --git a/src/komodo_globals.h b/src/komodo_globals.h index 9415a16d6..a4ab49acf 100644 --- a/src/komodo_globals.h +++ b/src/komodo_globals.h @@ -22,6 +22,7 @@ void komodo_assetchain_pubkeys(char *jsonstr); int32_t komodo_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33); int32_t komodo_isrealtime(int32_t *kmdheightp); uint64_t komodo_paxtotal(); +int32_t komodo_longestchain(); pthread_mutex_t komodo_mutex; From 8a7f70639af9f42ea8d11ca148324358369d8370 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 12:16:27 -0300 Subject: [PATCH 105/139] test --- src/komodo_bitcoind.h | 8 ++++++++ src/komodo_utils.h | 7 ------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index fdd383c33..80bb43f79 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -577,3 +577,11 @@ uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 } return(0); } + +int32_t komodo_isrealtime(int32_t *kmdheightp) +{ + *kmdheightp = (int32_t)chainActive.Tip()->nHeight; + if ( *kmdheightp != 0 && *kmdheightp == (int32_t)komodo_longestchain() ) + return(1); + else return(0); +} diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 8d039fa54..c2b4f4b4f 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1512,12 +1512,5 @@ struct komodo_state *komodo_stateptr(char *symbol,char *dest) return(komodo_stateptrget(symbol)); } -int32_t komodo_isrealtime(int32_t *kmdheightp) -{ - *kmdheightp = (int32_t)chainActive.Tip()->nHeight; - if ( *kmdheightp != 0 && *kmdheightp == (int32_t)komodo_longestchain() ) - return(1); - else return(0); -} From 106944866d8ff382c235ecfe3d0bcbece8e57e43 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 12:35:00 -0300 Subject: [PATCH 106/139] test --- src/komodo_gateway.h | 2 +- src/miner.cpp | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index a042f1898..2c6b8cf73 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -140,7 +140,7 @@ uint64_t komodo_paxtotal() return(0); HASH_ITER(hh,PAX,pax,tmp) { - printf("pax.%s marked.%d %.8f -> %.8f\n",pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis)); + //printf("pax.%s marked.%d %.8f -> %.8f\n",pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis)); if ( pax->marked == 0 ) { if ( komodo_is_issuer() != 0 ) diff --git a/src/miner.cpp b/src/miner.cpp index 722042db6..51ab93350 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -130,7 +130,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) deposits = komodo_paxtotal(); if ( KOMODO_INITDONE == 0 || (isrealtime= komodo_isrealtime(&kmdheight)) == 0 ) { - fprintf(stderr,"INITDONE.%d RT.%d deposits %.8f ht.%d\n",KOMODO_INITDONE,isrealtime,(double)deposits/COIN,kmdheight); + //fprintf(stderr,"INITDONE.%d RT.%d deposits %.8f ht.%d\n",KOMODO_INITDONE,isrealtime,(double)deposits/COIN,kmdheight); } else if ( deposits != 0 ) break; @@ -604,7 +604,8 @@ void static BitcoinMiner(CWallet *pwallet) } else Mining_start = 0; while (true) { - //fprintf(stderr,"%s start mining loop\n",ASSETCHAINS_SYMBOL); + if ( ASSETCHAINS_SYMBOL[0] != 0 ) + fprintf(stderr,"%s start mining loop\n",ASSETCHAINS_SYMBOL); // Hash state KOMODO_CHOSEN_ONE = 0; crypto_generichash_blake2b_state state; @@ -631,8 +632,8 @@ void static BitcoinMiner(CWallet *pwallet) solutionTargetChecks.increment(); if ( UintToArith256(pblock->GetHash()) > hashTarget ) { - //if ( ASSETCHAINS_SYMBOL[0] != 0 ) - // printf("missed target\n"); + if ( ASSETCHAINS_SYMBOL[0] != 0 ) + printf("missed target\n"); return false; } if ( ASSETCHAINS_SYMBOL[0] == 0 && Mining_start != 0 && time(NULL) < Mining_start+ROUNDROBIN_DELAY ) @@ -723,24 +724,27 @@ void static BitcoinMiner(CWallet *pwallet) if (vNodes.empty() && chainparams.MiningRequiresPeers()) { if ( ASSETCHAINS_SYMBOL[0] == 0 || Mining_height >= 100 ) + { + fprintf(stderr,"no nodes, break\n"); break; + } } if ((UintToArith256(pblock->nNonce) & 0xffff) == 0xffff) { if ( ASSETCHAINS_SYMBOL[0] != 0 ) - printf("0xffff, break\n"); + fprintf(stderr,"0xffff, break\n"); break; } if (mempool.GetTransactionsUpdated() != nTransactionsUpdatedLast && GetTime() - nStart > 60) { - //if ( ASSETCHAINS_SYMBOL[0] != 0 ) - // printf("timeout, break\n"); + if ( ASSETCHAINS_SYMBOL[0] != 0 ) + fprintf(stderr,"timeout, break\n"); break; } if ( pindexPrev != chainActive.Tip() ) { - //if ( ASSETCHAINS_SYMBOL[0] != 0 ) - // printf("Tip advanced, break\n"); + if ( ASSETCHAINS_SYMBOL[0] != 0 ) + fprintf(stderr,"Tip advanced, break\n"); break; } // Update nNonce and nTime From 986df802e07264b3e675448c89934debe7caf8e1 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 13:05:46 -0300 Subject: [PATCH 107/139] test --- src/komodo_gateway.h | 38 ++++++++++++++++++++++++-------------- src/miner.cpp | 18 +++++++++--------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 2c6b8cf73..8beb7e152 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -51,7 +51,7 @@ struct pax_transaction *komodo_paxmark(int32_t height,struct pax_transaction *sp return(pax); } -void komodo_gateway_deposit(char *coinaddr,uint64_t value,int32_t shortflag,char *symbol,uint64_t fiatoshis,uint8_t *rmd160,uint256 txid,uint16_t vout,int32_t height,int32_t otherheight) // assetchain context +void komodo_gateway_deposit(char *coinaddr,uint64_t value,char *symbol,uint64_t fiatoshis,uint8_t *rmd160,uint256 txid,uint16_t vout,int32_t height,int32_t otherheight) // assetchain context { struct pax_transaction *pax; int32_t addflag = 0; struct komodo_state *sp; char str[16],dest[16]; sp = komodo_stateptr(str,dest); @@ -76,7 +76,6 @@ void komodo_gateway_deposit(char *coinaddr,uint64_t value,int32_t shortflag,char { strcpy(pax->coinaddr,coinaddr); pax->komodoshis = value; - pax->shortflag = shortflag; strcpy(pax->symbol,symbol); pax->fiatoshis = fiatoshis; memcpy(pax->rmd160,rmd160,20); @@ -101,7 +100,7 @@ int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,uint8_t int32_t i,n=0,j,len; for (i=0; i<4; i++) base[i] = opretbuf[opretlen-4+i]; - if ( ASSETCHAINS_SYMBOL[0] == 0 || strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0 ) // shortflag + if ( ASSETCHAINS_SYMBOL[0] == 0 || strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0 ) { opretbuf++, opretlen--; for (n=len=0; nkomodoshis; } } - printf("paxtotal %.8f\n",dstr(total)); + //printf("paxtotal %.8f\n",dstr(total)); return(total); } @@ -167,10 +163,10 @@ int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t to else opcode = 'X'; HASH_ITER(hh,PAX,pax,tmp) { - printf("pax.%s marked.%d %.8f -> %.8f\n",pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis)); - if ( pax->marked != 0 || strcmp(pax->symbol,ASSETCHAINS_SYMBOL) != 0 ) + //printf("pax.%s marked.%d %.8f -> %.8f\n",pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis)); + if ( pax->marked != 0 || strcmp(pax->symbol,symbol) != 0 ) continue; - if ( ASSETCHAINS_SYMBOL[0] != 0 ) + //if ( ASSETCHAINS_SYMBOL[0] != 0 ) printf("pax.%s marked.%d %.8f -> %.8f\n",ASSETCHAINS_SYMBOL,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis)); txNew->vout.resize(numvouts+1); txNew->vout[numvouts].nValue = (opcode == 'I') ? pax->fiatoshis : pax->komodoshis; @@ -340,7 +336,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 { if ( komodo_paxfind(&space,txid,vout) == 0 ) { - komodo_gateway_deposit(coinaddr,value,shortflag,base,fiatoshis,rmd160,txid,vout,kmdheight,height); + komodo_gateway_deposit(coinaddr,value,base,fiatoshis,rmd160,txid,vout,kmdheight,height); } else printf("duplicate deposit\n"); } } @@ -359,7 +355,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 // printf("%02x",((uint8_t *)&txids[i])[j]); if ( komodo_paxmark(height,&space,txids[i],vouts[i],height) == 0 ) { - komodo_gateway_deposit(0,0,0,0,0,0,txids[i],vouts[i],height,0); + komodo_gateway_deposit(0,0,0,0,0,txids[i],vouts[i],height,0); } else { @@ -368,9 +364,23 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 } } } - else if ( tokomodo != 0 && opretbuf[0] == 'X' ) + else if ( tokomodo != 0 && opretbuf[0] == 'W' ) { // verify and update limits + for (i=0; iGetHash()) > hashTarget ) { - if ( ASSETCHAINS_SYMBOL[0] != 0 ) - printf("missed target\n"); + if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 ) + fprintf(stderr,"missed target\n"); return false; } if ( ASSETCHAINS_SYMBOL[0] == 0 && Mining_start != 0 && time(NULL) < Mining_start+ROUNDROBIN_DELAY ) { - printf("Round robin diff sleep %d\n",(int32_t)(Mining_start+ROUNDROBIN_DELAY-time(NULL))); + //printf("Round robin diff sleep %d\n",(int32_t)(Mining_start+ROUNDROBIN_DELAY-time(NULL))); sleep(Mining_start+ROUNDROBIN_DELAY-time(NULL)); KOMODO_CHOSEN_ONE = 1; } @@ -725,25 +725,25 @@ void static BitcoinMiner(CWallet *pwallet) { if ( ASSETCHAINS_SYMBOL[0] == 0 || Mining_height >= 100 ) { - fprintf(stderr,"no nodes, break\n"); + //fprintf(stderr,"no nodes, break\n"); break; } } if ((UintToArith256(pblock->nNonce) & 0xffff) == 0xffff) { - if ( ASSETCHAINS_SYMBOL[0] != 0 ) + if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 ) fprintf(stderr,"0xffff, break\n"); break; } if (mempool.GetTransactionsUpdated() != nTransactionsUpdatedLast && GetTime() - nStart > 60) { - if ( ASSETCHAINS_SYMBOL[0] != 0 ) + if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 ) fprintf(stderr,"timeout, break\n"); break; } if ( pindexPrev != chainActive.Tip() ) { - if ( ASSETCHAINS_SYMBOL[0] != 0 ) + if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 ) fprintf(stderr,"Tip advanced, break\n"); break; } From 1ed46112c263305b5e6c8ad1f9e85c959878ba27 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 14:08:31 -0300 Subject: [PATCH 108/139] test --- src/komodo_gateway.h | 73 ++++++++++++++++++++++++-------------------- src/miner.cpp | 4 +-- 2 files changed, 42 insertions(+), 35 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 8beb7e152..0d52fabb2 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -95,7 +95,7 @@ void komodo_gateway_deposit(char *coinaddr,uint64_t value,char *symbol,uint64_t } } -int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,uint8_t *opretbuf,int32_t opretlen,int32_t iskomodo) +int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,uint8_t *opretbuf,uint64_t *values,int32_t *kmdheights,int32_t *otherheights,int8_t *baseids,int32_t opretlen,int32_t iskomodo) { int32_t i,n=0,j,len; for (i=0; i<4; i++) @@ -122,6 +122,13 @@ int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,uint8_t for (i=0; opretbuf[len+i]!=0&&i<3; i++) symbol[i] = opretbuf[len+i]; symbol[i] = 0; + if ( values != 0 && kmdheights != 0 && otherheights != 0 && baseids != 0 ) + { + values[i] = fiatoshis; + kmdheights[i] = height; + otherheights[i] = otherheight; + baseids[i] = komodo_baseid(symbol); + } printf(">>>>>>> iskomodo X: (%s) fiat %.8f kmdheight.%d other.%d\n",symbol,dstr(fiatoshis),height,otherheight); } } @@ -223,7 +230,11 @@ int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t to int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above block is valid pax pricing { - int32_t i,j,n,num,opretlen,offset=1,errs=0,matched=0; uint256 hash,txids[64]; char symbol[16],base[16]; uint16_t vouts[64]; uint8_t *script,opcode; struct pax_transaction *pax,space; + int32_t i,j,n,num,opretlen,offset=1,errs=0,matched=0,kmdheights[64],otherheights[64]; uint256 hash,txids[64]; char symbol[16],base[16]; uint16_t vouts[64]; int8_t baseids[64]; uint8_t *script,opcode; uint64_t values[64]; struct pax_transaction *pax,space; + memset(baseids,0xff,sizeof(baseids)); + memset(values,0,sizeof(values)); + memset(kmdheights,0,sizeof(kmdheights)); + memset(otherheights,0,sizeof(otherheights)); n = block.vtx[0].vout.size(); script = (uint8_t *)block.vtx[0].vout[n-1].scriptPubKey.data(); if ( n <= 2 || script[0] != 0x6a ) @@ -244,7 +255,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above } if ( script[offset] == opcode && opretlen < block.vtx[0].vout[n-1].scriptPubKey.size() ) { - if ( (num= komodo_issued_opreturn(base,txids,vouts,&script[offset],opretlen,opcode == 'X')) > 0 ) + if ( (num= komodo_issued_opreturn(base,txids,vouts,values,kmdheights,otherheights,baseids,&script[offset],opretlen,opcode == 'X')) > 0 ) { for (i=1; i 0 ) + if ( (n= komodo_issued_opreturn(base,txids,vouts,values,kmdheights,otherheights,baseids,opretbuf,opretlen,0)) > 0 ) { for (i=0; i= 38 ) { - // verify and update limits - for (i=0; ivtx[0] = txNew; pblocktemplate->vTxFees[0] = -nFees; From 03e2d4179405f6200d37dabefee7f8b108535d3a Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 14:10:48 -0300 Subject: [PATCH 109/139] test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 0d52fabb2..736283400 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -95,7 +95,7 @@ void komodo_gateway_deposit(char *coinaddr,uint64_t value,char *symbol,uint64_t } } -int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,uint8_t *opretbuf,uint64_t *values,int32_t *kmdheights,int32_t *otherheights,int8_t *baseids,int32_t opretlen,int32_t iskomodo) +int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,uint64_t *values,int32_t *kmdheights,int32_t *otherheights,int8_t *baseids,uint8_t *opretbuf,int32_t opretlen,int32_t iskomodo) { int32_t i,n=0,j,len; for (i=0; i<4; i++) From 1f73d3ce9fc20e4c7c1905dd11ce287eb1adb5ff Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 14:12:26 -0300 Subject: [PATCH 110/139] test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 736283400..593bd9064 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -379,7 +379,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,fiatoshis); typestr = "withdraw"; printf("%s kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed); - if ( komodo_paxmark(height,&space,txid,vout,kmdheight)) == 0 ) + if ( komodo_paxmark(height,&space,txid,vout,kmdheight) == 0 ) { if ( (pax= komodo_paxfind(&space,txids[i],vouts[i])) != 0 ) { From 521b866bdb2b3b5b11a30aca13f28c6c085c8031 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 14:14:03 -0300 Subject: [PATCH 111/139] test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 593bd9064..0969bf1cc 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -95,7 +95,7 @@ void komodo_gateway_deposit(char *coinaddr,uint64_t value,char *symbol,uint64_t } } -int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,uint64_t *values,int32_t *kmdheights,int32_t *otherheights,int8_t *baseids,uint8_t *opretbuf,int32_t opretlen,int32_t iskomodo) +int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,int64_t *values,int32_t *kmdheights,int32_t *otherheights,int8_t *baseids,uint8_t *opretbuf,int32_t opretlen,int32_t iskomodo) { int32_t i,n=0,j,len; for (i=0; i<4; i++) From 47837c8c5c93136b0975742720ff823a70e6d456 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 14:14:56 -0300 Subject: [PATCH 112/139] test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 0969bf1cc..626fdd7f8 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -230,7 +230,7 @@ int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t to int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above block is valid pax pricing { - int32_t i,j,n,num,opretlen,offset=1,errs=0,matched=0,kmdheights[64],otherheights[64]; uint256 hash,txids[64]; char symbol[16],base[16]; uint16_t vouts[64]; int8_t baseids[64]; uint8_t *script,opcode; uint64_t values[64]; struct pax_transaction *pax,space; + int32_t i,j,n,num,opretlen,offset=1,errs=0,matched=0,kmdheights[64],otherheights[64]; uint256 hash,txids[64]; char symbol[16],base[16]; uint16_t vouts[64]; int8_t baseids[64]; uint8_t *script,opcode; int64_t values[64]; struct pax_transaction *pax,space; memset(baseids,0xff,sizeof(baseids)); memset(values,0,sizeof(values)); memset(kmdheights,0,sizeof(kmdheights)); From 02f6120cb6ae562be1a8d61a03385f84b5d23b72 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 14:29:19 -0300 Subject: [PATCH 113/139] test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 626fdd7f8..79c7df462 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -368,7 +368,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 } } } - else if ( strncmp((char *)"KMD",(char *)&opretbuf[opretlen-4],3) == 0 ) + else { if ( tokomodo != 0 && opretbuf[0] == 'W' && opretlen >= 38 ) { From 5ffc9913979ea1bac3c58181b3948bba557ea6b2 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 14:35:02 -0300 Subject: [PATCH 114/139] test --- src/komodo_gateway.h | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 79c7df462..db49aa650 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -354,7 +354,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 } } } - else if ( strncmp((char *)"KMD",(char *)&opretbuf[opretlen-4],3) != 0 ) + else if ( strncmp((char *)"KMD",(char *)&opretbuf[opretlen-4],3) != 0 || opretlen == 38 ) { if ( tokomodo == 0 && opretbuf[0] == 'I' ) // assetchain coinbase { @@ -367,10 +367,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 } } } - } - else - { - if ( tokomodo != 0 && opretbuf[0] == 'W' && opretlen >= 38 ) + else if ( tokomodo != 0 && opretbuf[0] == 'W' && opretlen >= 38 ) { iguana_rwnum(0,&opretbuf[34],sizeof(kmdheight),&kmdheight); memset(base,0,sizeof(base)); From 01d9ed2fc67bd1651772832f02c8c06d5997a1f2 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 14:38:35 -0300 Subject: [PATCH 115/139] test --- src/komodo_gateway.h | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index db49aa650..bd1c3e04e 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -354,6 +354,25 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 } } } + else if ( opretbuf[0] == 'W' && opretlen >= 38 ) + { + iguana_rwnum(0,&opretbuf[34],sizeof(kmdheight),&kmdheight); + memset(base,0,sizeof(base)); + PAX_pubkey(0,&opretbuf[1],&addrtype,rmd160,base,&shortflag,&fiatoshis); + bitcoin_address(coinaddr,addrtype,rmd160,20); + checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,fiatoshis); + typestr = "withdraw"; + printf("%s kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed); + if ( komodo_paxmark(height,&space,txid,vout,kmdheight) == 0 ) + { + if ( (pax= komodo_paxfind(&space,txids[i],vouts[i])) != 0 ) + { + + } + printf("notarize %s %.8f kmd.%d other.%d\n",ASSETCHAINS_SYMBOL,dstr(value),kmdheight,height); + //komodo_gateway_deposit(0,0,0,0,0,txids[i],vouts[i],height,0); + } + } else if ( strncmp((char *)"KMD",(char *)&opretbuf[opretlen-4],3) != 0 || opretlen == 38 ) { if ( tokomodo == 0 && opretbuf[0] == 'I' ) // assetchain coinbase @@ -367,25 +386,6 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 } } } - else if ( tokomodo != 0 && opretbuf[0] == 'W' && opretlen >= 38 ) - { - iguana_rwnum(0,&opretbuf[34],sizeof(kmdheight),&kmdheight); - memset(base,0,sizeof(base)); - PAX_pubkey(0,&opretbuf[1],&addrtype,rmd160,base,&shortflag,&fiatoshis); - bitcoin_address(coinaddr,addrtype,rmd160,20); - checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,fiatoshis); - typestr = "withdraw"; - printf("%s kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed); - if ( komodo_paxmark(height,&space,txid,vout,kmdheight) == 0 ) - { - if ( (pax= komodo_paxfind(&space,txids[i],vouts[i])) != 0 ) - { - - } - printf("notarize %s %.8f kmd.%d other.%d\n",ASSETCHAINS_SYMBOL,dstr(value),kmdheight,height); - //komodo_gateway_deposit(0,0,0,0,0,txids[i],vouts[i],height,0); - } - } } return(typestr); } From 846ec673dba75ef986594f318df7e6b898f11284 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 14:47:02 -0300 Subject: [PATCH 116/139] test --- src/komodo_gateway.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index bd1c3e04e..69da35d5e 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -309,7 +309,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int32_t opretlen,uint256 txid,uint16_t vout) { - uint8_t rmd160[20],addrtype,shortflag,pubkey33[33]; int32_t i,j,n,len,tokomodo,kmdheight,otherheights[64],kmdheights[64]; int8_t baseids[64]; char base[4],coinaddr[64],destaddr[64]; struct pax_transaction space; uint256 txids[64]; uint16_t vouts[64]; uint64_t seed; int64_t fiatoshis,checktoshis,values[64]; struct pax_transaction *pax; + uint8_t rmd160[20],addrtype,shortflag,pubkey33[33]; int32_t i,j,n,len,tokomodo,kmdheight,otherheights[64],kmdheights[64]; int8_t baseids[64]; char base[4],coinaddr[64],destaddr[64],str[65]; struct pax_transaction space; uint256 txids[64]; uint16_t vouts[64]; uint64_t seed; int64_t fiatoshis,checktoshis,values[64]; struct pax_transaction *pax; const char *typestr = "unknown"; memset(baseids,0xff,sizeof(baseids)); memset(values,0,sizeof(values)); @@ -358,11 +358,11 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 { iguana_rwnum(0,&opretbuf[34],sizeof(kmdheight),&kmdheight); memset(base,0,sizeof(base)); - PAX_pubkey(0,&opretbuf[1],&addrtype,rmd160,base,&shortflag,&fiatoshis); + PAX_pubkey(0,&opretbuf[1],&addrtype,rmd160,base,&shortflag,&checktoshis); bitcoin_address(coinaddr,addrtype,rmd160,20); - checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,fiatoshis); + convtoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,value); typestr = "withdraw"; - printf("%s kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed); + printf("%s.height.%d vs height.%d check %.8f/%.8f vs %.8f tokomodo.%d %d seed.%llx -> %s/v%d (%s)\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(convtoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed,bits256_str(str,txid),vout,coinaddr); if ( komodo_paxmark(height,&space,txid,vout,kmdheight) == 0 ) { if ( (pax= komodo_paxfind(&space,txids[i],vouts[i])) != 0 ) @@ -371,7 +371,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 } printf("notarize %s %.8f kmd.%d other.%d\n",ASSETCHAINS_SYMBOL,dstr(value),kmdheight,height); //komodo_gateway_deposit(0,0,0,0,0,txids[i],vouts[i],height,0); - } + } else printf("withdraw already there\n"); } else if ( strncmp((char *)"KMD",(char *)&opretbuf[opretlen-4],3) != 0 || opretlen == 38 ) { From 67cca2ab0a063876571ab43f62a132450b6da405 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 14:51:31 -0300 Subject: [PATCH 117/139] test --- src/komodo_gateway.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 69da35d5e..f89ce73e3 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -309,7 +309,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int32_t opretlen,uint256 txid,uint16_t vout) { - uint8_t rmd160[20],addrtype,shortflag,pubkey33[33]; int32_t i,j,n,len,tokomodo,kmdheight,otherheights[64],kmdheights[64]; int8_t baseids[64]; char base[4],coinaddr[64],destaddr[64],str[65]; struct pax_transaction space; uint256 txids[64]; uint16_t vouts[64]; uint64_t seed; int64_t fiatoshis,checktoshis,values[64]; struct pax_transaction *pax; + uint8_t rmd160[20],addrtype,shortflag,pubkey33[33]; int32_t i,j,n,len,tokomodo,kmdheight,otherheights[64],kmdheights[64]; int8_t baseids[64]; char base[4],coinaddr[64],destaddr[64]; struct pax_transaction space; uint256 txids[64]; uint16_t vouts[64]; uint64_t convtoshis,seed; int64_t fiatoshis,checktoshis,values[64]; struct pax_transaction *pax; const char *typestr = "unknown"; memset(baseids,0xff,sizeof(baseids)); memset(values,0,sizeof(values)); @@ -362,7 +362,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 bitcoin_address(coinaddr,addrtype,rmd160,20); convtoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,value); typestr = "withdraw"; - printf("%s.height.%d vs height.%d check %.8f/%.8f vs %.8f tokomodo.%d %d seed.%llx -> %s/v%d (%s)\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(convtoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed,bits256_str(str,txid),vout,coinaddr); + printf("%s.height.%d vs height.%d check %.8f/%.8f vs %.8f tokomodo.%d %d seed.%llx -> %s/v%d (%s)\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(convtoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed,txid.ToString.c_str(),vout,coinaddr); if ( komodo_paxmark(height,&space,txid,vout,kmdheight) == 0 ) { if ( (pax= komodo_paxfind(&space,txids[i],vouts[i])) != 0 ) @@ -371,7 +371,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 } printf("notarize %s %.8f kmd.%d other.%d\n",ASSETCHAINS_SYMBOL,dstr(value),kmdheight,height); //komodo_gateway_deposit(0,0,0,0,0,txids[i],vouts[i],height,0); - } else printf("withdraw already there\n"); + } else printf("%s/v%d -> %s withdraw already there\n",txid.ToString.c_str(),vout,coinaddr); } else if ( strncmp((char *)"KMD",(char *)&opretbuf[opretlen-4],3) != 0 || opretlen == 38 ) { From 0157f10f31d9f53be92b87cad15c32cf7f916ed0 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 14:53:31 -0300 Subject: [PATCH 118/139] test --- src/komodo_gateway.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index f89ce73e3..7f8c0117f 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -362,7 +362,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 bitcoin_address(coinaddr,addrtype,rmd160,20); convtoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,value); typestr = "withdraw"; - printf("%s.height.%d vs height.%d check %.8f/%.8f vs %.8f tokomodo.%d %d seed.%llx -> %s/v%d (%s)\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(convtoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed,txid.ToString.c_str(),vout,coinaddr); + printf("%s.height.%d vs height.%d check %.8f/%.8f vs %.8f tokomodo.%d %d seed.%llx -> (%s)\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(convtoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed,coinaddr); if ( komodo_paxmark(height,&space,txid,vout,kmdheight) == 0 ) { if ( (pax= komodo_paxfind(&space,txids[i],vouts[i])) != 0 ) @@ -371,7 +371,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 } printf("notarize %s %.8f kmd.%d other.%d\n",ASSETCHAINS_SYMBOL,dstr(value),kmdheight,height); //komodo_gateway_deposit(0,0,0,0,0,txids[i],vouts[i],height,0); - } else printf("%s/v%d -> %s withdraw already there\n",txid.ToString.c_str(),vout,coinaddr); + } else printf(" %.8f -> %s withdraw already there\n",dstr(value),coinaddr); } else if ( strncmp((char *)"KMD",(char *)&opretbuf[opretlen-4],3) != 0 || opretlen == 38 ) { From c3d94aec35ed69c32c5003d298f261c2243febef Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 15:02:06 -0300 Subject: [PATCH 119/139] test --- src/komodo_gateway.h | 17 ++++++----------- src/komodo_pax.h | 2 +- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 7f8c0117f..5a3d2f875 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -309,7 +309,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int32_t opretlen,uint256 txid,uint16_t vout) { - uint8_t rmd160[20],addrtype,shortflag,pubkey33[33]; int32_t i,j,n,len,tokomodo,kmdheight,otherheights[64],kmdheights[64]; int8_t baseids[64]; char base[4],coinaddr[64],destaddr[64]; struct pax_transaction space; uint256 txids[64]; uint16_t vouts[64]; uint64_t convtoshis,seed; int64_t fiatoshis,checktoshis,values[64]; struct pax_transaction *pax; + uint8_t rmd160[20],addrtype,shortflag,pubkey33[33]; int32_t i,j,n,len,tokomodo,kmdheight,otherheights[64],kmdheights[64]; int8_t baseids[64]; char base[4],coinaddr[64],destaddr[64]; struct pax_transaction space; uint256 txids[64]; uint16_t vouts[64]; uint64_t convtoshis,seed; int64_t fiatoshis,komodoshis,values[64]; struct pax_transaction *pax; const char *typestr = "unknown"; memset(baseids,0xff,sizeof(baseids)); memset(values,0,sizeof(values)); @@ -358,19 +358,14 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 { iguana_rwnum(0,&opretbuf[34],sizeof(kmdheight),&kmdheight); memset(base,0,sizeof(base)); - PAX_pubkey(0,&opretbuf[1],&addrtype,rmd160,base,&shortflag,&checktoshis); + PAX_pubkey(0,&opretbuf[1],&addrtype,rmd160,base,&shortflag,&komodoshis); bitcoin_address(coinaddr,addrtype,rmd160,20); - convtoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,value); + checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,value); typestr = "withdraw"; - printf("%s.height.%d vs height.%d check %.8f/%.8f vs %.8f tokomodo.%d %d seed.%llx -> (%s)\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(convtoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed,coinaddr); - if ( komodo_paxmark(height,&space,txid,vout,kmdheight) == 0 ) + printf("%s.height.%d vs height.%d check %.8f/%.8f vs %.8f tokomodo.%d %d seed.%llx -> (%s)\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(komodoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed,coinaddr); + if ( (pax= komodo_paxfind(&space,txid,vout)) != 0 ) { - if ( (pax= komodo_paxfind(&space,txids[i],vouts[i])) != 0 ) - { - - } - printf("notarize %s %.8f kmd.%d other.%d\n",ASSETCHAINS_SYMBOL,dstr(value),kmdheight,height); - //komodo_gateway_deposit(0,0,0,0,0,txids[i],vouts[i],height,0); + printf("notarize %s %.8f -> %.8f kmd.%d other.%d\n",ASSETCHAINS_SYMBOL,dstr(value),dstr(komodoshis),kmdheight,height); } else printf(" %.8f -> %s withdraw already there\n",dstr(value),coinaddr); } else if ( strncmp((char *)"KMD",(char *)&opretbuf[opretlen-4],3) != 0 || opretlen == 38 ) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index f582a9721..a4af4b5aa 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -469,7 +469,7 @@ uint64_t PAX_fiatdest(uint64_t *seedp,int32_t tokomodo,char *destaddr,uint8_t pu if ( fiatoshis < 0 ) shortflag = 1, fiatoshis = -fiatoshis; komodoshis = komodo_paxprice(seedp,height,base,(char *)"KMD",(uint64_t)fiatoshis); - //printf("PAX_fiatdest ht.%d price %s %.8f -> KMD %.8f\n",height,base,(double)fiatoshis/COIN,(double)komodoshis/COIN); + printf("PAX_fiatdest ht.%d price %s %.8f -> KMD %.8f\n",height,base,(double)fiatoshis/COIN,(double)komodoshis/COIN); if ( bitcoin_addr2rmd160(&addrtype,rmd160,coinaddr) == 20 ) { PAX_pubkey(1,pubkey33,&addrtype,rmd160,base,&shortflag,tokomodo != 0 ? &komodoshis : &fiatoshis); From c10b348c331902ee68028e58ace879900989798b Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 15:03:11 -0300 Subject: [PATCH 120/139] test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 5a3d2f875..295dc6c90 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -309,7 +309,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int32_t opretlen,uint256 txid,uint16_t vout) { - uint8_t rmd160[20],addrtype,shortflag,pubkey33[33]; int32_t i,j,n,len,tokomodo,kmdheight,otherheights[64],kmdheights[64]; int8_t baseids[64]; char base[4],coinaddr[64],destaddr[64]; struct pax_transaction space; uint256 txids[64]; uint16_t vouts[64]; uint64_t convtoshis,seed; int64_t fiatoshis,komodoshis,values[64]; struct pax_transaction *pax; + uint8_t rmd160[20],addrtype,shortflag,pubkey33[33]; int32_t i,j,n,len,tokomodo,kmdheight,otherheights[64],kmdheights[64]; int8_t baseids[64]; char base[4],coinaddr[64],destaddr[64]; struct pax_transaction space; uint256 txids[64]; uint16_t vouts[64]; uint64_t convtoshis,seed; int64_t fiatoshis,komodoshis,checktoshis,values[64]; struct pax_transaction *pax; const char *typestr = "unknown"; memset(baseids,0xff,sizeof(baseids)); memset(values,0,sizeof(values)); From ffbc2f003750a18d414b57342aed266418e0aab9 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 15:12:55 -0300 Subject: [PATCH 121/139] test --- src/komodo_bitcoind.h | 5 ++++- src/komodo_gateway.h | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index 80bb43f79..163af2e97 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -580,7 +580,10 @@ uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 int32_t komodo_isrealtime(int32_t *kmdheightp) { - *kmdheightp = (int32_t)chainActive.Tip()->nHeight; + struct komodo_state *sp; + if ( (sp= komodo_stateptrget("KMD")) != 0 ) + *kmdheightp = sp->CURRENT_HEIGHT; + else *kmdheightp = 0; if ( *kmdheightp != 0 && *kmdheightp == (int32_t)komodo_longestchain() ) return(1); else return(0); diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 295dc6c90..4f97224ae 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -363,7 +363,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,value); typestr = "withdraw"; printf("%s.height.%d vs height.%d check %.8f/%.8f vs %.8f tokomodo.%d %d seed.%llx -> (%s)\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(komodoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed,coinaddr); - if ( (pax= komodo_paxfind(&space,txid,vout)) != 0 ) + if ( (pax= komodo_paxfind(&space,txid,vout)) == 0 ) { printf("notarize %s %.8f -> %.8f kmd.%d other.%d\n",ASSETCHAINS_SYMBOL,dstr(value),dstr(komodoshis),kmdheight,height); } else printf(" %.8f -> %s withdraw already there\n",dstr(value),coinaddr); From 8a7c9241b6c418066fd315dab8003bb247fc4709 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 15:14:36 -0300 Subject: [PATCH 122/139] test --- src/komodo_bitcoind.h | 2 +- src/komodo_utils.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index 163af2e97..ae4fa58be 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -581,7 +581,7 @@ uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 int32_t komodo_isrealtime(int32_t *kmdheightp) { struct komodo_state *sp; - if ( (sp= komodo_stateptrget("KMD")) != 0 ) + if ( (sp= komodo_stateptrget((char *)"KMD")) != 0 ) *kmdheightp = sp->CURRENT_HEIGHT; else *kmdheightp = 0; if ( *kmdheightp != 0 && *kmdheightp == (int32_t)komodo_longestchain() ) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index c2b4f4b4f..d77d8ed72 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -1485,20 +1485,20 @@ void komodo_nameset(char *symbol,char *dest,char *source) { if ( source[0] == 0 ) { - strcpy(symbol,"KMD"); - strcpy(dest,"BTC"); + strcpy(symbol,(char *)"KMD"); + strcpy(dest,(char *)"BTC"); } else { strcpy(symbol,source); - strcpy(dest,"KMD"); + strcpy(dest,(char *)"KMD"); } } struct komodo_state *komodo_stateptrget(char *base) { int32_t baseid; - if ( base == 0 || base[0] == 0 || strcmp(base,"KMD") == 0 ) + if ( base == 0 || base[0] == 0 || strcmp(base,(char *)"KMD") == 0 ) return(&KOMODO_STATES[33]); else if ( (baseid= komodo_baseid(base)) >= 0 ) return(&KOMODO_STATES[baseid+1]); From 0b556992bcb8a6eeae15c42f439c3dd3186a974a Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 15:19:30 -0300 Subject: [PATCH 123/139] test --- src/komodo_bitcoind.h | 2 +- src/komodo_gateway.h | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index ae4fa58be..a49f1a068 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -584,7 +584,7 @@ int32_t komodo_isrealtime(int32_t *kmdheightp) if ( (sp= komodo_stateptrget((char *)"KMD")) != 0 ) *kmdheightp = sp->CURRENT_HEIGHT; else *kmdheightp = 0; - if ( *kmdheightp != 0 && *kmdheightp == (int32_t)komodo_longestchain() ) + if ( chainActive.Tip()->nHeight == (int32_t)komodo_longestchain() ) return(1); else return(0); } diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 4f97224ae..919c3d6c2 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -363,10 +363,13 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,value); typestr = "withdraw"; printf("%s.height.%d vs height.%d check %.8f/%.8f vs %.8f tokomodo.%d %d seed.%llx -> (%s)\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(komodoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed,coinaddr); - if ( (pax= komodo_paxfind(&space,txid,vout)) == 0 ) + if ( checktoshis == komodoshis ) { - printf("notarize %s %.8f -> %.8f kmd.%d other.%d\n",ASSETCHAINS_SYMBOL,dstr(value),dstr(komodoshis),kmdheight,height); - } else printf(" %.8f -> %s withdraw already there\n",dstr(value),coinaddr); + if ( (pax= komodo_paxfind(&space,txid,vout)) == 0 ) + { + printf("notarize %s %.8f -> %.8f kmd.%d other.%d\n",ASSETCHAINS_SYMBOL,dstr(value),dstr(komodoshis),kmdheight,height); + } else printf(" %.8f -> %s withdraw already there\n",dstr(value),coinaddr); + } } else if ( strncmp((char *)"KMD",(char *)&opretbuf[opretlen-4],3) != 0 || opretlen == 38 ) { From ea365a71c9ccb55caaab9c3c4a2bf0c407d474fd Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 15:52:34 -0300 Subject: [PATCH 124/139] test --- src/komodo.h | 53 +++++++++++++++++++++++--------------------- src/komodo_gateway.h | 15 +++++++++++-- 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index 7e8202be0..eaeeb6b07 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -311,7 +311,7 @@ void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotar } } -int32_t komodo_voutupdate(int32_t *isratificationp,int32_t notaryid,uint8_t *scriptbuf,int32_t scriptlen,int32_t height,uint256 txhash,int32_t i,int32_t j,uint64_t *voutmaskp,int32_t *specialtxp,int32_t *notarizedheightp,uint64_t value) +int32_t komodo_voutupdate(int32_t *isratificationp,int32_t notaryid,uint8_t *scriptbuf,int32_t scriptlen,int32_t height,uint256 txhash,int32_t i,int32_t j,uint64_t *voutmaskp,int32_t *specialtxp,int32_t *notarizedheightp,uint64_t value,int32_t notarized) { static uint256 zero; int32_t opretlen,nid,k,len = 0; uint256 kmdtxid,desttxid; uint8_t crypto777[33]; struct komodo_state *sp; char symbol[16],dest[16]; if ( (sp= komodo_stateptr(symbol,dest)) == 0 ) @@ -366,7 +366,7 @@ int32_t komodo_voutupdate(int32_t *isratificationp,int32_t notaryid,uint8_t *scr len += iguana_rwbignum(0,&scriptbuf[len],32,(uint8_t *)&kmdtxid); len += iguana_rwnum(0,&scriptbuf[len],4,(uint8_t *)notarizedheightp); len += iguana_rwbignum(0,&scriptbuf[len],32,(uint8_t *)&desttxid); - if ( *notarizedheightp > sp->NOTARIZED_HEIGHT && *notarizedheightp < height ) + if ( notarized != 0 && *notarizedheightp > sp->NOTARIZED_HEIGHT && *notarizedheightp < height ) { printf("%s ht.%d NOTARIZED.%d %s.%s %sTXID.%s (%s)\n",ASSETCHAINS_SYMBOL,height,*notarizedheightp,ASSETCHAINS_SYMBOL[0]==0?"KMD":ASSETCHAINS_SYMBOL,kmdtxid.ToString().c_str(),ASSETCHAINS_SYMBOL[0]==0?"BTC":"KMD",desttxid.ToString().c_str(),(char *)&scriptbuf[len]); sp->NOTARIZED_HEIGHT = *notarizedheightp; @@ -435,7 +435,7 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) static int32_t hwmheight; uint64_t signedmask,voutmask; char symbol[16],dest[16]; struct komodo_state *sp; uint8_t scriptbuf[4096],pubkeys[64][33],rmd160[20],scriptPubKey[35]; uint256 kmdtxid,zero,btctxid,txhash; - int32_t i,j,k,numnotaries,scriptlen,isratification,nid,numvalid,specialtx,notarizedheight,notaryid,len,numvouts,numvins,height,txn_count; + int32_t i,j,k,numnotaries,notarized,scriptlen,isratification,nid,numvalid,specialtx,notarizedheight,notaryid,len,numvouts,numvins,height,txn_count; memset(&zero,0,sizeof(zero)); komodo_init(pindex->nHeight); if ( (sp= komodo_stateptr(symbol,dest)) == 0 ) @@ -469,26 +469,7 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) txhash = block.vtx[i].GetHash(); numvouts = block.vtx[i].vout.size(); notaryid = -1; - voutmask = specialtx = notarizedheight = isratification = 0; - for (j=0; j 0 ) - { - for (k=0; k= KOMODO_MINRATIFY) || bitweight(signedmask) > (numnotaries>>1)) ) + { printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); - if ( signedmask != 0 && (notarizedheight != 0 || specialtx != 0) ) + notarized = 1; + } + for (j=0; j 0 ) + { + for (k=0; kfiatoshis = fiatoshis; memcpy(pax->rmd160,rmd160,20); pax->height = height; - pax->otherheight = sp->CURRENT_HEIGHT;//otherheight; + pax->otherheight = otherheight; if ( pax->marked == 0 ) { if ( addflag != 0 ) @@ -368,7 +368,18 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 if ( (pax= komodo_paxfind(&space,txid,vout)) == 0 ) { printf("notarize %s %.8f -> %.8f kmd.%d other.%d\n",ASSETCHAINS_SYMBOL,dstr(value),dstr(komodoshis),kmdheight,height); - } else printf(" %.8f -> %s withdraw already there\n",dstr(value),coinaddr); + } + else + { + printf(" %.8f -> %s withdraw already there\n",dstr(value),coinaddr); + strcpy(pax->coinaddr,coinaddr); + pax->komodoshis = komodoshis; + strcpy(pax->symbol,"KMD"); + pax->fiatoshis = value; + memcpy(pax->rmd160,rmd160,20); + pax->height = kmdheight; + pax->otherheight = height; + } } } else if ( strncmp((char *)"KMD",(char *)&opretbuf[opretlen-4],3) != 0 || opretlen == 38 ) From b5c6630160bcb2eb76dc76d2564563baf94a5356 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 16:04:04 -0300 Subject: [PATCH 125/139] test --- src/komodo.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/komodo.h b/src/komodo.h index eaeeb6b07..be2dbf1b2 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -374,7 +374,7 @@ int32_t komodo_voutupdate(int32_t *isratificationp,int32_t notaryid,uint8_t *scr sp->NOTARIZED_DESTTXID = desttxid; komodo_stateupdate(height,0,0,0,zero,0,0,0,0,0,0,0,0,0,0); // extract X opreturns here - } else printf("reject ht.%d NOTARIZED.%d %s.%s DESTTXID.%s (%s)\n",height,*notarizedheightp,ASSETCHAINS_SYMBOL[0]==0?"KMD":ASSETCHAINS_SYMBOL,kmdtxid.ToString().c_str(),desttxid.ToString().c_str(),(char *)&scriptbuf[len]); + } else printf("notarized.%d reject ht.%d NOTARIZED.%d %s.%s DESTTXID.%s (%s)\n",notarized,height,*notarizedheightp,ASSETCHAINS_SYMBOL[0]==0?"KMD":ASSETCHAINS_SYMBOL,kmdtxid.ToString().c_str(),desttxid.ToString().c_str(),(char *)&scriptbuf[len]); } else if ( i == 0 && j == 1 && opretlen == 149 ) komodo_paxpricefeed(height,&scriptbuf[len],opretlen); @@ -480,6 +480,7 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) signedmask |= (1LL << k); } } + printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); if ( specialtx != 0 && (((signedmask & 1) != 0 && numvalid >= KOMODO_MINRATIFY) || bitweight(signedmask) > (numnotaries>>1)) ) { printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); From fd0c033f72961797559a77077cbba78fc4a3728c Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 16:13:05 -0300 Subject: [PATCH 126/139] test --- src/komodo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo.h b/src/komodo.h index be2dbf1b2..cbeb8185c 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -483,7 +483,7 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); if ( specialtx != 0 && (((signedmask & 1) != 0 && numvalid >= KOMODO_MINRATIFY) || bitweight(signedmask) > (numnotaries>>1)) ) { - printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); + printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d <<<<<<<<<<< notarized\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); notarized = 1; } for (j=0; j Date: Sun, 20 Nov 2016 16:45:33 -0300 Subject: [PATCH 127/139] test --- src/komodo.h | 5 +++-- src/komodo_gateway.h | 27 ++++++++++++++++++--------- src/komodo_structs.h | 2 +- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index cbeb8185c..34bcfed63 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -373,7 +373,8 @@ int32_t komodo_voutupdate(int32_t *isratificationp,int32_t notaryid,uint8_t *scr sp->NOTARIZED_HASH = kmdtxid; sp->NOTARIZED_DESTTXID = desttxid; komodo_stateupdate(height,0,0,0,zero,0,0,0,0,0,0,0,0,0,0); - // extract X opreturns here + if ( opretlen > len && scriptbuf[len] == 'A' ) + komodo_stateupdate(height,0,0,0,txhash,0,0,0,0,0,0,value,&scriptbuf[len],opretlen-len,j); } else printf("notarized.%d reject ht.%d NOTARIZED.%d %s.%s DESTTXID.%s (%s)\n",notarized,height,*notarizedheightp,ASSETCHAINS_SYMBOL[0]==0?"KMD":ASSETCHAINS_SYMBOL,kmdtxid.ToString().c_str(),desttxid.ToString().c_str(),(char *)&scriptbuf[len]); } else if ( i == 0 && j == 1 && opretlen == 149 ) @@ -481,7 +482,7 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) } } printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); - if ( specialtx != 0 && (((signedmask & 1) != 0 && numvalid >= KOMODO_MINRATIFY) || bitweight(signedmask) > (numnotaries>>1)) ) + if ( (((signedmask & 1) != 0 && numvalid >= KOMODO_MINRATIFY) || bitweight(signedmask) > (numnotaries>>1)) ) { printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d <<<<<<<<<<< notarized\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); notarized = 1; diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index a3c8c25ab..841abc21e 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -155,6 +155,8 @@ uint64_t komodo_paxtotal() return(total); } +// need a function to return pending withdraws for notarizing opreturn + int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t tokomodo) { struct pax_transaction *pax,*tmp; char symbol[16],dest[16]; uint8_t *script,opcode,opret[10000],data[10000]; int32_t i,baseid,ht,len=0,opretlen=0,numvouts=1; struct komodo_state *sp; uint64_t mask; @@ -372,19 +374,26 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 else { printf(" %.8f -> %s withdraw already there\n",dstr(value),coinaddr); - strcpy(pax->coinaddr,coinaddr); - pax->komodoshis = komodoshis; - strcpy(pax->symbol,"KMD"); - pax->fiatoshis = value; - memcpy(pax->rmd160,rmd160,20); - pax->height = kmdheight; - pax->otherheight = height; + komodo_gateway_deposit(coinaddr,komodoshis,"KMD",value,rmd160,txid,vout,kmdheight,height); } } } - else if ( strncmp((char *)"KMD",(char *)&opretbuf[opretlen-4],3) != 0 || opretlen == 38 ) + else if ( tokomodo != 0 && opretbuf[0] == 'A' ) { - if ( tokomodo == 0 && opretbuf[0] == 'I' ) // assetchain coinbase + if ( (n= komodo_issued_opreturn(base,txids,vouts,values,kmdheights,otherheights,baseids,opretbuf,opretlen,0)) > 0 ) + { + for (i=0; iapproved = kmdheights[i]; + } + } + } + else if ( tokomodo == 0 && opretbuf[0] == 'I' ) + { + if ( strncmp((char *)"KMD",(char *)&opretbuf[opretlen-4],3) != 0 ) { if ( (n= komodo_issued_opreturn(base,txids,vouts,values,kmdheights,otherheights,baseids,opretbuf,opretlen,0)) > 0 ) { diff --git a/src/komodo_structs.h b/src/komodo_structs.h index 4d09d5a81..f62e5de1a 100644 --- a/src/komodo_structs.h +++ b/src/komodo_structs.h @@ -57,7 +57,7 @@ struct pax_transaction UT_hash_handle hh; uint256 txid; uint64_t komodoshis,fiatoshis; - int32_t marked,height,otherheight; + int32_t marked,height,otherheight,approved; uint16_t vout; char symbol[16],coinaddr[64]; uint8_t rmd160[20],shortflag; }; From 09a235e1de769fe15491fe694f34879eb54e931c Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 16:47:30 -0300 Subject: [PATCH 128/139] test --- src/komodo_gateway.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 841abc21e..bec970bbb 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -248,7 +248,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above // printf("%02x",script[i]); //printf(" height.%d checkdeposit n.%d [%02x] [%c] %d vs %d\n",height,n,script[0],script[offset],script[offset],'X'); opcode = 'X'; - strcpy(symbol,"KMD"); + strcpy(symbol,(char *)"KMD"); } else { @@ -374,7 +374,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 else { printf(" %.8f -> %s withdraw already there\n",dstr(value),coinaddr); - komodo_gateway_deposit(coinaddr,komodoshis,"KMD",value,rmd160,txid,vout,kmdheight,height); + komodo_gateway_deposit(coinaddr,komodoshis,(char *)"KMD",value,rmd160,txid,vout,kmdheight,height); } } } From f360ea0ad07f3b393141f39028d160c111c9a6df Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 17:10:27 -0300 Subject: [PATCH 129/139] test --- src/komodo_gateway.h | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index bec970bbb..4de8805ba 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -95,15 +95,16 @@ void komodo_gateway_deposit(char *coinaddr,uint64_t value,char *symbol,uint64_t } } -int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,int64_t *values,int32_t *kmdheights,int32_t *otherheights,int8_t *baseids,uint8_t *opretbuf,int32_t opretlen,int32_t iskomodo) +int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,int64_t *values,int32_t *kmdheights,int32_t *otherheights,int8_t *baseids,uint8_t *rmd160s,uint8_t *opretbuf,int32_t opretlen,int32_t iskomodo) { - int32_t i,n=0,j,len; + int32_t i,n=0,j,len,incr; uint8_t rmd160[20]; for (i=0; i<4; i++) base[i] = opretbuf[opretlen-4+i]; if ( ASSETCHAINS_SYMBOL[0] == 0 || strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0 ) { opretbuf++, opretlen--; - for (n=len=0; n>>>>>> iskomodo X: (%s) fiat %.8f kmdheight.%d other.%d\n",symbol,dstr(fiatoshis),height,otherheight); @@ -155,7 +158,20 @@ uint64_t komodo_paxtotal() return(total); } -// need a function to return pending withdraws for notarizing opreturn +int32_t komodo_withdraws_pending(char *opretbuf) +{ + struct pax_transaction *pax,*tmp; int32_t ht,len=0; uint64_t total = 0; + if ( komodo_isrealtime(&ht) == 0 || ASSETCHAINS_SYMBOL[0] != 0 ) + return(0); + HASH_ITER(hh,PAX,pax,tmp) + { + if ( pax->marked == 0 && strcmp((char *)"KMD",pax->symbol) == 0 && pax->approved == 0 ) + { + // add 'A' opreturn entry + } + } + return(len); +} int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t tokomodo) { @@ -232,9 +248,10 @@ int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t to int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above block is valid pax pricing { - int32_t i,j,n,num,opretlen,offset=1,errs=0,matched=0,kmdheights[64],otherheights[64]; uint256 hash,txids[64]; char symbol[16],base[16]; uint16_t vouts[64]; int8_t baseids[64]; uint8_t *script,opcode; int64_t values[64]; struct pax_transaction *pax,space; + int32_t i,j,n,num,opretlen,offset=1,errs=0,matched=0,kmdheights[64],otherheights[64]; uint256 hash,txids[64]; char symbol[16],base[16]; uint16_t vouts[64]; int8_t baseids[64]; uint8_t *script,opcode,rmd160s[64*20]; int64_t values[64]; struct pax_transaction *pax,space; memset(baseids,0xff,sizeof(baseids)); memset(values,0,sizeof(values)); + memset(rmd160s,0,sizeof(rmd160s)); memset(kmdheights,0,sizeof(kmdheights)); memset(otherheights,0,sizeof(otherheights)); n = block.vtx[0].vout.size(); @@ -257,7 +274,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above } if ( script[offset] == opcode && opretlen < block.vtx[0].vout[n-1].scriptPubKey.size() ) { - if ( (num= komodo_issued_opreturn(base,txids,vouts,values,kmdheights,otherheights,baseids,&script[offset],opretlen,opcode == 'X')) > 0 ) + if ( (num= komodo_issued_opreturn(base,txids,vouts,values,kmdheights,otherheights,baseids,rmd160s,&script[offset],opretlen,opcode == 'X')) > 0 ) { for (i=1; i 0 ) + if ( (n= komodo_issued_opreturn(base,txids,vouts,values,kmdheights,otherheights,baseids,rmd160s,opretbuf,opretlen,0)) > 0 ) { for (i=0; iapproved = kmdheights[i]; } } From 9ccd3f33c8ef859391ec9001e3556a044974fcef Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 17:15:23 -0300 Subject: [PATCH 130/139] test --- src/komodo_gateway.h | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 4de8805ba..f46be152b 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -75,12 +75,18 @@ void komodo_gateway_deposit(char *coinaddr,uint64_t value,char *symbol,uint64_t if ( coinaddr != 0 ) { strcpy(pax->coinaddr,coinaddr); - pax->komodoshis = value; - strcpy(pax->symbol,symbol); - pax->fiatoshis = fiatoshis; - memcpy(pax->rmd160,rmd160,20); - pax->height = height; - pax->otherheight = otherheight; + if ( value != 0 ) + pax->komodoshis = value; + if ( symbol != 0 ) + strcpy(pax->symbol,symbol); + if ( fiatoshis != 0 ) + pax->fiatoshis = fiatoshis; + if ( rmd160 != 0 ) + memcpy(pax->rmd160,rmd160,20); + if ( height != 0 ) + pax->height = height; + if ( otherheight != 0 ) + pax->otherheight = otherheight; if ( pax->marked == 0 ) { if ( addflag != 0 ) @@ -414,12 +420,13 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 { if ( strncmp((char *)"KMD",(char *)&opretbuf[opretlen-4],3) != 0 ) { - if ( (n= komodo_issued_opreturn(base,txids,vouts,values,kmdheights,otherheights,baseids,opretbuf,opretlen,0)) > 0 ) + if ( (n= komodo_issued_opreturn(base,txids,vouts,values,kmdheights,otherheights,baseids,rmd160s,opretbuf,opretlen,0)) > 0 ) { for (i=0; i Date: Sun, 20 Nov 2016 17:16:40 -0300 Subject: [PATCH 131/139] test --- src/komodo_gateway.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index f46be152b..75170c29d 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -103,7 +103,7 @@ void komodo_gateway_deposit(char *coinaddr,uint64_t value,char *symbol,uint64_t int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,int64_t *values,int32_t *kmdheights,int32_t *otherheights,int8_t *baseids,uint8_t *rmd160s,uint8_t *opretbuf,int32_t opretlen,int32_t iskomodo) { - int32_t i,n=0,j,len,incr; uint8_t rmd160[20]; + int32_t i,n=0,j,len,incr,height,otherheight; uint8_t rmd160[20]; uint64_t fiatoshis; char symbol[16]; for (i=0; i<4; i++) base[i] = opretbuf[opretlen-4+i]; if ( ASSETCHAINS_SYMBOL[0] == 0 || strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0 ) @@ -122,7 +122,6 @@ int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,int64_t //printf(" issuedtxid v%d i.%d opretlen.%d\n",vouts[n],n,opretlen); if ( iskomodo != 0 ) { - uint64_t fiatoshis; int32_t height,otherheight; char symbol[16]; len += iguana_rwnum(0,&opretbuf[len],sizeof(fiatoshis),&fiatoshis); len += iguana_rwnum(0,&opretbuf[len],sizeof(height),&height); len += iguana_rwnum(0,&opretbuf[len],sizeof(otherheight),&otherheight); From b21381369bf00c9bf97bb08428516d4dd180ce98 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 17:18:10 -0300 Subject: [PATCH 132/139] test --- src/komodo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo.h b/src/komodo.h index 34bcfed63..b3e361851 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -366,7 +366,7 @@ int32_t komodo_voutupdate(int32_t *isratificationp,int32_t notaryid,uint8_t *scr len += iguana_rwbignum(0,&scriptbuf[len],32,(uint8_t *)&kmdtxid); len += iguana_rwnum(0,&scriptbuf[len],4,(uint8_t *)notarizedheightp); len += iguana_rwbignum(0,&scriptbuf[len],32,(uint8_t *)&desttxid); - if ( notarized != 0 && *notarizedheightp > sp->NOTARIZED_HEIGHT && *notarizedheightp < height ) + if ( *notarizedheightp > sp->NOTARIZED_HEIGHT && *notarizedheightp < height ) { printf("%s ht.%d NOTARIZED.%d %s.%s %sTXID.%s (%s)\n",ASSETCHAINS_SYMBOL,height,*notarizedheightp,ASSETCHAINS_SYMBOL[0]==0?"KMD":ASSETCHAINS_SYMBOL,kmdtxid.ToString().c_str(),ASSETCHAINS_SYMBOL[0]==0?"BTC":"KMD",desttxid.ToString().c_str(),(char *)&scriptbuf[len]); sp->NOTARIZED_HEIGHT = *notarizedheightp; From accc2d5ef9ada44f4133e2cbd071df551a801666 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 17:27:53 -0300 Subject: [PATCH 133/139] test --- src/komodo.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/komodo.h b/src/komodo.h index b3e361851..861e74656 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -481,7 +481,6 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) signedmask |= (1LL << k); } } - printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); if ( (((signedmask & 1) != 0 && numvalid >= KOMODO_MINRATIFY) || bitweight(signedmask) > (numnotaries>>1)) ) { printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d <<<<<<<<<<< notarized\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); From 2cc7e8de2d35f646d4675fd8a817bc1fbf79de1e Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 17:33:25 -0300 Subject: [PATCH 134/139] test --- src/komodo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo.h b/src/komodo.h index 861e74656..4103608c0 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -366,7 +366,7 @@ int32_t komodo_voutupdate(int32_t *isratificationp,int32_t notaryid,uint8_t *scr len += iguana_rwbignum(0,&scriptbuf[len],32,(uint8_t *)&kmdtxid); len += iguana_rwnum(0,&scriptbuf[len],4,(uint8_t *)notarizedheightp); len += iguana_rwbignum(0,&scriptbuf[len],32,(uint8_t *)&desttxid); - if ( *notarizedheightp > sp->NOTARIZED_HEIGHT && *notarizedheightp < height ) + if ( notarized != 0 && *notarizedheightp > sp->NOTARIZED_HEIGHT && *notarizedheightp < height ) { printf("%s ht.%d NOTARIZED.%d %s.%s %sTXID.%s (%s)\n",ASSETCHAINS_SYMBOL,height,*notarizedheightp,ASSETCHAINS_SYMBOL[0]==0?"KMD":ASSETCHAINS_SYMBOL,kmdtxid.ToString().c_str(),ASSETCHAINS_SYMBOL[0]==0?"BTC":"KMD",desttxid.ToString().c_str(),(char *)&scriptbuf[len]); sp->NOTARIZED_HEIGHT = *notarizedheightp; From e6d7eca6b9a07ee371faa174163a53d34c288828 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 17:34:26 -0300 Subject: [PATCH 135/139] test --- src/komodo.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/komodo.h b/src/komodo.h index 4103608c0..01a3f395c 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -481,6 +481,7 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) signedmask |= (1LL << k); } } + numvalid = bitweight(signedmask); if ( (((signedmask & 1) != 0 && numvalid >= KOMODO_MINRATIFY) || bitweight(signedmask) > (numnotaries>>1)) ) { printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d <<<<<<<<<<< notarized\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); From 8f40a7a272f2539532fc3a25e0c866d7754b8884 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 17:40:52 -0300 Subject: [PATCH 136/139] test --- src/komodo.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index 01a3f395c..deb2c3612 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -311,7 +311,7 @@ void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotar } } -int32_t komodo_voutupdate(int32_t *isratificationp,int32_t notaryid,uint8_t *scriptbuf,int32_t scriptlen,int32_t height,uint256 txhash,int32_t i,int32_t j,uint64_t *voutmaskp,int32_t *specialtxp,int32_t *notarizedheightp,uint64_t value,int32_t notarized) +int32_t komodo_voutupdate(int32_t *isratificationp,int32_t notaryid,uint8_t *scriptbuf,int32_t scriptlen,int32_t height,uint256 txhash,int32_t i,int32_t j,uint64_t *voutmaskp,int32_t *specialtxp,int32_t *notarizedheightp,uint64_t value,int32_t notarized,uint64_t signedmask) { static uint256 zero; int32_t opretlen,nid,k,len = 0; uint256 kmdtxid,desttxid; uint8_t crypto777[33]; struct komodo_state *sp; char symbol[16],dest[16]; if ( (sp= komodo_stateptr(symbol,dest)) == 0 ) @@ -375,7 +375,7 @@ int32_t komodo_voutupdate(int32_t *isratificationp,int32_t notaryid,uint8_t *scr komodo_stateupdate(height,0,0,0,zero,0,0,0,0,0,0,0,0,0,0); if ( opretlen > len && scriptbuf[len] == 'A' ) komodo_stateupdate(height,0,0,0,txhash,0,0,0,0,0,0,value,&scriptbuf[len],opretlen-len,j); - } else printf("notarized.%d reject ht.%d NOTARIZED.%d %s.%s DESTTXID.%s (%s)\n",notarized,height,*notarizedheightp,ASSETCHAINS_SYMBOL[0]==0?"KMD":ASSETCHAINS_SYMBOL,kmdtxid.ToString().c_str(),desttxid.ToString().c_str(),(char *)&scriptbuf[len]); + } else printf("notarized.%d %llx reject ht.%d NOTARIZED.%d %s.%s DESTTXID.%s (%s)\n",notarized,(long long)signedmask,height,*notarizedheightp,ASSETCHAINS_SYMBOL[0]==0?"KMD":ASSETCHAINS_SYMBOL,kmdtxid.ToString().c_str(),desttxid.ToString().c_str(),(char *)&scriptbuf[len]); } else if ( i == 0 && j == 1 && opretlen == 149 ) komodo_paxpricefeed(height,&scriptbuf[len],opretlen); @@ -497,7 +497,7 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) #else memcpy(scriptbuf,(uint8_t *)&block.vtx[i].vout[j].scriptPubKey[0],len); #endif - notaryid = komodo_voutupdate(&isratification,notaryid,scriptbuf,len,height,txhash,i,j,&voutmask,&specialtx,¬arizedheight,(uint64_t)block.vtx[i].vout[j].nValue,notarized); + notaryid = komodo_voutupdate(&isratification,notaryid,scriptbuf,len,height,txhash,i,j,&voutmask,&specialtx,¬arizedheight,(uint64_t)block.vtx[i].vout[j].nValue,notarized,signedmask); if ( 0 && i > 0 ) { for (k=0; k Date: Sun, 20 Nov 2016 17:46:56 -0300 Subject: [PATCH 137/139] test --- src/komodo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo.h b/src/komodo.h index deb2c3612..3e9b14ce5 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -482,7 +482,7 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) } } numvalid = bitweight(signedmask); - if ( (((signedmask & 1) != 0 && numvalid >= KOMODO_MINRATIFY) || bitweight(signedmask) > (numnotaries>>1)) ) + if ( (((height < 76000 || (signedmask & 1) != 0) && numvalid >= KOMODO_MINRATIFY) || bitweight(signedmask) > (numnotaries>>1)) ) { printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d <<<<<<<<<<< notarized\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); notarized = 1; From 43f79eeeb5c2fed32aad86e60007c65f13a9259e Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 20 Nov 2016 18:05:14 -0300 Subject: [PATCH 138/139] test --- src/komodo.h | 4 ++-- src/komodo_gateway.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index 3e9b14ce5..0821259ea 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -482,9 +482,9 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) } } numvalid = bitweight(signedmask); - if ( (((height < 76000 || (signedmask & 1) != 0) && numvalid >= KOMODO_MINRATIFY) || bitweight(signedmask) > (numnotaries>>1)) ) + if ( (((height < 90000 || (signedmask & 1) != 0) && numvalid >= KOMODO_MINRATIFY) || bitweight(signedmask) > (numnotaries>>1)) ) { - printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d <<<<<<<<<<< notarized\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); + //printf("%s ht.%d txi.%d signedmask.%llx numvins.%d numvouts.%d <<<<<<<<<<< notarized\n",ASSETCHAINS_SYMBOL,height,i,(long long)signedmask,numvins,numvouts); notarized = 1; } for (j=0; j %.8f\n",pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis)); - if ( pax->marked != 0 || strcmp(pax->symbol,symbol) != 0 ) + if ( pax->marked != 0 || strcmp(pax->symbol,symbol) != 0 || (strcmp(symbol,"KMD") == 0 && pax->approved == 0) ) continue; //if ( ASSETCHAINS_SYMBOL[0] != 0 ) printf("pax.%s marked.%d %.8f -> %.8f\n",ASSETCHAINS_SYMBOL,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis)); @@ -292,6 +292,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above else matched++; if ( 0 && opcode == 'X' ) printf("errs.%d i.%d match %.8f == %.8f\n",errs,i,dstr(pax != 0 ? pax->fiatoshis:-1),dstr(block.vtx[0].vout[i].nValue)); + komodo_paxmark(height,&space,txids[i-1],vouts[i-1],height); } else { @@ -317,7 +318,6 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above } else if ( opcode == 'I' ) matched++; } - komodo_paxmark(height,&space,txids[i-1],vouts[i-1],height); } if ( matched != num ) { From ebec4dd8362d1e6829bf5b3481511f6c22d732fb Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 21 Nov 2016 06:58:29 -0300 Subject: [PATCH 139/139] test --- src/assetchains | 37 +++++++++++++++++++++++++++++++++++++ src/rpcrawtransaction.cpp | 2 +- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/assetchains b/src/assetchains index f3697bc2f..8f5febcff 100755 --- a/src/assetchains +++ b/src/assetchains @@ -1,6 +1,43 @@ +#!/bin/bash source pubkey.txt echo $pubkey +curl --url "http://127.0.0.1:7776" --data "{\"timeout\":60000,\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"REVS\",\"pubkey\":\"$pubkey\"}" + +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"USD\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"EUR\",\"pubkey\":\"$pubkey\"}" + +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"JPY\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"GBP\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"AUD\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CAD\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CHF\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"NZD\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CNY\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"RUB\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MXN\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"BRL\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"INR\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"HKD\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"TRY\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"ZAR\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"PLN\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"NOK\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"SEK\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"DKK\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CZK\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"HUF\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"ILS\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"KRW\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MYR\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"PHP\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"RON\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"SGD\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"THB\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"BGN\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"IDR\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"HRK\",\"pubkey\":\"$pubkey\"}" + ./komodod -pubkey=$pubkey -ac_name=REVS -ac_supply=1300000 -addnode=78.47.196.146 $1 & ./komodod -pubkey=$pubkey -ac_name=USD -addnode=78.47.196.146 $1 & diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp index 4b5cdae35..d54ec4ff5 100644 --- a/src/rpcrawtransaction.cpp +++ b/src/rpcrawtransaction.cpp @@ -132,7 +132,7 @@ void TxToJSON(const CTransaction& tx, const uint256 hashBlock, Object& entry) { extern char ASSETCHAINS_SYMBOL[16]; interest = komodo_interest(pindex->nHeight,txout.nValue,tx.nLockTime,tipindex->nTime); - if ( strcmp("REVS",ASSETCHAINS_SYMBOL) == 0 ) + if ( 0 && strcmp("REVS",ASSETCHAINS_SYMBOL) == 0 ) fprintf(stderr,"TxtoJSON interest %llu %.8f (%d %llu %u %u)\n",(long long)interest,(double)interest/COIN,(int32_t)pindex->nHeight,(long long)txout.nValue,(uint32_t)tx.nLockTime,(int32_t)tipindex->nTime); out.push_back(Pair("interest", ValueFromAmount(interest))); }