Browse Source

snapshot and dividends API

etomic
jl777 8 years ago
parent
commit
02e23090fc
  1. 1
      basilisk/basilisk_tradebot.c
  2. 3
      deprecated/iguana_instantdex.c
  3. 30
      iguana/iguana777.c
  4. 1
      iguana/iguana_exchanges.c
  5. 1
      iguana/iguana_json.c
  6. 1
      iguana/iguana_notary.c
  7. 6
      iguana/iguana_scripts.c
  8. 4
      iguana/iguana_spendvectors.c
  9. 1
      iguana/iguana_tradebots.c
  10. 212
      iguana/iguana_unspents.c
  11. 1
      iguana/main.c
  12. 1
      iguana/ramchain_api.c
  13. 3
      iguana/tests/dividends
  14. 3
      iguana/tests/snapshot
  15. 2
      includes/iguana_apideclares.h
  16. 2
      includes/iguana_funcs.h
  17. 2
      includes/iguana_structs.h

1
basilisk/basilisk_tradebot.c

@ -312,6 +312,7 @@ double basilisk_request_listprocess(struct supernet_info *myinfo,struct basilisk
}
} else noquoteflag++;
}
// MVP -> USD myrequest.0 pendingid.0 noquoteflag.1 havequoteflag.0 maxi.-1 0.00000000
printf("%s -> %s myrequest.%d pendingid.%u noquoteflag.%d havequoteflag.%d maxi.%d %.8f\n",list[0].src,list[0].dest,myrequest,pendingid,noquoteflag,havequoteflag,maxi,dstr(maxamount));
double retvals[4],refprice,profitmargin,aveprice; cJSON *retjson; char *retstr;
if ( maxi >= 0 && myinfo->IAMLP != 0 && myrequest == 0 && pendingid == 0 && noquoteflag != 0 && (profitmargin= tradebot_liquidity_active(myinfo,&refprice,"DEX",list[maxi].src,list[maxi].dest,(double)maxamount/SATOSHIDEN)) > 0. )

3
deprecated/iguana_instantdex.c

@ -1468,7 +1468,8 @@ void instantdex_update(struct supernet_info *myinfo)
}
/*
#include "../includes/iguana_apidefs.h"
#include "../includes/iguana_apidefs.h"
#include "../includes/iguana_apideclares.h"
TWO_STRINGS_AND_TWO_DOUBLES(InstantDEX,maxaccept,base,rel,maxprice,basevolume)
{

30
iguana/iguana777.c

@ -764,25 +764,23 @@ void iguana_helper(void *arg)
if ( coin->bundles[i] == 0 || coin->bundles[i]->validated <= 1 )
break;
if ( i == j )
{
iguana_bundlevalidate(myinfo,coin,bp,0);
if ( bp->validated > 1 )//&& coin->chain->zcash == 0 )
}
if ( bp->validated > 1 )//&& coin->chain->zcash == 0 )
{
for (i=0; i<j; i++)
if ( coin->bundles[i] == 0 || coin->bundles[i]->utxofinish <= 1 )
break;
retval = 1;
if ( bp->utxofinish == 0 )
{
bp->startutxo = (uint32_t)time(NULL);
if ( (retval= iguana_spendvectors(myinfo,coin,bp,&bp->ramchain,0,bp->n,1,0)) >= 0 )
{
for (i=0; i<j; i++)
if ( coin->bundles[i] == 0 || coin->bundles[i]->utxofinish <= 1 )
break;
retval = 1;
if ( bp->utxofinish == 0 )
if ( retval > 0 )
{
bp->startutxo = (uint32_t)time(NULL);
if ( (retval= iguana_spendvectors(myinfo,coin,bp,&bp->ramchain,0,bp->n,1,0)) >= 0 )
{
if ( retval > 0 )
{
printf(" GENERATED UTXO.%d for ht.%d duration %d seconds\n",bp->hdrsi,bp->bundleheight,(uint32_t)time(NULL) - bp->startutxo);
bp->utxofinish = (uint32_t)time(NULL);
}
}
printf(" GENERATED UTXO.%d for ht.%d duration %d seconds\n",bp->hdrsi,bp->bundleheight,(uint32_t)time(NULL) - bp->startutxo);
bp->utxofinish = (uint32_t)time(NULL);
}
}
}

1
iguana/iguana_exchanges.c

@ -1174,6 +1174,7 @@ cJSON *iguana_pricesarray(struct supernet_info *myinfo,char *exchange,char *base
}
#include "../includes/iguana_apidefs.h"
#include "../includes/iguana_apideclares.h"
THREE_STRINGS_AND_THREE_INTS(InstantDEX,orderbook,exchange,base,rel,depth,allfields,ignore)
{

1
iguana/iguana_json.c

@ -567,6 +567,7 @@ cJSON *iguana_peersjson(struct iguana_info *coin,int32_t addronly)
}
#include "../includes/iguana_apidefs.h"
#include "../includes/iguana_apideclares.h"
STRING_ARG(iguana,peers,activecoin)
{

1
iguana/iguana_notary.c

@ -223,6 +223,7 @@ void dpow_addresses()
}
#include "../includes/iguana_apidefs.h"
#include "../includes/iguana_apideclares.h"
TWO_STRINGS(iguana,dpow,symbol,pubkey)
{

6
iguana/iguana_scripts.c

@ -190,7 +190,11 @@ uint8_t iguana_addrtype(struct iguana_info *coin,uint8_t script_type)
{
if ( script_type == IGUANA_SCRIPT_76A988AC || script_type == IGUANA_SCRIPT_AC || script_type == IGUANA_SCRIPT_76AC )
return(coin->chain->pubtype);
else return(coin->chain->p2shtype);
else
{
//printf("P2SH type.%d\n",script_type);
return(coin->chain->p2shtype);
}
}
int32_t iguana_scriptgen(struct iguana_info *coin,int32_t *Mp,int32_t *nump,char *coinaddr,uint8_t *script,char *asmstr,uint8_t rmd160[20],uint8_t type,const struct vin_info *vp,int32_t txi)

4
iguana/iguana_spendvectors.c

@ -631,8 +631,8 @@ int32_t iguana_volatilesinit(struct supernet_info *myinfo,struct iguana_info *co
{
if ( bp->startutxo == 0 )
bp->startutxo = (uint32_t)time(NULL) - 60;
if ( bp->utxofinish == 0 )
bp->utxofinish = (uint32_t)time(NULL);
//if ( bp->utxofinish == 0 )
// bp->utxofinish = (uint32_t)time(NULL);
n++;
}
if ( bp->utxofinish <= 1 || (i > 0 && bp->utxofinish <= 1) )

1
iguana/iguana_tradebots.c

@ -220,6 +220,7 @@ char *tradebot_control(struct supernet_info *myinfo,char *exchangestr,char *boti
}
#include "../includes/iguana_apidefs.h"
#include "../includes/iguana_apideclares.h"
HASH_ARRAY_STRING(tradebot,liquidity,hash,vals,targetcoin)
{

212
iguana/iguana_unspents.c

@ -1268,10 +1268,13 @@ int32_t iguana_rwutxoaddr(int32_t rwflag,uint16_t ind,uint8_t *serialized,struct
} else memcpy(&serialized[2],&utxoaddr->rmd160[2],18);
len += 18;
if ( rwflag != 0 )
pkind = utxoaddr->pkind;
pkind = (utxoaddr->pkind & 0x7fffffff) | (utxoaddr->p2sh << 31);
len += iguana_rwnum(rwflag,&serialized[20],sizeof(pkind),&pkind);
if ( rwflag == 0 )
utxoaddr->pkind = pkind;
{
utxoaddr->pkind = pkind & 0x7fffffff;
utxoaddr->p2sh = (pkind >> 31);
}
len += iguana_rwnum(rwflag,&serialized[24],sizeof(utxoaddr->histbalance),&utxoaddr->histbalance);
return(len);
}
@ -1295,7 +1298,7 @@ uint64_t iguana_utxoaddrtablefind(struct iguana_info *coin,int16_t search_hdrsi,
return(0);
}
struct iguana_utxoaddr *iguana_utxoaddrfind(int32_t createflag,struct iguana_info *coin,int16_t hdrsi,uint32_t pkind,uint8_t rmd160[20],struct iguana_utxoaddr **prevp)
struct iguana_utxoaddr *iguana_utxoaddrfind(int32_t createflag,struct iguana_info *coin,int16_t hdrsi,uint32_t pkind,uint8_t rmd160[20],struct iguana_utxoaddr **prevp,int32_t p2shflag)
{
struct iguana_utxoaddr *utxoaddr; char coinaddr[64];
HASH_FIND(hh,coin->utxoaddrs,rmd160,sizeof(utxoaddr->rmd160),utxoaddr);
@ -1304,6 +1307,12 @@ struct iguana_utxoaddr *iguana_utxoaddrfind(int32_t createflag,struct iguana_inf
utxoaddr = calloc(1,sizeof(*utxoaddr));
++coin->utxoaddrind;
utxoaddr->hdrsi = hdrsi;
if ( (utxoaddr->p2sh= p2shflag) != 0 )
{
char coinaddr[64];
bitcoin_address(coinaddr,coin->chain->p2shtype,rmd160,20);
//printf("P2SH type.(%s)\n",coinaddr);
}
utxoaddr->pkind = pkind;
if ( coin->utxoaddrtable != 0 && coin->utxoaddroffsets != 0 )
{
@ -1334,7 +1343,7 @@ struct iguana_utxoaddr *iguana_utxoaddrfind(int32_t createflag,struct iguana_inf
uint64_t iguana_bundle_unspents(struct iguana_info *coin,struct iguana_bundle *bp,struct iguana_utxoaddr **prevp)
{
struct iguana_utxoaddr *utxoaddr; uint32_t unspentind,pkind; struct iguana_ramchaindata *rdata=0; struct iguana_pkhash *P; struct iguana_unspent *U; struct iguana_utxo *U2=0; uint64_t value,balance = 0;
struct iguana_utxoaddr *utxoaddr; int32_t p2shflag; uint32_t unspentind,pkind; struct iguana_ramchaindata *rdata=0; struct iguana_pkhash *P; struct iguana_unspent *U; struct iguana_utxo *U2=0; uint64_t value,balance = 0;
if ( bp == 0 || (rdata= bp->ramchain.H.data) == 0 || (U2= bp->ramchain.Uextras) == 0 )
{
printf("missing ptr bp.%p rdata.%p U2.%p\n",bp,rdata,U2);
@ -1355,7 +1364,18 @@ uint64_t iguana_bundle_unspents(struct iguana_info *coin,struct iguana_bundle *b
balance += value;
if ( (pkind= U[unspentind].pkind) < rdata->numpkinds && pkind > 0 )
{
if ( (utxoaddr= iguana_utxoaddrfind(1,coin,bp->hdrsi,pkind,P[pkind].rmd160,prevp)) != 0 )
p2shflag = 0;
//if ( (p2shflag= (iguana_addrtype(coin,U[unspentind].type) == coin->chain->p2shtype)) != 0 )
{
char coinaddr[64];
bitcoin_address(coinaddr,coin->chain->p2shtype,P[pkind].rmd160,20);
if ( U[unspentind].type != IGUANA_SCRIPT_76A988AC && U[unspentind].type != IGUANA_SCRIPT_AC && U[unspentind].type != IGUANA_SCRIPT_76AC )
{
p2shflag = 1;
//printf("%s %.8f P2SH.%d\n",coinaddr,dstr(value),U[unspentind].type);
}
}
if ( (utxoaddr= iguana_utxoaddrfind(1,coin,bp->hdrsi,pkind,P[pkind].rmd160,prevp,p2shflag)) != 0 )
{
//printf("%.8f ",dstr(value));
utxoaddr->histbalance += value;
@ -1491,22 +1511,28 @@ void iguana_utxoaddr_purge(struct iguana_info *coin)
int32_t iguana_utxoaddr_check(struct supernet_info *myinfo,struct iguana_info *coin,int32_t lastheight,struct iguana_outpoint *unspents,int32_t max,struct iguana_utxoaddr *utxoaddr)
{
static int32_t good,bad;
char coinaddr[64]; uint64_t sum,checkbalance; int32_t iter,i,numunspents = 0;
static int32_t good,bad; static uint64_t total;
char coinaddr[64]; uint64_t sum,checkbalance; int32_t i,flag=0,numunspents = 0;
sum = 0;
for (iter=0; iter<2; iter++)
bitcoin_address(coinaddr,utxoaddr->p2sh == 0 ? coin->chain->pubtype : coin->chain->p2shtype,utxoaddr->rmd160,sizeof(utxoaddr->rmd160));
numunspents += iguana_RTaddr_unspents(myinfo,coin,&sum,&unspents[numunspents],max-numunspents,coinaddr,0,lastheight,0);
if ( 0 && utxoaddr->histbalance != 0 && strcmp(coin->symbol,"BTCD") == 0 )
{
bitcoin_address(coinaddr,iter == 0 ? coin->chain->pubtype : coin->chain->p2shtype,utxoaddr->rmd160,sizeof(utxoaddr->rmd160));
numunspents += iguana_RTaddr_unspents(myinfo,coin,&sum,&unspents[numunspents],max-numunspents,coinaddr,0,lastheight,0);
if ( sum == utxoaddr->histbalance )
{
checkbalance = iguana_utxoaddrtablefind(coin,0,0,utxoaddr->rmd160);
if ( checkbalance != sum )
printf("%s checkbalance %.8f vs sum %.8f\n",coinaddr,dstr(checkbalance),dstr(sum));
break;
}
total += utxoaddr->histbalance;
//printf("fiat/revs sendtoaddress %s %.8f # total %.8f\n",coinaddr,dstr(utxoaddr->histbalance),dstr(total));
printf("fiat/revs sendtoaddress %s %.8f\n",coinaddr,dstr(utxoaddr->histbalance));
if ( total/SATOSHIDEN > 1308000 )
printf("error: total %.8f\n",dstr(total));
}
if ( sum == utxoaddr->histbalance )
{
checkbalance = iguana_utxoaddrtablefind(coin,0,0,utxoaddr->rmd160);
if ( checkbalance != sum )
printf("%s checkbalance %.8f vs sum %.8f\n",coinaddr,dstr(checkbalance),dstr(sum));
flag = 1;
//break;
}
if ( sum != utxoaddr->histbalance || checkbalance != sum )
if ( 0 && flag == 0 )//sum != utxoaddr->histbalance || checkbalance != sum )
{
bad++;
for (i=0; i<numunspents; i++)
@ -1514,7 +1540,7 @@ int32_t iguana_utxoaddr_check(struct supernet_info *myinfo,struct iguana_info *c
for (i=0; i<20; i++)
printf("%02x",utxoaddr->rmd160[i]);
bitcoin_address(coinaddr,coin->chain->pubtype,utxoaddr->rmd160,sizeof(utxoaddr->rmd160));
printf(" %s: sum %.8f != %.8f numunspents.%d diff %.8f\n",coinaddr,dstr(sum),dstr(utxoaddr->histbalance),numunspents,dstr(utxoaddr->histbalance)-dstr(sum));
printf(" %s: sum %.8f != %.8f %.8f numunspents.%d diff %.8f\n",coinaddr,dstr(sum),dstr(utxoaddr->histbalance),dstr(checkbalance),numunspents,dstr(utxoaddr->histbalance)-dstr(sum));
return(-1);
}
good++;
@ -1585,7 +1611,7 @@ uint64_t iguana_utxoaddr_gen(struct supernet_info *myinfo,struct iguana_info *co
sprintf(fname2,"%s/%s/utxoaddrs.%d",GLOBAL_DBDIR,coin->symbol,height), OS_portable_path(fname2);
if ( iguana_utxoaddr_map(coin,fname2) != 0 )
{
if ( 0 && strcmp("BTC",coin->symbol) != 0 )
if ( 0 && strcmp("BTCD",coin->symbol) == 0 )
errs = iguana_utxoaddr_validate(myinfo,coin,height);
printf("nogen %s HIST BALANCE %s %.8f errs %d\n",fname2,bits256_str(str,coin->utxoaddrhash),dstr(coin->histbalance),errs);
if ( errs == 0 && coin->histbalance > 0 && height > 0 )
@ -1713,7 +1739,9 @@ uint64_t iguana_utxoaddr_gen(struct supernet_info *myinfo,struct iguana_info *co
if ( iguana_utxoaddr_map(coin,fname) != 0 )
{
printf("validating %s HIST BALANCE %s %.8f errs %d\n",fname2,bits256_str(str,coin->utxoaddrhash),dstr(coin->histbalance),errs);
errs = 0;//iguana_utxoaddr_validate(myinfo,coin,height);
errs = 0;
if ( 0 && strcmp("BTCD",coin->symbol) == 0 )
errs = iguana_utxoaddr_validate(myinfo,coin,height);
printf("gen %s HIST BALANCE %s %.8f errs %d\n",fname2,bits256_str(str,coin->utxoaddrhash),dstr(coin->histbalance),errs);
if ( errs != 0 || height == 0 )
{
@ -1745,3 +1773,145 @@ void iguana_utxoaddrs_purge(struct iguana_info *coin)
}
}
}
#include "../includes/iguana_apidefs.h"
#include "../includes/iguana_apideclares.h"
STRING_AND_INT(iguana,snapshot,symbol,height)
{
char fname[1024],coinaddr[64]; uint8_t pubtype,p2shtype; struct iguana_info *tmp; int32_t i,ind,num; cJSON *item,*array; struct iguana_utxoaddr UA; uint8_t *ptr;
if ( (coin= iguana_coinfind(symbol)) != 0 )
{
tmp = calloc(1,sizeof(*tmp));
sprintf(fname,"%s/%s/utxoaddrs.%d",GLOBAL_DBDIR,coin->symbol,height), OS_portable_path(fname);
pubtype = coin->chain->pubtype;
p2shtype = coin->chain->p2shtype;
coin = tmp;
if ( iguana_utxoaddr_map(coin,fname) != 0 )
{
if ( coin->utxoaddroffsets != 0 )
{
array = cJSON_CreateArray();
memset(&UA,0,sizeof(UA));
for (ind=0; ind<0x10000; ind++)
{
if ( (num= iguana_utxotable_numinds(ind)) > 0 )
{
for (i=0; i<num; i++)
{
ptr = &coin->utxoaddrtable[(coin->utxoaddroffsets[ind] + i) * UTXOADDR_ITEMSIZE];
iguana_rwutxoaddr(0,ind,ptr,&UA);
bitcoin_address(coinaddr,UA.p2sh == 0 ? pubtype : p2shtype,UA.rmd160,sizeof(UA.rmd160));
item = cJSON_CreateObject();
jaddnum(item,coinaddr,dstr(UA.histbalance));
jaddi(array,item);
}
}
}
iguana_utxoaddr_purge(tmp);
free(tmp);
return(jprint(array,1));
}
}
}
return(clonestr("{\"error\":\"couldnt find snapshot file\"}"));
}
INT_ARRAY_STRING(iguana,dividends,height,vals,symbol)
{
cJSON *array,*retjson,*item,*child,*exclude=0; int32_t i,j,n,execflag=0,flag,iter,numexcluded=0; char buf[1024],*retstr,*field,*prefix="",*suffix=""; uint64_t dustsum=0,excluded=0,total=0,dividend=0,value,val,emit=0,dust=0; double ratio = 1.;
if ( (retstr= iguana_snapshot(0,0,0,0,symbol,height)) != 0 )
{
//printf("SNAPSHOT.(%s)\n",retstr);
if ( (array= cJSON_Parse(retstr)) != 0 )
{
if ( (n= cJSON_GetArraySize(array)) != 0 )
{
if ( vals != 0 )
{
exclude = jarray(&numexcluded,vals,"exclude");
dust = (uint64_t)(jdouble(vals,"dust") * SATOSHIDEN);
dividend = (uint64_t)(jdouble(vals,"dividend") * SATOSHIDEN);
if ( jstr(vals,"prefix") != 0 )
prefix = jstr(vals,"prefix");
if ( jstr(vals,"suffix") != 0 )
suffix = jstr(vals,"suffix");
execflag = jint(vals,"system");
}
for (iter=0; iter<2; iter++)
{
for (i=0; i<n; i++)
{
flag = 0;
item = jitem(array,i);
if ( (child= item->child) != 0 )
{
value = (uint64_t)(child->valuedouble * SATOSHIDEN);
if ( (field= get_cJSON_fieldname(child)) != 0 )
{
for (j=0; j<numexcluded; j++)
if ( strcmp(field,jstri(exclude,j)) == 0 )
{
flag = 1;
break;
}
}
//printf("(%s %s %.8f) ",jprint(item,0),field,dstr(value));
if ( iter == 0 )
{
if ( flag != 0 )
excluded += value;
else total += value;
}
else
{
if ( flag == 0 )
{
val = ratio * value;
if ( val > dust )
{
sprintf(buf,"%s %s %.8f %s",prefix,field,dstr(val),suffix);
if ( execflag != 0 )
system(buf);
else printf("%s\n",buf);
emit += val;
} else dustsum += val;
}
}
}
}
if ( iter == 0 )
{
if ( total > 0 )
{
if ( dividend == 0 )
dividend = total;
ratio = (double)dividend / total;
} else break;
}
}
}
free_json(array);
}
free(retstr);
retjson = cJSON_CreateObject();
jaddnum(retjson,"total",dstr(total));
jaddnum(retjson,"excluded",dstr(excluded));
if ( dust != 0 )
jaddnum(retjson,"dust",dstr(dust));
if ( dustsum != 0 )
jaddnum(retjson,"dustsum",dstr(dustsum));
jaddnum(retjson,"dividend",dstr(dividend));
jaddnum(retjson,"dividends",dstr(emit));
jaddnum(retjson,"ratio",ratio);
if ( execflag != 0 )
jaddnum(retjson,"system",execflag);
if ( prefix[0] != 0 )
jaddstr(retjson,"prefix",prefix);
if ( suffix[0] != 0 )
jaddstr(retjson,"suffix",suffix);
return(jprint(retjson,1));
}
return(clonestr("{\"error\":\"symbol not found\"}"));
}
#include "../includes/iguana_apiundefs.h"

1
iguana/main.c

@ -983,6 +983,7 @@ void SuperNET_parsepeers(struct supernet_info *myinfo,cJSON *array,int32_t n,int
}
#include "../includes/iguana_apidefs.h"
#include "../includes/iguana_apideclares.h"
STRING_ARG(SuperNET,addr2rmd160,address)
{

1
iguana/ramchain_api.c

@ -15,6 +15,7 @@
#include "iguana777.h"
#include "../includes/iguana_apidefs.h"
#include "../includes/iguana_apideclares.h"
STRING_ARG(iguana,initfastfind,activecoin)
{

3
iguana/tests/dividends

@ -0,0 +1,3 @@
#!/bin/bash
curl --url "http://127.0.0.1:7778" --data "{\"agent\":\"iguana\",\"method\":\"dividends\",\"height\":1486000,\"symbol\":\"BTCD\",\"vals\":{\"exclude\":[\"RWc6VDt5SdjnWXoVQ2AJsuxU2QSaDcG5R7\", \"RXL3YXG2ceaB6C5hfJcN4fvmLH2C34knhA\"],\"dust\":0,\"dividend\":0,\"system\":0,\"prefix\":\"fiat/revs sendtoaddress\",\"suffix\":\"\"}}"

3
iguana/tests/snapshot

@ -0,0 +1,3 @@
#!/bin/bash
curl --url "http://127.0.0.1:7778" --data "{\"agent\":\"iguana\",\"method\":\"snapshot\",\"height\":1486000,\"symbol\":\"BTCD\"}"

2
includes/iguana_apideclares.h

@ -25,6 +25,8 @@ ZERO_ARGS(dpow,notarychains);
ZERO_ARGS(passthru,paxfiats);
ZERO_ARGS(basilisk,paxfiats);
ZERO_ARGS(iguana,paxfiats);
STRING_AND_INT(iguana,snapshot,symbol,height);
INT_ARRAY_STRING(iguana,dividends,height,vals,symbol);
TWO_STRINGS(dex,send,hex,handler);
HASH_AND_STRING(dex,gettransaction,txid,symbol);

2
includes/iguana_funcs.h

@ -334,7 +334,7 @@ void iguana_parsebuf(struct supernet_info *myinfo,struct iguana_info *coin,struc
int32_t _iguana_calcrmd160(struct iguana_info *coin,struct vin_info *vp);
int32_t iguana_spendvectors(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_bundle *bp,struct iguana_ramchain *ramchain,int32_t starti,int32_t numblocks,int32_t convertflag,int32_t iterate);
int32_t iguana_balancegen(struct iguana_info *coin,int32_t incremental,struct iguana_bundle *bp,int32_t startheight,int32_t endheight,int32_t startemit);
struct iguana_utxoaddr *iguana_utxoaddrfind(int32_t createflag,struct iguana_info *coin,int16_t hdrsi,uint32_t pkind,uint8_t rmd160[20],struct iguana_utxoaddr **prevp);
struct iguana_utxoaddr *iguana_utxoaddrfind(int32_t createflag,struct iguana_info *coin,int16_t hdrsi,uint32_t pkind,uint8_t rmd160[20],struct iguana_utxoaddr **prevp,int32_t p2shflag);
int32_t iguana_bundlevalidate(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_bundle *bp,int32_t forceflag);
void iguana_validateQ(struct iguana_info *coin,struct iguana_bundle *bp);
struct iguana_bloominds iguana_calcbloom(bits256 hash2);

2
includes/iguana_structs.h

@ -286,7 +286,7 @@ struct iguana_utxo { uint32_t fromheight:31,lockedflag:1,prevunspentind:31,spent
struct iguana_hhaccount { UT_hash_handle hh; uint64_t pval; struct iguana_account a; }PACKEDSTRUCT;
#endif
struct iguana_hhutxo { UT_hash_handle hh; uint64_t uval; struct iguana_utxo u; }PACKEDSTRUCT;
struct iguana_utxoaddr { UT_hash_handle hh; uint64_t histbalance; uint32_t pkind:31,searchedhist:1; uint16_t hdrsi; uint8_t rmd160[20]; }PACKEDSTRUCT;
struct iguana_utxoaddr { UT_hash_handle hh; uint64_t histbalance; uint32_t pkind:30,p2sh:1,searchedhist:1; uint16_t hdrsi; uint8_t rmd160[20]; }PACKEDSTRUCT;
// GLOBAL one zero to non-zero write (unless reorg)
struct iguana_spendvector { uint64_t value; uint32_t pkind,unspentind; int32_t fromheight; uint16_t hdrsi:15,tmpflag:1; }PACKEDSTRUCT; // unspentind

Loading…
Cancel
Save