Browse Source

addcoin

release/v0.1
jl777 9 years ago
parent
commit
eb9db4875d
  1. 32
      iguana/iguana777.c
  2. 8
      iguana/iguana777.h
  3. 204
      iguana/iguana_chains.c
  4. 2
      iguana/iguana_exchanges.c
  5. 14
      iguana/iguana_init.c
  6. 12
      iguana/main.c

32
iguana/iguana777.c

@ -15,7 +15,7 @@
#include "iguana777.h"
const char *Hardcoded_coins[][3] = { { "BTC", "bitcoin", "0" }, { "BTCD", "BitcoinDark", "129" }, { "VPN", "VPNcoin", "129" }, { "LTC", "litecoin", "129" } };
const char *Hardcoded_coins[][3] = { { "BTC", "bitcoin", "0" }, { "BTCD", "BitcoinDark", "129" }, { "VPN", "VPNcoin", "129" }, { "LTC", "litecoin", "129" } , { "endmarker", "", "" } };
struct iguana_info *iguana_coinfind(const char *symbol)
{
@ -28,7 +28,7 @@ struct iguana_info *iguana_coinfind(const char *symbol)
return(0);
}
struct iguana_info *iguana_coinadd(const char *symbol)
struct iguana_info *iguana_coinadd(const char *symbol,cJSON *argjson)
{
struct iguana_info *coin; int32_t i = 0;
if ( symbol == 0 )
@ -41,7 +41,6 @@ struct iguana_info *iguana_coinadd(const char *symbol)
if ( Coins[i] == 0 )
{
Coins[i] = mycalloc('c',1,sizeof(*Coins[i]));
//memset(Coins[i],0,sizeof(*Coins[i]));
printf("iguana_coin.(new) -> %p\n",Coins[i]);
return(Coins[i]);
} return(0);
@ -52,20 +51,29 @@ struct iguana_info *iguana_coinadd(const char *symbol)
{
for (i=0; i<sizeof(Coins)/sizeof(*Coins); i++)
{
if ( i >= sizeof(Hardcoded_coins)/sizeof(*Hardcoded_coins) || Hardcoded_coins[i][0] == 0 )
if ( i >= sizeof(Hardcoded_coins)/sizeof(*Hardcoded_coins) )
break;
if ( strcmp(symbol,Hardcoded_coins[i][0]) == 0 )
//printf("Hardcoded_coins[i][0] %s vs.(%s)\n",Hardcoded_coins[i][0],symbol);
//if ( symbol[0] == 0 )
// getchar();
if ( strcmp("endmarker",Hardcoded_coins[i][0]) == 0 || strcmp(symbol,Hardcoded_coins[i][0]) == 0 )
{
if ( Coins[i] == 0 )
Coins[i] = mycalloc('c',1,sizeof(*Coins[i]));
coin = Coins[i];
if ( coin->chain == 0 )
{
strcpy(coin->name,Hardcoded_coins[i][1]);
//coin->myservices = atoi(Hardcoded_coins[i][2]);
if ( i < sizeof(Hardcoded_coins)/sizeof(*Hardcoded_coins) )
strcpy(coin->name,Hardcoded_coins[i][1]);
else if (argjson != 0 )
{
if ( jstr(argjson,"name") != 0 )
safecopy(coin->name,jstr(argjson,"name"),sizeof(coin->name));
else strcpy(coin->name,symbol);
}
coin->chain = iguana_chainfind((char *)symbol,argjson,1);
iguana_initcoin(coin,argjson);
strcpy(coin->symbol,symbol);
coin->chain = iguana_chainfind(coin->symbol);
iguana_initcoin(coin);
}
return(coin);
}
@ -443,7 +451,7 @@ struct iguana_info *iguana_setcoin(char *symbol,void *launched,int32_t maxpeers,
struct iguana_chain *iguana_createchain(cJSON *json);
struct iguana_info *coin; int32_t j,m,mapflags; char dirname[512]; cJSON *peers;
mapflags = IGUANA_MAPRECVDATA | maphash*IGUANA_MAPTXIDITEMS | maphash*IGUANA_MAPPKITEMS | maphash*IGUANA_MAPBLOCKITEMS | maphash*IGUANA_MAPPEERITEMS;
coin = iguana_coinadd(symbol);
coin = iguana_coinadd(symbol,json);
coin->launched = launched;
if ( (coin->MAXPEERS= maxpeers) <= 0 )
coin->MAXPEERS = (strcmp(symbol,"BTC") == 0) ? 64 : 32;
@ -493,7 +501,7 @@ int32_t iguana_launchcoin(char *symbol,cJSON *json)
int64_t maxrecvcache; uint64_t services; struct iguana_info **coins,*coin;
if ( symbol == 0 )
return(-1);
if ( (coin= iguana_coinadd(symbol)) == 0 )
if ( (coin= iguana_coinadd(symbol,json)) == 0 )
return(-1);
if ( coin->launched == 0 )
{
@ -502,7 +510,7 @@ int32_t iguana_launchcoin(char *symbol,cJSON *json)
else maphash = 0;
iguana_coinargs(symbol,&maxrecvcache,&minconfirms,&maxpeers,&initialheight,&services,&maxpending,&maxbundles,json);
coins = mycalloc('A',1+1,sizeof(*coins));
if ( (coin= iguana_setcoin(coin->symbol,coins,maxpeers,maxrecvcache,services,initialheight,maphash,minconfirms,maxpending,maxbundles,json)) != 0 )
if ( (coin= iguana_setcoin(symbol,coins,maxpeers,maxrecvcache,services,initialheight,maphash,minconfirms,maxpending,maxbundles,json)) != 0 )
{
coins[0] = (void *)((long)1);
coins[1] = coin;

8
iguana/iguana777.h

@ -537,7 +537,7 @@ int32_t iguana_updateramchain(struct iguana_info *coin);
// blockchain
int32_t iguana_needhdrs(struct iguana_info *coin);
struct iguana_chain *iguana_chainfind(char *name);
struct iguana_chain *iguana_chainfind(char *name,cJSON *argjson,int32_t createflag);
int32_t iguana_chainextend(struct iguana_info *coin,struct iguana_block *newblock);
uint64_t iguana_miningreward(struct iguana_info *coin,uint32_t blocknum);
@ -582,7 +582,7 @@ void iguana_bundlestats(struct iguana_info *coin,char *str);
// init
struct iguana_info *iguana_coinstart(struct iguana_info *coin,int32_t initialheight,int32_t mapflags);
void iguana_initcoin(struct iguana_info *coin);
void iguana_initcoin(struct iguana_info *coin,cJSON *argjson);
void iguana_coinloop(void *arg);
// utils
@ -701,7 +701,7 @@ char *busdata_sync(uint32_t *noncep,char *jsonstr,char *broadcastmode,char *dest
void peggy();
int32_t opreturns_init(uint32_t blocknum,uint32_t blocktimestamp,char *path);
struct iguana_info *iguana_coinfind(const char *symbol);
struct iguana_info *iguana_coinadd(const char *symbol);
struct iguana_info *iguana_coinadd(const char *symbol,cJSON *json);
struct iguana_ramchain *iguana_bundleload(struct iguana_info *coin,struct iguana_bundle *bp);
int32_t iguana_sendblockreq(struct iguana_info *coin,struct iguana_peer *addr,struct iguana_bundle *bp,int32_t bundlei,bits256 hash2,int32_t iamthreadsafe);
int32_t iguana_send_supernet(struct iguana_info *coin,struct iguana_peer *addr,char *jsonstr,int32_t delay);
@ -731,7 +731,7 @@ cJSON *SuperNET_bits2json(uint8_t *serialized,int32_t datalen);
int32_t SuperNET_sendmsg(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_peer *addr,bits256 destpub,bits256 mypriv,bits256 mypub,uint8_t *msg,int32_t len,uint8_t *data,int32_t delaymillis);
int32_t category_peer(struct supernet_info *myinfo,struct iguana_peer *addr,bits256 category,bits256 subhash);
int32_t btc_wif2priv(uint8_t *addrtypep,uint8_t privkey[32],char *wifstr);
bits256 iguana_chaingenesis(char *genesisblock,char *hashalgostr,int32_t version,uint32_t timestamp,uint32_t bits,uint32_t nonce,bits256 merkle_root);
bits256 iguana_chaingenesis(bits256 genesishash,char *genesisblock,char *hashalgostr,int32_t version,uint32_t timestamp,uint32_t bits,uint32_t nonce,bits256 merkle_root);
int32_t iguana_send_ConnectTo(struct iguana_info *coin,struct iguana_peer *addr);
cJSON *iguana_txjson(struct iguana_info *coin,struct iguana_txid *tx,int32_t height,struct vin_info *V);
char *iguana_txscan(struct iguana_info *coin,cJSON *json,uint8_t *data,int32_t recvlen,bits256 txid);

204
iguana/iguana_chains.c

@ -122,16 +122,16 @@ blockhashfunc iguana_hashalgo(char *hashalgostr)
return(0);
}
bits256 iguana_chaingenesis(char *genesisblock,char *hashalgostr,int32_t version,uint32_t timestamp,uint32_t bits,uint32_t nonce,bits256 merkle_root)
bits256 iguana_chaingenesis(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,blockhashlen; bits256 hash2;
char blockhashstr[256]; uint8_t serialized[1024],blockhash[256];
char blockhashstr[256],str3[65]; uint8_t serialized[1024],blockhash[256];
int32_t (*hashalgo)(uint8_t *blockhashp,uint8_t *serialized,int32_t len);
memset(&msg,0,sizeof(msg));
msg.H.version = version;
msg.H.merkle_root = merkle_root;
msg.H.timestamp = timestamp;
msg.H.bits = bits;
msg.H.bits = nBits;
msg.H.nonce = nonce;
len = iguana_rwblock(1,&hash2,serialized,&msg);
blockhashstr[0] = 0;
@ -139,9 +139,12 @@ bits256 iguana_chaingenesis(char *genesisblock,char *hashalgostr,int32_t version
{
if ( (blockhashlen= (*hashalgo)(blockhash,serialized,len)) > 0 )
init_hexbytes_noT(blockhashstr,blockhash,blockhashlen);
}
} else init_hexbytes_noT(blockhashstr,hash2.bytes,sizeof(hash2));
char str[65],str2[65];
if ( bits256_cmp(genesishash,hash2) != 0 )
printf("WARNING: genesishash.(%s) mismatch vs calc.(%s)\n",bits256_str(str,genesishash),bits256_str(str2,genesishash));
init_hexbytes_noT(genesisblock,serialized,len);
char str[65],str2[65]; printf("v.%d t.%u bits.%x nonce.%u merkle.(%s) genesis.(%s) hash2.(%s) blockhash.(%s) size.%ld\n",version,timestamp,bits,nonce,bits256_str(str2,merkle_root),genesisblock,bits256_str(str,hash2),blockhashstr,strlen(genesisblock)/2);
printf("v.%d t.%u %s nBits.%08x nonce.%u merkle.(%s) genesis.(%s) hash2.(%s) blockhash.(%s) size.%ld\n",version,timestamp,utc_str(str3,timestamp),nBits,nonce,bits256_str(str2,merkle_root),genesisblock,bits256_str(str,hash2),blockhashstr,strlen(genesisblock)/2);
return(hash2);
}
@ -242,86 +245,10 @@ uint16_t extract_userpass(char *serverport,char *userpass,char *coinstr,char *us
return(port);
}
void iguana_chaininit(struct iguana_chain *chain,int32_t hasheaders)
{
chain->hasheaders = hasheaders;
chain->minoutput = 10000;
chain->hashalgo = blockhash_sha256;
if ( strcmp(chain->symbol,"BTC") == 0 )
{
chain->unitval = 0x1d;
chain->txfee = 10000;
}
else chain->txfee = 1000000;
if ( chain->unitval == 0 )
chain->unitval = 0x1e;
if ( hasheaders != 0 )
{
strcpy(chain->gethdrsmsg,"getheaders");
chain->bundlesize = _IGUANA_HDRSCOUNT;
}
else
{
strcpy(chain->gethdrsmsg,"getblocks");
chain->bundlesize = _IGUANA_BLOCKHASHES;
}
decode_hex((uint8_t *)chain->genesis_hashdata,32,(char *)chain->genesis_hash);
if ( chain->ramchainport == 0 )
chain->ramchainport = chain->portp2p - 1;
if ( chain->portrpc == 0 )
chain->portrpc = chain->portp2p + 1;
}
struct iguana_chain *iguana_chainfind(char *name)
{
struct iguana_chain *chain; uint32_t i;
for (i=0; i<sizeof(Chains)/sizeof(*Chains); i++)
{
chain = &Chains[i];
printf("chain.(%s).%s vs %s.%d\n",chain->genesis_hash,chain->name,name,strcmp(name,chain->name));
if ( chain->name[0] == 0 || chain->genesis_hash == 0 )
continue;
if ( strcmp(name,chain->symbol) == 0 )
{
printf("found.(%s)\n",name);
iguana_chaininit(chain,strcmp(chain->symbol,"BTC") == 0);
return(chain);
}
}
return NULL;
}
struct iguana_chain *iguana_findmagic(uint8_t netmagic[4])
{
struct iguana_chain *chain; uint8_t i;
for (i=0; i<sizeof(Chains)/sizeof(*Chains); i++)
{
chain = &Chains[i];
if ( chain->name[0] == 0 || chain->genesis_hash == 0 )
continue;
if ( memcmp(netmagic,chain->netmagic,4) == 0 )
return(iguana_chainfind((char *)chain->symbol));
}
return NULL;
}
uint64_t iguana_miningreward(struct iguana_info *coin,uint32_t blocknum)
{
int32_t i; uint64_t reward = 50LL * SATOSHIDEN;
for (i=0; i<sizeof(coin->chain->rewards)/sizeof(*coin->chain->rewards); i++)
{
//printf("%d: %u %.8f\n",i,(int32_t)coin->chain->rewards[i][0],dstr(coin->chain->rewards[i][1]));
if ( blocknum >= coin->chain->rewards[i][0] )
reward = coin->chain->rewards[i][1];
else break;
}
return(reward);
}
void iguana_chainparms(struct iguana_chain *chain,cJSON *argjson)
{
extern char Userhome[];
char *path,*conf,*hexstr,genesisblock[1024],str[65]; bits256 hash; uint16_t port; cJSON *rpair,*genesis,*rewards,*item; int32_t i,n,m;
char *path,*conf,*hexstr,genesisblock[1024]; bits256 hash; uint16_t port; cJSON *rpair,*genesis,*rewards,*item; int32_t i,n,m; uint32_t nBits; uint8_t tmp[4];
if ( strcmp(chain->symbol,"NXT") != 0 )
{
if ( strcmp(chain->symbol,"BTC") != 0 )
@ -371,20 +298,30 @@ void iguana_chainparms(struct iguana_chain *chain,cJSON *argjson)
decode_hex((uint8_t *)chain->netmagic,1,hexstr);
if ( (hexstr= jstr(argjson,"unitval")) != 0 && strlen(hexstr) == 2 )
decode_hex((uint8_t *)&chain->unitval,1,hexstr);
if ( (hexstr= jstr(argjson,"genesishash")) != 0 )
{
chain->genesis_hash = mycalloc('G',1,strlen(hexstr)+1);
strcpy(chain->genesis_hash,hexstr);
}
if ( (genesis= jobj(argjson,"genesis")) != 0 )
{
chain->hashalgo = iguana_hashalgo(jstr(genesis,"hashalgo"));
hash = iguana_chaingenesis(genesisblock,jstr(genesis,"hashalgo"),juint(genesis,"version"),juint(genesis,"timestamp"),juint(genesis,"nbits"),juint(genesis,"nonce"),jbits256(genesis,"merkle_root"));
chain->genesis_hash = clonestr(bits256_str(str,hash));
decode_hex(hash.bytes,sizeof(hash),chain->genesis_hash);
if ( jstr(genesis,"nBits") != 0 )
{
decode_hex((void *)&tmp,sizeof(tmp),jstr(genesis,"nBits"));
((uint8_t *)&nBits)[0] = tmp[3];
((uint8_t *)&nBits)[1] = tmp[2];
((uint8_t *)&nBits)[2] = tmp[1];
((uint8_t *)&nBits)[3] = tmp[0];
}
else nBits = 0x1e00ffff;
hash = iguana_chaingenesis(hash,genesisblock,jstr(genesis,"hashalgo"),juint(genesis,"version"),juint(genesis,"timestamp"),nBits,juint(genesis,"nonce"),jbits256(genesis,"merkle_root"));
//chain->genesis_hash = clonestr(bits256_str(str,hash));
chain->genesis_hex = clonestr(genesisblock);
}
else
{
if ( (hexstr= jstr(argjson,"genesishash")) != 0 )
{
chain->genesis_hash = mycalloc('G',1,strlen(hexstr)+1);
strcpy(chain->genesis_hash,hexstr);
}
if ( (hexstr= jstr(argjson,"genesisblock")) != 0 )
{
chain->genesis_hex = mycalloc('G',1,strlen(hexstr)+1);
@ -412,16 +349,101 @@ void iguana_chainparms(struct iguana_chain *chain,cJSON *argjson)
}
}
void iguana_chaininit(struct iguana_chain *chain,int32_t hasheaders,cJSON *argjson)
{
chain->hasheaders = hasheaders;
chain->minoutput = 10000;
chain->hashalgo = blockhash_sha256;
if ( strcmp(chain->symbol,"BTC") == 0 )
{
chain->unitval = 0x1d;
chain->txfee = 10000;
}
else chain->txfee = 1000000;
if ( chain->unitval == 0 )
chain->unitval = 0x1e;
if ( argjson != 0 )
iguana_chainparms(chain,argjson);
if ( hasheaders != 0 )
{
strcpy(chain->gethdrsmsg,"getheaders");
chain->bundlesize = _IGUANA_HDRSCOUNT;
}
else
{
strcpy(chain->gethdrsmsg,"getblocks");
chain->bundlesize = _IGUANA_BLOCKHASHES;
}
decode_hex((uint8_t *)chain->genesis_hashdata,32,(char *)chain->genesis_hash);
if ( chain->ramchainport == 0 )
chain->ramchainport = chain->portp2p - 1;
if ( chain->portrpc == 0 )
chain->portrpc = chain->portp2p + 1;
}
struct iguana_chain *iguana_chainfind(char *name,cJSON *argjson,int32_t createflag)
{
struct iguana_chain *chain; uint32_t i;
for (i=0; i<sizeof(Chains)/sizeof(*Chains); i++)
{
chain = &Chains[i];
printf("chain.(%s).%s vs %s.%d\n",chain->genesis_hash,chain->name,name,strcmp(name,chain->name));
if ( chain->name[0] == 0 || chain->genesis_hash == 0 )
{
if ( createflag != 0 && argjson != 0 )
{
iguana_chaininit(chain,strcmp(chain->symbol,"BTC") == 0,argjson);
return(chain);
}
continue;
}
if ( strcmp(name,chain->symbol) == 0 )
{
printf("found.(%s)\n",name);
iguana_chaininit(chain,strcmp(chain->symbol,"BTC") == 0,argjson);
return(chain);
}
}
return NULL;
}
struct iguana_chain *iguana_findmagic(uint8_t netmagic[4])
{
struct iguana_chain *chain; uint8_t i;
for (i=0; i<sizeof(Chains)/sizeof(*Chains); i++)
{
chain = &Chains[i];
if ( chain->name[0] == 0 || chain->genesis_hash == 0 )
continue;
if ( memcmp(netmagic,chain->netmagic,4) == 0 )
return(iguana_chainfind((char *)chain->symbol,0,0));
}
return NULL;
}
uint64_t iguana_miningreward(struct iguana_info *coin,uint32_t blocknum)
{
int32_t i; uint64_t reward = 50LL * SATOSHIDEN;
for (i=0; i<sizeof(coin->chain->rewards)/sizeof(*coin->chain->rewards); i++)
{
//printf("%d: %u %.8f\n",i,(int32_t)coin->chain->rewards[i][0],dstr(coin->chain->rewards[i][1]));
if ( blocknum >= coin->chain->rewards[i][0] )
reward = coin->chain->rewards[i][1];
else break;
}
return(reward);
}
struct iguana_chain *iguana_createchain(cJSON *json)
{
char *symbol,*name; struct iguana_chain *chain = 0;
if ( (symbol= jstr(json,"name")) != 0 && strlen(symbol) < 8 )
if ( ((symbol= jstr(json,"newcoin")) != 0 || (symbol= jstr(json,"name")) != 0) && strlen(symbol) < 8 )
{
chain = mycalloc('C',1,sizeof(*chain));
strcpy(chain->symbol,symbol);
if ( (name= jstr(json,"description")) != 0 && strlen(name) < 32 )
strcpy(chain->name,name);
iguana_chaininit(chain,juint(json,"hasheaders"));
iguana_chaininit(chain,juint(json,"hasheaders"),json);
}
return(chain);
}

2
iguana/iguana_exchanges.c

@ -909,7 +909,7 @@ struct exchange_info *exchange_create(char *exchangestr,cJSON *argjson)
exchange->commission *= .01;
printf("ADDEXCHANGE.(%s) [%s, %s, %s] commission %.3f%%\n",exchangestr,exchange->apikey,exchange->userid,exchange->apisecret,exchange->commission * 100.);
Exchanges[exchangeid] = exchange;
iguana_launch(iguana_coinadd("BTCD"),"exchangeloop",(void *)exchanges777_loop,exchange,IGUANA_EXCHANGETHREAD);
iguana_launch(iguana_coinadd("BTCD",0),"exchangeloop",(void *)exchanges777_loop,exchange,IGUANA_EXCHANGETHREAD);
return(exchange);
}

14
iguana/iguana_init.c

@ -50,7 +50,7 @@ void iguana_initpeer(struct iguana_info *coin,struct iguana_peer *addr,uint64_t
iguana_initQ(&addr->sendQ,"addrsendQ");
}
void iguana_initcoin(struct iguana_info *coin)
void iguana_initcoin(struct iguana_info *coin,cJSON *argjson)
{
int32_t i;
portable_mutex_init(&coin->peers_mutex);
@ -74,15 +74,21 @@ void iguana_initcoin(struct iguana_info *coin)
bits256 iguana_genesis(struct iguana_info *coin,struct iguana_chain *chain)
{
struct iguana_block block,*ptr; struct iguana_msgblock msg; bits256 hash2; char str[65]; uint8_t buf[1024]; int32_t height;
struct iguana_block block,*ptr; struct iguana_msgblock msg; bits256 hash2; char str[65],str2[65]; uint8_t buf[1024]; int32_t height;
if ( chain->genesis_hex == 0 )
{
printf("no genesis_hex for %s\n",coin->symbol);
memset(hash2.bytes,0,sizeof(hash2));
return(hash2);
}
decode_hex(buf,(int32_t)strlen(chain->genesis_hex)/2,(char *)chain->genesis_hex);
hash2 = bits256_doublesha256(0,buf,sizeof(struct iguana_msgblockhdr));
iguana_rwblock(0,&hash2,buf,&msg);
if ( memcmp(hash2.bytes,chain->genesis_hashdata,sizeof(hash2)) != 0 )
{
bits256_str(str,hash2);
printf("genesis mismatch? calculated %s vs %s\n",str,(char *)chain->genesis_hex);
hash2 = bits256_conv("00000ac7d764e7119da60d3c832b1d4458da9bc9ef9d5dd0d91a15f690a46d99");
printf("genesis mismatch? calculated %s vs %s\n",str,bits256_str(str2,*(bits256 *)chain->genesis_hashdata));
//hash2 = bits256_conv("00000ac7d764e7119da60d3c832b1d4458da9bc9ef9d5dd0d91a15f690a46d99");
//memset(hash2.bytes,0,sizeof(hash2));
//return(hash2);

12
iguana/main.c

@ -1075,14 +1075,16 @@ void iguana_main(void *arg)
}
//iguana_chaingenesis(1,1403138561,0x1e0fffff,8359109,bits256_conv("fd1751cc6963d88feca94c0d01da8883852647a37a0a67ce254d62dd8c9d5b2b")); // BTCD
//iguana_chaingenesis(1,1409839200,0x1e0fffff,64881664,bits256_conv("698a93a1cacd495a7a4fb3864ad8d06ed4421dedbc57f9aaad733ea53b1b5828")); // VPN
char genesisblock[1024];
iguana_chaingenesis(genesisblock,"sha256",1,1317972665,0x1e0ffff0,2084524493,bits256_conv("97ddfbbae6be97fd6cdf3e7ca13232a3afff2353e29badfab7f73011edd4ced9")); // LTC
//char genesisblock[1024];
//iguana_chaingenesis(genesisblock,"sha256",1,1317972665,0x1e0ffff0,2084524493,bits256_conv("97ddfbbae6be97fd6cdf3e7ca13232a3afff2353e29badfab7f73011edd4ced9")); // LTC
iguana_initQ(&helperQ,"helperQ");
OS_ensure_directory("help");
OS_ensure_directory("confs");
OS_ensure_directory("DB"), OS_ensure_directory("DB/ECB");
OS_ensure_directory("tmp");
iguana_coinadd("BTC",0);
iguana_coinadd("BTCD",0);
if ( arg != 0 && (argjson= cJSON_Parse(arg)) != 0 )
{
safecopy(Userhome,jstr(argjson,"userhome"),sizeof(Userhome));
@ -1100,12 +1102,12 @@ void iguana_main(void *arg)
{
sprintf(helperstr,"{\"name\":\"helper.%d\"}",i);
helperargs = clonestr(helperstr);
iguana_launch(iguana_coinadd("BTCD"),"iguana_helper",iguana_helper,helperargs,IGUANA_PERMTHREAD);
iguana_launch(iguana_coinadd("BTCD",0),"iguana_helper",iguana_helper,helperargs,IGUANA_PERMTHREAD);
}
iguana_launch(iguana_coinadd("BTCD"),"rpcloop",iguana_rpcloop,SuperNET_MYINFO(0),IGUANA_PERMTHREAD);
iguana_launch(iguana_coinadd("BTCD",0),"rpcloop",iguana_rpcloop,SuperNET_MYINFO(0),IGUANA_PERMTHREAD);
category_init(&MYINFO);
if ( (coinargs= SuperNET_keysinit(&MYINFO,arg)) != 0 )
iguana_launch(iguana_coinadd("BTCD"),"iguana_coins",iguana_coins,coinargs,IGUANA_PERMTHREAD);
iguana_launch(iguana_coinadd("BTCD",0),"iguana_coins",iguana_coins,coinargs,IGUANA_PERMTHREAD);
else if ( 1 )
{
#ifdef __APPLE__

Loading…
Cancel
Save