Test
This commit is contained in:
@@ -1036,8 +1036,6 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3
|
|||||||
//printf("komodo_opreturn skip %s\n",ASSETCHAINS_SYMBOL);
|
//printf("komodo_opreturn skip %s\n",ASSETCHAINS_SYMBOL);
|
||||||
return("assetchain");
|
return("assetchain");
|
||||||
}
|
}
|
||||||
//else if ( KOMODO_PAX == 0 )
|
|
||||||
// return("nopax");
|
|
||||||
memset(baseids,0xff,sizeof(baseids));
|
memset(baseids,0xff,sizeof(baseids));
|
||||||
memset(values,0,sizeof(values));
|
memset(values,0,sizeof(values));
|
||||||
memset(srcvalues,0,sizeof(srcvalues));
|
memset(srcvalues,0,sizeof(srcvalues));
|
||||||
@@ -1048,8 +1046,11 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3
|
|||||||
if ( opretbuf[0] == 'K' && opretlen != 40 )
|
if ( opretbuf[0] == 'K' && opretlen != 40 )
|
||||||
{
|
{
|
||||||
komodo_kvupdate(opretbuf,opretlen,value);
|
komodo_kvupdate(opretbuf,opretlen,value);
|
||||||
|
return("kv");
|
||||||
}
|
}
|
||||||
else if ( opretbuf[0] == 'D' )
|
else if ( KOMODO_PAX == 0 )
|
||||||
|
return("nopax");
|
||||||
|
if ( opretbuf[0] == 'D' )
|
||||||
{
|
{
|
||||||
tokomodo = 0;
|
tokomodo = 0;
|
||||||
if ( opretlen == 38 ) // any KMD tx
|
if ( opretlen == 38 ) // any KMD tx
|
||||||
@@ -1355,9 +1356,123 @@ int32_t komodo_parsestatefiledata(struct komodo_state *sp,uint8_t *filedata,long
|
|||||||
|
|
||||||
void komodo_stateind_set(struct komodo_state *sp,uint32_t *inds,int32_t n,uint8_t *filedata,long datalen,char *symbol,char *dest)
|
void komodo_stateind_set(struct komodo_state *sp,uint32_t *inds,int32_t n,uint8_t *filedata,long datalen,char *symbol,char *dest)
|
||||||
{
|
{
|
||||||
uint8_t func; long fpos;
|
uint8_t func; long lastK,lastT,lastN,lastV,fpos=0,lastfpos=0; int32_t i,count,doissue,iter,numn,numv,numN,numV; uint32_t tmp,prevpos100;
|
||||||
//komodo_parsestatefiledata(sp,filedata,&fpos,datalen,symbol,dest);
|
count = numN = numV = numn = numv = 0;
|
||||||
// scan backwards to set all the sp-> fields to the current valid value
|
lastK = lastT = lastN = lastV;
|
||||||
|
for (iter=0; iter<2; iter++)
|
||||||
|
{
|
||||||
|
for (prevpos100=i=0; i<n; i++)
|
||||||
|
{
|
||||||
|
tmp = inds[i];
|
||||||
|
if ( (i % 100) == 0 )
|
||||||
|
prevpos100 = tmp;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
func = (tmp & 0xff);
|
||||||
|
offset = (tmp >> 8);
|
||||||
|
fpos = prevpos100 + offset;
|
||||||
|
if ( lastfpos >= datalen || filedata[lastfpos] != func )
|
||||||
|
printf("lastfpos.%ld >= datalen.%ld or [%d] != fund.%d\n",lastfpos,datalen,filedata[lastfpos],func);
|
||||||
|
else if ( iter == 0 )
|
||||||
|
{
|
||||||
|
switch ( func )
|
||||||
|
{
|
||||||
|
default: case 'P': case 'U': case 'D':
|
||||||
|
inds[i] &= 0xffffff00;
|
||||||
|
break;
|
||||||
|
case 'K':
|
||||||
|
lastK = lastfpos;
|
||||||
|
inds[i] &= 0xffffff00;
|
||||||
|
break;
|
||||||
|
case 'T':
|
||||||
|
lastT = lastfpos;
|
||||||
|
inds[i] &= 0xffffff00;
|
||||||
|
break;
|
||||||
|
case 'N':
|
||||||
|
lastN = lastfpos;
|
||||||
|
numN++;
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
lastV = lastfpos;
|
||||||
|
numV++;
|
||||||
|
break;
|
||||||
|
case 'R': break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
doissue = 0;
|
||||||
|
if ( func == 'K' )
|
||||||
|
{
|
||||||
|
if ( lastK == lastfpos )
|
||||||
|
doissue = 1, printf("trigger lastK\n");
|
||||||
|
}
|
||||||
|
else if ( func == 'T' )
|
||||||
|
{
|
||||||
|
if ( lastT == lastfpos )
|
||||||
|
doissue = 1, printf("trigger lastT\n");
|
||||||
|
}
|
||||||
|
else if ( func == 'N' )
|
||||||
|
{
|
||||||
|
if ( numn > numN-128 )
|
||||||
|
doissue = 1;
|
||||||
|
numn++;
|
||||||
|
}
|
||||||
|
else if ( func == 'V' )
|
||||||
|
{
|
||||||
|
if ( numv > numV-1440 )
|
||||||
|
doissue = 1;
|
||||||
|
numv++;
|
||||||
|
}
|
||||||
|
else if ( func == 'R' )
|
||||||
|
doissue = 1;
|
||||||
|
if ( doissue != 0 )
|
||||||
|
{
|
||||||
|
printf("issue %c total.%d lastfpos.%ld\n",func,count,lastfpos);
|
||||||
|
komodo_parsestatefiledata(sp,filedata,&lastfpos,datalen,symbol,dest);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lastfpos = fpos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if ( func == 'K' ) // KMD height: stop after 1st
|
||||||
|
else if ( func == 'T' ) // KMD height+timestamp: stop after 1st
|
||||||
|
|
||||||
|
else if ( func == 'N' ) // notarization, scan backwards 1440+ blocks;
|
||||||
|
else if ( func == 'V' ) // price feed: can stop after 1440+
|
||||||
|
else if ( func == 'R' ) // opreturn:
|
||||||
|
{
|
||||||
|
uint16_t olen,v; uint64_t ovalue; uint256 txid; uint8_t opret[16384];
|
||||||
|
if ( memread(&txid,sizeof(txid),filedata,&fpos,datalen) != sizeof(txid) )
|
||||||
|
errs++;
|
||||||
|
if ( memread(&v,sizeof(v),filedata,&fpos,datalen) != sizeof(v) )
|
||||||
|
errs++;
|
||||||
|
if ( memread(&ovalue,sizeof(ovalue),filedata,&fpos,datalen) != sizeof(ovalue) )
|
||||||
|
errs++;
|
||||||
|
if ( memread(&olen,sizeof(olen),filedata,&fpos,datalen) != sizeof(olen) )
|
||||||
|
errs++;
|
||||||
|
if ( olen < sizeof(opret) )
|
||||||
|
{
|
||||||
|
if ( memread(opret,olen,filedata,&fpos,datalen) != olen )
|
||||||
|
errs++;
|
||||||
|
if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 && matched != 0 )
|
||||||
|
{
|
||||||
|
int32_t i; for (i=0; i<olen; i++)
|
||||||
|
printf("%02x",opret[i]);
|
||||||
|
printf(" %s.%d load[%s] opret[%c] len.%d %.8f\n",ASSETCHAINS_SYMBOL,ht,symbol,opret[0],olen,(double)ovalue/COIN);
|
||||||
|
}
|
||||||
|
komodo_eventadd_opreturn(sp,symbol,ht,txid,ovalue,v,opret,olen); // global shared state -> global PAX
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
int32_t i;
|
||||||
|
for (i=0; i<olen; i++)
|
||||||
|
filedata[fpos++];
|
||||||
|
//printf("illegal olen.%u\n",olen);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void *OS_loadfile(char *fname,uint8_t **bufp,long *lenp,long *allocsizep)
|
void *OS_loadfile(char *fname,uint8_t **bufp,long *lenp,long *allocsizep)
|
||||||
@@ -1459,7 +1574,7 @@ long komodo_indfile_update(FILE *indfp,uint32_t *prevpos100p,long lastfpos,long
|
|||||||
tmp = ((uint32_t)(newfpos - *prevpos100p) << 8) | (func & 0xff);
|
tmp = ((uint32_t)(newfpos - *prevpos100p) << 8) | (func & 0xff);
|
||||||
if ( ftell(indfp)/sizeof(uint32_t) != *indcounterp )
|
if ( ftell(indfp)/sizeof(uint32_t) != *indcounterp )
|
||||||
printf("indfp fpos %ld -> ind.%ld vs counter.%u\n",ftell(indfp),ftell(indfp)/sizeof(uint32_t),*indcounterp);
|
printf("indfp fpos %ld -> ind.%ld vs counter.%u\n",ftell(indfp),ftell(indfp)/sizeof(uint32_t),*indcounterp);
|
||||||
fprintf(stderr,"ftell.%ld indcounter.%u lastfpos.%ld newfpos.%ld func.%02x\n",ftell(indfp),*indcounterp,lastfpos,newfpos,func);
|
//fprintf(stderr,"ftell.%ld indcounter.%u lastfpos.%ld newfpos.%ld func.%02x\n",ftell(indfp),*indcounterp,lastfpos,newfpos,func);
|
||||||
fwrite(&tmp,1,sizeof(tmp),indfp), (*indcounterp)++;
|
fwrite(&tmp,1,sizeof(tmp),indfp), (*indcounterp)++;
|
||||||
if ( (*indcounterp % 100) == 0 )
|
if ( (*indcounterp % 100) == 0 )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -612,6 +612,8 @@ UniValue paxdeposit(const UniValue& params, bool fHelp)
|
|||||||
{
|
{
|
||||||
uint64_t available,deposited,issued,withdrawn,approved,redeemed,seed,komodoshis = 0; int32_t height; char destaddr[64]; uint8_t i,pubkey37[33];
|
uint64_t available,deposited,issued,withdrawn,approved,redeemed,seed,komodoshis = 0; int32_t height; char destaddr[64]; uint8_t i,pubkey37[33];
|
||||||
bool fSubtractFeeFromAmount = false;
|
bool fSubtractFeeFromAmount = false;
|
||||||
|
if ( KOMODO_PAX == 0 )
|
||||||
|
throw JSONRPCError(RPC_TYPE_ERROR, "paxdeposit disabled, since pax not enabled with komodod -pax");
|
||||||
if ( komodo_is_issuer() != 0 )
|
if ( komodo_is_issuer() != 0 )
|
||||||
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "paxdeposit only from KMD");
|
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "paxdeposit only from KMD");
|
||||||
if (!EnsureWalletIsAvailable(fHelp))
|
if (!EnsureWalletIsAvailable(fHelp))
|
||||||
|
|||||||
Reference in New Issue
Block a user