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);
|
||||
return("assetchain");
|
||||
}
|
||||
//else if ( KOMODO_PAX == 0 )
|
||||
// return("nopax");
|
||||
memset(baseids,0xff,sizeof(baseids));
|
||||
memset(values,0,sizeof(values));
|
||||
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 )
|
||||
{
|
||||
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;
|
||||
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)
|
||||
{
|
||||
uint8_t func; long fpos;
|
||||
//komodo_parsestatefiledata(sp,filedata,&fpos,datalen,symbol,dest);
|
||||
// scan backwards to set all the sp-> fields to the current valid value
|
||||
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;
|
||||
count = numN = numV = numn = numv = 0;
|
||||
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)
|
||||
@@ -1459,7 +1574,7 @@ long komodo_indfile_update(FILE *indfp,uint32_t *prevpos100p,long lastfpos,long
|
||||
tmp = ((uint32_t)(newfpos - *prevpos100p) << 8) | (func & 0xff);
|
||||
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);
|
||||
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)++;
|
||||
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];
|
||||
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 )
|
||||
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "paxdeposit only from KMD");
|
||||
if (!EnsureWalletIsAvailable(fHelp))
|
||||
|
||||
Reference in New Issue
Block a user