Browse Source

new apis

release/v0.1
jl777 9 years ago
parent
commit
d8eedc3afc
  1. 4
      basilisk/basilisk.c
  2. 1
      basilisk/basilisk.h
  3. 304
      datachain/datachain.c
  4. 16
      datachain/datachain.h
  5. 22
      datachain/datachain_BTC.c
  6. 189
      datachain/datachain_KOMODO.c
  7. 174
      datachain/datachain_events.c
  8. 28
      gecko/gecko.c
  9. 2
      gecko/gecko.h
  10. 8
      gecko/gecko_miner.c
  11. 60
      iguana/css/custom.css
  12. 5
      iguana/iguana777.c
  13. 6
      iguana/iguana_chains.c
  14. 30
      iguana/iguana_instantdex.c
  15. 4
      iguana/iguana_msg.c
  16. 11
      iguana/iguana_ramchain.c
  17. 18
      iguana/iguana_unspents.c
  18. 842
      iguana/index copy.html
  19. 177
      iguana/index.html
  20. 2
      iguana/tests/DEXtx
  21. 2
      iguana/tests/HOT
  22. 2
      iguana/tests/HOTtx
  23. 2
      iguana/tests/decoderawtransaction
  24. 11
      includes/iguana_apideclares.h
  25. 6
      includes/iguana_funcs.h
  26. 6
      includes/iguana_structs.h

4
basilisk/basilisk.c

@ -575,8 +575,8 @@ void basilisk_msgprocess(struct supernet_info *myinfo,void *_addr,uint32_t sende
{ (void *)"BYE", &basilisk_respond_goodbye }, // disconnect
// gecko chains
{ (void *)"NEW", &basilisk_respond_newgeckochain }, // creates new virtual gecko chain
{ (void *)"GEN", &basilisk_respond_geckogenesis }, // returns genesis list
//{ (void *)"NEW", &basilisk_respond_newgeckochain }, // creates new virtual gecko chain
///{ (void *)"GEN", &basilisk_respond_geckogenesis }, // returns genesis list
{ (void *)"GET", &basilisk_respond_geckoget }, // requests headers, block or tx
{ (void *)"HDR", &basilisk_respond_geckoheaders }, // reports headers
{ (void *)"BLK", &basilisk_respond_geckoblock }, // reports block

1
basilisk/basilisk.h

@ -69,5 +69,6 @@ char *basilisk_addrelay_info(struct supernet_info *myinfo,uint8_t *pubkey33,uint
void basilisk_request_goodbye(struct supernet_info *myinfo);
int32_t basilisk_update(char *symbol,uint32_t reftimestamp);
void basilisk_seqresult(struct supernet_info *myinfo,char *retstr);
struct iguana_info *basilisk_geckochain(struct supernet_info *myinfo,char *symbol,char *chainname,cJSON *valsobj);
#endif

304
datachain/datachain.c

@ -14,93 +14,139 @@
******************************************************************************/
#include "../iguana/iguana777.h"
#include "datachain_events.c"
int32_t datachain_rwgenesis(int32_t rwflag,uint8_t *serialized,struct gecko_genesis_opreturn *opret)
uint32_t datachain_checkpoint(struct supernet_info *myinfo,struct iguana_info *coin,uint32_t lastcheckpoint,uint32_t timestamp,bits256 merkle,int32_t lastheight,bits256 lasthash2)
{
int32_t len = 0;
if ( rwflag == 0 )
char str[65],str2[65]; struct iguana_info *btc = iguana_coinfind("BTC");
printf("datachain_checkpoint.%s for %s.%u to %u lastheight.%d %s\n",bits256_str(str,merkle),coin->symbol,lastcheckpoint,timestamp,lastheight,bits256_str(str2,lasthash2));
if ( (lastheight % myinfo->numrelays) == myinfo->RELAYID )
{
memcpy(opret->type,&serialized[len],sizeof(opret->type)), len += sizeof(opret->type);
memcpy(opret->symbol,&serialized[len],sizeof(opret->symbol)), len += sizeof(opret->symbol);
memcpy(opret->name,&serialized[len],sizeof(opret->name)), len += sizeof(opret->name);
// if designated relay, submit checkpoint -> add ip/relayid to opreturn
//
if ( strcmp(coin->symbol,"BTCD") == 0 )
{
if ( btc != 0 )
{
}
}
else
{
memcpy(&serialized[len],opret->type,sizeof(opret->type)), len += sizeof(opret->type);
memcpy(&serialized[len],opret->symbol,sizeof(opret->symbol)), len += sizeof(opret->symbol);
memcpy(&serialized[len],opret->name,sizeof(opret->name)), len += sizeof(opret->name);
}
len += iguana_rwnum(rwflag,&serialized[len],sizeof(opret->PoSvalue),&opret->PoSvalue);
//len += iguana_rwnum(rwflag,&serialized[len],sizeof(opret->flags),&opret->flags);
len += iguana_rwnum(rwflag,&serialized[len],sizeof(opret->netmagic),&opret->netmagic);
len += iguana_rwnum(rwflag,&serialized[len],sizeof(opret->timestamp),&opret->timestamp);
len += iguana_rwnum(rwflag,&serialized[len],sizeof(opret->nBits),&opret->nBits);
len += iguana_rwnum(rwflag,&serialized[len],sizeof(opret->nonce),&opret->nonce);
//len += iguana_rwnum(rwflag,&serialized[len],sizeof(opret->extra),&opret->extra);
len += iguana_rwnum(rwflag,&serialized[len],sizeof(opret->blocktime),&opret->blocktime);
len += iguana_rwnum(rwflag,&serialized[len],sizeof(opret->port),&opret->port);
if ( rwflag == 0 )
{
opret->version = serialized[len++];
opret->pubval = serialized[len++];
opret->p2shval = serialized[len++];
opret->wifval = serialized[len++];
memcpy(opret->rmd160,&serialized[len],20), len += 20;
}
else
}
return(timestamp);
}
int32_t datachain_events_rewind(struct supernet_info *myinfo,int32_t ordered,struct datachain_info *dPoW,int32_t height,uint32_t hdrsi,uint32_t unspentind)
{
uint64_t hdrsi_unspentind; int32_t i;
if ( dPoW->numevents > 0 )
{
serialized[len++] = opret->version;
serialized[len++] = opret->pubval;
serialized[len++] = opret->p2shval;
serialized[len++] = opret->wifval;
memcpy(&serialized[len],opret->rmd160,20), len += 20;
datachain_events_sort(dPoW);
hdrsi_unspentind = ((uint64_t)hdrsi << 32) | unspentind;
for (i=dPoW->numevents-1; i>=0; i--)
if ( hdrsi_unspentind > dPoW->events[i]->hdrsi_unspentind )
break;
printf("dPoW rewind %d to %d\n",dPoW->numevents,i+1);
dPoW->numevents = i+1;
}
printf("opreturn len.%d\n",len);
return(len);
return(dPoW->numevents);
}
int32_t datachain_opreturn_create(uint8_t *serialized,char *symbol,char *name,char *coinaddr,int64_t PoSvalue,uint32_t nBits,uint16_t blocktime,uint16_t port,uint8_t p2shval,uint8_t wifval)
{
uint8_t txidbytes[1024],minerpayment[512]; int32_t i,len,datalen,minerpaymentlen=0,txlen; struct gecko_genesis_opreturn opret; bits256 txid,zero,threshold,hash2; struct iguana_info *btcd; char coinbasestr[512]; struct iguana_msgblock msg;
btcd = iguana_coinfind("BTCD");
memset(&opret,0,sizeof(opret));
opret.type[0] = 'N', opret.type[1] = 'E', opret.type[2] = 'W';
memcpy(opret.symbol,symbol,sizeof(opret.symbol));
memcpy(opret.name,name,sizeof(opret.name));
opret.version = 1;
opret.PoSvalue = PoSvalue;
opret.nBits = nBits;
opret.p2shval = p2shval;
opret.wifval = wifval;
opret.blocktime = blocktime;
opret.port = port;
opret.timestamp = (uint32_t)time(NULL);
OS_randombytes((void *)&opret.netmagic,sizeof(opret.netmagic));
bitcoin_addr2rmd160(&opret.pubval,opret.rmd160,coinaddr);
if ( PoSvalue > 0 )
minerpaymentlen = bitcoin_standardspend(minerpayment,0,opret.rmd160);
memset(zero.bytes,0,sizeof(zero));
sprintf(coinbasestr,"%s_%s",symbol,name);
txlen = iguana_coinbase(btcd,txidbytes,opret.timestamp,zero,(uint8_t *)coinbasestr,(int32_t)strlen(coinbasestr)+1,minerpayment,minerpaymentlen,PoSvalue,&txid);
memset(&msg,0,sizeof(msg));
msg.H.version = opret.version;
msg.H.merkle_root = txid;
msg.H.timestamp = opret.timestamp;
msg.H.bits = opret.nBits;
threshold = bits256_from_compact(nBits);
for (i=0; i<100000000; i++)
{
msg.H.nonce = i;
datalen = iguana_rwblockhdr(1,0,serialized,&msg);
hash2 = iguana_calcblockhash(symbol,btcd->chain->hashalgo,serialized,datalen);
if ( bits256_cmp(threshold,hash2) > 0 )
int32_t datachain_checkpoint_update(struct supernet_info *myinfo,struct iguana_info *coin,uint32_t timestamp)
{
int32_t i,num,n,lastheight; bits256 *tree,hash2,lasthash2,merkle; struct iguana_block *block;
if ( coin->lastcheckpoint <= coin->blocks.hwmchain.height )
{
num = (coin->blocks.hwmchain.height - coin->lastcheckpoint) + 1;
tree = (bits256 *)coin->blockspace;
if ( num <= IGUANA_MAXPACKETSIZE/(sizeof(bits256) * 2) )
{
lastheight = -1;
memset(lasthash2.bytes,0,sizeof(lasthash2));
for (i=n=0; i<num; i++)
{
hash2 = iguana_blockhash(coin,coin->lastcheckpoint + i);
if ( bits256_nonz(hash2) != 0 )
{
if ( (block= iguana_blockfind("datachain",coin,hash2)) != 0 && block->height == coin->lastcheckpoint + i && block->mainchain != 0 && block->RO.timestamp < timestamp )
{
tree[n++] = hash2;
lastheight = block->height;
lasthash2 = hash2;
}
else break;
}
else
{
printf("got zero blockhash for %s.[%d]\n",coin->symbol,coin->lastcheckpoint + i);
break;
}
len = datachain_rwgenesis(1,serialized,&opret);
//for (i=0; i<len; i++)
// printf("%02x",serialized[i]);
//printf(" <- opreturn\n");
return(len);
}
if ( n > 0 && lastheight >= 0 && bits256_nonz(lasthash2) != 0 )
{
merkle = iguana_merkle(tree,num);
coin->lastcheckpoint = datachain_checkpoint(myinfo,coin,coin->lastcheckpoint,timestamp,merkle,lastheight,lasthash2);
}
}
}
return(coin->lastcheckpoint);
}
void datachain_BTC_clock(struct supernet_info *myinfo,int32_t ordered,struct iguana_info *btc,int32_t height,uint32_t hdrsi,uint32_t unspentind,uint32_t timestamp)
{
int32_t retval; struct iguana_info *btcd = iguana_coinfind("BTCD");
if ( (retval= datachain_eventadd(myinfo,ordered,&myinfo->dPoW.BTC,DATACHAIN_ISBTC,0)) < 0 )
{
myinfo->dPoW.BTC.numevents = datachain_events_rewind(myinfo,ordered,&myinfo->dPoW.BTC,height,hdrsi,unspentind);
}
else if ( retval > 0 )
{
if ( ordered != 0 && btcd != 0 && btcd->started != 0 && btcd->active != 0 )
{
// new BTC block actions, ie gather BTCD hashes for checkpoint
btcd->lastcheckpoint = datachain_checkpoint_update(myinfo,btcd,timestamp);
printf("NEWBLOCK.%s ht.%d\n",btc->symbol,height);
}
}
}
void datachain_KOMODO_newblock(struct supernet_info *myinfo,int32_t ordered,struct iguana_info *btcd,int32_t height,uint32_t hdrsi,uint32_t unspentind,uint32_t timestamp)
{
int32_t retval; struct iguana_info *virt,*tmp;
if ( (retval= datachain_eventadd(myinfo,ordered,&myinfo->dPoW.BTCD,DATACHAIN_ISKOMODO,0)) < 0 )
{
myinfo->dPoW.BTCD.numevents = datachain_events_rewind(myinfo,ordered,&myinfo->dPoW.BTCD,height,hdrsi,unspentind);
}
else if ( retval > 0 )
{
// new BTCD block actions, ie gather all virtual hashes for checkpoint
if ( ordered != 0 )
{
HASH_ITER(hh,myinfo->allcoins,virt,tmp)
{
if ( virt->started != 0 && virt->active != 0 && virt->virtualchain != 0 )
virt->lastcheckpoint = datachain_checkpoint_update(myinfo,virt,timestamp);
}
//printf("NEWBLOCK.%s ht.%d\n",btcd->symbol,height);
}
}
}
void datachain_virt_newblock(struct supernet_info *myinfo,int32_t ordered,struct iguana_info *virt,int32_t height,uint32_t hdrsi,uint32_t unspentind,uint32_t timestamp)
{
int32_t retval;
if ( (retval= datachain_eventadd(myinfo,ordered,&virt->dPoW,0,0)) < 0 )
{
virt->dPoW.numevents = datachain_events_rewind(myinfo,ordered,&virt->dPoW,height,hdrsi,unspentind);
}
else if ( retval > 0 )
{
// new virt block actions, maybe nothing to do?
if ( ordered != 0 )
printf("NEWBLOCK.%s ht.%d\n",virt->symbol,height);
}
}
int32_t datachain_datascript(struct iguana_info *coin,uint8_t *script,uint8_t *data,int32_t datalen)
@ -122,6 +168,9 @@ int32_t datachain_datascript(struct iguana_info *coin,uint8_t *script,uint8_t *d
int32_t datachain_datascript_decode(uint8_t *opreturn,uint8_t *script,int32_t scriptlen,struct vin_info *vp,int32_t type)
{
int32_t plen,i,oplen=0;
//for (i=0; i<scriptlen; i++)
// printf("%02x",script[i]);
//printf(" <- MofNscript\n");
for (i=0; i<vp->N; i++)
{
if ( (plen= bitcoin_pubkeylen(vp->signers[i].pubkey)) > 32 )
@ -171,103 +220,57 @@ int32_t datachain_opreturn_decode(uint8_t *opreturn,uint8_t *script,int32_t scri
else return(-1);
}
int32_t datachain_events_rewind(struct supernet_info *myinfo,struct datachain_event *events,int32_t numevents,int32_t height,uint32_t hdrsi,uint32_t unspentind)
{
return(numevents);
}
void datachain_BTC_clock(struct supernet_info *myinfo,struct iguana_info *btc,int32_t height,uint32_t hdrsi,uint32_t unspentind)
{
if ( hdrsi < myinfo->dPOW.BTC.lasthdrsi || (hdrsi == myinfo->dPOW.BTC.lasthdrsi && unspentind < myinfo->dPOW.BTC.lastunspentind) )
{
myinfo->dPOW.BTC.numevents = datachain_events_rewind(myinfo,myinfo->dPOW.BTC.events,myinfo->dPOW.BTC.numevents,height,hdrsi,unspentind);
}
else
{
printf("NEWBLOCK.%s ht.%d\n",btc->symbol,height);
}
myinfo->dPOW.BTC.lasthdrsi = hdrsi;
myinfo->dPOW.BTC.lastunspentind = unspentind;
}
void datachain_BTCD_newblock(struct supernet_info *myinfo,struct iguana_info *btcd,int32_t height,uint32_t hdrsi,uint32_t unspentind)
{
if ( hdrsi < myinfo->dPOW.BTCD.lasthdrsi || (hdrsi == myinfo->dPOW.BTCD.lasthdrsi && unspentind < myinfo->dPOW.BTCD.lastunspentind) )
{
myinfo->dPOW.BTCD.numevents = datachain_events_rewind(myinfo,myinfo->dPOW.BTCD.events,myinfo->dPOW.BTCD.numevents,height,hdrsi,unspentind);
}
else
{
// new BTCD block actions
printf("NEWBLOCK.%s ht.%d\n",btcd->symbol,height);
}
myinfo->dPOW.BTCD.lasthdrsi = hdrsi;
myinfo->dPOW.BTCD.lastunspentind = unspentind;
}
void datachain_virt_newblock(struct supernet_info *myinfo,struct iguana_info *virt,int32_t height,uint32_t hdrsi,uint32_t unspentind)
{
if ( hdrsi < virt->dPOW.lasthdrsi || (hdrsi == virt->dPOW.lasthdrsi && unspentind < virt->dPOW.lastunspentind) )
void datachain_opreturn(struct supernet_info *myinfo,int32_t ordered,struct iguana_info *coin,uint32_t timestamp,int32_t btc_or_btcd,int64_t crypto777_payment,int64_t burned,int32_t height,uint64_t hdrsi_unspentind,uint8_t *opreturn,int32_t oplen)
{
virt->dPOW.numevents = datachain_events_rewind(myinfo,virt->dPOW.events,virt->dPOW.numevents,height,hdrsi,unspentind);
}
else
{
// new virt block actions
printf("NEWBLOCK.%s ht.%d\n",virt->symbol,height);
}
virt->dPOW.lasthdrsi = hdrsi;
virt->dPOW.lastunspentind = unspentind;
}
void datachain_opreturn(struct supernet_info *myinfo,struct iguana_info *coin,int32_t btc_or_btcd,int64_t crypto777_payment,int64_t burned,int32_t height,uint64_t hdrsi_unspentind,uint8_t *opreturn,int32_t oplen)
{
uint32_t hdrsi,unspentind;
uint32_t hdrsi,unspentind; struct datachain_event *event;
hdrsi = (uint32_t)(hdrsi_unspentind >> 32);
unspentind = (uint32_t)hdrsi_unspentind;
if ( btc_or_btcd == 1 ) // BTC
if ( btc_or_btcd == DATACHAIN_ISBTC ) // BTC
{
if ( opreturn == 0 )
datachain_BTC_clock(myinfo,coin,height,hdrsi,unspentind);
datachain_BTC_clock(myinfo,ordered,coin,height,hdrsi,unspentind,timestamp);
else
{
if ( (event= datachain_event_create(coin,crypto777_payment,burned,height,hdrsi,unspentind,opreturn,oplen)) != 0 )
datachain_eventadd(myinfo,ordered,&myinfo->dPoW.BTC,btc_or_btcd,event);
}
}
else if ( btc_or_btcd == 2 ) // BTCD
else if ( btc_or_btcd == DATACHAIN_ISKOMODO ) // BTCD
{
if ( opreturn == 0 )
datachain_BTCD_newblock(myinfo,coin,height,hdrsi,unspentind);
datachain_KOMODO_newblock(myinfo,ordered,coin,height,hdrsi,unspentind,timestamp);
else
{
if ( (event= datachain_event_create(coin,crypto777_payment,burned,height,hdrsi,unspentind,opreturn,oplen)) != 0 )
datachain_eventadd(myinfo,ordered,&myinfo->dPoW.BTCD,btc_or_btcd,event);
}
}
else
{
if ( opreturn == 0 )
datachain_virt_newblock(myinfo,coin,height,hdrsi,unspentind);
datachain_virt_newblock(myinfo,ordered,coin,height,hdrsi,unspentind,timestamp);
else
{
if ( (event= datachain_event_create(coin,crypto777_payment,burned,height,hdrsi,unspentind,opreturn,oplen)) != 0 )
datachain_eventadd(myinfo,ordered,&coin->dPoW,btc_or_btcd,event);
}
}
if ( opreturn != 0 )
{
int32_t i;
for (i=0; i<oplen; i++)
printf("%02x",opreturn[oplen]);
printf(" <- opreturn.%s len.%d\n",coin->symbol,oplen);
printf("%02x",opreturn[i]);
printf(" <- opreturn.%s len.%d ht.%d [%d] u.%u 777 %.8f burn %.8f\n",coin->symbol,oplen,height,hdrsi,unspentind,dstr(crypto777_payment),dstr(burned));
}
}
int32_t iguana_opreturn(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_bundle *bp,int64_t crypto777_payment,int32_t height,uint64_t hdrsi_unspentind,int64_t burned,uint32_t fileid,uint64_t scriptpos,uint32_t scriptlen)
int32_t iguana_opreturn(struct supernet_info *myinfo,int32_t ordered,struct iguana_info *coin,uint32_t timestamp,struct iguana_bundle *bp,int64_t crypto777_payment,int32_t height,uint64_t hdrsi_unspentind,int64_t burned,uint32_t fileid,uint64_t scriptpos,uint32_t scriptlen)
{
uint8_t type,scriptspace[IGUANA_MAXSCRIPTSIZE],opreturn[8192]; char fname[1024]; uint32_t sigsize,pubkeysize,p2shsize,suffix,oplen=0; int32_t btc_or_btcd=0,len = -1; struct vin_info V;
uint8_t type,scriptspace[IGUANA_MAXSCRIPTSIZE],opreturn[8192]; char fname[1024]; uint32_t oplen=0; int32_t btc_or_btcd=0,len = -1; struct vin_info V;
if ( strcmp("BTC",coin->symbol) == 0 )
btc_or_btcd = 1;
btc_or_btcd = DATACHAIN_ISBTC;
else if ( strcmp("BTCD",coin->symbol) == 0 )
btc_or_btcd = 2;
btc_or_btcd = DATACHAIN_ISKOMODO;
else if ( coin->virtualchain == 0 )
return(-1);
if ( height < bp->bundleheight || height >= bp->bundleheight+coin->chain->bundlesize )
@ -277,7 +280,7 @@ int32_t iguana_opreturn(struct supernet_info *myinfo,struct iguana_info *coin,st
}
if ( crypto777_payment == 0 && burned == 0 && scriptlen == 0 && fileid == 0 && scriptpos == 0 )
{
datachain_opreturn(myinfo,coin,btc_or_btcd,crypto777_payment,burned,height,hdrsi_unspentind,0,0);
datachain_opreturn(myinfo,ordered,coin,timestamp,btc_or_btcd,crypto777_payment,burned,height,hdrsi_unspentind,0,0);
return(0);
}
if ( scriptpos > 0 && scriptlen > 0 )
@ -286,24 +289,35 @@ int32_t iguana_opreturn(struct supernet_info *myinfo,struct iguana_info *coin,st
if ( (len= iguana_scriptdata(coin,scriptspace,coin->voutptrs[fileid],fname,scriptpos,scriptlen)) == scriptlen )
{
memset(&V,0,sizeof(V));
type = iguana_vinscriptparse(coin,&V,&sigsize,&pubkeysize,&p2shsize,&suffix,scriptspace,scriptlen);
V.spendlen = scriptlen;
memcpy(V.spendscript,scriptspace,scriptlen);
type = _iguana_calcrmd160(coin,&V);
if ( type == IGUANA_SCRIPT_OPRETURN )
oplen = datachain_opreturn_decode(opreturn,scriptspace,scriptlen);
else oplen = datachain_datascript_decode(opreturn,scriptspace,scriptlen,&V,type);
datachain_opreturn(myinfo,coin,btc_or_btcd,crypto777_payment,burned,height,hdrsi_unspentind,opreturn,oplen);
datachain_opreturn(myinfo,ordered,coin,timestamp,btc_or_btcd,crypto777_payment,burned,height,hdrsi_unspentind,opreturn,oplen);
return(oplen);
} else printf("iguana_opreturn error: %d bytes from fileid.%d[%d] %s for scriptlen.%d\n",len,fileid,(uint32_t)scriptpos,fname,scriptlen);
}
return(-1);
}
int64_t datachain_update(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_bundle *bp,uint8_t rmd160[20],int64_t crypto777_payment,uint8_t type,int32_t height,uint64_t hdrsi_unspentind,int64_t value,uint32_t fileid,uint64_t scriptpos,int32_t scriptlen)
void datachain_update_spend(struct supernet_info *myinfo,int32_t ordered,struct iguana_info *coin,uint32_t timestamp,struct iguana_bundle *bp,int32_t height,bits256 txid,int32_t vout,uint8_t rmd160[20],int64_t value)
{
if ( strcmp("BTC",coin->symbol) == 0 )
datachain_update_txidvout(myinfo,ordered,coin,&myinfo->dPoW.BTC,DATACHAIN_ISBTC,height,txid,vout,rmd160,value);
else if ( strcmp("BTCD",coin->symbol) == 0 )
datachain_update_txidvout(myinfo,ordered,coin,&myinfo->dPoW.BTCD,DATACHAIN_ISKOMODO,height,txid,vout,rmd160,value);
else datachain_update_txidvout(myinfo,ordered,coin,&coin->dPoW,0,height,txid,vout,rmd160,value);
}
int64_t datachain_update(struct supernet_info *myinfo,int32_t ordered,struct iguana_info *coin,uint32_t timestamp,struct iguana_bundle *bp,uint8_t rmd160[20],int64_t crypto777_payment,uint8_t type,int32_t height,uint64_t hdrsi_unspentind,int64_t value,uint32_t fileid,uint64_t scriptpos,int32_t scriptlen,bits256 txid,int32_t vout)
{
if ( memcmp(rmd160,CRYPTO777_RMD160,20) == 0 )
crypto777_payment += value;
else if ( crypto777_payment != 0 && (type == IGUANA_SCRIPT_OPRETURN || type == IGUANA_SCRIPT_3of3 || type == IGUANA_SCRIPT_2of2 || type == IGUANA_SCRIPT_1of1) )
{
iguana_opreturn(myinfo,coin,bp,crypto777_payment,height,hdrsi_unspentind,value,fileid,scriptpos,scriptlen);
}
iguana_opreturn(myinfo,ordered,coin,timestamp,bp,crypto777_payment,height,hdrsi_unspentind,value,fileid,scriptpos,scriptlen);
} else datachain_update_spend(myinfo,ordered,coin,timestamp,bp,height,txid,vout,rmd160,value);
return(crypto777_payment);
}

16
datachain/datachain.h

@ -69,6 +69,9 @@
#define DATACHAIN_ACTION_QUOTE 10004
#define DATACHAIN_ACTION_SENDGROUP 10005
#define DATACHAIN_ISBTC 1
#define DATACHAIN_ISKOMODO 2
struct datachain_itemexclusive { uint8_t ownerpub[33]; };
struct datachain_item
@ -85,13 +88,22 @@ struct datachain_item
struct datachain_event
{
uint64_t hdrsi_unspentind,crypto777_payment,burned;
int32_t height,btc_or_btcd,oplen;
char symbol[16];
uint8_t opreturn[];
};
struct datachain_state
{
int32_t numprocessed,lasthdrsi,lastunspentind;
};
struct datachain_info
{
uint32_t lasthdrsi,lastunspentind,numevents,maxevents;
struct datachain_event *events;
struct datachain_state state;
uint32_t numevents,maxevents,ordered;
struct datachain_event **events;
};
struct delayedPoW_info

22
datachain/datachain_BTC.c

@ -0,0 +1,22 @@
/******************************************************************************
* Copyright © 2014-2016 The SuperNET Developers. *
* *
* See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at *
* the top-level directory of this distribution for the individual copyright *
* holder information and the developer policies on copyright and licensing. *
* *
* Unless otherwise agreed in a custom licensing agreement, no part of the *
* SuperNET software, including this file may be copied, modified, propagated *
* or distributed except according to the terms contained in the LICENSE file *
* *
* Removal or modification of this copyright notice is prohibited. *
* *
******************************************************************************/
// included from datachain.c
void datachain_events_processBTC(struct supernet_info *myinfo,struct datachain_info *dPoW,struct datachain_event *event)
{
}

189
datachain/datachain_KOMODO.c

@ -0,0 +1,189 @@
/******************************************************************************
* Copyright © 2014-2016 The SuperNET Developers. *
* *
* See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at *
* the top-level directory of this distribution for the individual copyright *
* holder information and the developer policies on copyright and licensing. *
* *
* Unless otherwise agreed in a custom licensing agreement, no part of the *
* SuperNET software, including this file may be copied, modified, propagated *
* or distributed except according to the terms contained in the LICENSE file *
* *
* Removal or modification of this copyright notice is prohibited. *
* *
******************************************************************************/
// included from datachain.c
int32_t datachain_rwgenesis(int32_t rwflag,uint8_t *serialized,struct gecko_genesis_opreturn *opret)
{
int32_t len = 0;
if ( rwflag == 0 )
{
memcpy(opret->type,&serialized[len],sizeof(opret->type)), len += sizeof(opret->type);
memcpy(opret->symbol,&serialized[len],sizeof(opret->symbol)), len += sizeof(opret->symbol);
memcpy(opret->name,&serialized[len],sizeof(opret->name)), len += sizeof(opret->name);
}
else
{
memcpy(&serialized[len],opret->type,sizeof(opret->type)), len += sizeof(opret->type);
memcpy(&serialized[len],opret->symbol,sizeof(opret->symbol)), len += sizeof(opret->symbol);
memcpy(&serialized[len],opret->name,sizeof(opret->name)), len += sizeof(opret->name);
}
len += iguana_rwnum(rwflag,&serialized[len],sizeof(opret->PoSvalue),&opret->PoSvalue);
len += iguana_rwnum(rwflag,&serialized[len],sizeof(opret->netmagic),&opret->netmagic);
len += iguana_rwnum(rwflag,&serialized[len],sizeof(opret->timestamp),&opret->timestamp);
len += iguana_rwnum(rwflag,&serialized[len],sizeof(opret->nBits),&opret->nBits);
len += iguana_rwnum(rwflag,&serialized[len],sizeof(opret->nonce),&opret->nonce);
len += iguana_rwnum(rwflag,&serialized[len],sizeof(opret->blocktime),&opret->blocktime);
len += iguana_rwnum(rwflag,&serialized[len],sizeof(opret->port),&opret->port);
if ( rwflag == 0 )
{
opret->version = serialized[len++];
opret->pubval = serialized[len++];
opret->p2shval = serialized[len++];
opret->wifval = serialized[len++];
memcpy(opret->rmd160,&serialized[len],20), len += 20;
}
else
{
serialized[len++] = opret->version;
serialized[len++] = opret->pubval;
serialized[len++] = opret->p2shval;
serialized[len++] = opret->wifval;
memcpy(&serialized[len],opret->rmd160,20), len += 20;
}
//printf("opreturn len.%d\n",len);
return(len);
}
bits256 datachain_opreturn_convert(uint8_t *txidbytes,int32_t *txlenp,struct iguana_msgblock *msg,struct gecko_genesis_opreturn *opret)
{
bits256 txid,zero; int32_t minerpaymentlen=0; uint8_t minerpayment[512]; char coinbasestr[128],name[64],symbol[64];
if ( opret->PoSvalue > 0 )
minerpaymentlen = bitcoin_standardspend(minerpayment,0,opret->rmd160);
memset(zero.bytes,0,sizeof(zero));
memset(symbol,0,sizeof(symbol)), memcpy(symbol,opret->symbol,sizeof(opret->symbol));
memset(name,0,sizeof(name)), memcpy(name,opret->name,sizeof(opret->name));
sprintf(coinbasestr,"%s_%s",symbol,name);
*txlenp = iguana_coinbase(1,GECKO_DEFAULTVERSION,txidbytes,opret->timestamp,zero,(uint8_t *)coinbasestr,(int32_t)strlen(coinbasestr)+1,minerpayment,minerpaymentlen,opret->PoSvalue,&txid);
memset(msg,0,sizeof(*msg));
msg->H.version = opret->version;
msg->H.merkle_root = txid;
msg->H.timestamp = opret->timestamp;
msg->H.bits = opret->nBits;
msg->H.nonce = opret->nonce;
return(txid);
}
int32_t datachain_genesis_verify(struct gecko_genesis_opreturn *opret)
{
int32_t txlen,datalen; bits256 txid,threshold,hash2; uint8_t serialized[1024],txidbytes[1024]; struct iguana_msgblock msg; char str[65],str2[65];
txid = datachain_opreturn_convert(txidbytes,&txlen,&msg,opret);
threshold = bits256_from_compact(opret->nBits);
datalen = iguana_rwblockhdr(1,0,serialized,&msg);
hash2 = iguana_calcblockhash("virtual",blockhash_sha256,serialized,datalen);
//for (i=0; i<datalen; i++)
// printf("%02x",serialized[i]);
if ( bits256_cmp(threshold,hash2) > 0 )
{
//printf(" valid blockhash!\n");
return(0);
}
else
{
printf(" ERROR invalid blockhash! txid.%s %s\n",bits256_str(str2,txid),bits256_str(str,hash2));
return(-1);
}
}
int32_t datachain_opreturn_create(uint8_t *serialized,char *symbol,char *name,char *coinaddr,int64_t PoSvalue,uint32_t nBits,uint16_t blocktime,uint16_t port,uint8_t p2shval,uint8_t wifval)
{
int32_t i,len,datalen,txlen; struct gecko_genesis_opreturn opret; bits256 threshold,txid,hash2; struct iguana_info *btcd; struct iguana_msgblock msg; uint8_t txidbytes[1024];
btcd = iguana_coinfind("BTCD");
memset(&opret,0,sizeof(opret));
opret.type[0] = 'N', opret.type[1] = 'E', opret.type[2] = 'W';
memcpy(opret.symbol,symbol,sizeof(opret.symbol));
memcpy(opret.name,name,sizeof(opret.name));
opret.version = GECKO_DEFAULTVERSION;
opret.PoSvalue = PoSvalue;
opret.nBits = nBits;
opret.p2shval = p2shval;
opret.wifval = wifval;
opret.blocktime = blocktime;
opret.port = port;
opret.timestamp = (uint32_t)time(NULL);
OS_randombytes((void *)&opret.netmagic,sizeof(opret.netmagic));
bitcoin_addr2rmd160(&opret.pubval,opret.rmd160,coinaddr);
txid = datachain_opreturn_convert(txidbytes,&txlen,&msg,&opret);
threshold = bits256_from_compact(nBits);
for (i=0; i<100000000; i++)
{
opret.nonce = msg.H.nonce = i;
datalen = iguana_rwblockhdr(1,0,serialized,&msg);
hash2 = iguana_calcblockhash(symbol,btcd->chain->hashalgo,serialized,datalen);
if ( bits256_cmp(threshold,hash2) > 0 )
break;
}
//char str[65],str2[65];
//for (i=0; i<datalen; i++)
// printf("%02x",serialized[i]);
//printf(" <- msgblock datalen.%d txid.%s hash2.%s\n",datalen,bits256_str(str,txid),bits256_str(str2,hash2));
len = datachain_rwgenesis(1,serialized,&opret);
datachain_genesis_verify(&opret);
return(len);
}
void datachain_events_processKOMODO(struct supernet_info *myinfo,struct datachain_info *dPoW,struct datachain_event *event)
{
struct gecko_chain *chain; bits256 hash2,threshold; struct gecko_genesis_opreturn opret; int32_t datalen,i,j,len,txlen; char symbol[16],name[64],magicstr[16],blockstr[8192],nbitstr[16],issuer[64],hashstr[65],str2[65],argbuf[1024],chainname[GECKO_MAXNAMELEN]; cJSON *valsobj; struct iguana_msgblock msg; uint8_t serialized[256],txidbytes[1024],buf[4]; struct iguana_info *virt,*btcd;
if ( (btcd= iguana_coinfind("BTCD")) != 0 && memcmp(event->opreturn,"NEW",3) == 0 )
{
//int32_t i; for (i=0; i<76; i++)
// printf("%02x",event->opreturn[i]);
//printf(" <- event\n");
if ( (len= datachain_rwgenesis(0,event->opreturn,&opret)) <= event->oplen )
{
datachain_genesis_verify(&opret);
memset(symbol,0,sizeof(symbol)), memcpy(symbol,opret.symbol,sizeof(opret.symbol));
memset(name,0,sizeof(name)), memcpy(name,opret.name,sizeof(opret.name));
hash2 = datachain_opreturn_convert(txidbytes,&txlen,&msg,&opret);
threshold = bits256_from_compact(opret.nBits);
msg.txn_count = 1;
//n = iguana_serialize_block(virt->chain,&hash2,serialized,newblock);
datalen = iguana_rwblockhdr(1,0,serialized,&msg);
hash2 = iguana_calcblockhash(symbol,btcd->chain->hashalgo,serialized,datalen);
for (i=0; i<datalen; i++)
printf("%02x",serialized[i]);
printf(" <- genhdr.%d\n",datalen);
for (i=0; i<txlen; i++)
printf("%02x",txidbytes[i]);
printf(" <- genesistx\n");
//char str[65]; printf("komodo datalen.%d %s\n",datalen,bits256_str(str,hash2));
if ( bits256_cmp(threshold,hash2) > 0 )
{
bitcoin_address(issuer,60,opret.rmd160,20);
bits256_str(hashstr,hash2);
for (j=0,i=3; i>=0; i--,j++)
buf[i] = (opret.netmagic >> (j*8));
init_hexbytes_noT(magicstr,buf,4);
for (j=0,i=3; i>=0; i--,j++)
buf[i] = (opret.nBits >> (j*8));
init_hexbytes_noT(nbitstr,buf,4);
init_hexbytes_noT(blockstr,serialized,datalen);
strcat(blockstr,"01"), datalen++;
init_hexbytes_noT(&blockstr[datalen << 1],txidbytes,txlen);
sprintf(argbuf,"{\"name\":\"%s\",\"symbol\":\"%s\",\"netmagic\":\"%s\",\"port\":%u,\"blocktime\":%u,\"pubval\":\"%02x\",\"p2shval\":\"%02x\",\"wifval\":\"%02x\",\"unitval\":\"%02x\",\"genesishash\":\"%s\",\"genesis\":{\"version\":1,\"timestamp\":%u,\"nBits\":\"%s\",\"nonce\":%d,\"merkle_root\":\"%s\"},\"genesisblock\":\"%s\"}",name,symbol,magicstr,opret.port,opret.blocktime,opret.pubval,opret.p2shval,opret.wifval,(opret.nBits >> 24) & 0xff,hashstr,opret.timestamp,nbitstr,opret.nonce,bits256_str(str2,msg.H.merkle_root),blockstr);
if ( (valsobj= cJSON_Parse(argbuf)) != 0 )
{
printf("datachain.NEW (%s/%s port.%u blocktime.%d) issuer.%s (%s)\n",opret.symbol,opret.name,opret.port,opret.blocktime,issuer,jprint(valsobj,0));
if ( (chain= gecko_chain(myinfo,chainname,valsobj)) != 0 && (virt= chain->info) != 0 )
printf("duplicate chain.%s rejected\n",opret.symbol);
else if ( (virt= basilisk_geckochain(myinfo,symbol,chainname,valsobj)) != 0 )
chain->info = virt;
free_json(valsobj);
}
} else printf("failed PoW test for genesis.%s\n",opret.symbol);
} else printf("opret unexpected len.%d vs %d\n",len,event->oplen);
}
}

174
datachain/datachain_events.c

@ -0,0 +1,174 @@
/******************************************************************************
* Copyright © 2014-2016 The SuperNET Developers. *
* *
* See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at *
* the top-level directory of this distribution for the individual copyright *
* holder information and the developer policies on copyright and licensing. *
* *
* Unless otherwise agreed in a custom licensing agreement, no part of the *
* SuperNET software, including this file may be copied, modified, propagated *
* or distributed except according to the terms contained in the LICENSE file *
* *
* Removal or modification of this copyright notice is prohibited. *
* *
******************************************************************************/
// included from datachain.c
#include "datachain_KOMODO.c"
#include "datachain_BTC.c"
void datachain_events_process_virt(struct supernet_info *myinfo,struct datachain_info *dPoW,struct datachain_event *event)
{
}
int _increasing_events(const void *a,const void *b)
{
#define uint64_a (*(struct datachain_event **)a)->hdrsi_unspentind
#define uint64_b (*(struct datachain_event **)b)->hdrsi_unspentind
if ( uint64_b > uint64_a )
return(-1);
else if ( uint64_b < uint64_a )
return(1);
return(0);
#undef uint64_a
#undef uint64_b
}
void datachain_events_sort(struct datachain_info *dPoW)
{
if ( dPoW->numevents > 0 )
{
qsort(dPoW->events,dPoW->numevents,sizeof(dPoW->events),_increasing_events);
printf("sorted %d events\n",dPoW->numevents);
}
}
struct datachain_event *datachain_event_create(struct iguana_info *coin,int64_t crypto777_payment,int64_t burned,int32_t height,uint32_t hdrsi,uint32_t unspentind,uint8_t *opreturn,int32_t oplen)
{
struct datachain_event *event;
event = calloc(1,sizeof(*event) + oplen);
event->hdrsi_unspentind = ((uint64_t)hdrsi << 32) | unspentind;
event->crypto777_payment = crypto777_payment;
event->burned = burned;
event->height = height;
safecopy(event->symbol,coin->symbol,sizeof(event->symbol));
if ( strcmp(event->symbol,"BTC") == 0 )
event->btc_or_btcd = DATACHAIN_ISBTC;
else if ( strcmp(event->symbol,"BTCD") == 0 )
event->btc_or_btcd = DATACHAIN_ISKOMODO;
event->oplen = oplen;
memcpy(event->opreturn,opreturn,oplen);
return(event);
}
void datachain_events_process(struct supernet_info *myinfo,int32_t btc_or_btcd,struct datachain_info *dPoW,int32_t firsti,int32_t lasti)
{
int32_t i; struct datachain_event *event;
if ( firsti >= 0 && lasti <= dPoW->numevents )
{
for (i=0; i<=lasti; i++)
if ( (event= dPoW->events[i]) != 0 )
{
if ( btc_or_btcd == DATACHAIN_ISBTC )
datachain_events_processBTC(myinfo,dPoW,event);
else if ( btc_or_btcd == DATACHAIN_ISKOMODO )
datachain_events_processKOMODO(myinfo,dPoW,event);
else datachain_events_process_virt(myinfo,dPoW,event);
dPoW->state.numprocessed++;
}
} else printf("illegal datachain_events_process.[%d, %d] numevents.%d\n",firsti,lasti,dPoW->numevents);
}
void datachain_state_reset(struct supernet_info *myinfo,int32_t btc_or_btcd,struct datachain_info *dPoW)
{
struct datachain_state *state = &dPoW->state;
memset(state,0,sizeof(*state));
}
void datachain_reset(struct supernet_info *myinfo,int32_t btc_or_btcd,struct datachain_info *dPoW)
{
struct iguana_info *virt,*tmp;
if ( btc_or_btcd == DATACHAIN_ISBTC ) // all needs to be reset on BTC reorg
datachain_reset(myinfo,DATACHAIN_ISKOMODO,&myinfo->dPoW.BTCD);
else if ( btc_or_btcd == DATACHAIN_ISKOMODO )
{
HASH_ITER(hh,myinfo->allcoins,virt,tmp)
{
if ( virt->started != 0 && virt->active != 0 && virt->virtualchain != 0 )
datachain_reset(myinfo,0,&virt->dPoW);
}
}
datachain_events_sort(dPoW);
datachain_state_reset(myinfo,btc_or_btcd,dPoW);
}
int32_t datachain_eventadd(struct supernet_info *myinfo,int32_t ordered,struct datachain_info *dPoW,int32_t btc_or_btcd,struct datachain_event *event)
{
uint64_t hdrsi_unspentind; int32_t retval = 0;
if ( ordered != 0 )
{
if ( dPoW->ordered == 0 )
datachain_events_sort(dPoW);
} else dPoW->ordered = 0;
hdrsi_unspentind = ((uint64_t)dPoW->state.lasthdrsi << 32) | dPoW->state.lastunspentind;
if ( ordered != 0 )
{
if ( dPoW->ordered != dPoW->numevents )
{
printf("trigger reset and process.%d ordered.%d numevents.%d\n",btc_or_btcd,dPoW->ordered,dPoW->numevents);
datachain_reset(myinfo,btc_or_btcd,dPoW);
if ( dPoW->numevents > 0 )
datachain_events_process(myinfo,btc_or_btcd,dPoW,0,dPoW->numevents-1);
if ( btc_or_btcd == DATACHAIN_ISBTC ) // all needs to be reprocessed on BTC reorg
{
if ( myinfo->dPoW.BTCD.numevents > 0 )
datachain_events_process(myinfo,DATACHAIN_ISKOMODO,&myinfo->dPoW.BTCD,0,myinfo->dPoW.BTCD.numevents - 1);
}
else if ( btc_or_btcd == DATACHAIN_ISKOMODO )
{
struct iguana_info *virt,*tmp;
HASH_ITER(hh,myinfo->allcoins,virt,tmp)
{
if ( virt->started != 0 && virt->active != 0 && virt->virtualchain != 0 )
if ( virt->dPoW.numevents > 0 )
datachain_events_process(myinfo,0,&virt->dPoW,0,virt->dPoW.numevents-1);
}
}
dPoW->ordered = dPoW->numevents;
}
}
if ( event != 0 )
{
if ( dPoW->numevents >= dPoW->maxevents )
{
dPoW->maxevents += 1024;
dPoW->events = realloc(dPoW->events,sizeof(*dPoW->events) * dPoW->maxevents);
}
if ( event->hdrsi_unspentind > hdrsi_unspentind )
{
dPoW->state.lasthdrsi = (uint32_t)(event->hdrsi_unspentind >> 32);
dPoW->state.lastunspentind = (uint32_t)event->hdrsi_unspentind;
retval = 1;
}
if ( ordered != 0 )
{
if ( retval != 1 && dPoW->ordered != 0 )
{
printf("datachain_eventadd unexpected ordered event that is not at the end\n");
retval = -1;
}
dPoW->events[dPoW->numevents] = event;
if ( dPoW->ordered == dPoW->numevents )
datachain_events_process(myinfo,btc_or_btcd,dPoW,dPoW->numevents,dPoW->numevents);
dPoW->numevents++;
dPoW->ordered = dPoW->numevents;
} else dPoW->events[dPoW->numevents++] = event;
}
return(dPoW->numevents);
}
void datachain_update_txidvout(struct supernet_info *myinfo,int32_t ordered,struct iguana_info *coin,struct datachain_info *dPoW,int32_t btc_or_btcd,int32_t spentheight,bits256 txid,int32_t vout,uint8_t rmd160[20],int64_t value)
{
// MGW via deposit events
}

28
gecko/gecko.c

@ -13,6 +13,8 @@
* *
******************************************************************************/
// are nbits and magicstr endian dependent?
// code mempool and tx (payment and opreturn protocol)
// debug genesis balances
@ -121,7 +123,7 @@ void *category_subscribe(struct supernet_info *myinfo,bits256 chainhash,bits256
{
chain = mycalloc('c',1,sizeof(*chain));
chain->hash = hash = chainhash;
char str[65]; printf("ADD cat.(%s)\n",bits256_str(str,chainhash));
//char str[65]; printf("ADD cat.(%s)\n",bits256_str(str,chainhash));
HASH_ADD(hh,Categories,hash,sizeof(hash),chain);
}
if ( bits256_nonz(keyhash) > 0 && memcmp(GENESIS_PUBKEY.bytes,keyhash.bytes,sizeof(keyhash)) != 0 && chain != 0 )
@ -131,7 +133,7 @@ void *category_subscribe(struct supernet_info *myinfo,bits256 chainhash,bits256
{
subchain = mycalloc('c',1,sizeof(*subchain));
subchain->hash = hash = keyhash;
char str[65],str2[65]; printf("subadd.(%s) -> (%s)\n",bits256_str(str,keyhash),bits256_str(str2,chainhash));
//char str[65],str2[65]; printf("subadd.(%s) -> (%s)\n",bits256_str(str,keyhash),bits256_str(str2,chainhash));
HASH_ADD(hh,chain->subchains,hash,sizeof(hash),subchain);
}
}
@ -143,9 +145,9 @@ struct gecko_chain *gecko_chain(struct supernet_info *myinfo,char chainname[GECK
{
char *chainstr,*keystr; bits256 keyhash,chainhash; struct gecko_chain *chain;
chainname[0] = 0;
if ( (chainstr= jstr(valsobj,"chain")) == 0 )
if ( (chainstr= jstr(valsobj,"symbol")) == 0 )
return(0);
if ( (keystr= jstr(valsobj,"key")) != 0 )
if ( (keystr= jstr(valsobj,"name")) != 0 )
vcalc_sha256(0,keyhash.bytes,(uint8_t *)keystr,(int32_t)strlen(keystr));
else keyhash = GENESIS_PUBKEY;
vcalc_sha256(0,chainhash.bytes,(uint8_t *)chainstr,(int32_t)strlen(chainstr));
@ -186,7 +188,7 @@ struct gecko_chain *gecko_chain(struct supernet_info *myinfo,char chainname[GECK
return(0);
}
return(-1);
}*/
}
cJSON *gecko_genesisargs(char *symbol,char *chainname,char *chain,char *keystr,char *genesishash,char *genesisblock,char *magicstr,uint16_t port,uint16_t blocktime,char *nbitstr,char *pubval,char *p2shval,char *wifval,uint32_t isPoS)
{
@ -281,7 +283,7 @@ cJSON *gecko_genesisissue(char *symbol,char *chainname,char *chainstr,cJSON *val
{
printf("issue blocktime.%d\n",juint(valsobj,"blocktime"));
return(gecko_genesisargs(symbol,chainname,chainstr,jstr(valsobj,"key"),jstr(valsobj,"genesishash"),jstr(valsobj,"genesisblock"),jstr(valsobj,"netmagic"),juint(valsobj,"port"),juint(valsobj,"blocktime"),jstr(valsobj,"nBits"),jstr(valsobj,"pubval"),jstr(valsobj,"p2shval"),jstr(valsobj,"wifval"),juint(valsobj,"isPoS")));
}
}*/
struct iguana_info *basilisk_geckochain(struct supernet_info *myinfo,char *symbol,char *chainname,cJSON *valsobj)
{
@ -295,6 +297,7 @@ struct iguana_info *basilisk_geckochain(struct supernet_info *myinfo,char *symbo
virt->enableCACHE = 1;
serialized = get_dataptr(BASILISK_HDROFFSET,&ptr,&datalen,hexbuf,sizeof(hexbuf),hexstr);
iguana_chaininit(virt->chain,1,valsobj);
virt->chain->isPoS = 1;
hdrsize = (virt->chain->zcash != 0) ? sizeof(struct iguana_msgblockhdr_zcash) : sizeof(struct iguana_msgblockhdr);
if ( gecko_blocknonce_verify(virt,serialized,hdrsize,virt->chain->nBits,0,0) > 0 )
{
@ -333,13 +336,14 @@ struct iguana_info *basilisk_geckochain(struct supernet_info *myinfo,char *symbo
}
virt->started = virt;
virt->active = (uint32_t)time(NULL);
iguana_datachain_scan(myinfo,virt,CRYPTO777_RMD160);
} else printf("error validating nonce\n");
}
portable_mutex_unlock(&myinfo->gecko_mutex);
return(virt);
}
char *basilisk_respond_newgeckochain(struct supernet_info *myinfo,char *CMD,void *addr,char *remoteaddr,uint32_t basilisktag,cJSON *valsobj,uint8_t *data,int32_t datalen,bits256 prevhash,int32_t from_basilisk)
/*char *basilisk_respond_newgeckochain(struct supernet_info *myinfo,char *CMD,void *addr,char *remoteaddr,uint32_t basilisktag,cJSON *valsobj,uint8_t *data,int32_t datalen,bits256 prevhash,int32_t from_basilisk)
{
struct iguana_info *virt,*btcd; struct gecko_chain *chain; char fname[512],*symbol,*retstr,*chainstr,chainname[GECKO_MAXNAMELEN],*genesises; cJSON *chainjson,*retjson,*genesisjson; long filesize; FILE *fp;
if ( (chain= gecko_chain(myinfo,chainname,valsobj)) != 0 && (virt= chain->info) != 0 )
@ -431,7 +435,7 @@ char *basilisk_respond_geckogenesis(struct supernet_info *myinfo,char *CMD,void
{
long filesize;
return(OS_filestr(&filesize,"genesis/list"));
}
}*/
char *basilisk_standardreturn(char *CMD,char *type,struct iguana_info *virt,uint8_t *serialized,int32_t datalen,bits256 hash)
{
@ -480,7 +484,7 @@ char *basilisk_respond_geckoget(struct supernet_info *myinfo,char *CMD,void *add
#include "../includes/iguana_apidefs.h"
#include "../includes/iguana_apideclares.h"
HASH_ARRAY_STRING(basilisk,sequence,hash,vals,hexstr)
/*HASH_ARRAY_STRING(basilisk,sequence,hash,vals,hexstr)
{
return(basilisk_standardservice("SEQ",myinfo,hash,vals,hexstr,1));
}
@ -533,7 +537,7 @@ HASH_ARRAY_STRING(basilisk,newgeckochain,hash,vals,hexstr)
} else return(clonestr("{\"error\":\"couldnt create genesis_block\"}"));
}
return(clonestr("{\"error\":\"need symbol and chain and BTCD to create new gecko chain\"}"));
}
}*/
char *gecko_sendrawtransaction(struct supernet_info *myinfo,char *symbol,uint8_t *data,int32_t datalen,bits256 txid,cJSON *vals,char *signedtx)
{
@ -591,7 +595,7 @@ HASH_ARRAY_STRING(basilisk,geckoget,hash,vals,hexstr)
return(clonestr("{\"error\":\"geckoget needs BTCD\"}"));
}
HASH_ARRAY_STRING(basilisk,geckogenesis,hash,vals,hexstr)
/*HASH_ARRAY_STRING(basilisk,geckogenesis,hash,vals,hexstr)
{
long filesize; int32_t i,j,n,m; struct iguana_info *btcd; char *ref,*symbol,*retstr=0; cJSON *item,*array = 0,*arrayB = 0; FILE *fp;
if ( (btcd= iguana_coinfind("BTCD")) != 0 )
@ -653,7 +657,7 @@ HASH_ARRAY_STRING(basilisk,geckogenesis,hash,vals,hexstr)
}
}
return(clonestr("{\"error\":\"need BTCD to get geckogenesis list\"}"));
}
}*/
#include "../includes/iguana_apiundefs.h"

2
gecko/gecko.h

@ -92,6 +92,6 @@ char *gecko_sendrawtransaction(struct supernet_info *myinfo,char *symbol,uint8_t
struct gecko_mempool *gecko_mempoolfind(struct supernet_info *myinfo,struct iguana_info *virt,int32_t *numotherp,uint32_t ipbits);
void gecko_iteration(struct supernet_info *myinfo,struct iguana_info *btcd,struct iguana_info *virt,int32_t maxmillis);
int32_t iguana_coinbase(struct iguana_info *virt,uint8_t *serialized,uint32_t timestamp,bits256 prev_hash,uint8_t *coinbasescript,uint32_t coinbaselen,uint8_t *minerpayment,uint32_t minerpaymentlen,int64_t blockreward,bits256 *txidp);
int32_t iguana_coinbase(int32_t isPoS,uint32_t txversion,uint8_t *serialized,uint32_t timestamp,bits256 prev_hash,uint8_t *coinbasescript,uint32_t coinbaselen,uint8_t *minerpayment,uint32_t minerpaymentlen,int64_t blockreward,bits256 *txidp);
#endif

8
gecko/gecko_miner.c

@ -113,7 +113,7 @@ int32_t gecko_delayedPoW(struct supernet_info *myinfo,struct iguana_info *btcd,i
return(len);
}
int32_t iguana_coinbase(struct iguana_info *virt,uint8_t *serialized,uint32_t timestamp,bits256 prev_hash,uint8_t *coinbasescript,uint32_t coinbaselen,uint8_t *minerpayment,uint32_t minerpaymentlen,int64_t blockreward,bits256 *txidp)
int32_t iguana_coinbase(int32_t isPoS,uint32_t txversion,uint8_t *serialized,uint32_t timestamp,bits256 prev_hash,uint8_t *coinbasescript,uint32_t coinbaselen,uint8_t *minerpayment,uint32_t minerpaymentlen,int64_t blockreward,bits256 *txidp)
{
int32_t len = 0,rwflag=1; uint32_t prev_vout,sequence,lock_time; char txidstr[65]; struct iguana_msgtx msg;
memset(&msg,0,sizeof(msg));
@ -121,10 +121,10 @@ int32_t iguana_coinbase(struct iguana_info *virt,uint8_t *serialized,uint32_t ti
msg.tx_in = 1;
sequence = prev_vout = -1;
lock_time = 0;
msg.version = virt->chain->normal_txversion;
msg.version = txversion;
msg.timestamp = timestamp;
len += iguana_rwnum(rwflag,&serialized[len],sizeof(msg.version),&msg.version);
if ( virt->chain->isPoS != 0 )
if ( isPoS != 0 )
len += iguana_rwnum(rwflag,&serialized[len],sizeof(msg.timestamp),&msg.timestamp);
{
len += iguana_rwvarint32(rwflag,&serialized[len],&msg.tx_in);
@ -155,7 +155,7 @@ char *gecko_coinbasestr(struct supernet_info *myinfo,struct iguana_info *virt,bi
char *rawtx=0; uint8_t minerpayment[512],serialized[8192]; int32_t minerpaymentlen=0,len=0;
if ( blockreward > 0 )
minerpaymentlen = bitcoin_pubkeyspend(minerpayment,0,minerpubkey);
len = iguana_coinbase(virt,serialized,timestamp,coinbasespend,data,datalen,minerpayment,minerpaymentlen,blockreward,txidp);
len = iguana_coinbase(virt->chain->isPoS,virt->chain->normal_txversion,serialized,timestamp,coinbasespend,data,datalen,minerpayment,minerpaymentlen,blockreward,txidp);
if ( len > 0 )
{
rawtx = malloc(len*2 + 1);

60
iguana/css/custom.css

@ -0,0 +1,60 @@
.exchangecontainer{
margin:30px;
background-color:#FFF;
color:#000;
}
.innersection{
background-color:#EEE;
margin:20px 0;
padding:10px;
}
.innersection h4{
padding:7px;
font-weight:bolder;
}
.coin1, .coin2{
float:left;
color:#000;
background-color:#EEE;
width:50%;
padding: 10px 10px;
}
.exchangecontainer label, #exchange_model #frmexchange label{
color:#000;
}
#frmexchange label{
text-align:left !important;
}
.innersection .exchange{
text-align:center;
width: 120px;
background-color: #009688;
}
.button{
width: 20%;
margin: 0 auto;
}
.shape{
font-family: inherit;
font-size: inherit;
line-height: inherit;
height: 33px;
border-radius: 6px;
box-shadow: 0 0 0;
border: 1px solid #ccc;
width: 166px;
text-align: center;
}
.innersection table td{ padding:10px;}
#address_to, #address_from{
width:100% !important;
height:45px !important;
}

5
iguana/iguana777.c

@ -572,8 +572,8 @@ void iguana_helper(void *arg)
flag = 0;
if ( (btcd= iguana_coinfind("BTCD")) != 0 )
{
if ( helperid == 0 && myinfo->numrelays > 0 && myinfo->genesisresults == 0 )
basilisk_geckogenesis(myinfo,btcd,0,0,GENESIS_PUBKEY,0,0);
//if ( helperid == 0 && myinfo->numrelays > 0 && myinfo->genesisresults == 0 )
// basilisk_geckogenesis(myinfo,btcd,0,0,GENESIS_PUBKEY,0,0);
if ( myinfo->allcoins_numvirts > 0 )
{
maxmillis = (10000 / myinfo->allcoins_numvirts) + 1;
@ -704,6 +704,7 @@ void iguana_callcoinstart(struct supernet_info *myinfo,struct iguana_info *coin)
memset(zero.bytes,0,sizeof(zero));
if ( (bp= iguana_bundlecreate(coin,&bundlei,0,*(bits256 *)coin->chain->genesis_hashdata,zero,1)) != 0 )
bp->bundleheight = 0;
iguana_datachain_scan(myinfo,coin,CRYPTO777_RMD160);
}
void iguana_coinloop(void *arg)

6
iguana/iguana_chains.c

@ -162,7 +162,7 @@ bits256 iguana_calcblockhash(char *symbol,int32_t (*hashalgo)(uint8_t *blockhash
bits256 iguana_chaingenesis(char *symbol,uint8_t zcash,uint8_t auxpow,int32_t (*hashalgo)(uint8_t *blockhashp,uint8_t *serialized,int32_t len),bits256 genesishash,char *genesisblock,char *hashalgostr,int32_t version,uint32_t timestamp,uint32_t nBits,uint32_t nonce,bits256 merkle_root)
{
struct iguana_msgblock msg; int32_t len; bits256 hash2; char blockhashstr[256],str3[65]; uint8_t serialized[8192];
struct iguana_msgblock msg; int32_t len; bits256 hash2; char blockhashstr[256]; uint8_t serialized[8192];
memset(&msg,0,sizeof(msg));
msg.H.version = version;
msg.H.merkle_root = merkle_root;
@ -181,7 +181,7 @@ bits256 iguana_chaingenesis(char *symbol,uint8_t zcash,uint8_t auxpow,int32_t (*
if ( bits256_cmp(genesishash,hash2) != 0 )
printf("WARNING: genesishash.(%s) mismatch vs calc.(%s)\n",bits256_str(str,genesishash),bits256_str(str2,hash2));
init_hexbytes_noT(genesisblock,serialized,len);
printf("v.%d t.%u %s nBits.%08x nonce.%u merkle.(%s) genesis.(%s) hash2.(%s) blockhash.(%s) size.%d\n",version,timestamp,utc_str(str3,timestamp),nBits,nonce,bits256_str(str2,merkle_root),genesisblock,bits256_str(str,hash2),blockhashstr,(int32_t)strlen(genesisblock)/2);
//printf("v.%d t.%u %s nBits.%08x nonce.%u merkle.(%s) genesis.(%s) hash2.(%s) blockhash.(%s) size.%d\n",version,timestamp,utc_str(str3,timestamp),nBits,nonce,bits256_str(str2,merkle_root),genesisblock,bits256_str(str,hash2),blockhashstr,(int32_t)strlen(genesisblock)/2);
return(hash2);
}
@ -287,7 +287,7 @@ void iguana_chainparms(struct iguana_chain *chain,cJSON *argjson)
{
extern char Userhome[];
char *path,conf[512],*hexstr,genesisblock[1024]; uint16_t port; cJSON *rpair,*genesis,*rewards,*item; int32_t i,n,m; uint32_t nBits; uint8_t tmp[4];
printf("chainparams.(%s)\n",jprint(argjson,0));
//printf("chainparams.(%s)\n",jprint(argjson,0));
if ( strcmp(chain->symbol,"NXT") != 0 )
{
if ( strcmp(chain->symbol,"BTCD") == 0 )

30
iguana/iguana_instantdex.c

@ -1718,5 +1718,35 @@ TWO_STRINGS(InstantDEX,events,base,rel)
//return(clonestr("[{\"h\":14,\"m\":44,\"s\":32,\"date\":1407877200000,\"bid\":30,\"ask\":35},{\"date\":1407877200000,\"bid\":40,\"ask\":44},{\"date\":1407877200000,\"bid\":49,\"ask\":45},{\"date\":1407877200000,\"ask\":28},{\"date\":1407877200000,\"ask\":52}]"));
}
ZERO_ARGS(InstantDEX,allcoins)
{
return(clonestr("{\"result\":\"this will return array of available coins\"}"));
}
STRING_ARG(InstantDEX,available,source)
{
return(clonestr("{\"result\":\"this will return available balance for source\"}"));
}
THREE_STRINGS_AND_DOUBLE(InstantDEX,request,message,dest,source,amount)
{
return(clonestr("{\"result\":\"this will request converting amount worth of source into dest\"}"));
}
INT_ARG(InstantDEX,incoming,requestid)
{
return(clonestr("{\"result\":\"this will return array of incoming request objects\"}"));
}
INT_ARG(InstantDEX,choose,quoteid)
{
return(clonestr("{\"result\":\"this will choose one of the incoming requests and cancel the rest\"}"));
}
INT_ARG(InstantDEX,qstatus,quoteid)
{
return(clonestr("{\"result\":\"this will return status of pending quote\"}"));
}
#include "../includes/iguana_apiundefs.h"

4
iguana/iguana_msg.c

@ -688,12 +688,12 @@ int32_t iguana_gentxarray(struct iguana_info *coin,struct OS_memspace *mem,struc
{
if ( len > recvlen )
{
printf("gentxarray error len.%d > recvlen.%d\n",len,recvlen);
printf("gentxarrayB error len.%d > recvlen.%d\n",len,recvlen);
break;
}
if ( (n= iguana_rwtx(coin->chain->zcash,0,mem,&data[len],&tx[i],recvlen - len,&tx[i].txid,coin->chain->isPoS,strcmp(coin->symbol,"VPN")==0)) < 0 )
{
printf("gentxarray error len.%d > recvlen.%d\n",len,recvlen);
printf("gentxarrayC error len.%d > recvlen.%d, n.%d\n",len,recvlen,n);
break;
}
numvouts += tx[i].tx_out;

11
iguana/iguana_ramchain.c

@ -1626,7 +1626,7 @@ int32_t iguana_ramchain_cmp(struct iguana_ramchain *A,struct iguana_ramchain *B,
int32_t iguana_ramchain_iterate(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_ramchain *dest,struct iguana_ramchain *ramchain,struct iguana_bundle *bp,int16_t bundlei)
{
RAMCHAIN_DECLARE; RAMCHAIN_DESTDECLARE;
int32_t j,hdrsi,prevout,scriptlen; uint32_t unspentind,sequenceid,destspendind=0,desttxidind=0; uint16_t fileid; uint64_t scriptpos; int64_t crypto777_payment = 0;
int32_t j,hdrsi,prevout,scriptlen; uint32_t timestamp=0,unspentind,sequenceid,destspendind=0,desttxidind=0; uint16_t fileid; uint64_t scriptpos; int64_t crypto777_payment = 0;
bits256 prevhash; uint64_t value; uint8_t type; struct iguana_unspent *u;
struct iguana_txid *tx; struct iguana_ramchaindata *rdata; uint8_t rmd160[20];
//if ( dest != 0 )
@ -1638,9 +1638,8 @@ int32_t iguana_ramchain_iterate(struct supernet_info *myinfo,struct iguana_info
}
if ( dest != 0 )
{
// required to do one block at a time, all vins/vouts the same height are assumed to happen simultaneously with vouts before vins
_iguana_ramchain_setptrs(RAMCHAIN_DESTPTRS,dest->H.data);
if ( dest->expanded != 0 )
iguana_opreturn(myinfo,coin,bp,0,bp->bundleheight + bundlei,(((uint64_t)bp->hdrsi << 32) | dest->H.unspentind),0,0,0,0);
}
//fprintf(stderr,"iterate %d/%d dest.%p ramchain.%p rdata.%p\n",bp->bundleheight,bp->n,dest,ramchain,rdata);
_iguana_ramchain_setptrs(RAMCHAIN_PTRS,rdata);
@ -1665,6 +1664,8 @@ int32_t iguana_ramchain_iterate(struct supernet_info *myinfo,struct iguana_info
//printf("txidind.%u firstvout.%u firstvin.%u bundlei.%d n.%d\n",tx->txidind,tx->firstvout,tx->firstvin,bundlei,bp->n);
if ( dest != 0 )
{
if ( dest->expanded != 0 )
iguana_opreturn(myinfo,1,coin,tx->timestamp,bp,0,bp->bundleheight + bundlei,(((uint64_t)bp->hdrsi << 32) | dest->H.unspentind),0,0,0,0);
//char str[65];
if ( 0 && ramchain->expanded == 0 )
printf("ITER [%d] TXID.%d -> dest.%p desttxid.%d dest->hashmem.%p numtxids.%d\n",rdata->height,ramchain->H.txidind,dest,dest!=0?dest->H.txidind:0,dest!=0?dest->hashmem:0,rdata->numtxids);
@ -1737,7 +1738,7 @@ int32_t iguana_ramchain_iterate(struct supernet_info *myinfo,struct iguana_info
}
if ( dest != 0 )
{
crypto777_payment = datachain_update(myinfo,coin,bp,rmd160,crypto777_payment,type,bp->bundleheight + bundlei,(((uint64_t)bp->hdrsi << 32) | unspentind),value,fileid,scriptpos,scriptlen);
crypto777_payment = datachain_update(myinfo,1,coin,timestamp,bp,rmd160,crypto777_payment,type,bp->bundleheight + bundlei,(((uint64_t)bp->hdrsi << 32) | unspentind),value,fileid,scriptpos,scriptlen,tx->txid,j);
if ( iguana_ramchain_addunspent(coin,RAMCHAIN_DESTARG,value,hdrsi,rmd160,j,type,fileid,(uint32_t)scriptpos,scriptlen,ramchain->H.txidind-rdata->firsti) == 0 )
return(-5);
} //else printf("addunspent20 done\n");
@ -1759,6 +1760,7 @@ int32_t iguana_ramchain_iterate(struct supernet_info *myinfo,struct iguana_info
for (ramchain->H.txidind=rdata->firsti; ramchain->H.txidind<rdata->numtxids; ramchain->H.txidind++)
{
tx = &T[ramchain->H.txidind];
timestamp = tx->timestamp;
for (j=0; j<tx->numvins; j++)
{
if ( coin->active == 0 )
@ -1811,6 +1813,7 @@ int32_t iguana_ramchain_iterate(struct supernet_info *myinfo,struct iguana_info
}
if ( dest != 0 )
{
datachain_update_spend(myinfo,1,coin,timestamp,bp,bp->bundleheight + bundlei,tx->txid,j,0,-1);
if ( iguana_ramchain_addspend(coin,RAMCHAIN_DESTARG,prevhash,prevout,sequenceid,bp->hdrsi,fileid,scriptpos,scriptlen) == 0 )
return(-9);
//printf("from dest iter scriptspace.%d\n",dest->H.stacksize);

18
iguana/iguana_unspents.c

@ -200,24 +200,32 @@ int32_t iguana_uheight(struct iguana_info *coin,int32_t bundleheight,struct igua
int32_t iguana_datachain_scan(struct supernet_info *myinfo,struct iguana_info *coin,uint8_t rmd160[20])
{
int64_t deposits,crypto777_payment; uint32_t lastunspentind,unspentind; int32_t i,num,uheight; struct iguana_bundle *bp; struct iguana_ramchain *ramchain; struct iguana_ramchaindata *rdata; struct iguana_pkhash P; struct iguana_unspent *U; struct iguana_txid *T;
int64_t deposits,crypto777_payment; uint32_t lastunspentind,unspentind; int32_t i,j,num,uheight; struct iguana_bundle *bp; struct iguana_ramchain *ramchain; struct iguana_ramchaindata *rdata; struct iguana_pkhash *P,p; struct iguana_unspent *U,*u; struct iguana_txid *T,*tx;
for (i=num=0; i<coin->bundlescount; i++)
{
if ( (bp= coin->bundles[i]) != 0 )
{
ramchain = 0;
if ( iguana_pkhashfind(coin,&ramchain,&deposits,&lastunspentind,&P,rmd160,i,i) != 0 )
if ( iguana_pkhashfind(coin,&ramchain,&deposits,&lastunspentind,&p,rmd160,i,i) != 0 )
{
if ( ramchain != 0 && (rdata= ramchain->H.data) != 0 )
{
unspentind = lastunspentind;
U = RAMCHAIN_PTR(rdata,Uoffset);
T = RAMCHAIN_PTR(rdata,Toffset);
P = RAMCHAIN_PTR(rdata,Poffset);
while ( unspentind > 0 )
{
uheight = iguana_uheight(coin,ramchain->height,T,rdata->numtxids,&U[unspentind]);
crypto777_payment = datachain_update(myinfo,coin,bp,rmd160,crypto777_payment,U[unspentind].type,uheight,(((uint64_t)bp->hdrsi << 32) | unspentind),U[unspentind].value,U[unspentind].fileid,U[unspentind].scriptpos,U[unspentind].scriptlen);
tx = &T[U[unspentind].txidind];
u = &U[tx->firstvout];
uheight = iguana_uheight(coin,ramchain->height,T,rdata->numtxids,u);
for (crypto777_payment=j=0; j<tx->numvouts; j++,u++)
{
//u = &U[tx->firstvout + j];
crypto777_payment = datachain_update(myinfo,0,coin,tx->timestamp,bp,P[u->pkind].rmd160,crypto777_payment,u->type,uheight,(((uint64_t)bp->hdrsi << 32) | unspentind),u->value,u->fileid,u->scriptpos,u->scriptlen,tx->txid,j);
}
num++;
unspentind = U[unspentind].prevunspentind;
}
}
}

842
iguana/index copy.html

@ -0,0 +1,842 @@
<!DOCTYPE HTML>
<html>
<head>
<title>iguana</title>
<!-- Bootstrap -->
<link rel="stylesheet" type="text/css" href="css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="css/jquery.dropdown.css">
<link rel="stylesheet" type="text/css" href="css/ripples.css">
<!-- Gogole Theme -->
<link rel="stylesheet" type="text/css" href="css/googleFonts.css">
<link rel="stylesheet" type="text/css" href="css/googleIcons.css">
<link rel="stylesheet" type="text/css" href="css/googleTheme.css">
<link rel="stylesheet" href="js/amcharts/style.css" type="text/css">
<script src="js/amcharts/amcharts.js" type="text/javascript"></script>
<script src="js/amcharts/serial.js" type="text/javascript"></script>
<script src="js/amcharts/amstock.js" type="text/javascript"></script>
<script src="js/amcharts/plugins/dataloader/dataloader.min.js" type="text/javascript"></script>
<script>
var httpresult;
function http_handler()
{
if ( this.status == 200 && this.responseText != null )
{
alert(this.responseText);
httpresult = this.responseText;
}
}
function httpGet(url)
{
var client;
if ( window.XMLHttpRequest )
client = new XMLHttpRequest();
else client = new ActiveXObject(\"Microsoft.XMLHTTP\");
client.onload = http_handler;
client.open(\"GET\",url);
client.send();
}
AmCharts.ready(function () { createStockChart(); });
var interval,BASE= "BTCD",REL = "BTC";
function createStockChart() {
var chartData = [];
var chart = AmCharts.makeChart("chartdiv",
{
"type": "serial",
"theme": "dark",
"valueAxes": [
{ "title":"BTC", "id": "vert", "axisAlpha": 0, "dashLength": 1, "position": "left"},
{ "id": "horiz", "axisAlpha": 0, "dashLength": 1, "position": "bottom", "labelFunction": function (value) {
var date = new Date(value);
return AmCharts.formatDate(date, "MMM DD HH:NN:SS");
}}
],
"graphs": [
{ "id": "g1", "lineColor": "#00FFFF", "bullet": "round", "valueField": "bid", "balloonText": "[[category]] [[h]]:[[m]]:[[s]] account:[[offerer]] id:[[orderid]] volume:[[volume]] bid:[[bid]]" },
{ "id": "g2", "lineColor": "#FF8800", "bullet": "round", "valueField": "ask", "balloonText": "[[category]] [[h]]:[[m]]:[[s]] account:[[offerer]] id:[[orderid]] volume:[[volume]] ask:[[ask]]" }],
"categoryField": "date",
"categoryAxis": { "parseDates": true, "equalSpacing": true, "dashLength": 1, "minorGridEnabled": true },
"chartScrollbar": {},
"chartCursor": {},
"dataProvider": chartData
});
var startButton = document.getElementById('start');
var endButton = document.getElementById('stop');
var buyButton = document.getElementById('buy');
var sellButton = document.getElementById('sell');
/*
var BTCbutton = document.getElementById('BTC');
var CNYbutton = document.getElementById('CNY');
var USDbutton = document.getElementById('USD');
var EURbutton = document.getElementById('EUR');
var JPYbutton = document.getElementById('JPY');
var GBPbutton = document.getElementById('GBP');
var AUDbutton = document.getElementById('AUD');
var CADbutton = document.getElementById('CAD');
var CHFbutton = document.getElementById('CHF');
var NZDbutton = document.getElementById('NZD');
USDbutton.addEventListener('click', USDrel);
EURbutton.addEventListener('click', EURrel);
JPYbutton.addEventListener('click', JPYrel);
GBPbutton.addEventListener('click', GBPrel);
AUDbutton.addEventListener('click', AUDrel);
CADbutton.addEventListener('click', CADrel);
CHFbutton.addEventListener('click', CHFrel);
NZDbutton.addEventListener('click', NZDrel);
CNYbutton.addEventListener('click', CNYrel);
BTCbutton.addEventListener('click', BTCrel);
*/
var BTCDbutton = document.getElementById('BTCD');
var VPNbutton = document.getElementById('VPN');
var VRCbutton = document.getElementById('VRC');
var SYSbutton = document.getElementById('SYS');
var SuperNETbutton = document.getElementById('SuperNET');
var crypto777button = document.getElementById('crypto777');
var pangeabutton = document.getElementById('Pangea');
var InstantDEXbutton = document.getElementById('InstantDEX');
var Tradebotsbutton = document.getElementById('Tradebots');
var NXTprivacybutton = document.getElementById('NXTprivacy');
startButton.addEventListener('click', startDemo);
endButton.addEventListener('click', endDemo);
buyButton.addEventListener('click', buyaction);
sellButton.addEventListener('click', sellaction);
BTCDbutton.addEventListener('click', BTCDbase);
VPNbutton.addEventListener('click', VPNbase);
SYSbutton.addEventListener('click', SYSbase);
SuperNETbutton.addEventListener('click', SuperNETbase);
crypto777button.addEventListener('click', crypto777base);
pangeabutton.addEventListener('click', Pangeabase);
InstantDEXbutton.addEventListener('click', InstantDEXbase);
Tradebotsbutton.addEventListener('click', Tradebotsbase);
NXTprivacybutton.addEventListener('click', NXTprivacybase);
function changebase(newbase)
{
BASE = newbase;
if ( chartData.length > 0 )
{
chartData.splice(0,chartData.length);
chart.validateData();
}
}
function BTCDbase() { changebase("BTCD"); }
function VPNbase() { changebase("VPN"); }
function SYSbase() { changebase("SYS"); }
function SuperNETbase() { changebase("SuperNET"); }
function crypto777base() { changebase("crypto777"); }
function Pangeabase() { changebase("Pangea"); }
function InstantDEXbase() { changebase("InstantDEX"); }
function Tradebotsbase() { changebase("Tradebots"); }
function NXTprivacybase() { changebase("NXTprivacy"); }
function USDrel() { REL = "USD"; }
function EURrel() { REL = "EUR"; }
function JPYrel() { REL = "JPY"; }
function GBPrel() { REL = "GBP"; }
function AUDrel() { REL = "AUD"; }
function CADrel() { REL = "CAD"; }
function CHFrel() { REL = "CHF"; }
function NZDrel() { REL = "NZD"; }
function CNYrel() { REL = "CNY"; }
function BTCrel() { REL = "CNY"; }
function startDemo() {
startButton.disabled = "disabled";
endButton.disabled = "";
interval = setInterval(getDataFromServer, 1000);
}
function endDemo() {
startButton.disabled = "";
endButton.disabled = "disabled";
clearInterval(interval);
}
function buyaction() {
alert("need to do market buy");
}
function sellaction() {
alert("need to do market sell");
}
function getDataFromServer()
{
var i,newData = [];
var request='{"agent":"InstantDEX","method":"events","base":"'+BASE+'","rel":"'+REL+'"}';
SPNAPI.makeRequest(request,
function(request,response)
{
newData = JSON.parse(response);
if ( newData.length > 0 )
{
alert(response);
chartData.push.apply(chartData, newData);
if (chartData.length > 50)
chartData.splice(0, chartData.length - 50);
chart.validateData(); //call to redraw the chart with new data
}
});
// newData = JSON.parse("[{\"h\":14,\"m\":44,\"s\":32,\"date\":1407877200000,\"bid\":30,\"ask\":35},{\"date\":1407877200000,\"bid\":40,\"ask\":44},{\"date\":1407877200000,\"bid\":49,\"ask\":45},{\"date\":1407877200000,\"ask\":28},{\"date\":1407877200000,\"ask\":52}]");
}
}
</script>
</head>
<body data-custom-load="true" data-name="iguana" data-tools="pnacl newlib glibc clang-newlib mac" data-configs="Debug Release"
data-path="{tc}/{config}">
<!-- <div class="jumbotron" style="height:100px;">
<h> Status: <code id="statusField">NO-STATUS</code></h>
<p>
<select id="pipe_name" hidden>
<option>urand</option>
<option>Pangea</option>
<option>MGW</option>
</select>
<input type="text" id="pipe_input_box" hidden>
</p>
<p><textarea id="pipe_output" hidden></textarea></p>
</div> -->
<div class="iguana">
<nav class="navbar navbar-default">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse">
<!--Hamburger-->
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<!--<a class="navbar-brand" href="#">
<img alt="Brand" style="z-index:-1;" src="logo.png" width="25" height="25">
</a>-->
<a href="#" class="navbar-brand">Iguana</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse">
<ul class="nav navbar-nav">
<li id="welcome"> <!--<a href="#">Welcome <span class="sr-only">(current)</span></a>--></li>
<!--<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">More <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">Wiki</a></li>
<li><a href="#">Wallet</a></li>
<li><a href="#">Community</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">Contact</a></li>
<li role="separator" class="divider"></li>
<li><a>Upload Conf<input type="file" id="files" name="file" /></a></li>
<div id="byte_range"></div>
<div id="byte_content"></div>
</ul>
</li>-->
</ul>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container-fluid -->
</nav>
<div class="container">
<!--<div id="welcome_page" class="page" style="text-align: center;">
<div class="panel panel-default">
<!-- Default panel contents
<div class="panel-heading">Welcome</div>
<div class="panel-body">
<h2>iguana</h2>
<p>
iguana is fast.
</p>
<p>
iguana does all bitcoin compatibles.
</p>
<p>
iguana is fast.
</p>
</div>
</div>
</div>-->
<!-- eyedea page is for creating front-end markup -->
<div id="Pangea_page" class="page">
<div class="row" style="margin-bottom:15px;">
<div class="col-xs-4 col-sm-3 col-md-2">
<div class="api-navpills">
</div>
</div>
<div class="col-xs-8 col-sm-9 col-md-10">
<div class="panel-group">
<div class="panel panel-default api-call-All">
<div class="panel-heading">
<h4 class="panel-title api-panel-title">Json posting form</h4>
</div>
<!-- panel-heading -->
<div class="panel-body">
<div class="row">
<div class="col-xs-9 col-sm-10 col-md-8">
<div class="panel panel-default">
<div class="panel-body">
<div class="form-group">
<textarea name="json_to_submit" id="json_src" cols="30" rows="5" class="result form-control" placeholder='Paste json here'></textarea>
</div>
<div class="form-group">
<button class="btn btn-primary host_pangea_request" id='submit_primary'>Host game</button>
<button class="btn btn-primary list_pangea_request" id='list_pangea'>List games</button>
</div>
</div>
</div>
</div>
<div class="col-xs-6 col-md-4 col-lg-4">
<div class="panel-body">
<h5 class='uri-link'>Response</h5>
<pre class="hljs json result">JSON response</pre>
<button class="btn btn-default clear-response">Clear response</button>
</div>
</div>
</div>
<hr>
<h3>
<span>List of games</span>
<!--<button id="clearHistory" style='float: right' class='btn btn-default'>Clear history</button>-->
</h3>
<div class="row">
<div class="col-md-12">
<table class="table" id='game_list_table'>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
<!-- panel-body -->
</div>
</div>
</div>
</div>
</div>
<!--Coin Management Starts-->
<div id="Coins_page" class="page">
<div class="panel panel-default">
<div class="panel-heading">
<h3>Coin Management</h3>
</div>
<div class="panel-body">
<div class="pull-right">
<button id="Coins_reset" class="btn btn-raised" title="Reset">Reset</button>
<button id="Coins_refresh" class="btn btn-raised" title="Refresh">Refresh</button>
<button id="Coins_add" class="btn btn-raised btn-primary" type="button" data-toggle="modal" data-target="#CoinEditModal" title="Add">Add</button>
</div>
<table id="Coins_table" class="table table-hover table-condensed table-bordered ">
<thead>
<tr>
<th>Symbol</th>
<th>Description</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<!--Modal starts-->
<div class="modal fade" id="CoinEditModal" tabindex="-1" role="dialog" aria-labelledby="editCoinHeader">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="editCoinHeader">Edit Coin</h4>
</div>
<div class="modal-body">
<div id="coinEditFormContainer">
<form class="form-horizontal" id="frmCoinEdit" name="frmCoinEdit">
<div id="txtSymbolGroup" class="form-group">
<label for="txtSymbol" class="control-label col-xs-2 col-md-2">Symbol</label>
<div class="col-xs-10 col-md-10">
<input type="text" id="txtSymbol" name="txtSymbol" class="form-control input-sm" />
</div>
</div>
<div id="txtDescriptionGroup" class="form-group">
<label for="txtDescription" class="control-label col-xs-2 col-md-2">Description</label>
<div class="col-xs-10 col-md-10">
<input type="text" id="txtDescription" name="txtDescription" class="form-control input-sm" />
</div>
</div>
<div id="ddCoinStatus" class="form-group">
<label for="ddStatus" class="control-label col-xs-2 col-md-2">Status</label>
<div class="col-xs-10 col-md-10">
<select type="text" id="ddStatus" name="ddStatus" class="form-control input-sm"></select>
</div>
</div>
</form>
</div>
</div>
<div class="modal-footer">
<button id="btnClearCoinForm" type="button" class="btn btn-raised btn-default" data-dismiss="modal">Nevermind</button>
<button id="btnSaveCoinForm" type="button" class="btn btn-raised btn-primary" data-dismiss="modal">Save</button>
<!-- <button id="btnSaveCoinForm" type="button" class="btn btn-primary">Save</button> -->
</div>
</div>
</div>
</div>
<!--Modal Ends-->
<div class="row">
<div class="col-xs-9 col-sm-10 col-md-8">
<div class="panel panel-default">
<div class="panel-body">
<div class="form-group">
<textarea id="json_src_coin" cols="30" rows="5" class="result form-control" placeholder='Paste json here'></textarea>
</div>
<div class="form-group">
<button class="btn btn-primary submit_new_coin_test" >Add coin</button>
</div>
</div>
</div>
</div>
<div class="col-xs-6 col-md-4 col-lg-4">
<div class="panel-body">
<h5 class='uri-link'>Response</h5>
<pre class="hljs json coin_result">JSON response</pre>
<button class="btn btn-default clear-response-coin">Clear response</button>
</div>
</div>
</div>
</div>
</div>
</div>
<!--Coin Management Ends-->
<!-- peers tab -->
<div id="Peers_page" class="page">
<div class="row">
<div class="panel panel-default">
<div class="panel-heading">
<h3>
<span>Peer Management</span>
</h3>
</div>
<div class="panel-body"><div>
<button class="btn btn-xs btn-success btn-raised connect_to_peers_from_conf" >Load peers</button>
<button class="btn btn-xs btn-success btn-raised save_peersdata_to_conf" >Save Peers</button>
<button class="btn btn-xs btn-success btn-raised update_allpeer_status" >Update Peers</button>
<div class="pull-right">
<span class="checkbox"><label><input id="cbShowFavoritePeers" type="checkbox"/> Favorites</label></span>
</div></div><div class="pre-scrollable">
<table id="peersTable" class="table table-hover table-bordered pre-scrollable">
<thead>
<tr>
<th>IP Address</th>
<th>Coin Type</th>
<th>Height</th>
<th>Rank</th>
<th>Block</th>
<th>Favourite </th>
<th>Actions</th>
</tr>
</thead>
<tbody id="peersTableBody"></tbody>
</table></div>
</div>
</div>
</div>
</div>
<div id="Tradebot_page" class="page">
<div class="row">
<div class="panel panel-default">
<div class="panel-heading">
<h3>
<span>Tradebot</span>
</h3>
</div>
<div class="panel-body center button_div">
<button class="btn btn-primary Tradebot_set_method_table" data-method="monitor" >monitor</button>
<button class="btn btn-primary Tradebot_set_method_table" data-method="monitorall" >monitorall</button>
<button class="btn btn-primary Tradebot_set_method_table" data-method="unmonitor" >unmonitor</button>
<button class="btn btn-primary Tradebot_set_method_table" data-method="accumulate" >accumulate</button>
<button class="btn btn-primary Tradebot_set_method_table" data-method="divest" >divest</button>
<button class="btn btn-primary Tradebot_set_method_table" data-method="activebots" >activebots</button>
<button class="btn btn-primary Tradebot_set_method_table" data-method="status" >status</button>
<button class="btn btn-primary Tradebot_set_method_table" data-method="pause" >pause</button>
<button class="btn btn-primary Tradebot_set_method_table" data-method="stop" >stop</button>
<button class="btn btn-primary Tradebot_set_method_table" data-method="resume" >resume</button>
</div>
<div class="panel-body">
<table id="tradebot_input" class="table table-hover table-bordered">
</table>
<table id="trade_output" class="table table-hover table-bordered">
</table>
</div>
</div>
</div>
</div>
<div id="Settings_page" class="page">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Settings</h3>
</div>
<div class="panel-body" >
<div class="row">
<div class="pre-scrollable">
<div class="col-xs-6 col-md-6 col-lg-6 ">
<div id="advanced_settings"></div>
</div>
<div class="col-xs-6 col-md-6 col-lg-6">
<div id="config_settings"></div>
<div class="function" id="fread" hidden>
<span>
<select class="file-handle" id="freadHandle"></select>
Count:
<input type="text" id="freadBytes">
<button>fread</button>
</span>
</div>
<div class="function" id="fwrite" hidden>
<span>
<select class="file-handle" id="fwriteHandle"></select>
Data:
<input type="text" id="fwriteData">
<button>fwrite</button>
</span>
</div>
</div></div>
</div>
<div class="row">
<div class="col-xs-6 col-md-6 col-lg-6">
<div class="form-group">
<button class="btn btn-primary _not_pressed" id="save_settings">Save</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="Debug_page" class="page">
<div class='panel panel-default'>
<div class='panel-heading'>
<h3><span>
Encrypt/decrypt JSON
</span></h3>
</div>
<div class='panel-body'>
<div class="row">
<div class="col-sm-8 col-md-8">
<form class="form-horizontal">
<div class="form-group">
<label for="debug_passphrase" class="control-label col-sm-3 col-md-3">
Passphrase
</label>
<div class="col-sm-7 col-md-7">
<input type="text" class="form-control" id='debug_passphrase'>
<span class='material-input'></span>
</div>
</div>
<div class="form-group">
<label for="debug_permanentfile" class="control-label col-sm-3 col-md-3">
Permanentfile
</label>
<div class="col-sm-7 col-md-7">
<div>
<input type="text" class="form-control" id='debug_permanentfile'>
</div>
</div>
</div>
<div class="form-group">
<label for="debug_json_src" class="control-label col-sm-3 col-md-3">
Json
</label>
<div class="col-sm-7 col-md-7">
<textarea name="" id="debug_json_src" cols="30" rows="5" class='form-control'></textarea>
<span class='material-input'></span>
</div>
</div>
<div class="form-group">
<button class="btn btn-primary" id="debug_json_encrypt">
Encrypt JSON
</button>
<button class="btn btn-primary" id="debug_json_decrypt">
Decrypt JSON
</button>
</div>
</form>
</div>
<div class="col-sm-4 col-md-4">
<h5 class="uri-link">Response</h5>
<pre class="hljs json coin_result" id="debug_json_result">JSON response</pre>
<h5 class="uri-link">File contents</h5>
<pre class="hljs" id="debug_json_file">encrypted file content</pre>
<button class="btn btn-default" id="debug_clear_response">Clear response</button>
</div>
</div>
</div>
</div>
<div class="jumbotron">
<table>
<tr >
<td><img src="" height="90" width="90" class="imagAPI" data-id="1" id="dest-imagAPI-1" /></td>
<td><img src="" height="90" width="90" class="imagAPI" data-id="2" id="dest-imagAPI-2"/></td>
<td><img src="" height="90" width="90" class="imagAPI" data-id="3" id="dest-imagAPI-3" /></td>
<td><img src="" height="90" width="90" class="imagAPI" data-id="4" id="dest-imagAPI-4" /></td>
<td><img src="" height="90" width="90" class="imagAPI" data-id="5" id="dest-imagAPI-5" /></td>
<td><img src="" height="90" width="90" class="imagAPI" data-id="6" id="dest-imagAPI-6" /></td>
<td><img src="" height="90" width="90" class="imagAPI" data-id="7" id="dest-imagAPI-7" /></td>
<td><img src="" height="90" width="90" class="imagAPI" data-id="8" id="dest-imagAPI-8" /></td>
<td><img src="" height="90" width="90" class="imagAPI" data-id="9" id="dest-imagAPI-9" /></td>
<td><img src="" height="90" width="90" class="imagAPI" data-id="10" id="dest-imagAPI-10" /></td>
</tr>
<tr>
<td align="center" ><input id="name-imagAPI-1" type="text" value="abc1.jpg" size="7"/></td>
<td align="center" ><input id="name-imagAPI-2" type="text" value="abc2.jpg" size="7"/></td>
<td align="center" ><input id="name-imagAPI-3" type="text" value="abc3.jpg" size="7"/></td>
<td align="center" ><input id="name-imagAPI-4" type="text" value="abc4.jpg" size="7"/></td>
<td align="center" ><input id="name-imagAPI-5" type="text" value="abc5.jpg" size="7"/></td>
<td align="center" ><input id="name-imagAPI-6" type="text" value="abc6.jpg" size="7"/></td>
<td align="center" ><input id="name-imagAPI-7" type="text" value="abc7.jpg" size="7"/></td>
<td align="center" ><input id="name-imagAPI-8" type="text" value="abc8.jpg" size="7"/></td>
<td align="center" ><input id="name-imagAPI-9" type="text" value="abc9.jpg" size="7"/></td>
<td align="center" ><input id="name-imagAPI-10" type="text" value="abc10.jpg" size="7"/></td>
</tr>
<tr style="display: none;">
<td><img src="images/img1.png" height="90" width="90" id="src-imagAPI-1" /></td>
<td><img src="images/img2.jpg" height="90" width="90" id="src-imagAPI-2" /></td>
<td><img src="images/img3.png" height="90" width="90" id="src-imagAPI-3" /></td>
<td><img src="images/img4.png" height="90" width="90" id="src-imagAPI-4" /></td>
<td><img src="images/img1.png" height="90" width="90" id="src-imagAPI-5" /></td>
<td><img src="images/img2.jpg" height="90" width="90" id="src-imagAPI-6" /></td>
<td><img src="images/img3.png" height="90" width="90" id="src-imagAPI-7" /></td>
<td><img src="images/img4.png" height="90" width="90" id="src-imagAPI-8" /></td>
<td><img src="images/img1.png" height="90" width="90" id="src-imagAPI-9" /></td>
<td><img src="images/img2.jpg" height="90" width="90" id="src-imagAPI-10" /></td>
</tr>
<tr><td colspan="10">
<span id="mousexy"></span>
</td>
</tr>
</table>
<div class="debuglog" hidden> <pre id="log" style="font-weight: bold"></pre></div>
</div>
</div>
<div id="Bitmap_page" class="page">
<div>
<select id="pic-changer">
<option value="none">None selected</option>
<option value="img3.jpg" data-picture="images/img3.png">Image1</option>
</select>
</div>
<div id="image-location">
</div>
<div>
<span id="bit_mousexy"></span>
</div>
</div>
<div id="Blockexplorer_page" class="page">
<div class="panel panel-default">
<!-- Default panel contents -->
<div class="panel-heading">
<h3>Block Explorer tab</h3>
</div>
<div class="panel-body center">
<div class="pull-right">
<span class="checkbox"><label><input id="cbChangeExternalBlocks" type="checkbox"/> Use External Blocks</label></span>
</div>
<h3>Set Active coin</h3>
<div id="BlockExpCoin">
</div>
<div >
<table id="block_input_table"></table>
</div>
<div>
<table id="block_output_table" width="500px">
</table>
</div>
<table id="appstatus" class="table table-hover table-bordered">
</table>
</div>
</div>
<style type="text/css">
#Blockexplorer_page .center {
text-align: center;
}
</style>
</div>
<div id="Instandex_page" class="page">
<div class="panel panel-default">
<!-- Default panel contents -->
<div class="panel-heading">
<h3>InstantDEX</h3>
<div class="chart">
<button id="start">Start</button>
<button id="stop" disabled="disabled">Stop </button>
<button id="BTCD"> BTCD</button>
<button id="VPN">VPN</button>
<button id="SYS">SYS</button>
<button id="VRC">VRC</button>
<button id="SuperNET">SuperNET</button>
<button id="crypto777">crypto777</button>
<button id="InstantDEX">InstantDEX</button>
<button id="Tradebots">Tradebots</button>
<button id="Pangea">Pangea</button>
<button id="NXTprivacy">NXTprivacy</button>
<button id="buy">BUY</button>
<button id="sell">SELL</button>
<div id="chartdiv"></div>
</div>
</div><div class="pre-scrollable">
<div class="panel-body center">
<button class="btn xyz_button_click btn-primary instantdex_set_method_table" data-method="orderbook" >orderbook</button>
<button class="btn xyz_button_click btn-primary instantdex_set_method_table" data-method="apikeypair" >API Keypair</button>
<button class="btn btn-primary instantdex_set_method_table" data-method="setuserid" >Set Userid</button>
<button class="btn btn-primary instantdex_set_method_table" data-method="allpairs" >Allpairs</button>
<button class="btn btn-primary instantdex_set_method_table" data-method="balance" >Balance</button>
<button class="btn btn-primary instantdex_set_method_table" data-method="support" >Supports</button>
<button class="btn btn-primary instantdex_set_method_table" data-method="sell" >Sell</button>
<button class="btn btn-primary instantdex_set_method_table" data-method="buy" >Buy</button>
<button class="btn btn-primary instantdex_set_method_table" data-method="withdraw" >Withdraw</button>
<button class="btn btn-primary instantdex_set_method_table" data-method="order_status" >Order status </button>
<button class="btn btn-primary instantdex_set_method_table" data-method="order_open" >Open Orders</button>
<button class="btn btn-primary instantdex_set_method_table" data-method="order_cancel" >Cancel Order</button>
<button class="btn btn-primary instantdex_set_method_table" data-method="trade_history" >Trade History</button>
<button class="btn btn-primary instantdex_set_method_table" data-method="pollgap" >Pollgap</button>
<button class="btn btn-primary instantdex_set_method_table" data-method="tradeint" >Trade integration</button>
</div>
<div class="panel-body center">
<table id="Instandex_form_table" class="table table-hover table-bordered">
</table>
</div>
<div class="panel-body center">
<table id="Instandex_output_table" class="table table-hover table-bordered" >
</table>
</div></div>
</div>
<style type="text/css">
#Blockexplorer_page .center {
text-align: center;
}
</style>
</div>
<div id="listener"></div>
</div>
</div>
<!--if android style ripple effect is not working, try temporarily deleting the following line-->
<script type="text/javascript " src="example.js "></script>
<!--jQuery-->
<script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
<!--Bootstrap-->
<script type="text/javascript" src="js/bootstrap.js"></script>
<!--Google Theme-->
<script type="text/javascript" src='js/googleTheme.min.js'></script>
<script type="text/javascript" src='js/ripples.min.js'></script>
<script type="text/javascript" src='js/jquery.dropdown.js'></script>
<!--Iguana genric code-->
<script type="text/javascript" src="js/api.js" " charset="utf-8 "></script>
<script src="app/coin_mgmt.js "></script>
<script type="text/javascript " src="js/util.js "></script>
<script type="text/javascript " src="js/sites.js " charset="utf-8 "></script>
<script type="text/javascript " src="app/common.js "></script>
<script type="text/javascript " src="app/startup.js " ></script>
<script type="text/javascript " src="js/settings.js " charset="utf-8 "></script>
<!--Iguana tabs-->
<script src='js/form.js'></script>
<script type="text/javascript " src='js/peerlist.js'></script>
<script type="text/javascript " src="js/methods.js " charset="utf-8 "></script>
<script type="text/javascript " src="js/imgAPI.js " ></script>
<script type="text/javascript " src="js/pangea.js" ></script>
<script type="text/javascript " src="js/blockexplorer.js" ></script>
<script type="text/javascript " src="js/instantdex.js" ></script>
<script type="text/javascript " src="js/tradebot.js" ></script>
<script type="text/javascript " src="js/storage.js" ></script>
<script type="text/javascript " src="js/jquery.tablesort.js" ></script>
<script type="text/javascript " src="js/tradeintegration.js" ></script>
<script type="text/javascript " src="js/debugJson.js" ></script>
<script type="text/javascript " src="js/bitmap.js " ></script>
</body>
</html>

177
iguana/index.html

@ -5,7 +5,7 @@
<head>
<title>iguana</title>
<link rel="stylesheet" href="css/custom.css" type="text/css">
<!-- Bootstrap -->
<link rel="stylesheet" type="text/css" href="css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="css/jquery.dropdown.css">
@ -40,7 +40,8 @@ function httpGet(url)
var client;
if ( window.XMLHttpRequest )
client = new XMLHttpRequest();
else client = new ActiveXObject(\"Microsoft.XMLHTTP\");
else
client = new ActiveXObject(\"Microsoft.XMLHTTP\");
client.onload = http_handler;
client.open(\"GET\",url);
client.send();
@ -173,10 +174,14 @@ function buyaction() {
alert("need to do market buy");
}
function sellaction() {
alert("need to do market sell");
}
function getDataFromServer()
{
var i,newData = [];
@ -198,11 +203,16 @@ function getDataFromServer()
// newData = JSON.parse("[{\"h\":14,\"m\":44,\"s\":32,\"date\":1407877200000,\"bid\":30,\"ask\":35},{\"date\":1407877200000,\"bid\":40,\"ask\":44},{\"date\":1407877200000,\"bid\":49,\"ask\":45},{\"date\":1407877200000,\"ask\":28},{\"date\":1407877200000,\"ask\":52}]");
}
}
</script>
</head>
<body data-custom-load="true" data-name="iguana" data-tools="pnacl newlib glibc clang-newlib mac" data-configs="Debug Release"
@ -721,7 +731,168 @@ data-path="{tc}/{config}">
</table>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
<script>
$( document ).ready(function() {
var val;
var val1;
$("#currancy2").on('change',function(){
var option1 = $("#currancy1 option:selected").text();
var option2 = $("#currancy2 option:selected").text();
if(option1==option2){
alert("Please slect diffrent Currancy");
}
});
$("#currancy1").on('change',function(){
var option1 = $("#currancy1 option:selected").text();
var option2 = $("#currancy2 option:selected").text();
if(option1==option2){
alert("Please slect diffrent Currancy");
}
else
{
$("#one_coin1_value").each(function() {
});
}
});
$("#one_coin1_value").keyup(function(){
calculateSum();
});
});
function calculateSum() {
var texboxval =parseFloat($("#one_coin1_value").val())
var value = parseFloat($("#currancy1").val());
var value1 = parseFloat($("#currancy2").val());
var sum = texboxval + value;
var result = (sum)/(value1);
$("#one_coin2_value").val(result);
//$("#one_coin2_value").text(result);
//.toFixed() method will roundoff the final sum to 2 decimal places
//$("#one_coin2_value").html(sum.toFixed(2));
}
</script>
<div class="col-md-8 col-xs-offset-2 exchangecontainer" >
<div class="innersection">
<h4 style="text-align:center;">Choose Which Coins to Exchange</h4>
<div class="coin1">
<table>
<tr>
<td><label for="coin_volume" >Volume:</label></td>
<td><input type="text" name="one_coin1_volume" id="one_coin1_value" class="shape txt"></td></tr>
<tr><td><label for="coin_volume" >Select Coin</label></td>
<td><select class="select_box shape" id="currancy1">
<option value="663.04">BTC</option>
<option value="0.035">BTCD</option>
<option value="1.67">VTC</option>
<option value="13.96">ETH</option>
</select> </td></tr>
</table>
</div>
<div class="coin2">
<table>
<tr>
<td><label for="coin_volume" >Volume:</label></td>
<td><input type="text" name="one_coin2_volume" id="one_coin2_value" class= "shape txt" readonly ></td></tr>
<tr><td><label for="coin_volume" >Select Coin</label></td>
<td><select class="select_box shape" id="currancy2">
<option value="0.035">BTCD</option>
<option value="663.04">BTC</option>
<option value="1.67">VTC</option>
<option value="13.96">ETH</option>
</select></td></tr>
</table>
</div>
<div class="button"> <button class="exchange shape" id="exchange" data-toggle="modal" data-target="#exchange_model">Exchange</button></div>
</div>
</div><!--exchangecontainer-->
</div>
<!---exchangemodule---->
<!--Modal starts-->
<div class="modal fade" id="exchange_model" tabindex="-1" role="dialog" aria-labelledby="editCoinHeader">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="editCoinHeader">Enter Wallet Address</h4>
</div>
<div class="modal-body">
<div id="coinEditFormContainer">
<form class="form-horizontal" id="frmexchange" name="frmCoinEdit">
<div id="txtSymbolGroup" class="form-group">
<label for="txtSymbol" class="col-xs-4 col-md-4">Wallet Address From</label>
<div class="col-xs-8 col-md-8">
<input type="text" id="address_from" name="txtSymbol" class="input-sm shape" />
</div>
</div>
<div id="txtDescriptionGroup" class="form-group">
<label for="txtDescription" class="col-xs-4 col-md-4">Wallet Address To</label>
<div class="col-xs-8 col-md-8">
<input type="text" id="address_to" name="txtDescription" class="input-sm shape" />
</div>
</div>
<!--<div id="ddCoinStatus" class="form-group">
<label for="ddStatus" class="control-label col-xs-2 col-md-2">Status</label>
<div class="col-xs-10 col-md-10">
<select type="text" id="ddStatus" name="ddStatus" class="form-control input-sm"></select>
</div>
</div>-->
</form>
</div>
</div>
<div class="modal-footer">
<!-- <button id="btnClearCoinForm" type="button" class="btn btn-raised btn-default" data-dismiss="modal">Nevermind</button>
<button id="btnSaveCoinForm" type="button" class="btn btn-raised btn-primary" data-dismiss="modal">Save</button>-->
<div class="button"> <button class="exchange shape" id="exchange" >Done</button></div>
<!-- <button id="btnSaveCoinForm" type="button" class="btn btn-primary">Save</button> -->
</div>
</div>
</div>
</div>
<!--Modal Ends-->
<!---End exchange module--->
<style type="text/css">
#Blockexplorer_page .center {
text-align: center;
@ -765,7 +936,7 @@ data-path="{tc}/{config}">
<button class="btn btn-primary instantdex_set_method_table" data-method="sell" >Sell</button>
<button class="btn btn-primary instantdex_set_method_table" data-method="buy" >Buy</button>
<button class="btn btn-primary instantdex_set_method_table" data-method="withdraw" >Withdraw</button>
<button class="btn btn-primary instantdex_set_method_table" id="withdraw" data-method="withdraw" >Withdraw</button>
<button class="btn btn-primary instantdex_set_method_table" data-method="order_status" >Order status </button>
<button class="btn btn-primary instantdex_set_method_table" data-method="order_open" >Open Orders</button>

2
iguana/tests/DEXtx

@ -1,2 +1,2 @@
curl --url "http://127.0.0.1:7778" --data "{\"coin\":\"BTCD\",\"method\":\"sendtoaddress\",\"params\":[\"RXL3YXG2ceaB6C5hfJcN4fvmLH2C34knhA\", 0.0001, \"4e4557444558000000496e7374616e744445580000407a10f35a0000e1526b5aab0b6b57ffffff1e000000000100013c0580f1dce4182fce875748c4986b240ff7d7bc3fffb0\", \"sendcomment\"]}"
curl --url "http://127.0.0.1:7778" --data "{\"coin\":\"BTCD\",\"method\":\"sendtoaddress\",\"params\":[\"RXL3YXG2ceaB6C5hfJcN4fvmLH2C34knhA\", 0.0001, \"4e4557444558000000496e7374616e74444558000000000000407a10f35a0000dffc6993a2216d57ffffff1e1f4e010001000cba013c0580f1dce4182fce875748c4986b240ff7d7bc3fffb0\", \"sendcomment\"]}"

2
iguana/tests/HOT

@ -0,0 +1,2 @@
curl --url "http://127.0.0.1:7778" --data "{\"agent\":\"basilisk\",\"method\":\"genesis_opreturn\",\"vals\":{\"issuer\":\"RXL3YXG2ceaB6C5hfJcN4fvmLH2C34knhA\",\"stake\":1000000,\"blocktime\":1,\"name\":\"HOT ICO\",\"symbol\":\"HOT\",\"p2sh\":5,\"wif\":128,\"nBits\":\"1effffff\"}}"

2
iguana/tests/HOTtx

@ -0,0 +1,2 @@
curl --url "http://127.0.0.1:7778" --data "{\"coin\":\"BTCD\",\"method\":\"sendtoaddress\",\"params\":[\"RXL3YXG2ceaB6C5hfJcN4fvmLH2C34knhA\", 0.0001, \"4e4557484f54000000484f542049434f000000000000000000407a10f35a00007f53009145d46b57ffffff1e0000000001009577013c0580f1dce4182fce875748c4986b240ff7d7bc3fffb0\", \"sendcomment\"]}"

2
iguana/tests/decoderawtransaction

@ -1 +1 @@
curl --url "http://127.0.0.1:7778" --data "{\"coin\":\"BTCD\",\"method\":\"decoderawtransaction\",\"params\":[\"0100000071d46a5701df62e7985792f07682f565e9496d9358398839f6d7154f531c481d872fb74fcd010000006b483045022100ba971715e5084c71a4239d57af05dc8cf8c9ba478e50949e55accc8345a5388502206da445b50c927ff1b69901c60c97cd01e488c9a865efa5cb724bfc24a05d863d012103377aea6f477582332f128acb197b9f463b5262571d23afaa113dfab48753e3cdffffffff0310270000000000001976a914f1dce4182fce875748c4986b240ff7d7bc3fffb088acc02d9a3b000000001976a914c210f6711e98fe9971757ede2b2dcb0507f3f25e88ac00000000000000004c6a4a00407a10f35a00007ed8874d63a66a57ffffff1e000000000100010005800000000000000000000000000000000000000000444558000000496e7374616e74444558000000000000000000000000\"]}"
curl --url "http://127.0.0.1:7778" --data "{\"coin\":\"BTCD\",\"method\":\"decoderawtransaction\",\"params\":[\"01000000a2216d57010000000000000000000000000000000000000000000000000000000000000000ffffffff0f4445585f496e7374616e7444455800ffffffff0100407a10f35a00001976a914f1dce4182fce875748c4986b240ff7d7bc3fffb088ac00000000\"]}"

11
includes/iguana_apideclares.h

@ -13,15 +13,22 @@
* *
******************************************************************************/
ZERO_ARGS(InstantDEX,allcoins);
STRING_ARG(InstantDEX,available,source);
THREE_STRINGS_AND_DOUBLE(InstantDEX,request,message,dest,source,amount);
INT_ARG(InstantDEX,incoming,requestid);
INT_ARG(InstantDEX,choose,quoteid);
INT_ARG(InstantDEX,qstatus,quoteid);
HASH_ARRAY_STRING(basilisk,genesis_opreturn,hash,vals,hexstr);
HASH_ARRAY_STRING(basilisk,balances,hash,vals,hexstr);
HASH_ARRAY_STRING(basilisk,value,hash,vals,hexstr);
HASH_ARRAY_STRING(basilisk,rawtx,hash,vals,hexstr);
//INT_AND_ARRAY(basilisk,result,basilisktag,vals);
HASH_ARRAY_STRING(basilisk,geckogenesis,hash,vals,hexstr);
//HASH_ARRAY_STRING(basilisk,geckogenesis,hash,vals,hexstr);
HASH_ARRAY_STRING(basilisk,newgeckochain,hash,vals,hexstr);
//HASH_ARRAY_STRING(basilisk,newgeckochain,hash,vals,hexstr);
HASH_ARRAY_STRING(basilisk,geckoheaders,hash,vals,hexstr);
HASH_ARRAY_STRING(basilisk,geckoblock,hash,vals,hexstr);
HASH_ARRAY_STRING(basilisk,geckotx,hash,vals,hexstr);

6
includes/iguana_funcs.h

@ -464,7 +464,8 @@ struct iguana_bundlereq *iguana_bundlereq(struct iguana_info *coin,struct iguana
void instantdex_FSMinit();
void iguana_unspentslock(struct supernet_info *myinfo,struct iguana_info *coin,cJSON *vins);
char *iguana_calcrawtx(struct supernet_info *myinfo,struct iguana_info *coin,cJSON **vinsp,cJSON *txobj,int64_t satoshis,char *changeaddr,int64_t txfee,cJSON *addresses,int32_t minconf,uint8_t *opreturn,int32_t oplen,int64_t burnamount);
int64_t datachain_update(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_bundle *bp,uint8_t rmd160[20],int64_t crypto777_payment,uint8_t type,int32_t height,uint64_t hdrsi_unspentind,int64_t burned,uint32_t fileid,uint64_t scriptpos,int32_t scriptlen);
int64_t datachain_update(struct supernet_info *myinfo,int32_t ordered,struct iguana_info *coin,uint32_t timestamp,struct iguana_bundle *bp,uint8_t rmd160[20],int64_t crypto777_payment,uint8_t type,int32_t height,uint64_t hdrsi_unspentind,int64_t burned,uint32_t fileid,uint64_t scriptpos,int32_t scriptlen,bits256 txid,int32_t vout);
void datachain_update_spend(struct supernet_info *myinfo,int32_t ordered,struct iguana_info *coin,uint32_t timestamp,struct iguana_bundle *bp,int32_t height,bits256 txid,int32_t vout,uint8_t rmd160[20],int64_t value);
char *iguana_signrawtx(struct supernet_info *myinfo,struct iguana_info *coin,bits256 *signedtxidp,int32_t *completedp,cJSON *vins,char *rawtx,cJSON *privkey);
bits256 scrypt_blockhash(const void *input);
@ -521,9 +522,10 @@ struct iguana_peer *iguana_peerfindipaddr(struct iguana_info *coin,char *ipaddr,
struct iguana_peer *iguana_peerfindipbits(struct iguana_info *coin,uint32_t ipbits,int32_t needalive);
int32_t basilisk_relays_send(struct supernet_info *myinfo,struct iguana_peer *addr);
int32_t basilisk_hashes_send(struct supernet_info *myinfo,struct iguana_info *virt,struct iguana_peer *addr,char *CMD,bits256 *txids,int32_t num);
int32_t iguana_opreturn(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_bundle *bp,int64_t crypto777_payment,int32_t height,uint64_t hdrsi_unspentind,int64_t payment,uint32_t fileid,uint64_t scriptpos,uint32_t scriptlen);
int32_t iguana_opreturn(struct supernet_info *myinfo,int32_t ordered,struct iguana_info *coin,uint32_t timestamp,struct iguana_bundle *bp,int64_t crypto777_payment,int32_t height,uint64_t hdrsi_unspentind,int64_t payment,uint32_t fileid,uint64_t scriptpos,uint32_t scriptlen);
int32_t iguana_scriptdata(struct iguana_info *coin,uint8_t *scriptspace,long fileptr[2],char *fname,uint64_t scriptpos,int32_t scriptlen);
struct iguana_peer *basilisk_ensurerelay(struct supernet_info *myinfo,struct iguana_info *btcd,uint32_t ipbits);
int32_t iguana_datachain_scan(struct supernet_info *myinfo,struct iguana_info *coin,uint8_t rmd160[20]);
#include "../includes/iguana_api.h"

6
includes/iguana_structs.h

@ -403,7 +403,7 @@ struct iguana_info
struct iguana_bundle *bundles[IGUANA_MAXBUNDLES],*current,*lastpending;
struct iguana_ramchain RTramchain; struct OS_memspace RTmem,RThashmem; bits256 RThash1;
int32_t numremain,numpendings,zcount,recvcount,bcount,pcount,lastbundle,numsaved,pendbalances,numverified,blockdepth;
uint32_t recvtime,hdrstime,backstoptime,lastbundletime,numreqsent,numbundlesQ,lastbundleitime,lastdisp,RTgenesis,firstRTgenesis,RTstarti,idletime,stucktime,stuckmonitor,maxstuck,lastreqtime,RThdrstime,nextchecked;
uint32_t recvtime,hdrstime,backstoptime,lastbundletime,numreqsent,numbundlesQ,lastbundleitime,lastdisp,RTgenesis,firstRTgenesis,RTstarti,idletime,stucktime,stuckmonitor,maxstuck,lastreqtime,RThdrstime,nextchecked,lastcheckpoint;
double bandwidth,maxbandwidth,backstopmillis; bits256 backstophash2; int64_t spaceused;
int32_t initialheight,mapflags,minconfirms,numrecv,bindsock,isRT,backstop,blocksrecv,merging,polltimeout,numreqtxids,allhashes,balanceflush,basilisk_busy; bits256 reqtxids[64];
void *launched,*started,*rpcloop;
@ -413,7 +413,7 @@ struct iguana_info
struct iguana_hhutxo *utxotable; struct iguana_hhaccount *accountstable; char lastdispstr[2048];
double txidfind_totalmillis,txidfind_num,spendtxid_totalmillis,spendtxid_num;
struct iguana_monitorinfo monitoring[256];
struct datachain_info dPOW;
struct datachain_info dPoW;
struct iguana_zblock newblock; char *newblockstr;
struct iguana_blocks blocks; void *mempool; void *mempools[IGUANA_MAXRELAYS];
};
@ -467,7 +467,7 @@ struct supernet_info
struct iguana_info *allcoins; int32_t allcoins_being_added,allcoins_numvirts;
portable_mutex_t allcoins_mutex,gecko_mutex,basilisk_mutex;
void *ctx;
struct delayedPoW_info dPOW;
struct delayedPoW_info dPoW;
uint32_t relaybits[IGUANA_MAXRELAYS]; struct basilisk_relay relays[IGUANA_MAXRELAYS];
int32_t numrelays,RELAYID;
// compatibility

Loading…
Cancel
Save