Browse Source

test

release/v0.1
jl777 9 years ago
parent
commit
60206301f5
  1. 41
      basilisk/basilisk_bitcoin.c
  2. 2
      iguana/iguana_blocks.c

41
basilisk/basilisk_bitcoin.c

@ -77,7 +77,7 @@ char *bitcoin_balance(struct iguana_info *coin,char *coinaddr,int32_t lastheight
} }
#else #else
char *bitcoin_blockhashstr(char *coinstr,char *serverport,char *userpass,int32_t height) char *basilisk_bitcoinblockhashstr(char *coinstr,char *serverport,char *userpass,int32_t height)
{ {
char numstr[128],*blockhashstr=0; char numstr[128],*blockhashstr=0;
sprintf(numstr,"%d",height); sprintf(numstr,"%d",height);
@ -92,6 +92,32 @@ char *bitcoin_blockhashstr(char *coinstr,char *serverport,char *userpass,int32_t
return(blockhashstr); return(blockhashstr);
} }
int32_t basilisk_blockhashes(struct iguana_info *coin,int32_t height,int32_t n)
{
char *blockhashstr; struct iguana_block *block,*checkblock; struct iguana_bundle *bp; int32_t bundlei,checki,h,i,num = 0; bits256 zero,hash2;
h = height;
for (i=0; i<n; i++,h++)
{
hash2 = iguana_blockhash(coin,h);
if ( (block= iguana_blockfind("basilisk",coin,hash2)) != 0 && block->height == h && block->mainchain != 0 )
continue;
if ( (blockhashstr= basilisk_bitcoinblockhashstr(coin->symbol,coin->chain->serverport,coin->chain->userpass,h)) != 0 )
{
hash2 = bits256_conv(blockhashstr);
memset(zero.bytes,0,sizeof(zero));
if ( (bundlei= (h % coin->chain->bundlesize)) == 0 )
bp = iguana_bundlecreate(coin,&checki,0,hash2,zero,1);
block = iguana_blockhashset("remote",coin,h,hash2,1);
iguana_bundlehash2add(coin,&checkblock,bp,bundlei,hash2);
if ( block != checkblock || checki != bundlei )
printf("block mismatch %p %p at ht.%d\n",block,checkblock,h);
else block->mainchain = 1, num++;
free(blockhashstr);
}
}
return(num);
}
int32_t basilisk_blockheight(struct iguana_info *coin,bits256 hash2) int32_t basilisk_blockheight(struct iguana_info *coin,bits256 hash2)
{ {
char buf[128],str[65],*blocktxt; cJSON *blockjson; int32_t height=-1; char buf[128],str[65],*blocktxt; cJSON *blockjson; int32_t height=-1;
@ -108,7 +134,7 @@ int32_t basilisk_blockheight(struct iguana_info *coin,bits256 hash2)
return(height); return(height);
} }
bits256 basilisk_blockhash(struct iguana_info *coin,bits256 prevhash2) /*bits256 basilisk_blockhash(struct iguana_info *coin,bits256 prevhash2)
{ {
char *blockhashstr; bits256 hash2; int32_t height; char *blockhashstr; bits256 hash2; int32_t height;
memset(hash2.bytes,0,sizeof(hash2)); memset(hash2.bytes,0,sizeof(hash2));
@ -123,13 +149,13 @@ bits256 basilisk_blockhash(struct iguana_info *coin,bits256 prevhash2)
} }
} }
return(hash2); return(hash2);
} }*/
cJSON *bitcoin_blockjson(int32_t *heightp,char *coinstr,char *serverport,char *userpass,char *blockhashstr,int32_t height) cJSON *bitcoin_blockjson(int32_t *heightp,char *coinstr,char *serverport,char *userpass,char *blockhashstr,int32_t height)
{ {
cJSON *json = 0; int32_t flag = 0; char buf[1024],*blocktxt = 0; cJSON *json = 0; int32_t flag = 0; char buf[1024],*blocktxt = 0;
if ( blockhashstr == 0 ) if ( blockhashstr == 0 )
blockhashstr = bitcoin_blockhashstr(coinstr,serverport,userpass,height), flag = 1; blockhashstr = basilisk_bitcoinblockhashstr(coinstr,serverport,userpass,height), flag = 1;
if ( blockhashstr != 0 ) if ( blockhashstr != 0 )
{ {
sprintf(buf,"\"%s\"",blockhashstr); sprintf(buf,"\"%s\"",blockhashstr);
@ -148,7 +174,7 @@ cJSON *bitcoin_blockjson(int32_t *heightp,char *coinstr,char *serverport,char *u
int32_t basilisk_bitcoinscan(struct iguana_info *coin,uint8_t origblockspace[IGUANA_MAXPACKETSIZE],struct OS_memspace *rawmem) int32_t basilisk_bitcoinscan(struct iguana_info *coin,uint8_t origblockspace[IGUANA_MAXPACKETSIZE],struct OS_memspace *rawmem)
{ {
struct iguana_txblock txdata; int32_t len,starti,h,num=0,loadheight,hexlen,datalen,n,i,numtxids,flag=0,height=-1; cJSON *curljson,*blockjson,*txids; char *bitstr,*curlstr,params[128],str[65]; struct iguana_msghdr H; struct iguana_msgblock *msg; uint8_t *blockspace,revbits[4],bitsbuf[4]; struct iguana_txblock txdata; int32_t len,starti,h,num=0,loadheight,hexlen,datalen,n,i,numtxids,flag=0,j,height=-1; cJSON *curljson,*blockjson,*txids; char *bitstr,*curlstr,params[128],str[65]; struct iguana_msghdr H; struct iguana_msgblock *msg; uint8_t *blockspace,revbits[4],bitsbuf[4];
strcpy(params,"[]"); strcpy(params,"[]");
if ( (curlstr= bitcoind_passthru(coin->symbol,coin->chain->serverport,coin->chain->userpass,"getinfo",params)) != 0 ) if ( (curlstr= bitcoind_passthru(coin->symbol,coin->chain->serverport,coin->chain->userpass,"getinfo",params)) != 0 )
{ {
@ -162,7 +188,8 @@ int32_t basilisk_bitcoinscan(struct iguana_info *coin,uint8_t origblockspace[IGU
loadheight = coin->blocks.hwmchain.height; loadheight = coin->blocks.hwmchain.height;
if ( loadheight == 0 ) if ( loadheight == 0 )
loadheight = 1; loadheight = 1;
while ( loadheight <= height )//&& coin->blocks.pending < 10 ) basilisk_blockhashes(coin,loadheight,coin->chain->bundlesize);
for (j=0; j<coin->chain->bundlesize; j++)
{ {
flag = 0; flag = 0;
if ( (blockjson= bitcoin_blockjson(&h,coin->symbol,coin->chain->serverport,coin->chain->userpass,0,loadheight)) != 0 ) if ( (blockjson= bitcoin_blockjson(&h,coin->symbol,coin->chain->serverport,coin->chain->userpass,0,loadheight)) != 0 )
@ -232,9 +259,9 @@ int32_t basilisk_bitcoinscan(struct iguana_info *coin,uint8_t origblockspace[IGU
} }
free_json(blockjson); free_json(blockjson);
} }
loadheight++;
if ( flag == 0 ) if ( flag == 0 )
break; break;
loadheight++;
} }
if ( coin->blocks.pending > 0 ) if ( coin->blocks.pending > 0 )
coin->blocks.pending--; coin->blocks.pending--;

2
iguana/iguana_blocks.c

@ -190,8 +190,6 @@ int32_t iguana_blockvalidate(struct iguana_info *coin,int32_t *validp,struct igu
bits256 hash2; uint8_t serialized[sizeof(struct iguana_msgblock) + 4096]; bits256 hash2; uint8_t serialized[sizeof(struct iguana_msgblock) + 4096];
*validp = 0; *validp = 0;
iguana_serialize_block(coin->chain,&hash2,serialized,block); iguana_serialize_block(coin->chain,&hash2,serialized,block);
if ( coin->MAXPEERS == 1 )
hash2 = basilisk_blockhash(coin,block->RO.prev_block);
*validp = (memcmp(hash2.bytes,block->RO.hash2.bytes,sizeof(hash2)) == 0); *validp = (memcmp(hash2.bytes,block->RO.hash2.bytes,sizeof(hash2)) == 0);
block->valid = *validp; block->valid = *validp;
char str[65]; char str2[65]; char str[65]; char str2[65];

Loading…
Cancel
Save