test
This commit is contained in:
12
src/komodo.h
12
src/komodo.h
@@ -17,6 +17,8 @@
|
|||||||
#define H_KOMODO_H
|
#define H_KOMODO_H
|
||||||
|
|
||||||
// Todo: handle reorg: clear all entries above reorged height
|
// Todo: handle reorg: clear all entries above reorged height
|
||||||
|
// smooth consensus price
|
||||||
|
//
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -29,6 +31,8 @@ int32_t komodo_notarizeddata(int32_t nHeight,uint256 *notarized_hashp,uint256 *n
|
|||||||
char *komodo_issuemethod(char *method,char *params,uint16_t port);
|
char *komodo_issuemethod(char *method,char *params,uint16_t port);
|
||||||
|
|
||||||
#define GENESIS_NBITS 0x1f00ffff
|
#define GENESIS_NBITS 0x1f00ffff
|
||||||
|
#define KOMODO_MINRATIFY 7
|
||||||
|
|
||||||
#include "komodo_globals.h"
|
#include "komodo_globals.h"
|
||||||
#include "komodo_utils.h"
|
#include "komodo_utils.h"
|
||||||
//queue_t DepositsQ,PendingsQ;
|
//queue_t DepositsQ,PendingsQ;
|
||||||
@@ -326,13 +330,13 @@ int32_t komodo_voutupdate(int32_t notaryid,uint8_t *scriptbuf,int32_t scriptlen,
|
|||||||
|
|
||||||
int32_t komodo_isratify(int32_t isspecial,int32_t numvalid)
|
int32_t komodo_isratify(int32_t isspecial,int32_t numvalid)
|
||||||
{
|
{
|
||||||
if ( isspecial != 0 && numvalid > 13 )
|
if ( isspecial != 0 && numvalid >= KOMODO_MINRATIFY )
|
||||||
return(1);
|
return(1);
|
||||||
else return(0);
|
else return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Special tx have vout[0] -> CRYPTO777
|
// Special tx have vout[0] -> CRYPTO777
|
||||||
// with more than 13 pay2pubkey outputs -> ratify
|
// with more than KOMODO_MINRATIFY pay2pubkey outputs -> ratify
|
||||||
// if all outputs to notary -> notary utxo
|
// if all outputs to notary -> notary utxo
|
||||||
// if txi == 0 && 2 outputs and 2nd OP_RETURN, len == 32*2+4 -> notarized, 1st byte 'P' -> pricefeed
|
// if txi == 0 && 2 outputs and 2nd OP_RETURN, len == 32*2+4 -> notarized, 1st byte 'P' -> pricefeed
|
||||||
// OP_RETURN: 'D' -> deposit, 'W' -> withdraw
|
// OP_RETURN: 'D' -> deposit, 'W' -> withdraw
|
||||||
@@ -350,8 +354,8 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block)
|
|||||||
fprintf(stderr,"komodo_connect.(%s) waiting for realtime RT.%u now.%u\n",ASSETCHAINS_SYMBOL,KOMODO_REALTIME,(uint32_t)time(NULL));
|
fprintf(stderr,"komodo_connect.(%s) waiting for realtime RT.%u now.%u\n",ASSETCHAINS_SYMBOL,KOMODO_REALTIME,(uint32_t)time(NULL));
|
||||||
sleep(3);
|
sleep(3);
|
||||||
}
|
}
|
||||||
KOMODO_INITDONE = (uint32_t)time(NULL);
|
|
||||||
}
|
}
|
||||||
|
KOMODO_INITDONE = (uint32_t)time(NULL);
|
||||||
if ( pindex != 0 )
|
if ( pindex != 0 )
|
||||||
{
|
{
|
||||||
height = pindex->nHeight;
|
height = pindex->nHeight;
|
||||||
@@ -422,7 +426,7 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( komodo_isratify(1,numvalid) > 7 )
|
if ( komodo_isratify(1,numvalid) >= KOMODO_MINRATIFY && numvouts > 13 )
|
||||||
{
|
{
|
||||||
memset(&txhash,0,sizeof(txhash));
|
memset(&txhash,0,sizeof(txhash));
|
||||||
komodo_stateupdate(height,pubkeys,numvalid,0,txhash,0,0,0,0,0,0,0,0,0);
|
komodo_stateupdate(height,pubkeys,numvalid,0,txhash,0,0,0,0,0,0,0,0,0);
|
||||||
|
|||||||
@@ -217,7 +217,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3
|
|||||||
tokomodo = (komodo_is_issuer() == 0);
|
tokomodo = (komodo_is_issuer() == 0);
|
||||||
if ( opretbuf[0] == ((tokomodo == 0) ? 'D' : 'W') )
|
if ( opretbuf[0] == ((tokomodo == 0) ? 'D' : 'W') )
|
||||||
{
|
{
|
||||||
if ( opretlen == 34 )
|
if ( opretlen == 34 ) // any KMD tx
|
||||||
{
|
{
|
||||||
if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 )
|
if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 )
|
||||||
{
|
{
|
||||||
@@ -232,35 +232,38 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3
|
|||||||
bitcoin_address(coinaddr,addrtype,rmd160,20);
|
bitcoin_address(coinaddr,addrtype,rmd160,20);
|
||||||
checktoshis = PAX_fiatdest(tokomodo,destaddr,pubkey33,coinaddr,height,base,fiatoshis);
|
checktoshis = PAX_fiatdest(tokomodo,destaddr,pubkey33,coinaddr,height,base,fiatoshis);
|
||||||
typestr = "deposit";
|
typestr = "deposit";
|
||||||
if ( tokomodo == 0 && strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0 )
|
if ( tokomodo == 0 && strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0 && shortflag == ASSETCHAINS_SHORTFLAG )
|
||||||
{
|
{
|
||||||
for (i=0; i<32; i++)
|
if ( shortflag == 0 )
|
||||||
printf("%02x",((uint8_t *)&txid)[i]);
|
|
||||||
printf(" <- txid.v%u ",vout);
|
|
||||||
for (i=0; i<33; i++)
|
|
||||||
printf("%02x",pubkey33[i]);
|
|
||||||
printf(" checkpubkey check %.8f v %.8f dest.(%s) height.%d\n",dstr(checktoshis),dstr(value),destaddr,height);
|
|
||||||
if ( value >= checktoshis && shortflag == ASSETCHAINS_SHORTFLAG )
|
|
||||||
{
|
{
|
||||||
if ( komodo_paxfind(&space,txid,vout) == 0 )
|
for (i=0; i<32; i++)
|
||||||
komodo_gateway_deposit(coinaddr,value,shortflag,base,fiatoshis,rmd160,txid,vout,height);
|
printf("%02x",((uint8_t *)&txid)[i]);
|
||||||
|
printf(" <- txid.v%u ",vout);
|
||||||
|
for (i=0; i<33; i++)
|
||||||
|
printf("%02x",pubkey33[i]);
|
||||||
|
printf(" checkpubkey check %.8f v %.8f dest.(%s) height.%d\n",dstr(checktoshis),dstr(value),destaddr,height);
|
||||||
|
if ( value >= checktoshis )
|
||||||
|
{
|
||||||
|
if ( komodo_paxfind(&space,txid,vout) == 0 )
|
||||||
|
komodo_gateway_deposit(coinaddr,value,shortflag,base,fiatoshis,rmd160,txid,vout,height);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
else // short
|
||||||
else if ( tokomodo != 0 && ASSETCHAINS_SYMBOL[0] == 0 )
|
|
||||||
{
|
|
||||||
for (i=0; i<opretlen; i++)
|
|
||||||
printf("%02x",opretbuf[i]);
|
|
||||||
printf(" opret[%c] tokomodo.%d value %.8f vs check %.8f\n",opretbuf[0],tokomodo,dstr(value),dstr(checktoshis));
|
|
||||||
if ( value <= checktoshis )
|
|
||||||
{
|
{
|
||||||
|
for (i=0; i<opretlen; i++)
|
||||||
|
printf("%02x",opretbuf[i]);
|
||||||
|
printf(" opret[%c] tokomodo.%d value %.8f vs check %.8f\n",opretbuf[0],tokomodo,dstr(value),dstr(checktoshis));
|
||||||
|
if ( value <= checktoshis )
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( strncmp((char *)"KMD",(char *)&opretbuf[opretlen-4],3) != 0 )
|
else if ( strncmp((char *)"KMD",(char *)&opretbuf[opretlen-4],3) != 0 )
|
||||||
{
|
{
|
||||||
if ( tokomodo == 0 && opretbuf[0] == 'I' )
|
if ( tokomodo == 0 && opretbuf[0] == 'I' ) // assetchain coinbase
|
||||||
{
|
{
|
||||||
if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 )
|
if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 )
|
||||||
{
|
{
|
||||||
@@ -302,7 +305,7 @@ void komodo_gateway_voutupdate(char *symbol,int32_t isspecial,int32_t height,int
|
|||||||
}
|
}
|
||||||
else komodo_stateupdate(height,0,0,0,utxid,0,0,0,0,0,value,&script[offset],opretlen,vout);
|
else komodo_stateupdate(height,0,0,0,utxid,0,0,0,0,0,value,&script[offset],opretlen,vout);
|
||||||
}
|
}
|
||||||
else if ( numvouts > 13 )
|
else if ( numvouts >= KOMODO_MINRATIFY )
|
||||||
typestr = "ratify";
|
typestr = "ratify";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -397,9 +400,10 @@ void komodo_gateway_iteration(char *symbol)
|
|||||||
{
|
{
|
||||||
for (i=0; i<1000 && KMDHEIGHT<kmdheight; i++,KMDHEIGHT++)
|
for (i=0; i<1000 && KMDHEIGHT<kmdheight; i++,KMDHEIGHT++)
|
||||||
{
|
{
|
||||||
if ( (KMDHEIGHT % 100) == 0 )
|
if ( (KMDHEIGHT % 10) == 0 )
|
||||||
{
|
{
|
||||||
fprintf(stderr,"%s.%d ",symbol,KMDHEIGHT);
|
if ( (KMDHEIGHT % 100) == 0 )
|
||||||
|
fprintf(stderr,"%s.%d ",symbol,KMDHEIGHT);
|
||||||
memset(&zero,0,sizeof(zero));
|
memset(&zero,0,sizeof(zero));
|
||||||
komodo_stateupdate(KMDHEIGHT,0,0,0,zero,0,0,0,0,KMDHEIGHT,0,0,0,0);
|
komodo_stateupdate(KMDHEIGHT,0,0,0,zero,0,0,0,0,KMDHEIGHT,0,0,0,0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -508,11 +508,22 @@ void static BitcoinMiner(CWallet *pwallet)
|
|||||||
|
|
||||||
unsigned int n = chainparams.EquihashN();
|
unsigned int n = chainparams.EquihashN();
|
||||||
unsigned int k = chainparams.EquihashK();
|
unsigned int k = chainparams.EquihashK();
|
||||||
|
extern int32_t ASSETCHAIN_INIT,KOMODO_INITDONE; extern uint8_t NOTARY_PUBKEY33[33];
|
||||||
|
int32_t komodo_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33);
|
||||||
|
int32_t notaryid = -1;
|
||||||
|
while ( ASSETCHAIN_INIT == 0 || KOMODO_INITDONE == 0 )
|
||||||
|
{
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
komodo_chosennotary(¬aryid,int32_t height,NOTARY_PUBKEY33);
|
||||||
|
|
||||||
std::string solver = GetArg("-equihashsolver", "tromp");
|
std::string solver;
|
||||||
|
if ( notaryid >= 0 )
|
||||||
|
solver = "tromp";
|
||||||
|
solver = "default";
|
||||||
assert(solver == "tromp" || solver == "default");
|
assert(solver == "tromp" || solver == "default");
|
||||||
LogPrint("pow", "Using Equihash solver \"%s\" with n = %u, k = %u\n", solver, n, k);
|
LogPrint("pow", "Using Equihash solver \"%s\" with n = %u, k = %u\n", solver, n, k);
|
||||||
//fprintf(stderr,"Mining with %s\n",solver.c_str());
|
fprintf(stderr,"Mining with %s\n",solver.c_str());
|
||||||
std::mutex m_cs;
|
std::mutex m_cs;
|
||||||
bool cancelSolver = false;
|
bool cancelSolver = false;
|
||||||
boost::signals2::connection c = uiInterface.NotifyBlockTip.connect(
|
boost::signals2::connection c = uiInterface.NotifyBlockTip.connect(
|
||||||
@@ -606,10 +617,10 @@ void static BitcoinMiner(CWallet *pwallet)
|
|||||||
solutionTargetChecks.increment();
|
solutionTargetChecks.increment();
|
||||||
if ( UintToArith256(pblock->GetHash()) > hashTarget )
|
if ( UintToArith256(pblock->GetHash()) > hashTarget )
|
||||||
return false;
|
return false;
|
||||||
if ( ASSETCHAINS_SYMBOL[0] == 0 && Mining_start != 0 && time(NULL) < Mining_start+30 )
|
if ( ASSETCHAINS_SYMBOL[0] == 0 && Mining_start != 0 && time(NULL) < Mining_start+20 )
|
||||||
{
|
{
|
||||||
printf("Round robin diff sleep %d\n",(int32_t)(Mining_start+30-time(NULL)));
|
printf("Round robin diff sleep %d\n",(int32_t)(Mining_start+20-time(NULL)));
|
||||||
sleep(Mining_start+30-time(NULL));
|
sleep(Mining_start+20-time(NULL));
|
||||||
}
|
}
|
||||||
// Found a solution
|
// Found a solution
|
||||||
SetThreadPriority(THREAD_PRIORITY_NORMAL);
|
SetThreadPriority(THREAD_PRIORITY_NORMAL);
|
||||||
@@ -639,7 +650,7 @@ void static BitcoinMiner(CWallet *pwallet)
|
|||||||
};
|
};
|
||||||
|
|
||||||
// TODO: factor this out into a function with the same API for each solver.
|
// TODO: factor this out into a function with the same API for each solver.
|
||||||
if (solver == "tromp") {
|
if (solver == "tromp" && notaryid >= 0 ) {
|
||||||
// Create solver and initialize it.
|
// Create solver and initialize it.
|
||||||
equi eq(1);
|
equi eq(1);
|
||||||
eq.setstate(&curr_state);
|
eq.setstate(&curr_state);
|
||||||
|
|||||||
Reference in New Issue
Block a user