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; void **ptrs = ptr;
struct supernet_info *myinfo; struct dpow_info *dp; struct dpow_checkpoint checkpoint; 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)); memset(&zero,0,sizeof(zero));
myinfo = ptrs[0]; myinfo = ptrs[0];
dp = ptrs[1]; dp = ptrs[1];
minsigs = (uint32_t)(long)ptrs[2]; minsigs = (uint32_t)(long)ptrs[2];
duration = (uint32_t)(long)ptrs[3]; duration = (uint32_t)(long)ptrs[3];
jsonstr = ptrs[4]; jsonstr = ptrs[4];
kmdheight = -1;
memcpy(&checkpoint,&ptrs[5],sizeof(checkpoint)); 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); 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); src = iguana_coinfind(dp->symbol);
dest = iguana_coinfind(dp->dest); 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 ) if ( (bp= dp->blocks[checkpoint.blockhash.height]) == 0 )
{ {
bp = calloc(1,sizeof(*bp)); bp = calloc(1,sizeof(*bp));
@ -445,20 +450,28 @@ void dpow_statemachinestart(void *ptr)
dp->blocks[checkpoint.blockhash.height - 1000] = 0; dp->blocks[checkpoint.blockhash.height - 1000] = 0;
} }
} }
n = (int32_t)(sizeof(Notaries)/sizeof(*Notaries)); if ( kmdheight >= 0 )
bp->numnotaries = n;
for (i=0; i<n; i++)
{ {
decode_hex(bp->notaries[i].pubkey,33,Notaries[i][1]); bp->numnotaries = komodo_notaries(pubkeys,kmdheight);
if ( memcmp(bp->notaries[i].pubkey,dp->minerkey33,33) == 0 ) for (i=0; i<bp->numnotaries; i++)
{ {
myind = i; memcpy(bp->notaries[i].pubkey,pubkeys[i],33);
ep = &bp->notaries[myind]; 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); free(ptr);
return; return;
} }

3
iguana/dpow/dpow_network.c

@ -390,6 +390,9 @@ void komodo_assetcoins()
free_json(json); free_json(json);
coin->FULLNODE = -1; coin->FULLNODE = -1;
coin->chain->rpcport = port + 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(confstr,"%s.conf",CURRENCIES[i]);
sprintf(path,"%s/.komodo/%s",userhome,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); 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) bits256 dpow_getbestblockhash(struct supernet_info *myinfo,struct iguana_info *coin)
{ {
char *retstr; bits256 blockhash; 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= juint(json,"height")) != 0 && (*blocktimep= juint(json,"time")) != 0 )
{ {
if ( height > coin->longestchain )
coin->longestchain = height;
if ( (array= jarray(&n,json,"tx")) != 0 ) if ( (array= jarray(&n,json,"tx")) != 0 )
{ {
for (i=0; i<n&&i<maxtx; i++) 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() void dpow_addresses()
{ {
int32_t i; char coinaddr[64]; uint8_t pubkey[33]; int32_t i,numnotaries,kmdheight; struct iguana_info *coin; char coinaddr[64]; uint8_t pubkeys[64][33];
for (i=0; i<sizeof(Notaries)/sizeof(*Notaries); i++) 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,pubkeys[i],33);
bitcoin_address(coinaddr,60,pubkey,33);
printf("%s ",coinaddr); printf("%s ",coinaddr);
} }
printf("Numnotaries.%d\n",i); printf("Numnotaries.%d height.%d\n",i,kmdheight);
} }
#include "../includes/iguana_apidefs.h" #include "../includes/iguana_apidefs.h"
@ -283,16 +286,21 @@ STRING_ARG(iguana,addnotary,ipaddr)
STRING_ARG(dpow,active,maskhex) 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 ) if ( maskhex == 0 || maskhex[0] == 0 )
{ {
mask = myinfo->DPOWS[0].lastrecvmask; mask = myinfo->DPOWS[0].lastrecvmask;
for (i=0; i<64; i++) for (i=0; i<numnotaries; i++)
{ {
if ( ((1LL << i) & mask) != 0 ) if ( ((1LL << i) & mask) != 0 )
{ {
printf("(%d %llx %s) ",i,(long long)(1LL << i),Notaries[i][0]); init_hexbytes_noT(pubkeystr,pubkeys[i],33);
jaddistr(array,Notaries[i][0]); printf("(%d %llx %s) ",i,(long long)(1LL << i),pubkeystr);
jaddistr(array,pubkeystr);
} }
} }
retjson = cJSON_CreateObject(); retjson = cJSON_CreateObject();
@ -316,8 +324,9 @@ STRING_ARG(dpow,active,maskhex)
for (i=0; i<(len<<3); i++) for (i=0; i<(len<<3); i++)
if ( ((1LL << i) & mask) != 0 ) if ( ((1LL << i) & mask) != 0 )
{ {
printf("(%d %llx %s) ",i,(long long)(1LL << i),Notaries[i][0]); init_hexbytes_noT(pubkeystr,pubkeys[i],33);
jaddistr(array,Notaries[i][0]); printf("(%d %llx %s) ",i,(long long)(1LL << i),pubkeystr);
jaddistr(array,pubkeystr);//Notaries[i][0]);
} }
return(jprint(array,1)); return(jprint(array,1));
} else return(clonestr("{\"error\":\"maskhex too long\"}")); } else return(clonestr("{\"error\":\"maskhex too long\"}"));

2
iguana/notaries.h

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

Loading…
Cancel
Save