jl777 8 years ago
parent
commit
ee09715f6a
  1. 2
      iguana/coins/genbtc
  2. 4
      iguana/iguana_payments.c
  3. 2
      iguana/iguana_ramchain.c
  4. 1
      iguana/iguana_sign.c
  5. 69
      iguana/iguana_unspents.c
  6. 1
      includes/iguana_funcs.h
  7. 1
      includes/iguana_structs.h

2
iguana/coins/genbtc

@ -1 +1 @@
curl --url "http://127.0.0.1:7778" --data "{\"prefetchlag\":-1,\"poll\":1,\"active\":1,\"agent\":\"iguana\",\"method\":\"addcoin\",\"newcoin\":\"BTC\",\"startpend\":64,\"endpend\":64,\"services\":129,\"maxpeers\":512,\"RELAY\":1,\"VALIDATE\":1,\"portp2p\":8333}"
curl --url "http://127.0.0.1:7778" --data "{\"prefetchlag\":-1,\"poll\":1,\"active\":1,\"agent\":\"iguana\",\"method\":\"addcoin\",\"newcoin\":\"BTC\",\"startpend\":64,\"endpend\":64,\"services\":129,\"maxpeers\":512,\"RELAY\":1,\"VALIDATE\":1,\"portp2p\":8333,\"minconfirms\":1}"

4
iguana/iguana_payments.c

@ -502,8 +502,10 @@ char *sendtoaddress(struct supernet_info *myinfo,struct iguana_info *coin,char *
{
senttxid = iguana_sendrawtransaction(myinfo,coin,signedtx);
if ( bits256_cmp(senttxid,signedtxid) == 0 )
{
jaddstr(retjson,"sendrawtransaction","success");
else jaddbits256(retjson,"senderror",senttxid);
iguana_unspents_mark(myinfo,coin,vins);
} else jaddbits256(retjson,"senderror",senttxid);
}
free_json(vins);
free(signedtx);

2
iguana/iguana_ramchain.c

@ -2324,7 +2324,7 @@ struct iguana_ramchain *iguana_bundleload(struct supernet_info *myinfo,struct ig
}
if ( prev2 != 0 && prev != 0 && strcmp(coin->symbol,"BTCD") == 0 && bp->bundleheight > 20000 && prev != 0 && iguana_targetbits(coin,block,prev,prev2,1,coin->chain->targetspacing,coin->chain->targettimespan) != block->RO.bits )
{
printf("nbits target error %x != %x ht.%d\n",iguana_targetbits(coin,block,prev,prev2,1,coin->chain->targetspacing,coin->chain->targettimespan),block->RO.bits,block->height);
printf("warning: nbits target mismatch %x != %x ht.%d, this is normal during parallel sync\n",iguana_targetbits(coin,block,prev,prev2,1,coin->chain->targetspacing,coin->chain->targettimespan),block->RO.bits,block->height);
} //else printf(">>>>>>>>>> matched nbits %x ht.%d\n",block->RO.bits,block->height);
if ( bp->bundleheight+i == coin->blocks.hwmchain.height+1 )
{

1
iguana/iguana_sign.c

@ -273,7 +273,6 @@ int32_t iguana_parsevinobj(struct supernet_info *myinfo,struct iguana_info *coin
{
if ( vin->vinscript == 0 )
{
//printf("null vinscript case -> need to sign this tx\n");
vin->vinscript = serialized;
vin->vinscript[0] = 0;
vin->scriptlen = 1;

69
iguana/iguana_unspents.c

@ -831,24 +831,65 @@ int32_t iguana_staker_sort(struct iguana_info *coin,bits256 *hash2p,uint8_t *ref
return((int32_t)sortbuf[1].uints[5]);
}
int32_t iguana_RTunspent_check(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_outpoint outpt)
int32_t iguana_markedunspents_find(struct iguana_info *coin,int32_t *firstslotp,bits256 txid,int32_t vout)
{
bits256 txid; int32_t vout,spentheight;
memset(&txid,0,sizeof(txid));
if ( coin->FULLNODE == 0 && coin->VALIDATENODE == 0 )
return(0);
if ( iguana_RTunspentind2txid(myinfo,coin,&spentheight,&txid,&vout,outpt) == 0 )
int32_t i;
*firstslotp = -1;
if ( bits256_nonz(txid) != 0 && vout >= 0 )
{
//char str[65]; printf("verify %s/v%d is not already used\n",bits256_str(str,txid),vout);
//return(iguana_RTspentflag(myinfo,coin,&RTspend,&spentheight,ramchain,outpt,height,minconf,coin->longestchain,U[unspentind].value));
/*if ( basilisk_addspend(myinfo,coin->symbol,txid,vout,0) != 0 )
txid.ushorts[0] = vout; // small chance of collision ok due to small timeframe
for (i=0; i<sizeof(coin->markedunspents)/sizeof(*coin->markedunspents); i++)
{
char str[65]; printf("iguana_unspent_check found unspentind (%u %d) %s\n",outpt.hdrsi,outpt.unspentind,bits256_str(str,txid));
return(1);
} else return(0);*/
return(0);
if ( *firstslotp < 0 && bits256_nonz(coin->markedunspents[i]) == 0 )
*firstslotp = i;
if ( bits256_cmp(txid,coin->markedunspents[i]) == 0 )
return(i);
}
}
if ( *firstslotp < 0 )
{
for (i=0; i<sizeof(coin->markedunspents)/sizeof(*coin->markedunspents); i++)
if ( bits256_nonz(coin->markedunspents[i]) == 0 )
{
*firstslotp = i;
break;
}
}
if ( *firstslotp < 0 )
*firstslotp = (rand() % (sizeof(coin->markedunspents)/sizeof(*coin->markedunspents)));
return(-1);
}
void iguana_unspents_mark(struct supernet_info *myinfo,struct iguana_info *coin,cJSON *vins)
{
int32_t i,n,firstslot; int16_t vout; cJSON *item; bits256 txid;
if ( (n= cJSON_GetArraySize(vins)) > 0 )
{
for (i=0; i<n; i++)
{
item = jitem(vins,i);
txid = jbits256(item,"txid");
vout = jint(item,"vout");
if ( bits256_nonz(txid) != 0 && vout >= 0 )
{
if ( iguana_markedunspents_find(coin,&firstslot,txid,vout) < 0 )
{
if ( firstslot >= 0 )
{
char str[65]; printf("slot.[%d] <- %s/v%d\n",firstslot,bits256_str(str,txid),vout);
coin->markedunspents[firstslot] = txid;
}
}
printf("iguana_unspent_check: couldnt find (%d %d)\n",outpt.hdrsi,outpt.unspentind);
}
}
}
}
int32_t iguana_RTunspent_check(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_outpoint outpt)
{
int32_t firstslot;
if ( iguana_markedunspents_find(coin,&firstslot,outpt.txid,outpt.vout) < 0 )
return(0);
return(-1);
}

1
includes/iguana_funcs.h

@ -451,6 +451,7 @@ int32_t iguana_volatileupdate(struct iguana_info *coin,int32_t incremental,struc
void iguana_utxoaddrs_purge(struct iguana_info *coin);
int32_t iguana_utxoupdate(struct iguana_info *coin,int16_t spent_hdrsi,uint32_t spent_unspentind,uint32_t spent_pkind,uint64_t spent_value,uint32_t spendind,uint32_t fromheight,uint8_t *rmd160);
int32_t iguana_RTunspentslists(struct supernet_info *myinfo,struct iguana_info *coin,uint64_t *totalp,struct iguana_outpoint *unspents,int32_t max,uint64_t required,int32_t minconf,cJSON *addresses,char *remoteaddr);
void iguana_unspents_mark(struct supernet_info *myinfo,struct iguana_info *coin,cJSON *vins);
int32_t iguana_immediate(struct iguana_info *coin,int32_t immedmillis);
int32_t iguana_fastfindreset(struct iguana_info *coin);
int64_t iguana_unspentset(struct supernet_info *myinfo,struct iguana_info *coin);

1
includes/iguana_structs.h

@ -506,6 +506,7 @@ struct iguana_info
uint64_t histbalance,RTcredits,RTdebits;
void *utxoaddrfileptr; long utxoaddrfilesize;
uint32_t utxoaddrlastcount,*utxoaddroffsets,lastunspentsupdate; uint8_t *utxoaddrtable; bits256 utxoaddrhash;
bits256 markedunspents[1024];
struct iguana_block *RTblocks[65536]; uint8_t *RTrawdata[65536]; int32_t RTrecvlens[65536],RTnumtx[65536];
struct iguana_RTtxid *RTdataset; struct iguana_RTaddr *RTaddrs;
};

Loading…
Cancel
Save