Browse Source

test

release/v0.1
jl777 9 years ago
parent
commit
d66b010d7b
  1. 2
      iguana/iguana777.c
  2. 4
      iguana/iguana777.h
  3. 17
      iguana/iguana_bundles.c
  4. 16
      iguana/iguana_peers.c
  5. 7
      iguana/iguana_ramchain.c
  6. 19
      iguana/iguana_recv.c
  7. 2
      iguana/main.c

2
iguana/iguana777.c

@ -546,7 +546,7 @@ void iguana_coinloop(void *arg)
} }
else else
{ {
if ( coin->peers.numranked != 0 && coin->peers.numranked < (coin->MAXPEERS>>1) && now > coin->lastpossible ) if ( coin->peers.numranked != 0 && coin->peers.numranked < ((7*coin->MAXPEERS)>>3) && now > coin->lastpossible )
{ {
//fprintf(stderr,"possible\n"); //fprintf(stderr,"possible\n");
coin->lastpossible = iguana_possible_peer(coin,0); // tries to connect to new peers coin->lastpossible = iguana_possible_peer(coin,0); // tries to connect to new peers

4
iguana/iguana777.h

@ -42,9 +42,9 @@ typedef int32_t (*blockhashfunc)(uint8_t *blockhashp,uint8_t *serialized,int32_t
#define IGUANA_TAILPERCENTAGE 1.0 #define IGUANA_TAILPERCENTAGE 1.0
#define IGUANA_MAXPENDHDRS 1 #define IGUANA_MAXPENDHDRS 1
#define IGUANA_MAXPENDINGREQUESTS 2 #define IGUANA_MAXPENDINGREQUESTS 2
#define IGUANA_PENDINGREQUESTS 512 #define IGUANA_PENDINGREQUESTS 2
#define IGUANA_MINPENDBUNDLES 2 #define IGUANA_MINPENDBUNDLES 2
#define IGUANA_MAXPENDBUNDLES 128 #define IGUANA_MAXPENDBUNDLES 256
#define IGUANA_BUNDLELOOP 77 #define IGUANA_BUNDLELOOP 77
#define IGUANA_RPCPORT 7778 #define IGUANA_RPCPORT 7778
#define IGUANA_MAXRAMCHAINSIZE ((uint64_t)1024L * 1024L * 1024L * 16) #define IGUANA_MAXRAMCHAINSIZE ((uint64_t)1024L * 1024L * 1024L * 16)

17
iguana/iguana_bundles.c

@ -540,7 +540,7 @@ int32_t iguana_nextnonz(uint8_t *missings,int32_t i,int32_t max)
int32_t iguana_bundlerequests(struct iguana_info *coin,uint8_t missings[IGUANA_MAXBUNDLESIZE/8+1],int32_t *missingp,int32_t *capacityp,struct iguana_bundle *bp,int32_t lag,int32_t priority) int32_t iguana_bundlerequests(struct iguana_info *coin,uint8_t missings[IGUANA_MAXBUNDLESIZE/8+1],int32_t *missingp,int32_t *capacityp,struct iguana_bundle *bp,int32_t lag,int32_t priority)
{ {
uint8_t numpeers; int32_t i,j,avail,nonz=0,c,n,m=0,max,capacity,numsent; bits256 hashes[500],hash2; uint8_t numpeers; int32_t i,j,avail,nonz=0,c,n,m=0,max,capacity,numsent; bits256 hashes[500],hash2;
struct iguana_block *block; struct iguana_peer *peers[256],*addr; uint32_t now = (uint32_t)time(NULL); struct iguana_block *block; struct iguana_peer *peers[256],*addr,*lagaddr; uint32_t now = (uint32_t)time(NULL);
max = (int32_t)(sizeof(hashes) / sizeof(*hashes)); max = (int32_t)(sizeof(hashes) / sizeof(*hashes));
*missingp = *capacityp = 0; *missingp = *capacityp = 0;
if ( (numpeers= iguana_recentpeers(coin,&capacity,peers)) > 0 ) if ( (numpeers= iguana_recentpeers(coin,&capacity,peers)) > 0 )
@ -566,7 +566,20 @@ int32_t iguana_bundlerequests(struct iguana_info *coin,uint8_t missings[IGUANA_M
if ( (nonz= iguana_nextnonz(missings,nonz,bp->n)) < bp->n ) if ( (nonz= iguana_nextnonz(missings,nonz,bp->n)) < bp->n )
{ {
if ( (block= iguana_bundleblock(coin,&hash2,bp,nonz)) != 0 ) if ( (block= iguana_bundleblock(coin,&hash2,bp,nonz)) != 0 )
{
hash2 = block->RO.hash2; hash2 = block->RO.hash2;
lagaddr = &coin->peers.active[block->peerid];
if ( priority > 2 && block->issued != 0 && block->issued < now-10 && block->peerid != 0 )
{
lagaddr->laggard++;
printf("addr.%s laggard.%d lag.%d\n",lagaddr->ipaddr,lagaddr->laggard,block->issued - now);
if ( coin->peers.numranked > 64 )
lagaddr->dead = (uint32_t)time(NULL);
}
if ( addr->addrind < 0x100 )
block->peerid = addr->addrind;
else block->peerid = 0;
}
bp->issued[nonz] = now; bp->issued[nonz] = now;
//char str[65]; printf("issue.[%d:%d] %s %u\n",bp->hdrsi,nonz,bits256_str(str,hash2),now); //char str[65]; printf("issue.[%d:%d] %s %u\n",bp->hdrsi,nonz,bits256_str(str,hash2),now);
nonz++; nonz++;
@ -954,7 +967,7 @@ double iguana_bundlemissings(struct iguana_info *coin,struct iguana_bundle *bp,d
if ( bp->duplicatescount != 0 ) if ( bp->duplicatescount != 0 )
aveduplicates = (double)bp->duplicatedurations / bp->duplicatescount; aveduplicates = (double)bp->duplicatedurations / bp->duplicatescount;
else aveduplicates = 3 * aveduration; else aveduplicates = 3 * aveduration;
if ( (rand() % 1000) == 0 ) if ( (rand() % 10000) == 0 )
printf("priority.%d [%d] dist.%d durations %.2f vs %.2f counts[%d %d] \n",priority,bp->hdrsi,dist,aveduration,aveduplicates,(int32_t)bp->durationscount,bp->duplicatescount); printf("priority.%d [%d] dist.%d durations %.2f vs %.2f counts[%d %d] \n",priority,bp->hdrsi,dist,aveduration,aveduplicates,(int32_t)bp->durationscount,bp->duplicatescount);
} }
if ( aveduration != 0. ) if ( aveduration != 0. )

16
iguana/iguana_peers.c

@ -634,7 +634,7 @@ void iguana_startconnection(void *arg)
if ( addr->usock < 0 || coin->peers.shuttingdown != 0 ) if ( addr->usock < 0 || coin->peers.shuttingdown != 0 )
{ {
strcpy(ipaddr,addr->ipaddr); strcpy(ipaddr,addr->ipaddr);
//printf("refused PEER KILLED. slot.%d for %s:%d usock.%d\n",addr->addrind,ipaddr,coin->chain->portp2p,addr->usock); printf("refused PEER KILLED. slot.%d for %s:%d usock.%d\n",addr->addrind,ipaddr,coin->chain->portp2p,addr->usock);
iguana_iAkill(coin,addr,1); iguana_iAkill(coin,addr,1);
} }
else else
@ -728,11 +728,12 @@ void *iguana_iAddriterator(struct iguana_info *coin,struct iguana_iAddr *iA)
if ( (addr= iguana_peerslot(coin,iA->ipbits,0)) != 0 ) if ( (addr= iguana_peerslot(coin,iA->ipbits,0)) != 0 )
{ {
//printf("pend.%d status.%d possible peer.(%s).%x threads %d %d %d %d\n",addr->pending,iA->status,addr->ipaddr,(uint32_t)addr->ipbits,iguana_numthreads(coin,0),iguana_numthreads(coin,1),iguana_numthreads(coin,2),iguana_numthreads(coin,3)); //printf("pend.%d status.%d possible peer.(%s).%x threads %d %d %d %d\n",addr->pending,iA->status,addr->ipaddr,(uint32_t)addr->ipbits,iguana_numthreads(coin,0),iguana_numthreads(coin,1),iguana_numthreads(coin,2),iguana_numthreads(coin,3));
if ( addr->pending == 0 && iA->status != IGUANA_PEER_CONNECTING ) if ( addr->pending == 0 && iA->status != IGUANA_PEER_CONNECTING && (iA->status != IGUANA_PEER_KILLED || time(NULL) > iA->lastkilled+600) )
{ {
//printf("call rwIaddrInd\n");
if ( iguana_rwiAddrind(coin,1,iA,iA->hh.itemind) > 0 ) if ( iguana_rwiAddrind(coin,1,iA,iA->hh.itemind) > 0 )
{ {
//printf("iA.%p iguana_startconnection.(%s) status.%d pending.%d\n",iA,addr->ipaddr,iA->status,addr->pending); printf("iA.%p iguana_startconnection.(%s) status.%d pending.%d\n",iA,addr->ipaddr,iA->status,addr->pending);
iA->status = IGUANA_PEER_CONNECTING; iA->status = IGUANA_PEER_CONNECTING;
addr->pending = (uint32_t)time(NULL); addr->pending = (uint32_t)time(NULL);
iguana_launch(coin,"connection",iguana_startconnection,addr,IGUANA_CONNTHREAD); iguana_launch(coin,"connection",iguana_startconnection,addr,IGUANA_CONNTHREAD);
@ -756,7 +757,12 @@ uint32_t iguana_possible_peer(struct iguana_info *coin,char *ipaddr)
char checkaddr[64]; uint64_t ipbits; uint32_t now = (uint32_t)time(NULL); int32_t i,n; struct iguana_iAddr *iA; char checkaddr[64]; uint64_t ipbits; uint32_t now = (uint32_t)time(NULL); int32_t i,n; struct iguana_iAddr *iA;
if ( ipaddr != 0 ) if ( ipaddr != 0 )
{ {
//printf("%p Q possible peer.%s\n",coin,ipaddr); for (i=n=0; i<coin->MAXPEERS; i++)
if ( strcmp(ipaddr,coin->peers.active[i].ipaddr) == 0 )
{
printf("%s possible peer.%s already there\n",coin->symbol,ipaddr);
return(0);
}
queue_enqueue("possibleQ",&coin->possibleQ,queueitem(ipaddr),1); queue_enqueue("possibleQ",&coin->possibleQ,queueitem(ipaddr),1);
return((uint32_t)time(NULL)); return((uint32_t)time(NULL));
} }
@ -804,7 +810,7 @@ uint32_t iguana_possible_peer(struct iguana_info *coin,char *ipaddr)
printf("error updating status for (%s) ind.%d\n",ipaddr,iA->hh.itemind); printf("error updating status for (%s) ind.%d\n",ipaddr,iA->hh.itemind);
iguana_iAddriterator(coin,iA); iguana_iAddriterator(coin,iA);
} else printf("ignore.(%s) lastconnect.%u lastkilled.%u numconnects.%d\n",ipaddr,iA->lastconnect,iA->lastkilled,iA->numconnects); } else printf("ignore.(%s) lastconnect.%u lastkilled.%u numconnects.%d\n",ipaddr,iA->lastconnect,iA->lastkilled,iA->numconnects);
} //else printf("skip.(%s) ind.%d status.%d\n",ipaddr,iA->hh.itemind,iA->status); } else printf("skip.(%s) ind.%d status.%d\n",ipaddr,iA->hh.itemind,iA->status);
} else printf("cant find (%s) which should have been created\n",ipaddr); } else printf("cant find (%s) which should have been created\n",ipaddr);
} else printf("reject ipaddr.(%s)\n",ipaddr); } else printf("reject ipaddr.(%s)\n",ipaddr);
} }

7
iguana/iguana_ramchain.c

@ -1346,7 +1346,7 @@ struct iguana_ramchain *iguana_ramchain_map(struct iguana_info *coin,char *fname
{ {
for (i=0; i<bp->n; i++) for (i=0; i<bp->n; i++)
{ {
if ( (bp->blocks[i]= iguana_blockhashset("mapchain",coin,-1,B[i].hash2,1)) == 0 ) if ( bp->blocks[i] == 0 )// iguana_blockhashset("mapchain",coin,-1,B[i].hash2,1)) == 0 )
{ {
printf("Error getting blockptr\n"); printf("Error getting blockptr\n");
return(0); return(0);
@ -1356,7 +1356,7 @@ struct iguana_ramchain *iguana_ramchain_map(struct iguana_info *coin,char *fname
bp->hashes[i] = B[i].hash2; bp->hashes[i] = B[i].hash2;
} }
} }
//printf("mapped %s scriptspace %d:%d\n",fname,ramchain->H.scriptoffset,ramchain->H.data->scriptspace); printf("iguana_ramchain_map.(%s) size %ld vs %ld vs filesize.%ld numblocks.%d expanded.%d fpos.%d sum %ld\n",fname,(long)iguana_ramchain_size(RAMCHAIN_ARG,ramchain->numblocks,ramchain->H.data->scriptspace),(long)ramchain->H.data->allocsize,(long)filesize,ramchain->numblocks,expanded,(int32_t)fpos,(long)(fpos+ramchain->H.data->allocsize));
iguana_Xspendmap(coin,ramchain,bp); iguana_Xspendmap(coin,ramchain,bp);
return(ramchain); return(ramchain);
} else printf("iguana_ramchain_map.(%s) cant map file\n",fname); } else printf("iguana_ramchain_map.(%s) cant map file\n",fname);
@ -2128,7 +2128,7 @@ struct iguana_ramchain *iguana_bundleload(struct iguana_info *coin,struct iguana
T = (void *)(long)((long)mapchain->H.data + mapchain->H.data->Toffset); T = (void *)(long)((long)mapchain->H.data + mapchain->H.data->Toffset);
for (i=0; i<bp->n; i++) for (i=0; i<bp->n; i++)
{ {
if ( (block= bp->blocks[i]) != 0 || (block= iguana_blockhashset("bundleload",coin,bp->bundleheight+i,bp->hashes[i],1)) != 0 ) if ( (block= bp->blocks[i]) != 0 )//|| (block= iguana_blockhashset("bundleload",coin,bp->bundleheight+i,bp->hashes[i],1)) != 0 )
{ {
block->queued = 1; block->queued = 1;
block->height = bp->bundleheight + i; block->height = bp->bundleheight + i;
@ -2234,6 +2234,7 @@ int32_t iguana_mapchaininit(struct iguana_info *coin,struct iguana_ramchain *map
if ( block->fpos+mapchain->H.data->allocsize > filesize || iguana_ramchain_size(MAPCHAIN_ARG,1,mapchain->H.data->scriptspace) != mapchain->H.data->allocsize ) if ( block->fpos+mapchain->H.data->allocsize > filesize || iguana_ramchain_size(MAPCHAIN_ARG,1,mapchain->H.data->scriptspace) != mapchain->H.data->allocsize )
{ {
printf("iguana_mapchaininit.%d ipbits.%x size mismatch %ld vs %ld vs filesize.%ld fpos.%ld bundlei.%d expanded.%d soff.%d\n",bp->bundleheight,block->fpipbits,(long)iguana_ramchain_size(MAPCHAIN_ARG,1,mapchain->H.data->scriptspace),(long)mapchain->H.data->allocsize,(long)filesize,(long)block->fpos,bundlei,mapchain->expanded,mapchain->H.data->scriptspace); printf("iguana_mapchaininit.%d ipbits.%x size mismatch %ld vs %ld vs filesize.%ld fpos.%ld bundlei.%d expanded.%d soff.%d\n",bp->bundleheight,block->fpipbits,(long)iguana_ramchain_size(MAPCHAIN_ARG,1,mapchain->H.data->scriptspace),(long)mapchain->H.data->allocsize,(long)filesize,(long)block->fpos,bundlei,mapchain->expanded,mapchain->H.data->scriptspace);
getchar();
return(-1); return(-1);
} }
else if ( memcmp(bp->hashes[bundlei].bytes,mapchain->H.data->firsthash2.bytes,sizeof(bits256)) != 0 ) else if ( memcmp(bp->hashes[bundlei].bytes,mapchain->H.data->firsthash2.bytes,sizeof(bits256)) != 0 )

19
iguana/iguana_recv.c

@ -325,11 +325,14 @@ void iguana_gotblockM(struct iguana_info *coin,struct iguana_peer *addr,struct i
bp = iguana_bundlefind(coin,&bp,&bundlei,origtxdata->block.RO.hash2); bp = iguana_bundlefind(coin,&bp,&bundlei,origtxdata->block.RO.hash2);
if ( bp != 0 && bundlei >= 0 && bundlei < bp->n ) if ( bp != 0 && bundlei >= 0 && bundlei < bp->n )
{ {
block = bp->blocks[bundlei];
if ( block != 0 )
block->peerid = 0;
if ( bp->emitfinish != 0 ) if ( bp->emitfinish != 0 )
{ {
numAfteremit++; numAfteremit++;
sizeAfteremit += recvlen; sizeAfteremit += recvlen;
if ( (block= bp->blocks[bundlei]) != 0 ) if ( block != 0 )
iguana_bundletime(coin,bp,bundlei,block,1); iguana_bundletime(coin,bp,bundlei,block,1);
//printf("got [%d:%d] with emitfinish.%u\n",bp->hdrsi,bundlei,bp->emitfinish); //printf("got [%d:%d] with emitfinish.%u\n",bp->hdrsi,bundlei,bp->emitfinish);
return; return;
@ -491,7 +494,7 @@ void iguana_gotblockhashesM(struct iguana_info *coin,struct iguana_peer *addr,bi
uint32_t iguana_allhashcmp(struct iguana_info *coin,struct iguana_bundle *bp,bits256 *blockhashes,int32_t num) uint32_t iguana_allhashcmp(struct iguana_info *coin,struct iguana_bundle *bp,bits256 *blockhashes,int32_t num)
{ {
bits256 allhash; int32_t err,i,n; struct iguana_block *block,*prev; bits256 allhash; int32_t err,i,n; struct iguana_block *block,*prev;
if ( bits256_nonz(bp->allhash) > 0 && num >= coin->chain->bundlesize && bp->queued == 0 ) if ( bits256_nonz(bp->allhash) > 0 && num >= coin->chain->bundlesize && bp->emitfinish == 0 )
{ {
vcalc_sha256(0,allhash.bytes,blockhashes[0].bytes,coin->chain->bundlesize * sizeof(*blockhashes)); vcalc_sha256(0,allhash.bytes,blockhashes[0].bytes,coin->chain->bundlesize * sizeof(*blockhashes));
if ( memcmp(allhash.bytes,bp->allhash.bytes,sizeof(allhash)) == 0 ) if ( memcmp(allhash.bytes,bp->allhash.bytes,sizeof(allhash)) == 0 )
@ -524,7 +527,7 @@ uint32_t iguana_allhashcmp(struct iguana_info *coin,struct iguana_bundle *bp,bit
prev = block; prev = block;
} }
coin->allhashes++; coin->allhashes++;
if ( bp->hdrsi == 0 ) if ( 0 && bp->hdrsi == 0 )
printf("ALLHASHES FOUND! %d allhashes.%d\n",bp->bundleheight,coin->allhashes); printf("ALLHASHES FOUND! %d allhashes.%d\n",bp->bundleheight,coin->allhashes);
if ( bp->queued == 0 ) if ( bp->queued == 0 )
iguana_bundleQ(coin,bp,bp->n*5 + (rand() % 500)); iguana_bundleQ(coin,bp,bp->n*5 + (rand() % 500));
@ -581,12 +584,12 @@ int32_t iguana_bundlehashadd(struct iguana_info *coin,struct iguana_bundle *bp,i
if ( bp->emitfinish == 0 ) if ( bp->emitfinish == 0 )
{ {
block->fpos = -1; block->fpos = -1;
if ( iguana_ramchainfile(coin,0,&blockR,bp,bundlei,block) == 0 ) if ( 0 && iguana_ramchainfile(coin,0,&blockR,bp,bundlei,block) == 0 )
{ {
size = sizeof(blockR); size = sizeof(blockR);
iguana_ramchain_free(coin,&blockR,1); iguana_ramchain_free(coin,&blockR,1);
} }
else if ( 0 && block->txvalid == 0 && bp->hdrsi == coin->longestchain/bp->n ) else if ( block->txvalid == 0 && bp->hdrsi == coin->longestchain/bp->n )
{ {
checki = iguana_peerfname(coin,&hdrsi,GLOBALTMPDIR,fname,0,block->RO.hash2,zero,1,0); checki = iguana_peerfname(coin,&hdrsi,GLOBALTMPDIR,fname,0,block->RO.hash2,zero,1,0);
if ( (fp= fopen(fname,"rb")) != 0 ) if ( (fp= fopen(fname,"rb")) != 0 )
@ -598,7 +601,7 @@ int32_t iguana_bundlehashadd(struct iguana_info *coin,struct iguana_bundle *bp,i
} }
if ( size != 0 ) if ( size != 0 )
{ {
printf("initialize with fp.[%d:%d] len.%ld\n",bp->hdrsi,bundlei,size); //printf("initialize with fp.[%d:%d] len.%ld\n",bp->hdrsi,bundlei,size);
block->RO.recvlen = (int32_t)size; block->RO.recvlen = (int32_t)size;
block->fpipbits = 1; block->fpipbits = 1;
block->txvalid = 1; block->txvalid = 1;
@ -784,7 +787,7 @@ struct iguana_bundlereq *iguana_recvblockhashes(struct iguana_info *coin,struct
memset(zero.bytes,0,sizeof(zero)); memset(zero.bytes,0,sizeof(zero));
bp = 0, bundlei = -2; bp = 0, bundlei = -2;
iguana_bundlefind(coin,&bp,&bundlei,blockhashes[1]); iguana_bundlefind(coin,&bp,&bundlei,blockhashes[1]);
if ( 1 && num >= coin->chain->bundlesize ) if ( 0 && num >= coin->chain->bundlesize )
printf("blockhashes[%d] %d of %d %s bp.%d[%d]\n",num,bp==0?-1:bp->hdrsi,coin->bundlescount,bits256_str(str,blockhashes[1]),bp==0?-1:bp->bundleheight,bundlei); printf("blockhashes[%d] %d of %d %s bp.%d[%d]\n",num,bp==0?-1:bp->hdrsi,coin->bundlescount,bits256_str(str,blockhashes[1]),bp==0?-1:bp->bundleheight,bundlei);
if ( num < 2 ) if ( num < 2 )
return(req); return(req);
@ -858,7 +861,7 @@ struct iguana_bundlereq *iguana_recvblockhashes(struct iguana_info *coin,struct
} }
} }
} }
//printf("%s no match to allhashes\n",bits256_str(str,blockhashes[1])); printf("%s.[%d] no match to allhashes\n",bits256_str(str,blockhashes[1]),num);
struct iguana_block *block; struct iguana_block *block;
if ( (block= iguana_blockhashset("recvhashes",coin,-1,blockhashes[1],1)) != 0 ) if ( (block= iguana_blockhashset("recvhashes",coin,-1,blockhashes[1],1)) != 0 )
{ {

2
iguana/main.c

@ -1186,7 +1186,7 @@ void iguana_main(void *arg)
if ( 1 ) if ( 1 )
{ {
sleep(1); sleep(1);
if ( 1 && (str= SuperNET_JSON(myinfo,cJSON_Parse("{\"VALIDATE\":1,\"prefetchlag\":13,\"startpend\":256,\"endpend\":128,\"userhome\":\"/Users/jimbolaptop/Library/Application Support\",\"agent\":\"iguana\",\"method\":\"addcoin\",\"services\":128,\"maxpeers\":118,\"newcoin\":\"BTCD\",\"active\":1,\"numhelpers\":8,\"poll\":1}"),0,myinfo->rpcport)) != 0 ) if ( 1 && (str= SuperNET_JSON(myinfo,cJSON_Parse("{\"VALIDATE\":1,\"prefetchlag\":13,\"startpend\":2048,\"endpend\":2048,\"userhome\":\"/Users/jimbolaptop/Library/Application Support\",\"agent\":\"iguana\",\"method\":\"addcoin\",\"services\":128,\"maxpeers\":118,\"newcoin\":\"BTCD\",\"active\":1,\"numhelpers\":8,\"poll\":1}"),0,myinfo->rpcport)) != 0 )
{ {
free(str); free(str);
if ( 0 && (str= SuperNET_JSON(myinfo,cJSON_Parse("{\"userhome\":\"/Users/jimbolaptop/Library/Application Support\",\"agent\":\"iguana\",\"method\":\"addcoin\",\"services\":1024,\"maxpeers\":256,\"newcoin\":\"BTCD\",\"active\":1}"),0,myinfo->rpcport)) != 0 ) if ( 0 && (str= SuperNET_JSON(myinfo,cJSON_Parse("{\"userhome\":\"/Users/jimbolaptop/Library/Application Support\",\"agent\":\"iguana\",\"method\":\"addcoin\",\"services\":1024,\"maxpeers\":256,\"newcoin\":\"BTCD\",\"active\":1}"),0,myinfo->rpcport)) != 0 )

Loading…
Cancel
Save