Browse Source

Merge pull request #181 from jl777/dev

Dev
win-cross
jl777 8 years ago
committed by GitHub
parent
commit
b31873ced5
  1. 2
      basilisk/basilisk_bitcoin.c
  2. 1
      iguana/dPoW.h
  3. 54
      iguana/dpow/dpow_network.c
  4. 3
      iguana/dpow/dpow_rpc.c
  5. 7
      iguana/iguana_payments.c

2
basilisk/basilisk_bitcoin.c

@ -354,6 +354,7 @@ char *basilisk_valuestr(struct iguana_info *coin,char *coinaddr,uint64_t value,i
jaddstr(retjson,"result","success"); jaddstr(retjson,"result","success");
jaddstr(retjson,"address",coinaddr); jaddstr(retjson,"address",coinaddr);
jadd64bits(retjson,"satoshis",value); jadd64bits(retjson,"satoshis",value);
jaddnum(retjson,"amount",dstr(value));
jaddnum(retjson,"value",dstr(value)); jaddnum(retjson,"value",dstr(value));
jaddnum(retjson,"height",height); jaddnum(retjson,"height",height);
jaddnum(retjson,"numconfirms",coin->blocks.hwmchain.height - height + 1); jaddnum(retjson,"numconfirms",coin->blocks.hwmchain.height - height + 1);
@ -909,6 +910,7 @@ HASH_ARRAY_STRING(basilisk,value,hash,vals,hexstr)
jaddstr(retjson,"address",coinaddr); jaddstr(retjson,"address",coinaddr);
jadd64bits(retjson,"satoshis",value); jadd64bits(retjson,"satoshis",value);
jaddnum(retjson,"value",dstr(value)); jaddnum(retjson,"value",dstr(value));
jaddnum(retjson,"amount",dstr(value));
height = dpow_getchaintip(myinfo,&blockhash,&blocktime,0,0,coin); height = dpow_getchaintip(myinfo,&blockhash,&blocktime,0,0,coin);
jaddnum(retjson,"height",height); jaddnum(retjson,"height",height);
jaddnum(retjson,"numconfirms",jint(txoutjson,"confirmations")); jaddnum(retjson,"numconfirms",jint(txoutjson,"confirmations"));

1
iguana/dPoW.h

@ -146,6 +146,7 @@ char *basilisk_respond_addmessage(struct supernet_info *myinfo,uint8_t *key,int3
int32_t dpow_getchaintip(struct supernet_info *myinfo,bits256 *blockhashp,uint32_t *blocktimep,bits256 *txs,uint32_t *numtxp,struct iguana_info *coin); int32_t dpow_getchaintip(struct supernet_info *myinfo,bits256 *blockhashp,uint32_t *blocktimep,bits256 *txs,uint32_t *numtxp,struct iguana_info *coin);
void dpow_send(struct supernet_info *myinfo,struct dpow_info *dp,struct dpow_block *bp,bits256 srchash,bits256 desthash,uint32_t channel,uint32_t msgbits,uint8_t *data,int32_t datalen); void dpow_send(struct supernet_info *myinfo,struct dpow_info *dp,struct dpow_block *bp,bits256 srchash,bits256 desthash,uint32_t channel,uint32_t msgbits,uint8_t *data,int32_t datalen);
int32_t dpow_nanomsg_update(struct supernet_info *myinfo); int32_t dpow_nanomsg_update(struct supernet_info *myinfo);
int32_t dpow_haveutxo(struct supernet_info *myinfo,struct iguana_info *coin,bits256 *txidp,int32_t *voutp,char *coinaddr);
cJSON *dpow_getinfo(struct supernet_info *myinfo,struct iguana_info *coin); cJSON *dpow_getinfo(struct supernet_info *myinfo,struct iguana_info *coin);
cJSON *dpow_gettransaction(struct supernet_info *myinfo,struct iguana_info *coin,bits256 txid); cJSON *dpow_gettransaction(struct supernet_info *myinfo,struct iguana_info *coin,bits256 txid);

54
iguana/dpow/dpow_network.c

@ -725,9 +725,9 @@ void dpow_bestconsensus(struct dpow_block *bp)
} }
} }
void dpow_nanoutxoset(struct dpow_nanoutxo *np,struct dpow_block *bp,int32_t isratify) void dpow_nanoutxoset(struct supernet_info *myinfo,struct dpow_info *dp,struct dpow_nanoutxo *np,struct dpow_block *bp,int32_t isratify)
{ {
int32_t i; int32_t i,err,vout; cJSON *ujson; char coinaddr[64],str[65];
if ( bp->myind < 0 ) if ( bp->myind < 0 )
return; return;
if ( isratify != 0 ) if ( isratify != 0 )
@ -736,6 +736,48 @@ void dpow_nanoutxoset(struct dpow_nanoutxo *np,struct dpow_block *bp,int32_t isr
np->srcvout = bp->notaries[bp->myind].ratifysrcvout; np->srcvout = bp->notaries[bp->myind].ratifysrcvout;
np->destutxo = bp->notaries[bp->myind].ratifydestutxo; np->destutxo = bp->notaries[bp->myind].ratifydestutxo;
np->destvout = bp->notaries[bp->myind].ratifydestvout; np->destvout = bp->notaries[bp->myind].ratifydestvout;
if ( bp->myind != 0 )
{
err = 0;
if ( (ujson= dpow_gettxout(myinfo,bp->srccoin,np->srcutxo,np->srcvout)) != 0 )
{
if ( (uint64_t)(jdouble(ujson,"value") * SATOSHIDEN) == 0 )
{
//printf("(%s)\n",jprint(ujson,0));
err = 1;
}
free_json(ujson);
} else err = 1;
if ( err != 0 )
{
bitcoin_address(coinaddr,bp->srccoin->chain->pubtype,dp->minerkey33,33);
if ( dpow_haveutxo(myinfo,bp->srccoin,&bp->notaries[bp->myind].ratifysrcutxo,&vout,coinaddr) > 0 )
{
bp->notaries[bp->myind].ratifysrcvout = vout;
np->srcutxo = bp->notaries[bp->myind].ratifysrcutxo;
np->srcvout = bp->notaries[bp->myind].ratifysrcvout;
printf("Replace UTXO.%s < %s/v%d\n",bp->srccoin->symbol,bits256_str(str,np->srcutxo),vout);
} else printf("cant find utxo.%s\n",bp->srccoin->symbol);
}
err = 0;
if ( (ujson= dpow_gettxout(myinfo,bp->destcoin,np->destutxo,np->destvout)) != 0 )
{
if ( (uint64_t)(jdouble(ujson,"value") * SATOSHIDEN) == 0 )
err = 1;
free_json(ujson);
} else err = 1;
if ( err != 0 )
{
bitcoin_address(coinaddr,bp->destcoin->chain->pubtype,dp->minerkey33,33);
if ( dpow_haveutxo(myinfo,bp->destcoin,&bp->notaries[bp->myind].ratifydestutxo,&vout,coinaddr) > 0 )
{
bp->notaries[bp->myind].ratifydestvout = vout;
np->destutxo = bp->notaries[bp->myind].ratifydestutxo;
np->destvout = bp->notaries[bp->myind].ratifydestvout;
printf("Replace UTXO.%s < %s/v%d\n",bp->destcoin->symbol,bits256_str(str,np->destutxo),vout);
} else printf("cant find utxo.%s\n",bp->destcoin->symbol);
}
}
np->bestmask = bp->ratifybestmask; np->bestmask = bp->ratifybestmask;
np->recvmask = bp->ratifyrecvmask; np->recvmask = bp->ratifyrecvmask;
//printf("send ratify best.(%d %llx) siglens.(%d %d)\n", bp->ratifybestk,(long long)bp->ratifybestmask,bp->ratifysiglens[0],bp->ratifysiglens[1]); //printf("send ratify best.(%d %llx) siglens.(%d %d)\n", bp->ratifybestk,(long long)bp->ratifybestmask,bp->ratifysiglens[0],bp->ratifysiglens[1]);
@ -888,11 +930,11 @@ void dpow_ratify_update(struct supernet_info *myinfo,struct dpow_info *dp,struct
} }
} }
//printf("crcval.%x numcrcs.%d bestmatches.%d matchesmask.%llx\n",crcval,numcrcs,bestmatches,(long long)matchesmask); //printf("crcval.%x numcrcs.%d bestmatches.%d matchesmask.%llx\n",crcval,numcrcs,bestmatches,(long long)matchesmask);
if ( bestmatches >= bp->minsigs ) if ( bestmatches >= bp->minsigs && numcrcs >= bp->minsigs )
{ {
if ( bp->pendingratifybestk != bp->ratifybestk || bp->pendingratifybestmask != bp->ratifybestmask ) if ( bp->pendingratifybestk != bp->ratifybestk || bp->pendingratifybestmask != bp->ratifybestmask )
{ {
printf("new PENDING RATIFY BESTK (%d %llx)\n",bp->ratifybestk,(long long)bp->ratifybestmask); printf("new PENDING RATIFY BESTK (%d %llx) crcval.%08x num.%d\n",bp->ratifybestk,(long long)bp->ratifybestmask,crcval,numcrcs);
bp->pendingratifybestk = bp->ratifybestk; bp->pendingratifybestk = bp->ratifybestk;
bp->pendingratifybestmask = bp->ratifybestmask; bp->pendingratifybestmask = bp->ratifybestmask;
memset(bp->notaries[bp->myind].ratifysigs,0,sizeof(bp->notaries[bp->myind].ratifysigs)); memset(bp->notaries[bp->myind].ratifysigs,0,sizeof(bp->notaries[bp->myind].ratifysigs));
@ -1107,12 +1149,12 @@ void dpow_send(struct supernet_info *myinfo,struct dpow_info *dp,struct dpow_blo
extralen = dpow_paxpending(extras,&paxwdcrc); extralen = dpow_paxpending(extras,&paxwdcrc);
bp->paxwdcrc = bp->notaries[bp->myind].paxwdcrc = np->notarize.paxwdcrc = paxwdcrc; bp->paxwdcrc = bp->notaries[bp->myind].paxwdcrc = np->notarize.paxwdcrc = paxwdcrc;
//dpow_bestconsensus(bp); //dpow_bestconsensus(bp);
dpow_nanoutxoset(&np->notarize,bp,0); dpow_nanoutxoset(myinfo,dp,&np->notarize,bp,0);
} }
else else
{ {
bp->paxwdcrc = bp->notaries[bp->myind].paxwdcrc = np->notarize.paxwdcrc = 0; bp->paxwdcrc = bp->notaries[bp->myind].paxwdcrc = np->notarize.paxwdcrc = 0;
dpow_nanoutxoset(&np->ratify,bp,1); dpow_nanoutxoset(myinfo,dp,&np->ratify,bp,1);
} }
np->size = size; np->size = size;
np->datalen = datalen; np->datalen = datalen;

3
iguana/dpow/dpow_rpc.c

@ -562,7 +562,8 @@ int32_t dpow_haveutxo(struct supernet_info *myinfo,struct iguana_info *coin,bits
item = jitem(unspents,i); item = jitem(unspents,i);
if ( is_cJSON_False(jobj(item,"spendable")) != 0 ) if ( is_cJSON_False(jobj(item,"spendable")) != 0 )
continue; continue;
satoshis = SATOSHIDEN * jdouble(item,"amount"); if ( (satoshis= SATOSHIDEN * jdouble(item,"amount")) == 0 )
satoshis= SATOSHIDEN * jdouble(item,"value");
if ( satoshis == DPOW_UTXOSIZE && (address= jstr(item,"address")) != 0 && strcmp(address,coinaddr) == 0 ) if ( satoshis == DPOW_UTXOSIZE && (address= jstr(item,"address")) != 0 && strcmp(address,coinaddr) == 0 )
{ {
if ( (str= jstr(item,"scriptPubKey")) != 0 && is_hexstr(str,0) == sizeof(script)*2 ) if ( (str= jstr(item,"scriptPubKey")) != 0 && is_hexstr(str,0) == sizeof(script)*2 )

7
iguana/iguana_payments.c

@ -379,13 +379,15 @@ uint64_t iguana_interest(struct supernet_info *myinfo,struct iguana_info *coin,b
uint64_t iguana_interests(struct supernet_info *myinfo,struct iguana_info *coin,cJSON *vins) uint64_t iguana_interests(struct supernet_info *myinfo,struct iguana_info *coin,cJSON *vins)
{ {
int32_t i,n; cJSON *item; uint64_t interest = 0; int32_t i,n; cJSON *item; uint64_t value,interest = 0;
if ( is_cJSON_Array(vins) != 0 && (n= cJSON_GetArraySize(vins)) > 0 ) if ( is_cJSON_Array(vins) != 0 && (n= cJSON_GetArraySize(vins)) > 0 )
{ {
for (i=0; i<n; i++) for (i=0; i<n; i++)
{ {
item = jitem(vins,i); item = jitem(vins,i);
interest += iguana_interest(myinfo,coin,jbits256(item,"txid"),jint(item,"vout"),jdouble(item,"value")*SATOSHIDEN); if ( (value= jdouble(item,"value")*SATOSHIDEN) == 0 )
value = jdouble(item,"amount")*SATOSHIDEN;
interest += iguana_interest(myinfo,coin,jbits256(item,"txid"),jint(item,"vout"),value);
} }
} }
return(interest); return(interest);
@ -725,6 +727,7 @@ HASH_AND_TWOINTS(bitcoinrpc,gettxout,txid,vout,mempool)
jaddnum(retjson,"height",height); jaddnum(retjson,"height",height);
jaddnum(retjson,"confirmations",coin->blocks.hwmchain.height - height + 1); jaddnum(retjson,"confirmations",coin->blocks.hwmchain.height - height + 1);
jaddnum(retjson,"value",dstr(value)); jaddnum(retjson,"value",dstr(value));
jaddnum(retjson,"amount",dstr(value));
if ( (height % coin->chain->bundlesize) == 0 && vout == 0 ) if ( (height % coin->chain->bundlesize) == 0 && vout == 0 )
jadd(retjson,"coinbase",jtrue()); jadd(retjson,"coinbase",jtrue());
else jadd(retjson,"coinbase",jfalse()); else jadd(retjson,"coinbase",jfalse());

Loading…
Cancel
Save