Browse Source

test

olddPoW
jl777 8 years ago
parent
commit
a7a5997f8f
  1. 33
      iguana/dpow/dpow_fsm.c
  2. 3
      iguana/dpow/dpow_network.c
  3. 38
      iguana/dpow/dpow_rpc.c
  4. 31
      iguana/iguana_notary.c
  5. 2
      iguana/notaries.h

33
iguana/dpow/dpow_fsm.c

@ -383,17 +383,22 @@ void dpow_statemachinestart(void *ptr)
{
void **ptrs = ptr;
struct supernet_info *myinfo; struct dpow_info *dp; struct dpow_checkpoint checkpoint;
int32_t i,n,numratified,myind = -1; cJSON *ratified,*item; struct iguana_info *src,*dest; char *jsonstr,*handle,*hexstr,str[65],str2[65],srcaddr[64],destaddr[64]; bits256 zero,srchash; struct dpow_block *bp; struct dpow_entry *ep = 0; uint32_t duration,minsigs,starttime;
int32_t i,numratified,kmdheight,myind = -1; uint8_t pubkeys[64][33]; cJSON *ratified,*item; struct iguana_info *src,*dest; char *jsonstr,*handle,*hexstr,str[65],str2[65],srcaddr[64],destaddr[64]; bits256 zero,srchash; struct dpow_block *bp; struct dpow_entry *ep = 0; uint32_t duration,minsigs,starttime;
memset(&zero,0,sizeof(zero));
myinfo = ptrs[0];
dp = ptrs[1];
minsigs = (uint32_t)(long)ptrs[2];
duration = (uint32_t)(long)ptrs[3];
jsonstr = ptrs[4];
kmdheight = -1;
memcpy(&checkpoint,&ptrs[5],sizeof(checkpoint));
printf("statemachinestart %s->%s %s ht.%d minsigs.%d duration.%d\n",dp->symbol,dp->dest,bits256_str(str,checkpoint.blockhash.hash),checkpoint.blockhash.height,minsigs,duration);
src = iguana_coinfind(dp->symbol);
dest = iguana_coinfind(dp->dest);
if ( strcmp(src->symbol,"KMD") == 0 )
kmdheight = checkpoint.blockhash.height;
else if ( strcmp(dest->symbol,"KMD") == 0 )
kmdheight = dest->longestchain;
if ( (bp= dp->blocks[checkpoint.blockhash.height]) == 0 )
{
bp = calloc(1,sizeof(*bp));
@ -445,20 +450,28 @@ void dpow_statemachinestart(void *ptr)
dp->blocks[checkpoint.blockhash.height - 1000] = 0;
}
}
n = (int32_t)(sizeof(Notaries)/sizeof(*Notaries));
bp->numnotaries = n;
for (i=0; i<n; i++)
if ( kmdheight >= 0 )
{
decode_hex(bp->notaries[i].pubkey,33,Notaries[i][1]);
if ( memcmp(bp->notaries[i].pubkey,dp->minerkey33,33) == 0 )
bp->numnotaries = komodo_notaries(pubkeys,kmdheight);
for (i=0; i<bp->numnotaries; i++)
{
myind = i;
ep = &bp->notaries[myind];
memcpy(bp->notaries[i].pubkey,pubkeys[i],33);
if ( memcmp(bp->notaries[i].pubkey,dp->minerkey33,33) == 0 )
{
myind = i;
ep = &bp->notaries[myind];
}
}
if ( myind < 0 || ep == 0 )
{
printf("statemachinestart this node %s %s is not official notary\n",srcaddr,destaddr);
free(ptr);
return;
}
}
if ( myind < 0 || ep == 0 )
else
{
printf("statemachinestart this node %s %s is not official notary\n",srcaddr,destaddr);
printf("statemachinestart no kmdheight.%d\n",kmdheight);
free(ptr);
return;
}

3
iguana/dpow/dpow_network.c

@ -390,6 +390,9 @@ void komodo_assetcoins()
free_json(json);
coin->FULLNODE = -1;
coin->chain->rpcport = port + 1;
coin->chain->pubtype = 60;
coin->chain->p2shtype = 85;
coin->chain->wiftype = 188;
sprintf(confstr,"%s.conf",CURRENCIES[i]);
sprintf(path,"%s/.komodo/%s",userhome,CURRENCIES[i]);
extract_userpass(coin->chain->serverport,coin->chain->userpass,CURRENCIES[i],coin->chain->userhome,path,confstr);

38
iguana/dpow/dpow_rpc.c

@ -13,6 +13,42 @@
* *
******************************************************************************/
int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t kmdheight)
{
int32_t i,num=-1; struct iguana_info *coin; char params[256],*retstr,*pubkeystr; cJSON *retjson,*item,*result,*array;
if ( (coin= iguana_coinfind("KMD")) != 0 )
{
if ( coin->FULLNODE < 0 )
{
sprintf(params,"[%d]",kmdheight);
if ( (retstr= bitcoind_passthru(coin->symbol,coin->chain->serverport,coin->chain->userpass,"notaries",params)) != 0 )
{
if ( (retjson= cJSON_Parse(retstr)) != 0 )
{
printf("%s\n",retstr);
if ( (result= jobj(retjson,"result")) != 0 && (array= jarray(&num,result,"notaries")) != 0 )
{
if ( num > 64 )
{
printf("warning: numnotaries.%d? > 64?\n",num);
num = 64;
}
for (i=0; i<num; i++)
{
item = jitem(array,i);
if ( (pubkeystr= jstr(item,"pubkey")) != 0 && strlen(pubkeystr) == 66 )
decode_hex(pubkeys[i],33,pubkeystr);
}
}
free_json(retjson);
}
free(retstr);
}
}
}
return(num);
}
bits256 dpow_getbestblockhash(struct supernet_info *myinfo,struct iguana_info *coin)
{
char *retstr; bits256 blockhash;
@ -235,6 +271,8 @@ int32_t dpow_getchaintip(struct supernet_info *myinfo,bits256 *blockhashp,uint32
{
if ( (height= juint(json,"height")) != 0 && (*blocktimep= juint(json,"time")) != 0 )
{
if ( height > coin->longestchain )
coin->longestchain = height;
if ( (array= jarray(&n,json,"tx")) != 0 )
{
for (i=0; i<n&&i<maxtx; i++)

31
iguana/iguana_notary.c

@ -167,14 +167,17 @@ void iguana_dPoWupdate(struct supernet_info *myinfo,struct dpow_info *dp)
void dpow_addresses()
{
int32_t i; char coinaddr[64]; uint8_t pubkey[33];
for (i=0; i<sizeof(Notaries)/sizeof(*Notaries); i++)
int32_t i,numnotaries,kmdheight; struct iguana_info *coin; char coinaddr[64]; uint8_t pubkeys[64][33];
if ( (coin= iguana_coinfind("KMD")) != 0 )
kmdheight = coin->longestchain;
else kmdheight = 0;
numnotaries = komodo_notaries(pubkeys,kmdheight);
for (i=0; i<numnotaries; i++)
{
decode_hex(pubkey,33,Notaries[i][1]);
bitcoin_address(coinaddr,60,pubkey,33);
bitcoin_address(coinaddr,60,pubkeys[i],33);
printf("%s ",coinaddr);
}
printf("Numnotaries.%d\n",i);
printf("Numnotaries.%d height.%d\n",i,kmdheight);
}
#include "../includes/iguana_apidefs.h"
@ -283,16 +286,21 @@ STRING_ARG(iguana,addnotary,ipaddr)
STRING_ARG(dpow,active,maskhex)
{
uint8_t data[8],revdata[8]; int32_t i,len; uint64_t mask; cJSON *retjson,*array = cJSON_CreateArray();
int32_t i,numnotaries,kmdheight,len; char pubkeystr[67]; uint8_t pubkeys[64][33],data[8],revdata[8]; uint64_t mask; cJSON *retjson,*array = cJSON_CreateArray();
if ( (coin= iguana_coinfind("KMD")) != 0 )
kmdheight = coin->longestchain;
else kmdheight = 0;
numnotaries = komodo_notaries(pubkeys,kmdheight);
if ( maskhex == 0 || maskhex[0] == 0 )
{
mask = myinfo->DPOWS[0].lastrecvmask;
for (i=0; i<64; i++)
for (i=0; i<numnotaries; i++)
{
if ( ((1LL << i) & mask) != 0 )
{
printf("(%d %llx %s) ",i,(long long)(1LL << i),Notaries[i][0]);
jaddistr(array,Notaries[i][0]);
init_hexbytes_noT(pubkeystr,pubkeys[i],33);
printf("(%d %llx %s) ",i,(long long)(1LL << i),pubkeystr);
jaddistr(array,pubkeystr);
}
}
retjson = cJSON_CreateObject();
@ -316,8 +324,9 @@ STRING_ARG(dpow,active,maskhex)
for (i=0; i<(len<<3); i++)
if ( ((1LL << i) & mask) != 0 )
{
printf("(%d %llx %s) ",i,(long long)(1LL << i),Notaries[i][0]);
jaddistr(array,Notaries[i][0]);
init_hexbytes_noT(pubkeystr,pubkeys[i],33);
printf("(%d %llx %s) ",i,(long long)(1LL << i),pubkeystr);
jaddistr(array,pubkeystr);//Notaries[i][0]);
}
return(jprint(array,1));
} else return(clonestr("{\"error\":\"maskhex too long\"}"));

2
iguana/notaries.h

@ -16,7 +16,7 @@
#ifndef INCLUDE_NOTARIES_H
#define INCLUDE_NOTARIES_H
char *Notaries[][2] =
char *Notaries_genesis[][2] =
{
{ "jl777_testA", "03b7621b44118017a16043f19b30cc8a4cfe068ac4e42417bae16ba460c80f3828" },
{ "jl777_testB", "02ebfc784a4ba768aad88d44d1045d240d47b26e248cafaf1c5169a42d7a61d344" },

Loading…
Cancel
Save