From c2eec1f7a7256666762b2c9478b76e901ff42efe Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 15 Dec 2020 13:14:54 -0500 Subject: [PATCH] Remove Komodo interest code and various other improvements --- hush_bitcoind.h | 2421 ------------------------------------ src/bitcoind.cpp | 4 - src/cc/CCImportGateway.h | 5 +- src/cc/CCMarmara.h | 3 + src/cc/CCOracles.h | 3 + src/cc/CCPayments.h | 3 + src/cc/CCPegs.h | 3 + src/cc/CCPrices.h | 3 + src/cc/CCassets.h | 3 + src/cc/CCassetsCore.cpp | 3 + src/cc/CCassetstx.cpp | 3 + src/cc/CCauction.h | 3 + src/cc/CCchannels.h | 3 + src/cc/CCcustom.cpp | 3 + src/cc/CCdice.h | 3 + src/cc/CCfsm.h | 3 + src/cc/CClotto.h | 3 + src/cc/CCrewards.h | 3 + src/cc/CCtokens.cpp | 3 + src/cc/CCtokens.h | 3 + src/cc/CCtokenutils.cpp | 3 + src/cc/CCtx.cpp | 5 +- src/cc/CCutilbits.cpp | 3 + src/cc/COptCCParams.cpp | 3 + src/cc/assets.cpp | 3 + src/cc/auction.cpp | 3 + src/cc/betprotocol.cpp | 3 + src/cc/betprotocol.h | 3 + src/cc/channels.cpp | 3 + src/cc/customcc.cpp | 3 + src/cc/customcc.h | 3 + src/cc/dapps/dappinc.h | 113 +- src/cc/dapps/dappstd.c | 3 + src/cc/dapps/hushdex.c | 2 + src/cc/dapps/zmigrate.c | 3 + src/cc/dice.cpp | 3 + src/cc/dilithium.c | 6 +- src/cc/dilithium.h | 155 +-- src/cc/disputepayout.cpp | 3 + src/cc/fsm.cpp | 3 + src/cc/games/prices.c | 5 +- src/cc/games/prices.h | 3 + src/cc/games/tetris.c | 3 + src/cc/games/tetris.h | 3 + src/cc/gamescc.cpp | 3 + src/cc/gamescc.h | 3 + src/cc/gateways.cpp | 3 + src/cc/importgateway.cpp | 3 + src/cc/importpayout.cpp | 3 + src/cc/lotto.cpp | 3 + src/cc/musig.cpp | 3 + src/cc/oracles.cpp | 3 + src/cc/payments.cpp | 3 + src/cc/pegs.cpp | 3 + src/cc/rewards.cpp | 3 + src/cc/rogue_rpc.cpp | 3 + src/cc/sudoku.cpp | 11 +- src/cc/utils.cpp | 0 src/cc/utils.h | 8 +- src/coins.cpp | 19 - src/coins.h | 7 - src/ctest | 1 - src/hush.h | 3 +- src/hush_defs.h | 1 - src/hushd | 9 +- src/hushd-testnet | 39 +- src/komodo-tx.cpp | 5 - src/komodo_gateway.h | 5 - src/komodo_interest.h | 35 - src/komodo_nSPV_fullnode.h | 10 +- src/komodo_nSPV_wallet.h | 15 +- src/main.cpp | 35 +- src/miner.cpp | 9 - src/rpc/blockchain.cpp | 3 - src/rpc/mining.cpp | 8 +- src/rpc/misc.cpp | 3 +- src/rpc/rawtransaction.cpp | 18 +- src/rpc/server.cpp | 8 +- src/txmempool.cpp | 11 +- src/wallet/rpcwallet.cpp | 95 +- src/wallet/wallet.cpp | 18 +- 81 files changed, 322 insertions(+), 2911 deletions(-) delete mode 100644 hush_bitcoind.h delete mode 100644 src/cc/utils.cpp delete mode 100755 src/ctest delete mode 100644 src/komodo_interest.h diff --git a/hush_bitcoind.h b/hush_bitcoind.h deleted file mode 100644 index febeef177..000000000 --- a/hush_bitcoind.h +++ /dev/null @@ -1,2421 +0,0 @@ -// Copyright 2016-2020 The Hush Developers -// Distributed under the GPLv3 software license, see the accompanying -// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -/****************************************************************************** - * Copyright © 2014-2019 The SuperNET Developers. * - * * - * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * - * the top-level directory of this distribution for the individual copyright * - * holder information and the developer policies on copyright and licensing. * - * * - * Unless otherwise agreed in a custom licensing agreement, no part of the * - * SuperNET software, including this file may be copied, modified, propagated * - * or distributed except according to the terms contained in the LICENSE file * - * * - * Removal or modification of this copyright notice is prohibited. * - * * - ******************************************************************************/ -// Hush functions that interact with bitcoind C++ -#include -#include -#include "consensus/params.h" -#include "hush_defs.h" -#include "script/standard.h" -#include "cc/CCinclude.h" -#include "sietch.h" - -int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); -int32_t komodo_electednotary(int32_t *numnotariesp,uint8_t *pubkey33,int32_t height,uint32_t timestamp); -int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notaryid,uint8_t *scriptbuf,int32_t scriptlen,int32_t height,uint256 txhash,int32_t i,int32_t j,uint64_t *voutmaskp,int32_t *specialtxp,int32_t *notarizedheightp,uint64_t value,int32_t notarized,uint64_t signedmask,uint32_t timestamp); -bool EnsureWalletIsAvailable(bool avoidException); -extern bool fRequestShutdown; -extern CScript KOMODO_EARLYTXID_SCRIPTPUB; - -uint8_t DecodeMaramaraCoinbaseOpRet(const CScript scriptPubKey,CPubKey &pk,int32_t &height,int32_t &unlockht); -uint32_t komodo_heightstamp(int32_t height); - -//#define issue_curl(cmdstr) bitcoind_RPC(0,(char *)"curl",(char *)"http://127.0.0.1:7776",0,0,(char *)(cmdstr)) - -struct MemoryStruct { char *memory; size_t size; }; -struct return_string { char *ptr; size_t len; }; - -// return data from the server -#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) -#define CURL_GLOBAL_SSL (1<<0) -#define CURL_GLOBAL_WIN32 (1<<1) - - -/************************************************************************ - * - * Initialize the string handler so that it is thread safe - * - ************************************************************************/ - -void init_string(struct return_string *s) -{ - s->len = 0; - s->ptr = (char *)calloc(1,s->len+1); - if ( s->ptr == NULL ) - { - fprintf(stderr,"init_string malloc() failed\n"); - StartShutdown(); - } - s->ptr[0] = '\0'; -} - -int tx_height( const uint256 &hash ){ - int nHeight = 0; - CTransaction tx; - uint256 hashBlock; - if (!GetTransaction(hash, tx, hashBlock, true)) { - fprintf(stderr,"tx hash %s does not exist!\n", hash.ToString().c_str() ); - return nHeight; - } - - BlockMap::const_iterator it = mapBlockIndex.find(hashBlock); - if (it != mapBlockIndex.end()) { - nHeight = it->second->GetHeight(); - //fprintf(stderr,"blockHash %s height %d\n",hashBlock.ToString().c_str(), nHeight); - } else { - // Unconfirmed xtns - fprintf(stderr,"tx %s is unconfirmed\n", hash.ToString().c_str() ); - //fprintf(stderr,"block hash %s does not exist!\n", hashBlock.ToString().c_str() ); - } - return nHeight; -} - - -/************************************************************************ - * - * Use the "writer" to accumulate text until done - * - ************************************************************************/ - -size_t accumulatebytes(void *ptr,size_t size,size_t nmemb,struct return_string *s) -{ - size_t new_len = s->len + size*nmemb; - s->ptr = (char *)realloc(s->ptr,new_len+1); - if ( s->ptr == NULL ) - { - fprintf(stderr, "accumulate realloc() failed\n"); - StartShutdown(); - } - memcpy(s->ptr+s->len,ptr,size*nmemb); - s->ptr[new_len] = '\0'; - s->len = new_len; - return(size * nmemb); -} - -/************************************************************************ - * - * return the current system time in milliseconds - * - ************************************************************************/ - -#define EXTRACT_BITCOIND_RESULT // if defined, ensures error is null and returns the "result" field -#ifdef EXTRACT_BITCOIND_RESULT - -/************************************************************************ - * - * perform post processing of the results - * - ************************************************************************/ - -char *post_process_bitcoind_RPC(char *debugstr,char *command,char *rpcstr,char *params) -{ - long i,j,len; char *retstr = 0; cJSON *json,*result,*error; - //printf("<<<<<<<<<<< bitcoind_RPC: %s post_process_bitcoind_RPC.%s.[%s]\n",debugstr,command,rpcstr); - if ( command == 0 || rpcstr == 0 || rpcstr[0] == 0 ) - { - if ( strcmp(command,"signrawtransaction") != 0 ) - printf("<<<<<<<<<<< bitcoind_RPC: %s post_process_bitcoind_RPC.%s.[%s]\n",debugstr,command,rpcstr); - return(rpcstr); - } - json = cJSON_Parse(rpcstr); - if ( json == 0 ) - { - printf("<<<<<<<<<<< bitcoind_RPC: %s post_process_bitcoind_RPC.%s can't parse.(%s) params.(%s)\n",debugstr,command,rpcstr,params); - free(rpcstr); - return(0); - } - result = cJSON_GetObjectItem(json,"result"); - error = cJSON_GetObjectItem(json,"error"); - if ( error != 0 && result != 0 ) - { - if ( (error->type&0xff) == cJSON_NULL && (result->type&0xff) != cJSON_NULL ) - { - retstr = cJSON_Print(result); - len = strlen(retstr); - if ( retstr[0] == '"' && retstr[len-1] == '"' ) - { - for (i=1,j=0; itype&0xff) != cJSON_NULL || (result->type&0xff) != cJSON_NULL ) - { - if ( strcmp(command,"signrawtransaction") != 0 ) - printf("<<<<<<<<<<< bitcoind_RPC: %s post_process_bitcoind_RPC (%s) error.%s\n",debugstr,command,rpcstr); - } - free(rpcstr); - } else retstr = rpcstr; - free_json(json); - //fprintf(stderr,"<<<<<<<<<<< bitcoind_RPC: postprocess returns.(%s)\n",retstr); - return(retstr); -} -#endif - -/************************************************************************ - * - * perform the query - * - ************************************************************************/ - -char *bitcoind_RPC(char **retstrp,char *debugstr,char *url,char *userpass,char *command,char *params) -{ - static int didinit,count,count2; static double elapsedsum,elapsedsum2; - struct curl_slist *headers = NULL; struct return_string s; CURLcode res; CURL *curl_handle; - char *bracket0,*bracket1,*databuf = 0; long len; int32_t specialcase,numretries; double starttime; - if ( didinit == 0 ) - { - didinit = 1; - curl_global_init(CURL_GLOBAL_ALL); //init the curl session - } - numretries = 0; - if ( debugstr != 0 && strcmp(debugstr,"BTCD") == 0 && command != 0 && strcmp(command,"SuperNET") == 0 ) - specialcase = 1; - else specialcase = 0; - if ( url[0] == 0 ) - strcpy(url,"http://127.0.0.1:7876/nxt"); - if ( specialcase != 0 && 0 ) - printf("<<<<<<<<<<< bitcoind_RPC: debug.(%s) url.(%s) command.(%s) params.(%s)\n",debugstr,url,command,params); -try_again: - if ( retstrp != 0 ) - *retstrp = 0; - starttime = OS_milliseconds(); - curl_handle = curl_easy_init(); - init_string(&s); - headers = curl_slist_append(0,"Expect:"); - - curl_easy_setopt(curl_handle,CURLOPT_USERAGENT,"mozilla/4.0");//"Mozilla/4.0 (compatible; )"); - curl_easy_setopt(curl_handle,CURLOPT_HTTPHEADER, headers); - curl_easy_setopt(curl_handle,CURLOPT_URL, url); - curl_easy_setopt(curl_handle,CURLOPT_WRITEFUNCTION, (void *)accumulatebytes); // send all data to this function - curl_easy_setopt(curl_handle,CURLOPT_WRITEDATA, &s); // we pass our 's' struct to the callback - curl_easy_setopt(curl_handle,CURLOPT_NOSIGNAL, 1L); // supposed to fix "Alarm clock" and long jump crash - curl_easy_setopt(curl_handle,CURLOPT_NOPROGRESS, 1L); // no progress callback - //curl_easy_setopt(curl_handle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); - //curl_easy_setopt(curl_handle, CURLOPT_SSLVERSION, 2); - - if ( strncmp(url,"https",5) == 0 ) - { - - /* printf("[ Decker ] SSL: %s\n", curl_version()); */ - curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0L); - curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, 0L); - //curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1L); // this is useful for debug, but seems crash on libcurl/7.64.1 OpenSSL/1.1.1b zlib/1.2.8 librtmp/2.3 - } - if ( userpass != 0 ) - curl_easy_setopt(curl_handle,CURLOPT_USERPWD, userpass); - databuf = 0; - if ( params != 0 ) - { - if ( command != 0 && specialcase == 0 ) - { - len = strlen(params); - if ( len > 0 && params[0] == '[' && params[len-1] == ']' ) { - bracket0 = bracket1 = (char *)""; - } - else - { - bracket0 = (char *)"["; - bracket1 = (char *)"]"; - } - - databuf = (char *)malloc(256 + strlen(command) + strlen(params)); - sprintf(databuf,"{\"id\":\"jl777\",\"method\":\"%s\",\"params\":%s%s%s}",command,bracket0,params,bracket1); - //printf("url.(%s) userpass.(%s) databuf.(%s)\n",url,userpass,databuf); - // - } //else if ( specialcase != 0 ) fprintf(stderr,"databuf.(%s)\n",params); - curl_easy_setopt(curl_handle,CURLOPT_POST,1L); - if ( databuf != 0 ) - curl_easy_setopt(curl_handle,CURLOPT_POSTFIELDS,databuf); - else curl_easy_setopt(curl_handle,CURLOPT_POSTFIELDS,params); - } - //laststart = milliseconds(); - res = curl_easy_perform(curl_handle); - curl_slist_free_all(headers); - curl_easy_cleanup(curl_handle); - if ( databuf != 0 ) // clean up temporary buffer - { - free(databuf); - databuf = 0; - } - if ( res != CURLE_OK ) - { - numretries++; - if ( specialcase != 0 ) - { - fprintf(stderr,"<<<<<<<<<<< bitcoind_RPC.(%s): BTCD.%s timeout params.(%s) s.ptr.(%s) err.%d\n",url,command,params,s.ptr,res); - free(s.ptr); - return(0); - } - else if ( numretries >= 1 ) - { - fprintf(stderr,"%s: Maximum number of retries exceeded!\n", __FUNCTION__); - free(s.ptr); - return(0); - } - if ( (rand() % 1000) == 0 ) - printf( "curl_easy_perform() failed: %s %s.(%s %s), retries: %d\n",curl_easy_strerror(res),debugstr,url,command,numretries); - free(s.ptr); - sleep((1< (%s)\n",params,s.ptr); - count2++; - elapsedsum2 += (OS_milliseconds() - starttime); - if ( (count2 % 10000) == 0) - printf("%d: ave %9.6f | elapsed %.3f millis | NXT calls.(%s) cmd.(%s)\n",count2,elapsedsum2/count2,(double)(OS_milliseconds() - starttime),url,command); - return(s.ptr); - } - } - printf("bitcoind_RPC: impossible case\n"); - free(s.ptr); - return(0); -} - -static size_t WriteMemoryCallback(void *ptr,size_t size,size_t nmemb,void *data) -{ - size_t realsize = (size * nmemb); - struct MemoryStruct *mem = (struct MemoryStruct *)data; - mem->memory = (char *)((ptr != 0) ? realloc(mem->memory,mem->size + realsize + 1) : malloc(mem->size + realsize + 1)); - if ( mem->memory != 0 ) - { - if ( ptr != 0 ) - memcpy(&(mem->memory[mem->size]),ptr,realsize); - mem->size += realsize; - mem->memory[mem->size] = 0; - } - //printf("got %d bytes\n",(int32_t)(size*nmemb)); - return(realsize); -} - -char *curl_post(CURL **cHandlep,char *url,char *userpass,char *postfields,char *hdr0,char *hdr1,char *hdr2,char *hdr3) -{ - struct MemoryStruct chunk; CURL *cHandle; long code; struct curl_slist *headers = 0; - if ( (cHandle= *cHandlep) == NULL ) - *cHandlep = cHandle = curl_easy_init(); - else curl_easy_reset(cHandle); - //#ifdef DEBUG - //curl_easy_setopt(cHandle,CURLOPT_VERBOSE, 1); - //#endif - curl_easy_setopt(cHandle,CURLOPT_USERAGENT,"mozilla/4.0");//"Mozilla/4.0 (compatible; )"); - curl_easy_setopt(cHandle,CURLOPT_SSL_VERIFYPEER,0); - //curl_easy_setopt(cHandle,CURLOPT_SSLVERSION,1); - curl_easy_setopt(cHandle,CURLOPT_URL,url); - curl_easy_setopt(cHandle,CURLOPT_CONNECTTIMEOUT,10); - if ( userpass != 0 && userpass[0] != 0 ) - curl_easy_setopt(cHandle,CURLOPT_USERPWD,userpass); - if ( postfields != 0 && postfields[0] != 0 ) - { - curl_easy_setopt(cHandle,CURLOPT_POST,1); - curl_easy_setopt(cHandle,CURLOPT_POSTFIELDS,postfields); - } - if ( hdr0 != NULL && hdr0[0] != 0 ) - { - //printf("HDR0.(%s) HDR1.(%s) HDR2.(%s) HDR3.(%s)\n",hdr0!=0?hdr0:"",hdr1!=0?hdr1:"",hdr2!=0?hdr2:"",hdr3!=0?hdr3:""); - headers = curl_slist_append(headers,hdr0); - if ( hdr1 != 0 && hdr1[0] != 0 ) - headers = curl_slist_append(headers,hdr1); - if ( hdr2 != 0 && hdr2[0] != 0 ) - headers = curl_slist_append(headers,hdr2); - if ( hdr3 != 0 && hdr3[0] != 0 ) - headers = curl_slist_append(headers,hdr3); - } //headers = curl_slist_append(0,"Expect:"); - if ( headers != 0 ) - curl_easy_setopt(cHandle,CURLOPT_HTTPHEADER,headers); - //res = curl_easy_perform(cHandle); - memset(&chunk,0,sizeof(chunk)); - curl_easy_setopt(cHandle,CURLOPT_WRITEFUNCTION,WriteMemoryCallback); - curl_easy_setopt(cHandle,CURLOPT_WRITEDATA,(void *)&chunk); - curl_easy_perform(cHandle); - curl_easy_getinfo(cHandle,CURLINFO_RESPONSE_CODE,&code); - if ( headers != 0 ) - curl_slist_free_all(headers); - if ( code != 200 ) - printf("(%s) server responded with code %ld (%s)\n",url,code,chunk.memory); - return(chunk.memory); -} - -char *komodo_issuemethod(char *userpass,char *method,char *params,uint16_t port) -{ - //static void *cHandle; - char url[512],*retstr=0,*retstr2=0,postdata[8192]; - if ( params == 0 || params[0] == 0 ) - params = (char *)"[]"; - if ( strlen(params) < sizeof(postdata)-128 ) - { - sprintf(url,(char *)"http://127.0.0.1:%u",port); - sprintf(postdata,"{\"method\":\"%s\",\"params\":%s}",method,params); - //printf("[%s] (%s) postdata.(%s) params.(%s) USERPASS.(%s)\n",SMART_CHAIN_SYMBOL,url,postdata,params,KMDUSERPASS); - retstr2 = bitcoind_RPC(&retstr,(char *)"debug",url,userpass,method,params); - //retstr = curl_post(&cHandle,url,USERPASS,postdata,0,0,0,0); - } - return(retstr2); -} - -int32_t notarizedtxid_height(char *dest,char *txidstr,int32_t *kmdnotarized_heightp) -{ - char *jsonstr,params[256],*userpass; uint16_t port; cJSON *json,*item; int32_t height = 0,txid_height = 0,txid_confirmations = 0; - params[0] = 0; - *kmdnotarized_heightp = 0; - if ( strcmp(dest,"KMD") == 0 ) - { - port = KMD_PORT; - userpass = KMDUSERPASS; - } - else if ( strcmp(dest,"BTC") == 0 ) - { - port = 8332; - userpass = BTCUSERPASS; - } - else return(0); - if ( userpass[0] != 0 ) - { - if ( (jsonstr= komodo_issuemethod(userpass,(char *)"getinfo",params,port)) != 0 ) - { - //printf("(%s)\n",jsonstr); - if ( (json= cJSON_Parse(jsonstr)) != 0 ) - { - if ( (item= jobj(json,(char *)"result")) != 0 ) - { - height = jint(item,(char *)"blocks"); - *kmdnotarized_heightp = strcmp(dest,"KMD") == 0 ? jint(item,(char *)"notarized") : height; - } - free_json(json); - } - free(jsonstr); - } - sprintf(params,"[\"%s\", 1]",txidstr); - if ( (jsonstr= komodo_issuemethod(userpass,(char *)"getrawtransaction",params,port)) != 0 ) - { - //printf("(%s)\n",jsonstr); - if ( (json= cJSON_Parse(jsonstr)) != 0 ) - { - if ( (item= jobj(json,(char *)"result")) != 0 ) - { - txid_confirmations = jint(item,(char *)"rawconfirmations"); - if ( txid_confirmations > 0 && height > txid_confirmations ) - txid_height = height - txid_confirmations; - else txid_height = height; - //printf("height.%d tconfs.%d txid_height.%d\n",height,txid_confirmations,txid_height); - } - free_json(json); - } - free(jsonstr); - } - } - return(txid_height); -} - -int32_t komodo_verifynotarizedscript(int32_t height,uint8_t *script,int32_t len,uint256 NOTARIZED_HASH) -{ - int32_t i; uint256 hash; char params[256]; - for (i=0; i<32; i++) - ((uint8_t *)&hash)[i] = script[2+i]; - if ( hash == NOTARIZED_HASH ) - return(1); - for (i=0; i<32; i++) - printf("%02x",((uint8_t *)&NOTARIZED_HASH)[i]); - printf(" notarized, "); - for (i=0; i<32; i++) - printf("%02x",((uint8_t *)&hash)[i]); - printf(" opreturn from [%s] ht.%d MISMATCHED\n",SMART_CHAIN_SYMBOL,height); - return(-1); -} - -void komodo_reconsiderblock(uint256 blockhash) -{ - char params[256],*jsonstr,*hexstr; - sprintf(params,"[\"%s\"]",blockhash.ToString().c_str()); - if ( (jsonstr= komodo_issuemethod(ASSETCHAINS_USERPASS,(char *)"reconsiderblock",params,ASSETCHAINS_RPCPORT)) != 0 ) - { - //fprintf(stderr,"komodo_reconsiderblock.(%s) (%s %u) -> (%s)\n",params,ASSETCHAINS_USERPASS,ASSETCHAINS_RPCPORT,jsonstr); - free(jsonstr); - } - //fprintf(stderr,"komodo_reconsiderblock.(%s) (%s %u) -> NULL\n",params,ASSETCHAINS_USERPASS,ASSETCHAINS_RPCPORT); -} - -int32_t komodo_verifynotarization(char *symbol,char *dest,int32_t height,int32_t NOTARIZED_HEIGHT,uint256 NOTARIZED_HASH,uint256 NOTARIZED_DESTTXID) -{ - char params[256],*jsonstr,*hexstr; uint8_t *script,_script[8192]; int32_t n,len,retval = -1; cJSON *json,*txjson,*vouts,*vout,*skey; - script = _script; - /*params[0] = '['; - params[1] = '"'; - for (i=0; i<32; i++) - sprintf(¶ms[i*2 + 2],"%02x",((uint8_t *)&NOTARIZED_DESTTXID)[31-i]); - strcat(params,"\", 1]");*/ - sprintf(params,"[\"%s\", 1]",NOTARIZED_DESTTXID.ToString().c_str()); - if ( strcmp(symbol,SMART_CHAIN_SYMBOL[0]==0?(char *)"KMD":SMART_CHAIN_SYMBOL) != 0 ) - return(0); - if ( 0 && SMART_CHAIN_SYMBOL[0] != 0 ) - printf("[%s] src.%s dest.%s params.[%s] ht.%d notarized.%d\n",SMART_CHAIN_SYMBOL,symbol,dest,params,height,NOTARIZED_HEIGHT); - if ( strcmp(dest,"KMD") == 0 ) - { - if ( KMDUSERPASS[0] != 0 ) - { - if ( SMART_CHAIN_SYMBOL[0] != 0 ) - { - jsonstr = komodo_issuemethod(KMDUSERPASS,(char *)"getrawtransaction",params,KMD_PORT); - //printf("userpass.(%s) got (%s)\n",KMDUSERPASS,jsonstr); - } - }//else jsonstr = _dex_getrawtransaction(); - else return(0); // need universal way to issue DEX* API, since notaries mine most blocks, this ok - } - else if ( strcmp(dest,"BTC") == 0 ) - { - if ( BTCUSERPASS[0] != 0 ) - { - //printf("BTCUSERPASS.(%s)\n",BTCUSERPASS); - jsonstr = komodo_issuemethod(BTCUSERPASS,(char *)"getrawtransaction",params,8332); - } - //else jsonstr = _dex_getrawtransaction(); - else return(0); - } - else - { - printf("[%s] verifynotarization error unexpected dest.(%s)\n",SMART_CHAIN_SYMBOL,dest); - return(-1); - } - if ( jsonstr != 0 ) - { - if ( (json= cJSON_Parse(jsonstr)) != 0 ) - { - if ( (txjson= jobj(json,(char *)"result")) != 0 && (vouts= jarray(&n,txjson,(char *)"vout")) > 0 ) - { - vout = jitem(vouts,n-1); - if ( 0 && SMART_CHAIN_SYMBOL[0] != 0 ) - printf("vout.(%s)\n",jprint(vout,0)); - if ( (skey= jobj(vout,(char *)"scriptPubKey")) != 0 ) - { - if ( (hexstr= jstr(skey,(char *)"hex")) != 0 ) - { - //printf("HEX.(%s) vs hash.%s\n",hexstr,NOTARIZED_HASH.ToString().c_str()); - len = strlen(hexstr) >> 1; - decode_hex(script,len,hexstr); - if ( script[1] == 0x4c ) - { - script++; - len--; - } - else if ( script[1] == 0x4d ) - { - script += 2; - len -= 2; - } - retval = komodo_verifynotarizedscript(height,script,len,NOTARIZED_HASH); - } - } - } - free_json(txjson); - } - free(jsonstr); - } - return(retval); -} - -CScript komodo_makeopret(CBlock *pblock, bool fNew) -{ - std::vector vLeaves; - vLeaves.push_back(pblock->hashPrevBlock); - for (int32_t i = 0; i < pblock->vtx.size()-(fNew ? 0 : 1); i++) - vLeaves.push_back(pblock->vtx[i].GetHash()); - uint256 merkleroot = GetMerkleRoot(vLeaves); - CScript opret; - opret << OP_RETURN << E_MARSHAL(ss << merkleroot); - return(opret); -} - -/*uint256 komodo_getblockhash(int32_t height) - { - uint256 hash; char params[128],*hexstr,*jsonstr; cJSON *result; int32_t i; uint8_t revbuf[32]; - memset(&hash,0,sizeof(hash)); - sprintf(params,"[%d]",height); - if ( (jsonstr= komodo_issuemethod(KMDUSERPASS,(char *)"getblockhash",params,BITCOIND_RPCPORT)) != 0 ) - { - if ( (result= cJSON_Parse(jsonstr)) != 0 ) - { - if ( (hexstr= jstr(result,(char *)"result")) != 0 ) - { - if ( is_hexstr(hexstr,0) == 64 ) - { - decode_hex(revbuf,32,hexstr); - for (i=0; i<32; i++) - ((uint8_t *)&hash)[i] = revbuf[31-i]; - } - } - free_json(result); - } - printf("KMD hash.%d (%s) %x\n",height,jsonstr,*(uint32_t *)&hash); - free(jsonstr); - } - return(hash); - } - - uint256 _komodo_getblockhash(int32_t height);*/ - -uint64_t komodo_seed(int32_t height) -{ - uint64_t seed = 0; - /*if ( 0 ) // problem during init time, seeds are needed for loading blockindex, so null seeds... - { - uint256 hash,zero; CBlockIndex *pindex; - memset(&hash,0,sizeof(hash)); - memset(&zero,0,sizeof(zero)); - if ( height > 10 ) - height -= 10; - if ( SMART_CHAIN_SYMBOL[0] == 0 ) - hash = _komodo_getblockhash(height); - if ( memcmp(&hash,&zero,sizeof(hash)) == 0 ) - hash = komodo_getblockhash(height); - int32_t i; - for (i=0; i<32; i++) - printf("%02x",((uint8_t *)&hash)[i]); - printf(" seed.%d\n",height); - seed = arith_uint256(hash.GetHex()).GetLow64(); - } - else*/ - { - seed = (height << 13) ^ (height << 2); - seed <<= 21; - seed |= (height & 0xffffffff); - seed ^= (seed << 17) ^ (seed << 1); - } - return(seed); -} - -uint32_t komodo_txtime(CScript &opret,uint64_t *valuep,uint256 hash, int32_t n, char *destaddr) -{ - CTxDestination address; CTransaction tx; uint256 hashBlock; int32_t numvouts; - *valuep = 0; - if (!GetTransaction(hash, tx, -#ifndef HUSH_ZCASH - Params().GetConsensus(), -#endif - hashBlock, true)) - { - //fprintf(stderr,"ERROR: %s/v%d locktime.%u\n",hash.ToString().c_str(),n,(uint32_t)tx.nLockTime); - return(0); - } - numvouts = tx.vout.size(); - //fprintf(stderr,"%s/v%d locktime.%u\n",hash.ToString().c_str(),n,(uint32_t)tx.nLockTime); - if ( n < numvouts ) - { - *valuep = tx.vout[n].nValue; - opret = tx.vout[numvouts-1].scriptPubKey; - if (ExtractDestination(tx.vout[n].scriptPubKey, address)) - strcpy(destaddr,CBitcoinAddress(address).ToString().c_str()); - } - return(tx.nLockTime); -} - -CBlockIndex *komodo_getblockindex(uint256 hash) -{ - BlockMap::const_iterator it = mapBlockIndex.find(hash); - return((it != mapBlockIndex.end()) ? it->second : NULL); -} - -uint32_t komodo_txtime2(uint64_t *valuep,uint256 hash,int32_t n,char *destaddr) -{ - CTxDestination address; CBlockIndex *pindex; CTransaction tx; uint256 hashBlock; uint32_t txtime = 0; - *valuep = 0; - if (!GetTransaction(hash, tx, -#ifndef HUSH_ZCASH - Params().GetConsensus(), -#endif - hashBlock, true)) - { - //fprintf(stderr,"ERROR: %s/v%d locktime.%u\n",hash.ToString().c_str(),n,(uint32_t)tx.nLockTime); - return(0); - } - if ( (pindex= komodo_getblockindex(hashBlock)) != 0 ) - txtime = pindex->nTime; - else txtime = tx.nLockTime; - //fprintf(stderr,"%s/v%d locktime.%u\n",hash.ToString().c_str(),n,(uint32_t)tx.nLockTime); - if ( n < tx.vout.size() ) - { - *valuep = tx.vout[n].nValue; - if (ExtractDestination(tx.vout[n].scriptPubKey, address)) - strcpy(destaddr,CBitcoinAddress(address).ToString().c_str()); - } - return(txtime); -} - -int32_t komodo_WhoStaked(CBlock *pblock, CTxDestination &addressout) -{ - int32_t n,vout; uint32_t txtime; uint64_t value; char voutaddr[64],destaddr[64]; CTxDestination voutaddress; uint256 txid; CScript opret; - if ( (n= pblock->vtx.size()) > 1 && pblock->vtx[n-1].vin.size() == 1 && pblock->vtx[n-1].vout.size() == 1 ) - { - txid = pblock->vtx[n-1].vin[0].prevout.hash; - vout = pblock->vtx[n-1].vin[0].prevout.n; - txtime = komodo_txtime(opret,&value,txid,vout,destaddr); - if ( ExtractDestination(pblock->vtx[n-1].vout[0].scriptPubKey,voutaddress) ) - { - strcpy(voutaddr,CBitcoinAddress(voutaddress).ToString().c_str()); - if ( strcmp(destaddr,voutaddr) == 0 && pblock->vtx[n-1].vout[0].nValue == value ) - { - //fprintf(stderr,"is PoS block!\n"); - addressout = voutaddress; - return(1); - } - } - } - return(0); -} - -bool komodo_checkopret(CBlock *pblock, CScript &merkleroot) -{ - merkleroot = pblock->vtx.back().vout.back().scriptPubKey; - return(merkleroot.IsOpReturn() && merkleroot == komodo_makeopret(pblock, false)); -} - - -extern const uint32_t nHushHardforkHeight; - -bool hush_hardfork_active(uint32_t time) -{ - //This allows simulating a different height via CLI option, with hardcoded height as default - uint32_t nHardForkHeight = GetArg("-hardfork-height", nHushHardforkHeight); - bool isactive = chainActive.Height() > nHardForkHeight; - if(fDebug) { - //fprintf(stderr, "%s: active=%d at height=%d and forkheight=%d\n", __FUNCTION__, (int)isactive, chainActive.Height(), nHardForkHeight); - } - return isactive; -} - -int32_t komodo_isPoS(CBlock *pblock,int32_t height,bool fJustCheck) -{ - return(0); -} - -void komodo_disconnect(CBlockIndex *pindex,CBlock& block) -{ - char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; - //fprintf(stderr,"disconnect ht.%d\n",pindex->GetHeight()); - komodo_init(pindex->GetHeight()); - if ( (sp= hush_stateptr(symbol,dest)) != 0 ) - { - //sp->rewinding = pindex->GetHeight(); - //fprintf(stderr,"-%d ",pindex->GetHeight()); - } else printf("komodo_disconnect: ht.%d cant get hush_state.(%s)\n",pindex->GetHeight(),SMART_CHAIN_SYMBOL); -} - -int32_t komodo_is_notarytx(const CTransaction& tx) -{ - uint8_t *ptr; static uint8_t crypto555[33]; - if ( tx.vout.size() > 0 ) - { - ptr = (uint8_t *)&tx.vout[0].scriptPubKey[0]; - if ( ptr != 0 ) - { - if ( crypto555[0] == 0 ) - decode_hex(crypto555,33,(char *)CRYPTO555_PUBSECPSTR); - if ( memcmp(ptr+1,crypto555,33) == 0 ) - { - //printf("found notarytx\n"); - return(1); - } - } - } - return(0); -} - -int32_t hush_block2height(CBlock *block) -{ - static uint32_t match,mismatch; - int32_t i,n,height2=-1,height = 0; uint8_t *ptr; CBlockIndex *pindex = NULL; - BlockMap::const_iterator it = mapBlockIndex.find(block->GetHash()); - if ( it != mapBlockIndex.end() && (pindex = it->second) != 0 ) - { - height2 = (int32_t)pindex->GetHeight(); - if ( height2 >= 0 ) - return(height2); - } - if ( pindex && block != 0 && block->vtx[0].vin.size() > 0 ) - { - ptr = (uint8_t *)&block->vtx[0].vin[0].scriptSig[0]; - if ( ptr != 0 && block->vtx[0].vin[0].scriptSig.size() > 5 ) - { - //for (i=0; i<6; i++) - // printf("%02x",ptr[i]); - n = ptr[0]; - for (i=0; ivtx[0].vin[0].scriptSig.size(),height); - } - //komodo_init(height); - } - if ( height != height2 ) - { - //fprintf(stderr,"block2height height.%d vs height2.%d, match.%d mismatch.%d\n",height,height2,match,mismatch); - mismatch++; - if ( height2 >= 0 ) - height = height2; - } else match++; - return(height); -} - -int32_t komodo_block2pubkey33(uint8_t *pubkey33,CBlock *block) -{ - int32_t n; - if ( HUSH_LOADINGBLOCKS == 0 ) - memset(pubkey33,0xff,33); - else memset(pubkey33,0,33); - if ( block->vtx[0].vout.size() > 0 ) - { - txnouttype whichType; - vector> vch = vector>(); - if (Solver(block->vtx[0].vout[0].scriptPubKey, whichType, vch) && whichType == TX_PUBKEY) - { - CPubKey pubKey(vch[0]); - if (pubKey.IsValid()) - { - memcpy(pubkey33,vch[0].data(),33); - return true; - } - else memset(pubkey33,0,33); - } - else memset(pubkey33,0,33); - } - return(0); -} - -int32_t komodo_blockload(CBlock& block,CBlockIndex *pindex) -{ - block.SetNull(); - // Open history file to read - CAutoFile filein(OpenBlockFile(pindex->GetBlockPos(),true),SER_DISK,CLIENT_VERSION); - if (filein.IsNull()) - return(-1); - // Read block - try { filein >> block; } - catch (const std::exception& e) - { - fprintf(stderr,"readblockfromdisk err B\n"); - return(-1); - } - return(0); -} - -uint32_t komodo_chainactive_timestamp() -{ - if ( chainActive.LastTip() != 0 ) - return((uint32_t)chainActive.LastTip()->GetBlockTime()); - else return(0); -} - -CBlockIndex *komodo_chainactive(int32_t height) -{ - if ( chainActive.LastTip() != 0 ) - { - if ( height <= chainActive.LastTip()->GetHeight() ) - return(chainActive[height]); - // else fprintf(stderr,"komodo_chainactive height %d > active.%d\n",height,chainActive.LastTip()->GetHeight()); - } - //fprintf(stderr,"komodo_chainactive null chainActive.LastTip() height %d\n",height); - return(0); -} - -uint32_t komodo_heightstamp(int32_t height) -{ - CBlockIndex *ptr; - if ( height > 0 && (ptr= komodo_chainactive(height)) != 0 ) - return(ptr->nTime); - //else fprintf(stderr,"komodo_heightstamp null ptr for block.%d\n",height); - return(0); -} - -/*void komodo_pindex_init(CBlockIndex *pindex,int32_t height) gets data corrupted -{ - int32_t i,num; uint8_t pubkeys[64][33]; CBlock block; - if ( pindex->didinit != 0 ) - return; - //printf("pindex.%d komodo_pindex_init notary.%d from height.%d\n",pindex->GetHeight(),pindex->notaryid,height); - if ( pindex->didinit == 0 ) - { - pindex->notaryid = -1; - if ( HUSH_LOADINGBLOCKS == 0 ) - memset(pindex->pubkey33,0xff,33); - else memset(pindex->pubkey33,0,33); - if ( komodo_blockload(block,pindex) == 0 ) - { - komodo_block2pubkey33(pindex->pubkey33,&block); - //for (i=0; i<33; i++) - // fprintf(stderr,"%02x",pindex->pubkey33[i]); - //fprintf(stderr," set pubkey at height %d/%d\n",pindex->GetHeight(),height); - //if ( pindex->pubkey33[0] == 2 || pindex->pubkey33[0] == 3 ) - // pindex->didinit = (HUSH_LOADINGBLOCKS == 0); - } // else fprintf(stderr,"error loading block at %d/%d",pindex->GetHeight(),height); - } - if ( pindex->didinit != 0 && pindex->GetHeight() >= 0 && (num= hush_notaries(pubkeys,(int32_t)pindex->GetHeight(),(uint32_t)pindex->nTime)) > 0 ) - { - for (i=0; ipubkey33,33) == 0 ) - { - pindex->notaryid = i; - break; - } - } - if ( 0 && i == num ) - { - for (i=0; i<33; i++) - fprintf(stderr,"%02x",pindex->pubkey33[i]); - fprintf(stderr," unmatched pubkey at height %d/%d\n",pindex->GetHeight(),height); - } - } -}*/ - -void komodo_index2pubkey33(uint8_t *pubkey33,CBlockIndex *pindex,int32_t height) -{ - int32_t num,i; CBlock block; - memset(pubkey33,0,33); - if ( pindex != 0 ) - { - if ( komodo_blockload(block,pindex) == 0 ) - komodo_block2pubkey33(pubkey33,&block); - } -} - -/*int8_t komodo_minerid(int32_t height,uint8_t *destpubkey33) -{ - int32_t num,i,numnotaries; CBlockIndex *pindex; uint32_t timestamp=0; uint8_t pubkey33[33],pubkeys[64][33]; - if ( (pindex= chainActive[height]) != 0 ) - { - if ( pindex->didinit != 0 ) - { - if ( destpubkey33 != 0 ) - memcpy(destpubkey33,pindex->pubkey33,33); - return(pindex->notaryid); - } - komodo_index2pubkey33(pubkey33,pindex,height); - if ( destpubkey33 != 0 ) - memcpy(destpubkey33,pindex->pubkey33,33); - if ( pindex->didinit != 0 ) - return(pindex->notaryid); - timestamp = pindex->GetBlockTime(); - if ( (num= hush_notaries(pubkeys,height,timestamp)) > 0 ) - { - for (i=0; inTime; - if ( komodo_blockload(block,pindex) == 0 ) - { - komodo_block2pubkey33(pubkeys[i],&block); - for (j=0; j= 0 && i > 0 && mids[i] == mids[0] ) - duplicate++; - } - } - if ( i == 66 && duplicate == 0 && (height > 186233 || *nonzpkeysp > 0) ) - return(1); - else return(0); -} - -int32_t komodo_minerids(uint8_t *minerids,int32_t height,int32_t width) -{ - int32_t i,j,nonz,numnotaries; CBlock block; CBlockIndex *pindex; uint8_t notarypubs33[64][33],pubkey33[33]; - numnotaries = hush_notaries(notarypubs33,height,0); - for (i=nonz=0; i= 82000 ) - { - if ( notaryid >= 0 ) - { - for (i=1; i<66; i++) - { - if ( mids[i] == notaryid ) - { - if ( height > 792000 ) - { - for (j=0; j<66; j++) - fprintf(stderr,"%d ",mids[j]); - fprintf(stderr,"ht.%d repeat notaryid.%d in mids[%d]\n",height,notaryid,i); - return(-1); - } else break; - } - } - if ( blocktime != 0 && blocktimes[1] != 0 && blocktime < blocktimes[1]+57 ) - { - if ( height > 807000 ) - return(-2); - } - return(1); - } else return(0); - } - else - { - if ( height >= 34000 && notaryid >= 0 ) - { - if ( height < 79693 ) - limit = 64; - else if ( height < 82000 ) - limit = 8; - else limit = 66; - for (i=1; i 225000 ) - return(-1); - } - } - //fprintf(stderr,"special notaryid.%d ht.%d limit.%d\n",notaryid,height,limit); - return(1); - } - } - return(0); -} - -int32_t komodo_MoM(int32_t *notarized_heightp,uint256 *MoMp,uint256 *kmdtxidp,int32_t nHeight,uint256 *MoMoMp,int32_t *MoMoMoffsetp,int32_t *MoMoMdepthp,int32_t *kmdstartip,int32_t *kmdendip) -{ - int32_t depth,notarized_ht; uint256 MoM,kmdtxid; - depth = komodo_MoMdata(¬arized_ht,&MoM,&kmdtxid,nHeight,MoMoMp,MoMoMoffsetp,MoMoMdepthp,kmdstartip,kmdendip); - memset(MoMp,0,sizeof(*MoMp)); - memset(kmdtxidp,0,sizeof(*kmdtxidp)); - *notarized_heightp = 0; - if ( depth != 0 && notarized_ht > 0 && nHeight > notarized_ht-depth && nHeight <= notarized_ht ) - { - *MoMp = MoM; - *notarized_heightp = notarized_ht; - *kmdtxidp = kmdtxid; - } - return(depth); -} - -CBlockIndex *komodo_blockindex(uint256 hash) -{ - BlockMap::const_iterator it; CBlockIndex *pindex = 0; - if ( (it = mapBlockIndex.find(hash)) != mapBlockIndex.end() ) - pindex = it->second; - return(pindex); -} - -int32_t komodo_blockheight(uint256 hash) -{ - BlockMap::const_iterator it; CBlockIndex *pindex = 0; - if ( (it = mapBlockIndex.find(hash)) != mapBlockIndex.end() ) - { - if ( (pindex= it->second) != 0 ) - return(pindex->GetHeight()); - } - return(0); -} - -uint32_t komodo_blocktime(uint256 hash) -{ - BlockMap::const_iterator it; CBlockIndex *pindex = 0; - if ( (it = mapBlockIndex.find(hash)) != mapBlockIndex.end() ) - { - if ( (pindex= it->second) != 0 ) - return(pindex->nTime); - } - return(0); -} - -int32_t komodo_checkpoint(int32_t *notarized_heightp,int32_t nHeight,uint256 hash) -{ - int32_t notarized_height,MoMdepth; uint256 MoM,notarized_hash,notarized_desttxid; CBlockIndex *notary,*pindex; - if ( (pindex= chainActive.LastTip()) == 0 ) - return(-1); - notarized_height = komodo_notarizeddata(pindex->GetHeight(),¬arized_hash,¬arized_desttxid); - *notarized_heightp = notarized_height; - BlockMap::const_iterator it; - if ( notarized_height >= 0 && notarized_height <= pindex->GetHeight() && (it = mapBlockIndex.find(notarized_hash)) != mapBlockIndex.end() && (notary = it->second) != NULL ) - { - //printf("nHeight.%d -> (%d %s)\n",pindex->Tip()->GetHeight(),notarized_height,notarized_hash.ToString().c_str()); - if ( notary->GetHeight() == notarized_height ) // if notarized_hash not in chain, reorg - { - if ( nHeight < notarized_height ) - { - //fprintf(stderr,"[%s] nHeight.%d < NOTARIZED_HEIGHT.%d\n",SMART_CHAIN_SYMBOL,nHeight,notarized_height); - return(-1); - } - else if ( nHeight == notarized_height && memcmp(&hash,¬arized_hash,sizeof(hash)) != 0 ) - { - fprintf(stderr,"[%s] nHeight.%d == NOTARIZED_HEIGHT.%d, diff hash\n",SMART_CHAIN_SYMBOL,nHeight,notarized_height); - return(-1); - } - } //else fprintf(stderr,"[%s] unexpected error notary_hash %s ht.%d at ht.%d\n",SMART_CHAIN_SYMBOL,notarized_hash.ToString().c_str(),notarized_height,notary->GetHeight()); - } - //else if ( notarized_height > 0 && notarized_height != 73880 && notarized_height >= 170000 ) - // fprintf(stderr,"[%s] couldnt find notarized.(%s %d) ht.%d\n",SMART_CHAIN_SYMBOL,notarized_hash.ToString().c_str(),notarized_height,pindex->GetHeight()); - return(0); -} - -uint32_t komodo_interest_args(uint32_t *txheighttimep,int32_t *txheightp,uint32_t *tiptimep,uint64_t *valuep,uint256 hash,int32_t n) -{ - LOCK(cs_main); - CTransaction tx; uint256 hashBlock; CBlockIndex *pindex,*tipindex; - *txheighttimep = *txheightp = *tiptimep = 0; - *valuep = 0; - if ( !GetTransaction(hash,tx,hashBlock,true) ) - return(0); - uint32_t locktime = 0; - if ( n < tx.vout.size() ) - { - if ( (pindex= komodo_getblockindex(hashBlock)) != 0 ) - { - *valuep = tx.vout[n].nValue; - *txheightp = pindex->GetHeight(); - *txheighttimep = pindex->nTime; - if ( *tiptimep == 0 && (tipindex= chainActive.LastTip()) != 0 ) - *tiptimep = (uint32_t)tipindex->nTime; - locktime = tx.nLockTime; - //fprintf(stderr,"tx locktime.%u %.8f height.%d | tiptime.%u\n",locktime,(double)*valuep/COIN,*txheightp,*tiptimep); - } - } - return(locktime); -} - -uint64_t komodo_interest(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uint32_t tiptime); - -uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 hash,int32_t n,int32_t checkheight,uint64_t checkvalue,int32_t tipheight) -{ - uint64_t value; uint32_t tiptime=0,txheighttimep; CBlockIndex *pindex; - if ( (pindex= chainActive[tipheight]) != 0 ) - tiptime = (uint32_t)pindex->nTime; - else fprintf(stderr,"cant find height[%d]\n",tipheight); - if ( (*locktimep= komodo_interest_args(&txheighttimep,txheightp,&tiptime,&value,hash,n)) != 0 ) - { - if ( (checkvalue == 0 || value == checkvalue) && (checkheight == 0 || *txheightp == checkheight) ) - return(komodo_interest(*txheightp,value,*locktimep,tiptime)); - //fprintf(stderr,"nValue %llu lock.%u:%u nTime.%u -> %llu\n",(long long)coins.vout[n].nValue,coins.nLockTime,timestamp,pindex->nTime,(long long)interest); - else fprintf(stderr,"komodo_accrued_interest value mismatch %llu vs %llu or height mismatch %d vs %d\n",(long long)value,(long long)checkvalue,*txheightp,checkheight); - } - return(0); -} - -int32_t komodo_nextheight() -{ - CBlockIndex *pindex; int32_t ht; - if ( (pindex= chainActive.LastTip()) != 0 && (ht= pindex->GetHeight()) > 0 ) - return(ht+1); - else return(hush_longestchain() + 1); -} - -int32_t komodo_isrealtime(int32_t *kmdheightp) -{ - struct hush_state *sp; CBlockIndex *pindex; - if ( (sp= hush_stateptrget((char *)"KMD")) != 0 ) - *kmdheightp = sp->CURRENT_HEIGHT; - else *kmdheightp = 0; - if ( (pindex= chainActive.LastTip()) != 0 && pindex->GetHeight() >= (int32_t)hush_longestchain() ) - return(1); - else return(0); -} - -int32_t komodo_validate_interest(const CTransaction &tx,int32_t txheight,uint32_t cmptime,int32_t dispflag) -{ - dispflag = 1; - if ( HUSH_REWIND == 0 && SMART_CHAIN_SYMBOL[0] == 0 && (int64_t)tx.nLockTime >= LOCKTIME_THRESHOLD ) //1473793441 ) - { - if ( txheight > 246748 ) - { - if ( txheight < 247205 ) - cmptime -= 16000; - if ( (int64_t)tx.nLockTime < cmptime-KOMODO_MAXMEMPOOLTIME ) - { - if ( tx.nLockTime != 1477258935 && dispflag != 0 ) - { - fprintf(stderr,"komodo_validate_interest.%d reject.%d [%d] locktime %u cmp2.%u\n",dispflag,txheight,(int32_t)(tx.nLockTime - (cmptime-KOMODO_MAXMEMPOOLTIME)),(uint32_t)tx.nLockTime,cmptime); - } - return(-1); - } - if ( 0 && dispflag != 0 ) - fprintf(stderr,"validateinterest.%d accept.%d [%d] locktime %u cmp2.%u\n",dispflag,(int32_t)txheight,(int32_t)(tx.nLockTime - (cmptime-KOMODO_MAXMEMPOOLTIME)),(int32_t)tx.nLockTime,cmptime); - } - } - return(0); -} - -/* - komodo_checkPOW (fast) is called early in the process and should only refer to data immediately available. it is a filter to prevent bad blocks from going into the local DB. The more blocks we can filter out at this stage, the less junk in the local DB that will just get purged later on. - - komodo_checkPOW (slow) is called right before connecting blocks so all prior blocks can be assumed to be there and all checks must pass - - commission must be in coinbase.vout[1] and must be >= 10000 sats - PoS stake must be without txfee and in the last tx in the block at vout[0] - */ - -CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams); - -// This function defines the Hush Founders Reward (AKA Dev Tax) -// 10% of all block rewards go towards Hush core team -// If you do not like this, you are encouraged to fork the chain -// or start your own Hush Smart Chain: https://git.hush.is/hush/hush-smart-chains -// HUSH supply curve cannot be exactly represented via KMD AC CLI args, so we do it ourselves. -// You specify the BR, and the FR % gets added so 10% of 12.5 is 1.25 -// but to tell the AC params, I need to say "11% of 11.25" is 1.25 -// 11% ie. 1/9th cannot be exactly represented and so the FR has tiny amounts of error unless done manually -// This must be kept in sync with hush_block_subsidy() in hush_utils.h! -// Changing these functions are consensus changes! -// Here Be Dragons! -- Duke Leto -uint64_t hush_commission(int height) -{ - int32_t starting_commission = 125000000, HALVING1 = GetArg("-z2zheight",340000), - INTERVAL = GetArg("-ac_halving1",840000), TRANSITION = 129; - uint64_t commission = 0; - - //TODO: Likely a bug hiding here or at the next halving :) - //if( height >= HALVING1) { - if( height > HALVING1) { - // Block time going from 150s to 75s (half) means the interval between halvings - // must be twice as often, i.e. 840000*2=1680000 - // 840000 is ~4 years worth of 150s blocks - // With 150s blocks, we have 210,000 blocks per year - // With 75s blocks, we have 420,000 blocks per year - INTERVAL = GetArg("-ac_halving2",1680000); // ~4 years worth of 75s blocks - //fprintf(stderr,"%s: height=%d increasing interval to %d\n", __func__, height, INTERVAL); - } - - // Block 128 had a miner subsidy but no FR!!! Discovered by Denio - if (height < TRANSITION) { - commission = 0; - } else { - // Just like BTC, BRs in the far future will be slightly less than - // they should be because exact values are not integers, causing - // slightly less coins to be actually mined and small deviations - // to the ideal FR/devtax - if (height < HALVING1) { // before 1st Halving @ Block 340000 (Nov 2020) - commission = starting_commission; - } else if (height < 2020000 ) { - commission = 31250000; - } else if (height < 3700000 ) { - commission = 15625000; - } else if (height < 5380000 ) { - commission = 7812500; - } else if (height < 7060000 ) { - commission = 3906250; - } else if (height < 8740000 ) { - commission = 1953125; - } else if (height < 10420000) { - commission = 976562; // 0.5 puposhi deviation, all further BRs have deviation from ideal - } else if (height < 12100000) { - commission = 488281; - } else if (height < 15460000) { - commission = 244140; - } else if (height < 17140000) { - commission = 122070; - } else if (height < 18820000) { - commission = 61035; - } else if (height < 23860000) { - commission = 30517; - } else if (height < 23860000) { - commission = 15258; - } else if (height < 25540000) { - commission = 7629; - } else if (height < 27220000) { - commission = 3814; - } else if (height < 27220000) { - commission = 1907; - } else if (height < 28900000) { - commission = 953; - } else if (height < 30580000) { - commission = 476; - } else if (height < 32260000) { - commission = 238; - } else if (height < 33940000) { - commission = 119; - } else if (height < 35620000) { - commission = 59; - } else if (height < 37300000) { - commission = 29; - } else if (height < 38980000) { - commission = 14; - } else if (height < 40660000) { - commission = 7; - } else if (height < 42340000) { - commission = 3; - } else if (height < 44020000) { - commission = 1; - } else if (height < 45700000) { - // FR goes to zero at Halving 26 - commission = 0; - } else if (height < 47380000) { - // FR still zero at Halving 27 - commission = 0; - } else if (height < 49060000) { - // FR still zero at Halving 28 - commission = 0; - } else if (height < 50740000) { - // FR still zero at Halving 29 - commission = 0; - } else { - // enforce FR=0 for all other heights - // This over-rides the -ac_end param via HUSH3 cli args - commission = 0; - } - } - - if(fDebug) - fprintf(stderr,"%s: commission=%lu,interval=%d at height %d\n", __func__, commission, INTERVAL, height); - return commission; -} - -uint64_t the_commission(const CBlock *pblock,int32_t height) -{ - //fprintf(stderr,"%s at height=%d\n",__func__,height); - static bool didinit = false, ishush3 = false; - - if (!didinit) { - ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; - didinit = true; - fprintf(stderr,"%s: didinit ishush3=%d\n", __func__, ishush3); - } - - int32_t i,j,n=0,txn_count; int64_t nSubsidy; uint64_t commission,total = 0; - if ( ASSETCHAINS_FOUNDERS != 0 ) - { - nSubsidy = GetBlockSubsidy(height,Params().GetConsensus()); - if(fDebug) - fprintf(stderr,"ht.%d nSubsidy %.8f prod %llu\n",height,(double)nSubsidy/COIN,(long long)(nSubsidy * ASSETCHAINS_COMMISSION)); - commission = ((nSubsidy * ASSETCHAINS_COMMISSION) / COIN); - - if (ishush3) { - commission = hush_commission(height); - } - - if ( ASSETCHAINS_FOUNDERS > 1 ) - { - if ( (height % ASSETCHAINS_FOUNDERS) == 0 ) - { - if ( ASSETCHAINS_FOUNDERS_REWARD == 0 ) { - commission = commission * ASSETCHAINS_FOUNDERS; - } else { - commission = ASSETCHAINS_FOUNDERS_REWARD; - } - if(fDebug) - fprintf(stderr,"%s: set commission=%lu at height %d with\n",__func__,commission, height); - } else { - commission = 0; - } - } - } else if ( pblock != 0 ) { - txn_count = pblock->vtx.size(); - for (i=0; ivtx[i].vout.size(); - for (j=0; j 225000 && ASSETCHAINS_STAKED != 0 && txn_count > 1 && i == txn_count-1 && j == n-1 ) - break; - //fprintf(stderr,"(%d %.8f).%d ",i,dstr(pblock->vtx[i].vout[j].nValue),j); - if ( i != 0 || j != 1 ) - total += pblock->vtx[i].vout[j].nValue; - if ( total > 1000000 * COIN ) - { - total = 1000000 * COIN; - break; - } - } - } - commission = ((total / 10000) * ASSETCHAINS_COMMISSION) / 10000; - //commission = ((total * ASSETCHAINS_COMMISSION) / COIN); - } - if ( commission < 10000 ) - commission = 0; - if(fDebug) - fprintf(stderr,"%s: commission=%.8f at height=%d\n",__func__, (double)commission/COIN, height); - return(commission); -} - -uint32_t komodo_segid32(char *coinaddr) -{ - bits256 addrhash; - vcalc_sha256(0,(uint8_t *)&addrhash,(uint8_t *)coinaddr,(int32_t)strlen(coinaddr)); - return(addrhash.uints[0]); -} - -int8_t komodo_segid(int32_t nocache,int32_t height) -{ - CTxDestination voutaddress; CBlock block; CBlockIndex *pindex; uint64_t value; uint32_t txtime; char voutaddr[64],destaddr[64]; int32_t txn_count,vout; uint256 txid; CScript opret; int8_t segid = -1; - if ( height > 0 && (pindex= komodo_chainactive(height)) != 0 ) - { - if ( nocache == 0 && pindex->segid >= -1 ) - return(pindex->segid); - if ( komodo_blockload(block,pindex) == 0 ) - { - txn_count = block.vtx.size(); - if ( txn_count > 1 && block.vtx[txn_count-1].vin.size() == 1 && block.vtx[txn_count-1].vout.size() == 1 ) - { - txid = block.vtx[txn_count-1].vin[0].prevout.hash; - vout = block.vtx[txn_count-1].vin[0].prevout.n; - txtime = komodo_txtime(opret,&value,txid,vout,destaddr); - if ( ExtractDestination(block.vtx[txn_count-1].vout[0].scriptPubKey,voutaddress) ) - { - strcpy(voutaddr,CBitcoinAddress(voutaddress).ToString().c_str()); - if ( strcmp(destaddr,voutaddr) == 0 && block.vtx[txn_count-1].vout[0].nValue == value ) - { - segid = komodo_segid32(voutaddr) & 0x3f; - pindex->segid = segid; - //fprintf(stderr,"komodo_segid.(%d) -> %d\n",height,pindex->segid); - } - } else fprintf(stderr,"komodo_segid ht.%d couldnt extract voutaddress\n",height); - } - } - } - return(segid); -} - -void komodo_segids(uint8_t *hashbuf,int32_t height,int32_t n) -{ - static uint8_t prevhashbuf[100]; static int32_t prevheight; - int32_t i; - if ( height == prevheight && n == 100 ) - memcpy(hashbuf,prevhashbuf,100); - else - { - memset(hashbuf,0xff,n); - for (i=0; i 10 && (tipindex= komodo_chainactive(height - 1)) != 0 ) // disable offchain diffchange - { - diff = (nTime - tipindex->GetMedianTimePast()); - tipdiff = (nTime - tipindex->nTime); - if ( tipdiff > 13*ASSETCHAINS_BLOCKTIME ) - diff = tipdiff; - if ( diff >= 13 * ASSETCHAINS_BLOCKTIME && (height < 30 || tipdiff > 2*ASSETCHAINS_BLOCKTIME) ) - { - mult = diff - 12 * ASSETCHAINS_BLOCKTIME; - mult = (mult / ASSETCHAINS_BLOCKTIME) * ASSETCHAINS_BLOCKTIME + ASSETCHAINS_BLOCKTIME / 2; - origtarget = bnTarget; - bnTarget = bnTarget * arith_uint256(mult * mult); - easy.SetCompact(HUSH_MINDIFF_NBITS,&fNegative,&fOverflow); - if ( bnTarget < origtarget || bnTarget > easy ) // deal with overflow - { - bnTarget = easy; - fprintf(stderr,"tipdiff.%d diff.%d height.%d miner overflowed mult.%lld, set to mindiff\n",tipdiff,diff,height,(long long)mult); - } else fprintf(stderr,"tipdiff.%d diff.%d height.%d miner elapsed %d, adjust by factor of %lld\n",tipdiff,diff,height,diff,(long long)mult); - } //else fprintf(stderr,"height.%d tipdiff.%d diff %d, vs %d\n",height,tipdiff,diff,13*ASSETCHAINS_BLOCKTIME); - } else fprintf(stderr,"adaptive cant find height.%d\n",height); - return(bnTarget); -} - -arith_uint256 komodo_PoWtarget(int32_t *percPoSp,arith_uint256 target,int32_t height,int32_t goalperc) -{ - int32_t oldflag = 0,dispflag = 0; - CBlockIndex *pindex; arith_uint256 easydiff,bnTarget,hashval,sum,ave; bool fNegative,fOverflow; int32_t i,n,m,ht,percPoS,diff,val; - *percPoSp = percPoS = 0; - - if ( height <= 10 || (ASSETCHAINS_STAKED == 100 && height <= 100) ) - return(target); - - sum = arith_uint256(0); - ave = sum; - easydiff.SetCompact(STAKING_MIN_DIFF,&fNegative,&fOverflow); - for (i=n=m=0; i<100; i++) - { - ht = height - 100 + i; - if ( ht <= 1 ) - continue; - if ( (pindex= komodo_chainactive(ht)) != 0 ) - { - if ( komodo_segid(0,ht) >= 0 ) - { - n++; - percPoS++; - if ( dispflag != 0 && ASSETCHAINS_STAKED < 100 ) - fprintf(stderr,"0"); - } - else - { - if ( dispflag != 0 && ASSETCHAINS_STAKED < 100 ) - fprintf(stderr,"1"); - sum += UintToArith256(pindex->GetBlockHash()); - m++; - } - } //else fprintf(stderr, "pindex returned null ht.%i\n",ht); - if ( dispflag != 0 && ASSETCHAINS_STAKED < 100 && (i % 10) == 9 ) - fprintf(stderr," %d, ",percPoS); - } - if ( m+n < 100 ) - { - percPoS = ((percPoS * n) + (goalperc * (100-n))) / 100; - } - if ( dispflag != 0 && ASSETCHAINS_STAKED < 100 ) - fprintf(stderr," -> %d%% percPoS vs goalperc.%d ht.%d\n",percPoS,goalperc,height); - *percPoSp = percPoS; - if ( m > 0 ) - { - ave = (sum / arith_uint256(m)); - if ( ave > target ) - ave = target; - } else ave = target; //easydiff; //else return(target); - if ( percPoS == 0 ) - percPoS = 1; - if ( percPoS < goalperc ) // increase PoW diff -> lower bnTarget - { - if ( oldflag != 0 ) - bnTarget = (ave / arith_uint256(goalperc * goalperc * goalperc)) * arith_uint256(percPoS * percPoS); - else bnTarget = (ave / arith_uint256(goalperc * goalperc * goalperc * goalperc)) * arith_uint256(percPoS * percPoS); - if ( dispflag != 0 && ASSETCHAINS_STAKED < 100 ) - { - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&ave)[i]); - fprintf(stderr," increase diff -> "); - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[i]); - fprintf(stderr," floor diff "); - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&target)[i]); - fprintf(stderr," ht.%d percPoS.%d vs goal.%d -> diff %d\n",height,percPoS,goalperc,goalperc - percPoS); - } - } - else if ( percPoS > goalperc ) // decrease PoW diff -> raise bnTarget - { - if ( oldflag != 0 ) - { - bnTarget = ((ave * arith_uint256(goalperc)) + (easydiff * arith_uint256(percPoS))) / arith_uint256(percPoS + goalperc); - bnTarget = (bnTarget / arith_uint256(goalperc * goalperc)) * arith_uint256(percPoS * percPoS * percPoS); - } - else bnTarget = (ave / arith_uint256(goalperc * goalperc)) * arith_uint256(percPoS * percPoS * percPoS); - if ( bnTarget > easydiff ) - bnTarget = easydiff; - else if ( bnTarget < ave ) // overflow - { - bnTarget = ((ave * arith_uint256(goalperc)) + (easydiff * arith_uint256(percPoS))) / arith_uint256(percPoS + goalperc); - if ( bnTarget < ave ) - bnTarget = ave; - } - if ( dispflag != 0 ) - { - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&ave)[i]); - fprintf(stderr," decrease diff -> "); - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[i]); - fprintf(stderr," floor diff "); - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&target)[i]); - fprintf(stderr," ht.%d percPoS.%d vs goal.%d -> diff %d\n",height,percPoS,goalperc,goalperc - percPoS); - } - } - else - bnTarget = ave; // recent ave is perfect - return(bnTarget); -} - -uint32_t komodo_stake(int32_t validateflag,arith_uint256 bnTarget,int32_t nHeight,uint256 txid,int32_t vout,uint32_t blocktime,uint32_t prevtime,char *destaddr,int32_t PoSperc) -{ - bool fNegative,fOverflow; uint8_t hashbuf[256]; char address[64]; bits256 addrhash; arith_uint256 hashval,mindiff,ratio,coinage256; uint256 hash,pasthash; int32_t segid,minage,i,iter=0; int64_t diff=0; uint32_t txtime,segid32,winner = 0 ; uint64_t value,coinage; - txtime = komodo_txtime2(&value,txid,vout,address); - if ( validateflag == 0 ) - { - //fprintf(stderr,"blocktime.%u -> ",blocktime); - if ( blocktime < prevtime+3 ) - blocktime = prevtime+3; - if ( blocktime < GetTime()-60 ) - blocktime = GetTime()+30; - //fprintf(stderr,"blocktime.%u txtime.%u\n",blocktime,txtime); - } - if ( value == 0 || txtime == 0 || blocktime == 0 || prevtime == 0 ) - { - //fprintf(stderr,"komodo_stake null %.8f %u %u %u\n",dstr(value),txtime,blocktime,prevtime); - return(0); - } - if ( value < SATOSHIDEN ) - return(0); - value /= SATOSHIDEN; - mindiff.SetCompact(STAKING_MIN_DIFF,&fNegative,&fOverflow); - ratio = (mindiff / bnTarget); - if ( (minage= nHeight*3) > 6000 ) // about 100 blocks - minage = 6000; - komodo_segids(hashbuf,nHeight-101,100); - segid32 = komodo_stakehash(&hash,address,hashbuf,txid,vout); - segid = ((nHeight + segid32) & 0x3f); - for (iter=0; iter<600; iter++) - { - if ( blocktime+iter+segid*2 < txtime+minage ) - continue; - diff = (iter + blocktime - txtime - minage); - if ( diff < 0 ) - diff = 60; - else if ( diff > 3600*24*30 ) - { - //printf("diff.%d (iter.%d blocktime.%u txtime.%u minage.%d)\n",(int32_t)diff,iter,blocktime,txtime,(int32_t)minage); - diff = 3600*24*30; - } - if ( iter > 0 ) - diff += segid*2; - coinage = (value * diff); - if ( blocktime+iter+segid*2 > prevtime+480 ) - coinage *= ((blocktime+iter+segid*2) - (prevtime+400)); - coinage256 = arith_uint256(coinage+1); - hashval = ratio * (UintToArith256(hash) / coinage256); - if ( hashval <= bnTarget ) - { - winner = 1; - if ( validateflag == 0 ) - { - //fprintf(stderr,"winner blocktime.%u iter.%d segid.%d\n",blocktime,iter,segid); - blocktime += iter; - blocktime += segid * 2; - } - break; - } - if ( validateflag != 0 ) - { - /*for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&hashval)[i]); - fprintf(stderr," vs "); - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[i]); - fprintf(stderr," segid.%d iter.%d winner.%d coinage.%llu %d ht.%d t.%u v%d diff.%d\n",segid,iter,winner,(long long)coinage,(int32_t)(blocktime - txtime),nHeight,blocktime,(int32_t)value,(int32_t)diff); */ - break; - } - } - //fprintf(stderr,"iterated until i.%d winner.%d\n",i,winner); - if ( 0 && validateflag != 0 ) - { - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&hashval)[i]); - fprintf(stderr," vs "); - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[i]); - fprintf(stderr," segid.%d iter.%d winner.%d coinage.%llu %d ht.%d t.%u v%d diff.%d ht.%d\n",segid,iter,winner,(long long)coinage,(int32_t)(blocktime - txtime),nHeight,blocktime,(int32_t)value,(int32_t)diff,nHeight); - } - if ( nHeight < 10 ) - return(blocktime); - return(blocktime * winner); -} - -int32_t komodo_is_PoSblock(int32_t slowflag,int32_t height,CBlock *pblock,arith_uint256 bnTarget,arith_uint256 bhash) -{ - CBlockIndex *previndex,*pindex; char voutaddr[64],destaddr[64]; uint256 txid; uint32_t txtime,prevtime=0; int32_t ret,vout,PoSperc,txn_count,eligible=0,isPoS = 0,segid; uint64_t value; CTxDestination voutaddress; arith_uint256 POWTarget; - if ( ASSETCHAINS_STAKED == 100 && height <= 10 ) - return(1); - BlockMap::const_iterator it = mapBlockIndex.find(pblock->GetHash()); - pindex = it != mapBlockIndex.end() ? it->second : NULL; - if ( pindex != 0 && pindex->segid >= -1 ) - { - //fprintf(stderr,"isPoSblock segid.%d\n",pindex->segid); - if ( pindex->segid == -1 ) - return(0); - else return(1); - } - // Get PoSperc and POW Target. slowflag only here, calling it when blocks out of order causes problems. - if ( slowflag != 0 ) - POWTarget = komodo_PoWtarget(&PoSperc,bnTarget,height,ASSETCHAINS_STAKED); - txn_count = pblock->vtx.size(); - //fprintf(stderr,"checkblock n.%d vins.%d vouts.%d %.8f %.8f\n",txn_count,(int32_t)pblock->vtx[txn_count-1].vin.size(),(int32_t)pblock->vtx[txn_count-1].vout.size(),(double)pblock->vtx[txn_count-1].vout[0].nValue/COIN,(double)pblock->vtx[txn_count-1].vout[1].nValue/COIN); - if ( txn_count > 1 && pblock->vtx[txn_count-1].vin.size() == 1 && pblock->vtx[txn_count-1].vout.size() == 1 + (ASSETCHAINS_MARMARA!=0) ) - { - it = mapBlockIndex.find(pblock->hashPrevBlock); - if ( it != mapBlockIndex.end() && (previndex = it->second) != NULL ) - prevtime = (uint32_t)previndex->nTime; - - txid = pblock->vtx[txn_count-1].vin[0].prevout.hash; - vout = pblock->vtx[txn_count-1].vin[0].prevout.n; - if ( slowflag != 0 && prevtime != 0 ) - { - if ( komodo_isPoS(pblock,height,false) != 0 ) - { - eligible = komodo_stake(1,bnTarget,height,txid,vout,pblock->nTime,prevtime+27,(char *)"",PoSperc); - } - if ( eligible == 0 || eligible > pblock->nTime ) - { - if ( 0 && ASSETCHAINS_STAKED < 100 ) - fprintf(stderr,"komodo_is_PoSblock PoS failure ht.%d eligible.%u vs blocktime.%u, lag.%d -> check to see if it is PoW block\n",height,eligible,(uint32_t)pblock->nTime,(int32_t)(eligible - pblock->nTime)); - if ( pindex != 0 ) - { - pindex->segid = -1; - //fprintf(stderr,"PoW block detected set segid.%d <- %d\n",height,pindex->segid); - } - } - else - { - isPoS = 2; // 2 means staking utxo validated - CTxDestination voutaddress; char voutaddr[64]; - if ( ExtractDestination(pblock->vtx[txn_count-1].vout[0].scriptPubKey,voutaddress) ) - { - strcpy(voutaddr,CBitcoinAddress(voutaddress).ToString().c_str()); - segid = komodo_segid32(voutaddr) & 0x3f; - } - if ( pindex != 0 && segid >= 0 ) - { - pindex->segid = segid; - //fprintf(stderr,"PoS block set segid.%d <- %d\n",height,pindex->segid); - } //else fprintf(stderr,"unexpected null pindex for slowflag set ht.%d segid.%d:%d\n",height,pindex!=0?pindex->segid:-3,segid); - } - } - else if ( slowflag == 0 ) // previous blocks are not seen yet, do the best approx - { - if ( komodo_isPoS(pblock,height,false) != 0 ) - isPoS = 1; - } - if ( slowflag != 0 && isPoS != 0 ) - { - if ( isPoS != 2 ) - { - fprintf(stderr,"ht.%d isPoS.%d utxo not validated -> must be PoW fake\n",height,isPoS); - isPoS = 0; - } - else if ( ASSETCHAINS_STAKED != 100 ) - { - if ( bhash < POWTarget ) - { - //fprintf(stderr,"ht.%d isPoS but meets PoW diff!\n",height); - isPoS = 0; - } - } - } - //else return(-1); - } - //fprintf(stderr,"slow.%d ht.%d isPoS.%d\n",slowflag,height,isPoS); - return(isPoS != 0); -} - -bool GetStakeParams(const CTransaction &stakeTx, CStakeParams &stakeParams); -bool ValidateMatchingStake(const CTransaction &ccTx, uint32_t voutNum, const CTransaction &stakeTx, bool &cheating); - - -uint64_t komodo_notarypayamount(int32_t nHeight, int64_t notarycount) -{ - int8_t curEra = 0; int64_t ret = 0; - // if we have an end block in the first era, find our current era - if ( ASSETCHAINS_ENDSUBSIDY[0] > 1 ) - { - for ( curEra = 0; curEra <= ASSETCHAINS_LASTERA; curEra++ ) - { - if ( ASSETCHAINS_ENDSUBSIDY[curEra] > nHeight || ASSETCHAINS_ENDSUBSIDY[curEra] == 0 ) - break; - } - } - if ( curEra > ASSETCHAINS_LASTERA ) - return(0); - - if ( notarycount == 0 ) - { - fprintf(stderr, "komodo_notarypayamount failed num notaries is 0!\n"); - return(0); - } - // Because of reorgs we cannot use the notarized height value. - // We need to basically guess here and just pay some static amount. - // Has the unwanted effect of varying coin emission, but cannot be helped. - //fprintf(stderr, "era.%i paying total of %lu\n",curEra, ASSETCHAINS_NOTARY_PAY[curEra]); - ret = ASSETCHAINS_NOTARY_PAY[curEra] / notarycount; - return(ret); -} - -int32_t komodo_getnotarizedheight(uint32_t timestamp,int32_t height, uint8_t *script, int32_t len) -{ - // Check the notarisation is valid, and extract notarised height. - uint64_t voutmask; - uint8_t scriptbuf[10001]; - int32_t isratification,specialtx,notarizedheight; - - if ( len >= sizeof(uint32_t) && len <= sizeof(scriptbuf) ) - { - memcpy(scriptbuf,script,len); - if ( komodo_voutupdate(true,&isratification,0,scriptbuf,len,height,uint256(),1,1,&voutmask,&specialtx,¬arizedheight,0,1,0,timestamp) != -2 ) - { - fprintf(stderr, "<<<<< &NotarizationNotaries, uint32_t timestamp, int32_t height, uint8_t *script, int32_t len) -{ - // fetch notary pubkey array. - uint64_t total = 0, AmountToPay = 0; - int8_t numSN = 0; uint8_t notarypubkeys[64][33] = {0}; - numSN = hush_notaries(notarypubkeys, height, timestamp); - - // No point going further, no notaries can be paid. - if ( notarypubkeys[0][0] == 0 ) - return(0); - - // Check the notarisation is valid. - int32_t notarizedheight = komodo_getnotarizedheight(timestamp, height, script, len); - if ( notarizedheight == 0 ) - return(0); - - // resize coinbase vouts to number of notary nodes +1 for coinbase itself. - txNew.vout.resize(NotarizationNotaries.size()+1); - - // Calcualte the amount to pay according to the current era. - AmountToPay = komodo_notarypayamount(height,NotarizationNotaries.size()); - if ( AmountToPay == 0 ) - return(0); - - // loop over notarisation vins and add transaction to coinbase. - // Commented prints here can be used to verify manually the pubkeys match. - for (int8_t n = 0; n < NotarizationNotaries.size(); n++) - { - uint8_t *ptr; - txNew.vout[n+1].scriptPubKey.resize(35); - ptr = (uint8_t *)&txNew.vout[n+1].scriptPubKey[0]; - ptr[0] = 33; - for (int8_t i=0; i<33; i++) - { - ptr[i+1] = notarypubkeys[NotarizationNotaries[n]][i]; - //fprintf(stderr,"%02x",ptr[i+1]); - } - ptr[34] = OP_CHECKSIG; - //fprintf(stderr," set notary %i PUBKEY33 into vout[%i] amount.%lu\n",NotarizationNotaries[n],n+1,AmountToPay); - txNew.vout[n+1].nValue = AmountToPay; - total += txNew.vout[n+1].nValue; - } - return(total); -} - -bool GetNotarizationNotaries(uint8_t notarypubkeys[64][33], int8_t &numNN, const std::vector &vin, std::vector &NotarizationNotaries) -{ - uint8_t *script; int32_t scriptlen; - if ( notarypubkeys[0][0] == 0 ) - return false; - BOOST_FOREACH(const CTxIn& txin, vin) - { - uint256 hash; CTransaction tx1; - if ( GetTransaction(txin.prevout.hash,tx1,hash,false) ) - { - for (int8_t i = 0; i < numNN; i++) - { - script = (uint8_t *)&tx1.vout[txin.prevout.n].scriptPubKey[0]; - scriptlen = (int32_t)tx1.vout[txin.prevout.n].scriptPubKey.size(); - if ( scriptlen == 35 && script[0] == 33 && script[34] == OP_CHECKSIG && memcmp(script+1,notarypubkeys[i],33) == 0 ) - NotarizationNotaries.push_back(i); - } - } else return false; - } - return true; -} - -uint64_t komodo_checknotarypay(CBlock *pblock,int32_t height) -{ - std::vector NotarizationNotaries; uint8_t *script; int32_t scriptlen; - uint64_t timestamp = pblock->nTime; - int8_t numSN = 0; uint8_t notarypubkeys[64][33] = {0}; - numSN = hush_notaries(notarypubkeys, height, timestamp); - if ( !GetNotarizationNotaries(notarypubkeys, numSN, pblock->vtx[1].vin, NotarizationNotaries) ) - return(0); - - // check a notary didnt sign twice (this would be an invalid notarisation later on and cause problems) - std::set checkdupes( NotarizationNotaries.begin(), NotarizationNotaries.end() ); - if ( checkdupes.size() != NotarizationNotaries.size() ) { - fprintf(stderr, "Possible notarisation is signed multiple times by same notary. It is invalid.\n"); - return(0); - } - const CChainParams& chainparams = Params(); - const Consensus::Params &consensusParams = chainparams.GetConsensus(); - uint64_t totalsats = 0; - CMutableTransaction txNew = CreateNewContextualCMutableTransaction(consensusParams, height); - if ( pblock->vtx[1].vout.size() == 2 && pblock->vtx[1].vout[1].nValue == 0 ) - { - // Get the OP_RETURN for the notarisation - uint8_t *script = (uint8_t *)&pblock->vtx[1].vout[1].scriptPubKey[0]; - int32_t scriptlen = (int32_t)pblock->vtx[1].vout[1].scriptPubKey.size(); - if ( script[0] == OP_RETURN ) - { - // Create the coinbase tx again, using the extracted data, this is the same function the miner uses, with the same data. - // This allows us to know exactly that the coinbase is correct. - totalsats = komodo_notarypay(txNew, NotarizationNotaries, pblock->nTime, height, script, scriptlen); - } - else - { - fprintf(stderr, "vout 2 of notarisation is not OP_RETURN scriptlen.%i\n", scriptlen); - return(0); - } - } else return(0); - - // if notarypay fails, because the notarisation is not valid, exit now as txNew was not created. - // This should never happen, as the notarisation is checked before this function is called. - if ( totalsats == 0 ) - { - fprintf(stderr, "notary pay returned 0!\n"); - return(0); - } - - int8_t n = 0, i = 0, matches = 0; - uint64_t total = 0, AmountToPay = 0; - - // get the pay amount from the created tx. - AmountToPay = txNew.vout[1].nValue; - - // Check the created coinbase pays the correct notaries. - BOOST_FOREACH(const CTxOut& txout, pblock->vtx[0].vout) - { - // skip the coinbase paid to the miner. - if ( n == 0 ) - { - n++; - continue; - } - // Check the pubkeys match the pubkeys in the notarisation. - script = (uint8_t *)&txout.scriptPubKey[0]; - scriptlen = (int32_t)txout.scriptPubKey.size(); - if ( scriptlen == 35 && script[0] == 33 && script[34] == OP_CHECKSIG && memcmp(script+1,notarypubkeys[NotarizationNotaries[n-1]],33) == 0 ) - { - // check the value is correct - if ( pblock->vtx[0].vout[n].nValue == AmountToPay ) - { - matches++; - total += txout.nValue; - //fprintf(stderr, "MATCHED AmountPaid.%lu notaryid.%i\n",AmountToPay,NotarizationNotaries[n-1]); - } - else fprintf(stderr, "NOT MATCHED AmountPaid.%llu AmountToPay.%llu notaryid.%i\n", (long long)pblock->vtx[0].vout[n].nValue, (long long)AmountToPay, NotarizationNotaries[n-1]); - } - n++; - } - if ( matches != 0 && matches == NotarizationNotaries.size() && totalsats == total ) - { - //fprintf(stderr, "Validated coinbase matches notarisation in tx position 1.\n" ); - return(totalsats); - } - return(0); -} - -bool komodo_appendACscriptpub() -{ - static bool didinit = false; - if ( didinit ) - return didinit; - if ( ASSETCHAINS_SCRIPTPUB[ASSETCHAINS_SCRIPTPUB.back()] == 49 && ASSETCHAINS_SCRIPTPUB[ASSETCHAINS_SCRIPTPUB.back()-1] == 51 ) - { - CTransaction tx; uint256 blockhash; - // get transaction and check that it occured before height 100. - if ( myGetTransaction(KOMODO_EARLYTXID,tx,blockhash) && mapBlockIndex[blockhash]->GetHeight() < KOMODO_EARLYTXID_HEIGHT ) - { - for (int i = 0; i < tx.vout.size(); i++) - { - if ( tx.vout[i].scriptPubKey[0] == OP_RETURN ) - { - ASSETCHAINS_SCRIPTPUB.pop_back(); ASSETCHAINS_SCRIPTPUB.pop_back(); // remove last 2 chars. - // get OP_RETURN from txid and append the HexStr of it to scriptpub - ASSETCHAINS_SCRIPTPUB.append(HexStr(tx.vout[i].scriptPubKey.begin()+3, tx.vout[i].scriptPubKey.end())); - //fprintf(stderr, "ac_script.%s\n",ASSETCHAINS_SCRIPTPUB.c_str()); - didinit = true; - return true; - } - } - } - fprintf(stderr, "could not get KOMODO_EARLYTXID.%s OP_RETURN data. Restart with correct txid!\n", KOMODO_EARLYTXID.GetHex().c_str()); - StartShutdown(); - } - return false; -} - -void GetKomodoEarlytxidScriptPub() -{ - if ( KOMODO_EARLYTXID == zeroid ) - { - fprintf(stderr, "Restart deamon with -earlytxid.\n"); - StartShutdown(); - return; - } - if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_SNAPSHOT_INTERVAL == 0 ) - { - fprintf(stderr, "Prices->paymentsCC contract must have -ac_snapshot enabled to pay out.\n"); - StartShutdown(); - return; - } - if ( chainActive.Height() < KOMODO_EARLYTXID_HEIGHT ) - { - fprintf(stderr, "Cannot fetch -earlytxid before block %d.\n",KOMODO_EARLYTXID_HEIGHT); - StartShutdown(); - return; - } - CTransaction tx; uint256 blockhash; int32_t i; - // get transaction and check that it occured before height 100. - if ( myGetTransaction(KOMODO_EARLYTXID,tx,blockhash) && mapBlockIndex[blockhash]->GetHeight() < KOMODO_EARLYTXID_HEIGHT ) - { - for (i = 0; i < tx.vout.size(); i++) - if ( tx.vout[i].scriptPubKey[0] == OP_RETURN ) - break; - if ( i < tx.vout.size() ) - { - KOMODO_EARLYTXID_SCRIPTPUB = CScript(tx.vout[i].scriptPubKey.begin()+3, tx.vout[i].scriptPubKey.end()); - fprintf(stderr, "KOMODO_EARLYTXID_SCRIPTPUB.%s\n", HexStr(KOMODO_EARLYTXID_SCRIPTPUB.begin(),KOMODO_EARLYTXID_SCRIPTPUB.end()).c_str()); - return; - } - } - fprintf(stderr, "INVALID -earlytxid, restart daemon with correct txid.\n"); - StartShutdown(); -} - -int64_t komodo_checkcommission(CBlock *pblock,int32_t height) -{ - if(fDebug) - fprintf(stderr,"%s at height=%d\n",__func__,height); - int64_t checktoshis=0; uint8_t *script,scripthex[8192]; int32_t scriptlen,matched = 0; static bool didinit = false; - if ( ASSETCHAINS_COMMISSION != 0 || ASSETCHAINS_FOUNDERS_REWARD != 0 ) - { - checktoshis = the_commission(pblock,height); - if ( checktoshis >= 10000 && pblock->vtx[0].vout.size() < 2 ) - { - fprintf(stderr,"ERROR: komodo_checkcommission vsize.%d height.%d commission %.8f has checktoshis=%lu <10000 or less than 2 vouts (vouts=%lu)\n",(int32_t)pblock->vtx[0].vout.size(),height,(double)checktoshis/COIN, checktoshis, pblock->vtx[0].vout.size() ); - return(-1); - } - else if ( checktoshis != 0 ) - { - script = (uint8_t *)&pblock->vtx[0].vout[1].scriptPubKey[0]; - scriptlen = (int32_t)pblock->vtx[0].vout[1].scriptPubKey.size(); - if ( fDebug ) - { - int32_t i; - for (i=0; ivtx[0].vout[1].nValue/COIN); - } - if ( ASSETCHAINS_SCRIPTPUB.size() > 1 ) - { - static bool didinit = false; - if ( !didinit && height > KOMODO_EARLYTXID_HEIGHT && KOMODO_EARLYTXID != zeroid && komodo_appendACscriptpub() ) - { - fprintf(stderr, "appended CC_op_return to ASSETCHAINS_SCRIPTPUB.%s\n", ASSETCHAINS_SCRIPTPUB.c_str()); - didinit = true; - } - if ( ASSETCHAINS_SCRIPTPUB.size()/2 == scriptlen && scriptlen < sizeof(scripthex) ) - { - decode_hex(scripthex,scriptlen,(char *)ASSETCHAINS_SCRIPTPUB.c_str()); - if ( memcmp(scripthex,script,scriptlen) == 0 ) - matched = scriptlen; - } - } - else if ( scriptlen == 35 && script[0] == 33 && script[34] == OP_CHECKSIG && memcmp(script+1,ASSETCHAINS_OVERRIDE_PUBKEY33,33) == 0 ) - matched = 35; - else if ( scriptlen == 25 && script[0] == OP_DUP && script[1] == OP_HASH160 && script[2] == 20 && script[23] == OP_EQUALVERIFY && script[24] == OP_CHECKSIG && memcmp(script+3,ASSETCHAINS_OVERRIDE_PUBKEYHASH,20) == 0 ) - matched = 25; - if ( matched == 0 ) - { - if ( 0 && ASSETCHAINS_SCRIPTPUB.size() > 1 ) - { - int32_t i; - for (i=0; ivtx[0].vout[1].nValue != checktoshis ) - { - fprintf(stderr,"ERROR: ht.%d checktoshis %.8f vs actual vout[1] %.8f !!!\n",height,dstr(checktoshis),dstr(pblock->vtx[0].vout[1].nValue)); - return(-1); - } - } - } - if(fDebug) - fprintf(stderr,"%s checktoshis=%li at height=%d\n",__func__,checktoshis, height); - return(checktoshis); -} - -bool KOMODO_TEST_ASSETCHAIN_SKIP_POW = 0; - -int32_t komodo_checkPOW(int32_t slowflag,CBlock *pblock,int32_t height) -{ - uint256 hash,merkleroot; arith_uint256 bnTarget,bhash; bool fNegative,fOverflow; uint8_t *script,pubkey33[33],pubkeys[64][33]; int32_t i,scriptlen,possible,PoSperc,is_PoSblock=0,n,failed = 0,notaryid = -1; int64_t checktoshis,value; CBlockIndex *pprev; - if ( KOMODO_TEST_ASSETCHAIN_SKIP_POW == 0 && Params().NetworkIDString() == "regtest" ) - KOMODO_TEST_ASSETCHAIN_SKIP_POW = 1; - if ( !CheckEquihashSolution(pblock, Params()) ) - { - fprintf(stderr,"komodo_checkPOW slowflag.%d ht.%d CheckEquihashSolution failed\n",slowflag,height); - return(-1); - } - hash = pblock->GetHash(); - bnTarget.SetCompact(pblock->nBits,&fNegative,&fOverflow); - bhash = UintToArith256(hash); - possible = komodo_block2pubkey33(pubkey33,pblock); - if ( height == 0 ) - { - if ( slowflag != 0 ) - { - fprintf(stderr,"height.%d slowflag.%d possible.%d cmp.%d\n",height,slowflag,possible,bhash > bnTarget); - return(0); - } - BlockMap::const_iterator it = mapBlockIndex.find(pblock->hashPrevBlock); - if ( it != mapBlockIndex.end() && (pprev= it->second) != 0 ) - height = pprev->GetHeight() + 1; - if ( height == 0 ) - return(0); - } - //if ( ASSETCHAINS_ADAPTIVEPOW > 0 ) - // bnTarget = komodo_adaptivepow_target(height,bnTarget,pblock->nTime); - if ( ASSETCHAINS_LWMAPOS != 0 && bhash > bnTarget ) - { - } - if ( (SMART_CHAIN_SYMBOL[0] != 0 || height > 792000) && bhash > bnTarget ) - { - failed = 1; - if ( height > 0 && SMART_CHAIN_SYMBOL[0] == 0 ) // for the fast case - { - if ( (n= hush_notaries(pubkeys,height,pblock->nTime)) > 0 ) - { - for (i=0; i= 2 ) // must PoS or have at least 16x better PoW - { - if ( (is_PoSblock= komodo_is_PoSblock(slowflag,height,pblock,bnTarget,bhash)) == 0 ) - { - if ( slowflag == 0 ) // need all past 100 blocks to calculate PoW target - return(0); - if ( ASSETCHAINS_STAKED == 100 && height > 100 ) // only PoS allowed! POSTEST64 - return(-1); - else - { - bnTarget = komodo_PoWtarget(&PoSperc,bnTarget,height,ASSETCHAINS_STAKED); - if ( bhash > bnTarget && height > 100 ) - { - for (i=31; i>=16; i--) - fprintf(stderr,"%02x",((uint8_t *)&bhash)[i]); - fprintf(stderr," > "); - for (i=31; i>=16; i--) - fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[i]); - fprintf(stderr," ht.%d PoW diff violation PoSperc.%d vs goalperc.%d\n",height,PoSperc,(int32_t)ASSETCHAINS_STAKED); - return(-1); - } - else - { - failed = 0; - CBlockIndex *pindex; - BlockMap::const_iterator it = mapBlockIndex.find(pblock->GetHash()); - pindex = it != mapBlockIndex.end() ? it->second : NULL; - if ( pindex != 0 && pindex->segid == -2 ) { - pindex->segid = -1; - //fprintf(stderr,"PoW block detected set segid.%d <- %d\n",height,pindex->segid); - } - } - } - } - else if ( is_PoSblock < 0 ) - { - fprintf(stderr,"unexpected negative is_PoSblock.%d\n",is_PoSblock); - return(-1); - } - else if ( ASSETCHAINS_STAKED != 0 ) - failed = 0; - } - if ( failed == 0 && ASSETCHAINS_COMMISSION != 0 ) - { - if ( height == 1 ) - { - if ( ASSETCHAINS_SCRIPTPUB.size() > 1 && ASSETCHAINS_SCRIPTPUB[ASSETCHAINS_SCRIPTPUB.back()] != 49 && ASSETCHAINS_SCRIPTPUB[ASSETCHAINS_SCRIPTPUB.back()-1] != 51 ) - { - int32_t scriptlen; uint8_t scripthex[10000]; - script = (uint8_t *)&pblock->vtx[0].vout[0].scriptPubKey[0]; - scriptlen = (int32_t)pblock->vtx[0].vout[0].scriptPubKey.size(); - if ( ASSETCHAINS_SCRIPTPUB.size()/2 == scriptlen && scriptlen < sizeof(scripthex) ) - { - decode_hex(scripthex,scriptlen,(char *)ASSETCHAINS_SCRIPTPUB.c_str()); - if ( memcmp(scripthex,script,scriptlen) != 0 ) - return(-1); - } else return(-1); - } - else if ( ASSETCHAINS_OVERRIDE_PUBKEY33[0] != 0 ) - { - script = (uint8_t *)&pblock->vtx[0].vout[0].scriptPubKey[0]; - scriptlen = (int32_t)pblock->vtx[0].vout[0].scriptPubKey.size(); - if ( scriptlen != 35 || script[0] != 33 || script[34] != OP_CHECKSIG || memcmp(script+1,ASSETCHAINS_OVERRIDE_PUBKEY33,33) != 0 ) - return(-1); - } - } - else - { - if ( komodo_checkcommission(pblock,height) < 0 ) - return(-1); - } - } - // Consensus rule to force miners to mine the notary coinbase payment happens in ConnectBlock - // the default daemon miner, checks the actual vins so the only way this will fail, is if someone changes the miner, - // and then creates txs to the crypto address meeting min sigs and puts it in tx position 1. - // If they go through this effort, the block will still fail at connect block, and will be auto purged by the temp file fix. - if ( failed == 0 && ASSETCHAINS_NOTARY_PAY[0] != 0 && pblock->vtx.size() > 1 ) - { - // We check the full validation in ConnectBlock directly to get the amount for coinbase. So just approx here. - if ( slowflag == 0 && pblock->vtx[0].vout.size() > 1 ) - { - // Check the notarisation tx is to the crypto address. - if ( !komodo_is_notarytx(pblock->vtx[1]) == 1 ) - { - fprintf(stderr, "notarisation is not to crypto address ht.%i\n",height); - return(-1); - } - // Check min sigs. - int8_t numSN = 0; uint8_t notarypubkeys[64][33] = {0}; - numSN = hush_notaries(notarypubkeys, height, pblock->nTime); - if ( pblock->vtx[1].vin.size() < numSN/5 ) - { - fprintf(stderr, "ht.%i does not meet minsigs.%i sigs.%lld\n",height,numSN/5,(long long)pblock->vtx[1].vin.size()); - return(-1); - } - } - } - -//fprintf(stderr,"komodo_checkPOW possible.%d slowflag.%d ht.%d notaryid.%d failed.%d\n",possible,slowflag,height,notaryid,failed); - if ( failed != 0 && possible == 0 && notaryid < 0 ) - return(-1); - else return(0); -} - -int32_t komodo_acpublic(uint32_t tiptime) -{ - int32_t acpublic = ASSETCHAINS_PUBLIC; CBlockIndex *pindex; - if ( acpublic == 0 ) - { - if ( tiptime == 0 ) - { - if ( (pindex= chainActive.LastTip()) != 0 ) - tiptime = pindex->nTime; - } - if ( (SMART_CHAIN_SYMBOL[0] == 0 || strcmp(SMART_CHAIN_SYMBOL,"ZEX") == 0) && tiptime >= KOMODO_SAPLING_DEADLINE ) - acpublic = 1; - } - return(acpublic); -} - -int64_t komodo_newcoins(int64_t *zfundsp,int64_t *sproutfundsp,int32_t nHeight,CBlock *pblock) -{ - CTxDestination address; int32_t i,j,m,n,vout; uint8_t *script; uint256 txid,hashBlock; int64_t zfunds=0,vinsum=0,voutsum=0,sproutfunds=0; - n = pblock->vtx.size(); - for (i=0; ivtx[i]; - if ( (m= tx.vin.size()) > 0 ) - { - for (j=0; j= vintx.vout.size() ) - { - fprintf(stderr,"ERROR: %s/v%d cant find\n",txid.ToString().c_str(),vout); - return(0); - } - vinsum += vintx.vout[vout].nValue; - } - } - if ( (m= tx.vout.size()) > 0 ) - { - for (j=0; j %s\n",dstr(tx.vout[j].nValue),CBitcoinAddress(address).ToString().c_str()); - } - script = (uint8_t *)&tx.vout[j].scriptPubKey[0]; - if ( script == 0 || script[0] != 0x6a ) - { - if ( ExtractDestination(tx.vout[j].scriptPubKey,address) != 0 && strcmp("RD6GgnrMpPaTSMn8vai6yiGA7mN4QGPVMY",CBitcoinAddress(address).ToString().c_str()) != 0 ) - voutsum += tx.vout[j].nValue; - } - } - BOOST_FOREACH(const JSDescription& joinsplit, tx.vjoinsplit) - { - zfunds -= joinsplit.vpub_new; - zfunds += joinsplit.vpub_old; - sproutfunds -= joinsplit.vpub_new; - sproutfunds += joinsplit.vpub_old; - } - zfunds -= tx.valueBalance; - } - *zfundsp = zfunds; - *sproutfundsp = sproutfunds; - if ( SMART_CHAIN_SYMBOL[0] == 0 && (voutsum-vinsum) == 100003*SATOSHIDEN ) // 15 times - return(3 * SATOSHIDEN); - //if ( voutsum-vinsum+zfunds > 100000*SATOSHIDEN || voutsum-vinsum+zfunds < 0 ) - //. fprintf(stderr,"ht.%d vins %.8f, vouts %.8f -> %.8f zfunds %.8f\n",nHeight,dstr(vinsum),dstr(voutsum),dstr(voutsum)-dstr(vinsum),dstr(zfunds)); - return(voutsum - vinsum); -} - -int64_t komodo_coinsupply(int64_t *zfundsp,int64_t *sproutfundsp,int32_t height) -{ - CBlockIndex *pindex; CBlock block; int64_t zfunds=0,sproutfunds=0,supply = 0; - //fprintf(stderr,"coinsupply %d\n",height); - *zfundsp = *sproutfundsp = 0; - if ( (pindex= komodo_chainactive(height)) != 0 ) - { - while ( pindex != 0 && pindex->GetHeight() > 0 ) - { - if ( pindex->newcoins == 0 && pindex->zfunds == 0 ) - { - if ( komodo_blockload(block,pindex) == 0 ) - pindex->newcoins = komodo_newcoins(&pindex->zfunds,&pindex->sproutfunds,pindex->GetHeight(),&block); - else - { - fprintf(stderr,"error loading block.%d\n",pindex->GetHeight()); - return(0); - } - } - supply += pindex->newcoins; - zfunds += pindex->zfunds; - sproutfunds += pindex->sproutfunds; - //printf("start ht.%d new %.8f -> supply %.8f zfunds %.8f -> %.8f\n",pindex->GetHeight(),dstr(pindex->newcoins),dstr(supply),dstr(pindex->zfunds),dstr(zfunds)); - pindex = pindex->pprev; - } - } - *zfundsp = zfunds; - *sproutfundsp = sproutfunds; - return(supply); -} -struct komodo_staking -{ - char address[64]; - uint256 txid; - arith_uint256 hashval; - uint64_t nValue; - uint32_t segid32,txtime; - int32_t vout; - CScript scriptPubKey; -}; - -struct komodo_staking *komodo_addutxo(struct komodo_staking *array,int32_t *numkp,int32_t *maxkp,uint32_t txtime,uint64_t nValue,uint256 txid,int32_t vout,char *address,uint8_t *hashbuf,CScript pk) -{ - uint256 hash; uint32_t segid32; struct komodo_staking *kp; - segid32 = komodo_stakehash(&hash,address,hashbuf,txid,vout); - if ( *numkp >= *maxkp ) - { - *maxkp += 1000; - array = (struct komodo_staking *)realloc(array,sizeof(*array) * (*maxkp)); - //fprintf(stderr,"realloc max.%d array.%p\n",*maxkp,array); - } - kp = &array[(*numkp)++]; - //fprintf(stderr,"kp.%p num.%d\n",kp,*numkp); - memset(kp,0,sizeof(*kp)); - strcpy(kp->address,address); - kp->txid = txid; - kp->vout = vout; - kp->hashval = UintToArith256(hash); - kp->txtime = txtime; - kp->segid32 = segid32; - kp->nValue = nValue; - kp->scriptPubKey = pk; - return(array); -} diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index 5815974a7..85bb80c9f 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2016-2020 The Hush developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html - /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "clientversion.h" #include "rpc/server.h" #include "init.h" @@ -61,7 +59,6 @@ extern char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN]; extern int32_t ASSETCHAINS_BLOCKTIME; extern uint64_t ASSETCHAINS_CBOPRET; void hush_passport_iteration(); -uint64_t komodo_interestsum(); int32_t hush_longestchain(); void komodo_cbopretupdate(int32_t forceflag); CBlockIndex *komodo_chainactive(int32_t height); @@ -90,7 +87,6 @@ void WaitForShutdown(boost::thread_group* threadGroup) MilliSleep(1000); } } else { - //komodo_interestsum(); //hush_longestchain(); if ( ASSETCHAINS_CBOPRET != 0 ) komodo_cbopretupdate(0); diff --git a/src/cc/CCImportGateway.h b/src/cc/CCImportGateway.h index 9be54f23a..26585342a 100644 --- a/src/cc/CCImportGateway.h +++ b/src/cc/CCImportGateway.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2018 The SuperNET Developers. * * * @@ -34,4 +37,4 @@ UniValue ImportGatewayExternalAddress(uint256 bindtxid,CPubKey pubkey); UniValue ImportGatewayDumpPrivKey(uint256 bindtxid,CKey key); UniValue ImportGatewayList(); UniValue ImportGatewayInfo(uint256 bindtxid); -#endif \ No newline at end of file +#endif diff --git a/src/cc/CCMarmara.h b/src/cc/CCMarmara.h index 85f9175d1..5fe03b992 100644 --- a/src/cc/CCMarmara.h +++ b/src/cc/CCMarmara.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/CCOracles.h b/src/cc/CCOracles.h index 10dbfae97..25a1f9abf 100644 --- a/src/cc/CCOracles.h +++ b/src/cc/CCOracles.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/CCPayments.h b/src/cc/CCPayments.h index ac5f22c47..47b840979 100644 --- a/src/cc/CCPayments.h +++ b/src/cc/CCPayments.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/CCPegs.h b/src/cc/CCPegs.h index 78f1accac..929921659 100644 --- a/src/cc/CCPegs.h +++ b/src/cc/CCPegs.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/CCPrices.h b/src/cc/CCPrices.h index c850ebf85..f82f7d550 100644 --- a/src/cc/CCPrices.h +++ b/src/cc/CCPrices.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/CCassets.h b/src/cc/CCassets.h index 7b31c094d..66729419a 100644 --- a/src/cc/CCassets.h +++ b/src/cc/CCassets.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/CCassetsCore.cpp b/src/cc/CCassetsCore.cpp index 06d843b40..1dc41484f 100644 --- a/src/cc/CCassetsCore.cpp +++ b/src/cc/CCassetsCore.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2018 The SuperNET Developers. * * * diff --git a/src/cc/CCassetstx.cpp b/src/cc/CCassetstx.cpp index 654f01a38..17f0f54b2 100644 --- a/src/cc/CCassetstx.cpp +++ b/src/cc/CCassetstx.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/CCauction.h b/src/cc/CCauction.h index cfcd615cc..73b19a176 100644 --- a/src/cc/CCauction.h +++ b/src/cc/CCauction.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/CCchannels.h b/src/cc/CCchannels.h index ecca145d3..8ce065518 100644 --- a/src/cc/CCchannels.h +++ b/src/cc/CCchannels.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/CCcustom.cpp b/src/cc/CCcustom.cpp index 18ee98a7b..5a262f75d 100644 --- a/src/cc/CCcustom.cpp +++ b/src/cc/CCcustom.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/CCdice.h b/src/cc/CCdice.h index 363aad735..6b9528ec5 100644 --- a/src/cc/CCdice.h +++ b/src/cc/CCdice.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/CCfsm.h b/src/cc/CCfsm.h index 2bce35597..7abab91ec 100644 --- a/src/cc/CCfsm.h +++ b/src/cc/CCfsm.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/CClotto.h b/src/cc/CClotto.h index 2f0595371..daff4a1db 100644 --- a/src/cc/CClotto.h +++ b/src/cc/CClotto.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/CCrewards.h b/src/cc/CCrewards.h index d9f9edf6e..2d1d65ea0 100644 --- a/src/cc/CCrewards.h +++ b/src/cc/CCrewards.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/CCtokens.cpp b/src/cc/CCtokens.cpp index 835ce6f3b..105d6d4c2 100644 --- a/src/cc/CCtokens.cpp +++ b/src/cc/CCtokens.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/CCtokens.h b/src/cc/CCtokens.h index 3705a8f6d..5f5f763ea 100644 --- a/src/cc/CCtokens.h +++ b/src/cc/CCtokens.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2018 The SuperNET Developers. * * * diff --git a/src/cc/CCtokenutils.cpp b/src/cc/CCtokenutils.cpp index 73209bcb5..04ee831d2 100644 --- a/src/cc/CCtokenutils.cpp +++ b/src/cc/CCtokenutils.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/CCtx.cpp b/src/cc/CCtx.cpp index 26d338cec..8cb543771 100644 --- a/src/cc/CCtx.cpp +++ b/src/cc/CCtx.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * @@ -850,4 +853,4 @@ void AddSigData2UniValue(UniValue &sigdata, int32_t vini, UniValue& ccjson, std: elem.push_back(Pair("scriptPubKey", sscriptpubkey)); elem.push_back(Pair("amount", amount)); sigdata.push_back(elem); -} \ No newline at end of file +} diff --git a/src/cc/CCutilbits.cpp b/src/cc/CCutilbits.cpp index c43944144..243bf5124 100644 --- a/src/cc/CCutilbits.cpp +++ b/src/cc/CCutilbits.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright � 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/COptCCParams.cpp b/src/cc/COptCCParams.cpp index 41c9ba874..09d77761e 100644 --- a/src/cc/COptCCParams.cpp +++ b/src/cc/COptCCParams.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /*Descriptson and examples of COptCCParams class found in: script/standard.h/cpp class COptCCParams diff --git a/src/cc/assets.cpp b/src/cc/assets.cpp index d46664c59..1be919a91 100644 --- a/src/cc/assets.cpp +++ b/src/cc/assets.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/auction.cpp b/src/cc/auction.cpp index 88d5134af..0f05e10f4 100644 --- a/src/cc/auction.cpp +++ b/src/cc/auction.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/betprotocol.cpp b/src/cc/betprotocol.cpp index b117ad104..694469ec5 100644 --- a/src/cc/betprotocol.cpp +++ b/src/cc/betprotocol.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/betprotocol.h b/src/cc/betprotocol.h index 688db370f..a72b7a6c5 100644 --- a/src/cc/betprotocol.h +++ b/src/cc/betprotocol.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/channels.cpp b/src/cc/channels.cpp index 4d6299f4f..5302eb355 100644 --- a/src/cc/channels.cpp +++ b/src/cc/channels.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/customcc.cpp b/src/cc/customcc.cpp index 669da14ae..723783be0 100644 --- a/src/cc/customcc.cpp +++ b/src/cc/customcc.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /* simple stub custom cc diff --git a/src/cc/customcc.h b/src/cc/customcc.h index 436937391..e15655953 100644 --- a/src/cc/customcc.h +++ b/src/cc/customcc.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /* to create a custom libcc.so: diff --git a/src/cc/dapps/dappinc.h b/src/cc/dapps/dappinc.h index 6a95adb29..3160d4d74 100644 --- a/src/cc/dapps/dappinc.h +++ b/src/cc/dapps/dappinc.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2020 The SuperNET Developers. * * * @@ -12,7 +15,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include #include #include @@ -330,20 +332,17 @@ int md_unlink(char *file) char *REFCOIN_CLI,DPOW_pubkeystr[67],DPOW_secpkeystr[67],DPOW_handle[67],DPOW_recvaddr[64],DPOW_recvZaddr[128]; -cJSON *get_komodocli(char *refcoin,char **retstrp,char *acname,char *method,char *arg0,char *arg1,char *arg2,char *arg3,char *arg4,char *arg5,char *arg6) +cJSON *get_hushcli(char *refcoin,char **retstrp,char *acname,char *method,char *arg0,char *arg1,char *arg2,char *arg3,char *arg4,char *arg5,char *arg6) { long fsize; cJSON *retjson = 0; char cmdstr[32768],*jsonstr,fname[32768]; sprintf(fname,"/tmp/notarizer_%s_%d",method,(rand() >> 17) % 10000); - //if ( (acname == 0 || acname[0] == 0) && strcmp(refcoin,"KMD") != 0 ) - // acname = refcoin; - if ( acname[0] != 0 ) - { - if ( refcoin[0] != 0 && strcmp(refcoin,"KMD") != 0 && strcmp(refcoin,acname) != 0 ) + if ( acname[0] != 0 ) { + if ( refcoin[0] != 0 && strcmp(refcoin,"HUSH3") != 0 && strcmp(refcoin,acname) != 0 ) printf("unexpected: refcoin.(%s) acname.(%s)\n",refcoin,acname); - sprintf(cmdstr,"komodo-cli -ac_name=%s %s %s %s %s %s %s %s %s > %s\n",acname,method,arg0,arg1,arg2,arg3,arg4,arg5,arg6,fname); + sprintf(cmdstr,"hush-smart-chain -ac_name=%s %s %s %s %s %s %s %s %s > %s\n",acname,method,arg0,arg1,arg2,arg3,arg4,arg5,arg6,fname); } - else if ( strcmp(refcoin,"KMD") == 0 ) - sprintf(cmdstr,"komodo-cli %s %s %s %s %s %s %s %s > %s\n",method,arg0,arg1,arg2,arg3,arg4,arg5,arg6,fname); + else if ( strcmp(refcoin,"HUSH3") == 0 ) + sprintf(cmdstr,"hush-cli %s %s %s %s %s %s %s %s > %s\n",method,arg0,arg1,arg2,arg3,arg4,arg5,arg6,fname); else if ( REFCOIN_CLI != 0 && REFCOIN_CLI[0] != 0 ) { sprintf(cmdstr,"%s %s %s %s %s %s %s %s %s > %s\n",REFCOIN_CLI,method,arg0,arg1,arg2,arg3,arg4,arg5,arg6,fname); @@ -391,7 +390,7 @@ bits256 komodobroadcast(char *refcoin,char *acname,cJSON *hexjson) memset(txid.bytes,0,sizeof(txid)); if ( (hexstr= jstr(hexjson,"hex")) != 0 ) { - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"sendrawtransaction",hexstr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"sendrawtransaction",hexstr,"","","","","","")) != 0 ) { //fprintf(stderr,"broadcast.(%s)\n",jprint(retjson,0)); free_json(retjson); @@ -415,7 +414,7 @@ bits256 sendtoaddress(char *refcoin,char *acname,char *destaddr,int64_t satoshis char numstr[32],*retstr,str[65]; cJSON *retjson; bits256 txid; memset(txid.bytes,0,sizeof(txid)); sprintf(numstr,"%.8f",(double)satoshis/SATOSHIDEN); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"sendtoaddress",destaddr,numstr,"false","","",oprethexstr,"")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"sendtoaddress",destaddr,numstr,"false","","",oprethexstr,"")) != 0 ) { fprintf(stderr,"unexpected sendrawtransaction json.(%s)\n",jprint(retjson,0)); free_json(retjson); @@ -438,7 +437,7 @@ bits256 tokentransfer(char *refcoin,char *acname,char *tokenid,char *destpub,int char numstr[32],*retstr,str[65]; cJSON *retjson; bits256 txid; memset(txid.bytes,0,sizeof(txid)); sprintf(numstr,"%llu",(long long)units); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"tokentransfer",tokenid,destpub,numstr,"","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"tokentransfer",tokenid,destpub,numstr,"","","","")) != 0 ) { txid = komodobroadcast(refcoin,acname,retjson); fprintf(stderr,"tokentransfer returned (%s)\n",jprint(retjson,0)); @@ -456,7 +455,7 @@ char *get_tokenaddress(char *refcoin,char *acname,char *tokenaddr) { char *retstr,*str; cJSON *retjson; tokenaddr[0] = 0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"tokenaddress","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"tokenaddress","","","","","","","")) != 0 ) { if ( (str= jstr(retjson,"myCCAddress(Tokens)")) != 0 ) { @@ -478,7 +477,7 @@ char *get_tokenaddress(char *refcoin,char *acname,char *tokenaddr) int64_t get_tokenbalance(char *refcoin,char *acname,char *tokenid) { cJSON *retjson; char *retstr,cmpstr[64]; int64_t amount=0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"tokenbalance",tokenid,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"tokenbalance",tokenid,"","","","","","")) != 0 ) { amount = j64bits(retjson,"balance"); fprintf(stderr,"tokenbalance %llu\n",(long long)amount); @@ -495,7 +494,7 @@ int64_t get_tokenbalance(char *refcoin,char *acname,char *tokenid) cJSON *get_decodescript(char *refcoin,char *acname,char *script) { cJSON *retjson; char *retstr; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"decodescript",script,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"decodescript",script,"","","","","","")) != 0 ) { return(retjson); } @@ -514,7 +513,7 @@ char *get_createmultisig2(char *refcoin,char *acname,char *msigaddr,char *redeem msigaddr[0] = 0; redeemscript[0] = 0; sprintf(params,"'[\"%s\", \"%s\"]'",pubkeyA,pubkeyB); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"createmultisig","2",params,"","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"createmultisig","2",params,"","","","","")) != 0 ) { if ( (str= jstr(retjson,"address")) != 0 ) strcpy(msigaddr,str); @@ -536,7 +535,7 @@ char *get_createmultisig2(char *refcoin,char *acname,char *msigaddr,char *redeem int32_t get_coinheight(char *refcoin,char *acname,bits256 *blockhashp) { cJSON *retjson; char *retstr; int32_t height=0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getblockchaininfo","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getblockchaininfo","","","","","","","")) != 0 ) { height = jint(retjson,"blocks"); *blockhashp = jbits256(retjson,"bestblockhash"); @@ -555,7 +554,7 @@ bits256 get_coinblockhash(char *refcoin,char *acname,int32_t height) cJSON *retjson; char *retstr,heightstr[32]; bits256 hash; memset(hash.bytes,0,sizeof(hash)); sprintf(heightstr,"%d",height); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getblockhash",heightstr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getblockhash",heightstr,"","","","","","")) != 0 ) { fprintf(stderr,"unexpected blockhash json.(%s)\n",jprint(retjson,0)); free_json(retjson); @@ -577,7 +576,7 @@ bits256 get_coinmerkleroot(char *refcoin,char *acname,bits256 blockhash,uint32_t cJSON *retjson; char *retstr,str[65]; bits256 merkleroot; memset(merkleroot.bytes,0,sizeof(merkleroot)); *blocktimep = 0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getblockheader",bits256_str(str,blockhash),"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getblockheader",bits256_str(str,blockhash),"","","","","","")) != 0 ) { merkleroot = jbits256(retjson,"merkleroot"); *blocktimep = juint(retjson,"time"); @@ -624,7 +623,7 @@ int32_t get_coinheader(char *refcoin,char *acname,bits256 *blockhashp,bits256 *m cJSON *get_rawmempool(char *refcoin,char *acname) { cJSON *retjson; char *retstr; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getrawmempool","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getrawmempool","","","","","","","")) != 0 ) { //printf("mempool.(%s)\n",jprint(retjson,0)); return(retjson); @@ -643,7 +642,7 @@ cJSON *get_addressutxos(char *refcoin,char *acname,char *coinaddr) if ( refcoin[0] != 0 && strcmp(refcoin,"KMD") != 0 ) printf("warning: assumes %s has addressindex enabled\n",refcoin); sprintf(jsonbuf,"{\\\"addresses\\\":[\\\"%s\\\"]}",coinaddr); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getaddressutxos",jsonbuf,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getaddressutxos",jsonbuf,"","","","","","")) != 0 ) { //printf("addressutxos.(%s)\n",jprint(retjson,0)); return(retjson); @@ -659,7 +658,7 @@ cJSON *get_addressutxos(char *refcoin,char *acname,char *coinaddr) cJSON *get_rawtransaction(char *refcoin,char *acname,bits256 txid) { cJSON *retjson; char *retstr,str[65]; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getrawtransaction",bits256_str(str,txid),"1","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getrawtransaction",bits256_str(str,txid),"1","","","","","")) != 0 ) { return(retjson); } @@ -674,7 +673,7 @@ cJSON *get_rawtransaction(char *refcoin,char *acname,bits256 txid) cJSON *get_z_viewtransaction(char *refcoin,char *acname,bits256 txid) { cJSON *retjson; char *retstr,str[65]; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_viewtransaction",bits256_str(str,txid),"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_viewtransaction",bits256_str(str,txid),"","","","","","")) != 0 ) { return(retjson); } @@ -689,7 +688,7 @@ cJSON *get_z_viewtransaction(char *refcoin,char *acname,bits256 txid) cJSON *get_listunspent(char *refcoin,char *acname) { cJSON *retjson; char *retstr,str[65]; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"listunspent","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"listunspent","","","","","","","")) != 0 ) { return(retjson); } @@ -704,7 +703,7 @@ cJSON *get_listunspent(char *refcoin,char *acname) cJSON *get_getinfo(char *refcoin,char *acname) { cJSON *retjson; char *retstr,str[65]; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getinfo","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getinfo","","","","","","","")) != 0 ) { return(retjson); } @@ -719,7 +718,7 @@ cJSON *get_getinfo(char *refcoin,char *acname) cJSON *z_listunspent(char *refcoin,char *acname) { cJSON *retjson; char *retstr,str[65]; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_listunspent","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_listunspent","","","","","","","")) != 0 ) { return(retjson); } @@ -734,7 +733,7 @@ cJSON *z_listunspent(char *refcoin,char *acname) cJSON *z_listoperationids(char *refcoin,char *acname) { cJSON *retjson; char *retstr,str[65]; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_listoperationids","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_listoperationids","","","","","","","")) != 0 ) { return(retjson); } @@ -750,7 +749,7 @@ cJSON *z_getoperationstatus(char *refcoin,char *acname,char *opid) { cJSON *retjson; char *retstr,str[65],params[512]; sprintf(params,"'[\"%s\"]'",opid); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_getoperationstatus",params,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_getoperationstatus",params,"","","","","","")) != 0 ) { //printf("got status (%s)\n",jprint(retjson,0)); return(retjson); @@ -767,7 +766,7 @@ cJSON *z_getoperationresult(char *refcoin,char *acname,char *opid) { cJSON *retjson; char *retstr,str[65],params[512]; sprintf(params,"'[\"%s\"]'",opid); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_getoperationresult",params,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_getoperationresult",params,"","","","","","")) != 0 ) { return(retjson); } @@ -782,7 +781,7 @@ cJSON *z_getoperationresult(char *refcoin,char *acname,char *opid) int32_t validateaddress(char *refcoin,char *acname,char *depositaddr, char* compare) { cJSON *retjson; char *retstr; int32_t res=0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"validateaddress",depositaddr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"validateaddress",depositaddr,"","","","","","")) != 0 ) { if (is_cJSON_True(jobj(retjson,compare)) != 0 ) res=1; free_json(retjson); @@ -798,7 +797,7 @@ int32_t validateaddress(char *refcoin,char *acname,char *depositaddr, char* comp int32_t z_validateaddress(char *refcoin,char *acname,char *depositaddr, char *compare) { cJSON *retjson; char *retstr; int32_t res=0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_validateaddress",depositaddr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_validateaddress",depositaddr,"","","","","","")) != 0 ) { if (is_cJSON_True(jobj(retjson,compare)) != 0 ) res=1; @@ -815,7 +814,7 @@ int32_t z_validateaddress(char *refcoin,char *acname,char *depositaddr, char *co int64_t get_getbalance(char *refcoin,char *acname) { cJSON *retjson; char *retstr,cmpstr[64]; int64_t amount=0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getbalance","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getbalance","","","","","","","")) != 0 ) { fprintf(stderr,"get_getbalance.(%s) %s returned json!\n",refcoin,acname); free_json(retjson); @@ -835,7 +834,7 @@ int64_t get_getbalance(char *refcoin,char *acname) int64_t z_getbalance(char *refcoin,char *acname,char *coinaddr) { cJSON *retjson; char *retstr,cmpstr[64]; int64_t amount=0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_getbalance",coinaddr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_getbalance",coinaddr,"","","","","","")) != 0 ) { fprintf(stderr,"z_getbalance.(%s) %s returned json!\n",refcoin,acname); free_json(retjson); @@ -856,7 +855,7 @@ int32_t z_exportkey(char *privkey,char *refcoin,char *acname,char *zaddr) { cJSON *retjson; char *retstr,cmpstr[64]; int64_t amount=0; privkey[0] = 0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_exportkey",zaddr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_exportkey",zaddr,"","","","","","")) != 0 ) { fprintf(stderr,"z_exportkey.(%s) %s returned json!\n",refcoin,acname); free_json(retjson); @@ -875,7 +874,7 @@ int32_t z_exportkey(char *privkey,char *refcoin,char *acname,char *zaddr) int32_t getnewaddress(char *coinaddr,char *refcoin,char *acname) { cJSON *retjson; char *retstr; int64_t amount=0; int32_t retval = -1; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getnewaddress","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getnewaddress","","","","","","","")) != 0 ) { fprintf(stderr,"getnewaddress.(%s) %s returned json!\n",refcoin,acname); free_json(retjson); @@ -892,7 +891,7 @@ int32_t getnewaddress(char *coinaddr,char *refcoin,char *acname) int32_t z_getnewaddress(char *coinaddr,char *refcoin,char *acname,char *typestr) { cJSON *retjson; char *retstr; int64_t amount=0; int32_t retval = -1; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_getnewaddress",typestr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_getnewaddress",typestr,"","","","","","")) != 0 ) { fprintf(stderr,"z_getnewaddress.(%s) %s returned json!\n",refcoin,acname); free_json(retjson); @@ -964,7 +963,7 @@ int64_t find_sprout_amount(char *coinstr,char *zcaddr) void importaddress(char *refcoin,char *acname,char *depositaddr) { cJSON *retjson; char *retstr; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"importaddress",depositaddr,"","true","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"importaddress",depositaddr,"","true","","","","")) != 0 ) { printf("importaddress.(%s)\n",jprint(retjson,0)); free_json(retjson); @@ -982,7 +981,7 @@ int32_t z_sendmany(char *opidstr,char *coinstr,char *acname,char *srcaddr,char * sprintf(params,"'[{\"address\":\"%s\",\"amount\":%.8f,\"memo\":\"%s\"}]'",destaddr,dstr(amount),memostr); sprintf(addr,"\"%s\"",srcaddr); printf("z_sendmany.(%s %s) from.(%s) -> %s\n",coinstr,acname,srcaddr,params); - if ( (retjson= get_komodocli(coinstr,&retstr,acname,"z_sendmany",addr,params,"","","","","")) != 0 ) + if ( (retjson= get_hushcli(coinstr,&retstr,acname,"z_sendmany",addr,params,"","","","","")) != 0 ) { printf("unexpected json z_sendmany.(%s)\n",jprint(retjson,0)); free_json(retjson); @@ -1001,7 +1000,7 @@ int32_t z_mergetoaddress(char *opidstr,char *coinstr,char *acname,char *destaddr { cJSON *retjson; char *retstr,addr[128],*opstr; int32_t retval = -1; sprintf(addr,"[\\\"ANY_SPROUT\\\"]"); - if ( (retjson= get_komodocli(coinstr,&retstr,acname,"z_mergetoaddress",addr,destaddr,"","","","","")) != 0 ) + if ( (retjson= get_hushcli(coinstr,&retstr,acname,"z_mergetoaddress",addr,destaddr,"","","","","")) != 0 ) { if ( (opstr= jstr(retjson,"opid")) != 0 ) strcpy(opidstr,opstr); @@ -1207,7 +1206,7 @@ int32_t txid_in_vins(char *refcoin,bits256 txid,bits256 cmptxid) int32_t dpow_pubkey() { char *pstr,*retstr,*str; cJSON *retjson; int32_t retval = -1; - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_stats","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_stats","","","","","","","")) != 0 ) { if ( (pstr= jstr(retjson,"publishable_pubkey")) != 0 && strlen(pstr) == 66 ) { @@ -1235,7 +1234,7 @@ cJSON *dpow_get(uint32_t shorthash) { cJSON *retjson; char *retstr,numstr[32]; sprintf(numstr,"%u",shorthash); - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_get",numstr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_get",numstr,"","","","","","")) != 0 ) { //printf("DEX_get.(%s)\n",jprint(retjson,0)); if ( juint(retjson,"cancelled") != 0 ) @@ -1257,7 +1256,7 @@ cJSON *dpow_cancel(uint32_t shorthash) { cJSON *retjson; char *retstr,numstr[32]; sprintf(numstr,"%u",shorthash); - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_cancel",numstr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_cancel",numstr,"","","","","","")) != 0 ) { //printf("DEX_cancel.(%s)\n",jprint(retjson,0)); return(retjson); @@ -1274,7 +1273,7 @@ cJSON *dpow_notarize(char *coin,int32_t height) { cJSON *retjson; char *retstr,numstr[32]; sprintf(numstr,"%u",height); - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_notarize",coin,numstr,"","","","","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_notarize",coin,numstr,"","","","","")) != 0 ) { //printf("DEX_notarize.(%s)\n",jprint(retjson,0)); return(retjson); @@ -1292,7 +1291,7 @@ cJSON *dpow_broadcast(int32_t priority,char *hexstr,char *tagA,char *tagB,char * cJSON *retjson; char *retstr,numstr[32]; sprintf(numstr,"%u",priority); //fprintf(stderr,"broadcast (%s) (%s) (%s) (%s) (%s) [%s %s]\n",hexstr,numstr,tagA,tagB,pubkey,volA,volB); - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_broadcast",hexstr,numstr,tagA,tagB,pubkey,volA,volB)) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_broadcast",hexstr,numstr,tagA,tagB,pubkey,volA,volB)) != 0 ) { //fprintf(stderr,"DEX_broadcast.(%s)\n",jprint(retjson,0)); return(retjson); @@ -1310,7 +1309,7 @@ cJSON *dpow_publish(int32_t priority,char *filename) cJSON *retjson; char *retstr,numstr[32]; sprintf(numstr,"%u",priority); //fprintf(stderr,"broadcast (%s) (%s) (%s) (%s) (%s) [%s %s]\n",hexstr,numstr,tagA,tagB,pubkey,volA,volB); - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_publish",filename,numstr,"0","","","","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_publish",filename,numstr,"0","","","","")) != 0 ) { //fprintf(stderr,"DEX_broadcast.(%s)\n",jprint(retjson,0)); return(retjson); @@ -1328,7 +1327,7 @@ cJSON *dpow_subscribe(int32_t priority,char *filename,char *publisher) cJSON *retjson; char *retstr,numstr[32]; sprintf(numstr,"%u",priority); //fprintf(stderr,"broadcast (%s) (%s) (%s) (%s) (%s) [%s %s]\n",hexstr,numstr,tagA,tagB,pubkey,volA,volB); - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_subscribe",filename,numstr,"0",publisher,"","","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_subscribe",filename,numstr,"0",publisher,"","","")) != 0 ) { //fprintf(stderr,"DEX_broadcast.(%s)\n",jprint(retjson,0)); return(retjson); @@ -1355,7 +1354,7 @@ bits256 dpow_ntzhash(char *coin,int32_t *prevntzheightp,uint32_t *prevntztimep) memset(&ntzhash,0,sizeof(ntzhash)); *prevntzheightp = 0; *prevntztimep = 0; - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",coin,"notarizations",DPOW_pubkeystr,"","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",coin,"notarizations",DPOW_pubkeystr,"","")) != 0 ) { if ( (array= jarray(&n,retjson,"matches")) != 0 ) { @@ -1378,7 +1377,7 @@ bits256 dpow_ntzhash(char *coin,int32_t *prevntzheightp,uint32_t *prevntztimep) int32_t dpow_getmessage(char *payload,int32_t maxsize,char *tagA,char *tagB,char *pubkeystr) { cJSON *retjson,*item,*array; char *retstr,*pstr; int32_t i,n,retval = 0; - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",tagA,tagB,pubkeystr,"","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",tagA,tagB,pubkeystr,"","")) != 0 ) { if ( (array= jarray(&n,retjson,"matches")) != 0 ) { @@ -1402,7 +1401,7 @@ int32_t dpow_getmessage(char *payload,int32_t maxsize,char *tagA,char *tagB,char int32_t dpow_hasmessage(char *payload,char *tagA,char *tagB,char *pubkeystr) { cJSON *retjson,*item,*array; char *retstr,*pstr; int32_t i,n,retval = 0; - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",tagA,tagB,pubkeystr,"","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",tagA,tagB,pubkeystr,"","")) != 0 ) { if ( (array= jarray(&n,retjson,"matches")) != 0 ) { @@ -1425,7 +1424,7 @@ int32_t dpow_hasmessage(char *payload,char *tagA,char *tagB,char *pubkeystr) int32_t dpow_pubkeyregister(int32_t priority) { cJSON *retjson,*array,*item; char *retstr,*pstr=0; int32_t i,n=0,len; - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",(char *)"handles",DPOW_handle,DPOW_pubkeystr,"","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",(char *)"handles",DPOW_handle,DPOW_pubkeystr,"","")) != 0 ) { if ( (array= jarray(&n,retjson,"matches")) != 0 ) { @@ -1449,7 +1448,7 @@ int32_t dpow_tokenregister(char *existing,int32_t priority,char *token_name,char { cJSON *retjson,*array,*item; char *retstr,*pstr=0; int32_t i,n=0,len; existing[0] = 0; - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",(char *)"tokens",token_name,DPOW_pubkeystr,"","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",(char *)"tokens",token_name,DPOW_pubkeystr,"","")) != 0 ) { if ( (array= jarray(&n,retjson,"matches")) != 0 ) { @@ -1475,7 +1474,7 @@ int32_t dpow_tokenregister(char *existing,int32_t priority,char *token_name,char return(0); } -/*bits256 komodo_DEX_filehash(FILE *fp,uint64_t offset0,uint64_t rlen,char *fname) +/*bits256 hush_DEX_filehash(FILE *fp,uint64_t offset0,uint64_t rlen,char *fname) { bits256 filehash; uint8_t *data = (uint8_t *)calloc(1,rlen); fseek(fp,offset0,SEEK_SET); @@ -1501,7 +1500,7 @@ int32_t dpow_fileregister(char *existing,int32_t priority,char *fname,char *coin fclose(fp); } else return(-1); sprintf(tagA,"'#%s'",fname); - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",tagA,coin,DPOW_pubkeystr,"","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",tagA,coin,DPOW_pubkeystr,"","")) != 0 ) { if ( (array= jarray(&n,retjson,"matches")) != 0 ) { @@ -1536,7 +1535,7 @@ bits256 dpow_blockhash(char *coin,int32_t height) cJSON *retjson,*array,*item; char *retstr,*pstr=0,numstr[32]; int32_t i,n=0,len; bits256 hash; memset(hash.bytes,0,sizeof(hash)); sprintf(numstr,"%d",height); - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",coin,numstr,DPOW_pubkeystr,"","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",coin,numstr,DPOW_pubkeystr,"","")) != 0 ) { if ( (array= jarray(&n,retjson,"matches")) != 0 ) { @@ -1564,7 +1563,7 @@ struct inboxinfo **dpow_inboxcheck(int32_t *nump,uint32_t *stopatp,char *tagB) cJSON *retjson,*array,*item; struct inboxinfo **ptrs=0; char *senderpub,*retstr,*ptr,*pstr=0,stopstr[32]; int32_t i,j,n,m=0,len; sprintf(stopstr,"%u",*stopatp); *nump = 0; - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list",stopstr,"0",(char *)"inbox",tagB,DPOW_pubkeystr,"","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list",stopstr,"0",(char *)"inbox",tagB,DPOW_pubkeystr,"","")) != 0 ) { if ( (array= jarray(&n,retjson,"matches")) != 0 && n > 0 ) { @@ -1596,5 +1595,3 @@ struct inboxinfo **dpow_inboxcheck(int32_t *nump,uint32_t *stopatp,char *tagB) } return(ptrs); } - - diff --git a/src/cc/dapps/dappstd.c b/src/cc/dapps/dappstd.c index 7bb52b982..b202b3373 100644 --- a/src/cc/dapps/dappstd.c +++ b/src/cc/dapps/dappstd.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/dapps/hushdex.c b/src/cc/dapps/hushdex.c index 1f75e6abf..cd13c6fbc 100644 --- a/src/cc/dapps/hushdex.c +++ b/src/cc/dapps/hushdex.c @@ -1,4 +1,6 @@ // Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2020 The SuperNET Developers. * * * diff --git a/src/cc/dapps/zmigrate.c b/src/cc/dapps/zmigrate.c index f7d9e3feb..ac4789683 100644 --- a/src/cc/dapps/zmigrate.c +++ b/src/cc/dapps/zmigrate.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index d30abc269..d1d822c7f 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/dilithium.c b/src/cc/dilithium.c index afeef33d9..82c791c04 100644 --- a/src/cc/dilithium.c +++ b/src/cc/dilithium.c @@ -1,3 +1,7 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html + /* Based on the public domain implementation in * crypto_hash/keccakc512/simple/ from http://bench.cr.yp.to/supercop.html * by Ronny Van Keer @@ -11,8 +15,6 @@ #define DBENCH_STOP(arg) #include "dilithium.h" - - #define NROUNDS 24 #define ROL(a, offset) ((a << offset) ^ (a >> (64-offset))) diff --git a/src/cc/dilithium.h b/src/cc/dilithium.h index e16010a45..605082d99 100644 --- a/src/cc/dilithium.h +++ b/src/cc/dilithium.h @@ -1,143 +1,20 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html #include -/* -#ifndef CPUCYCLES_H -#define CPUCYCLES_H - -#ifdef DBENCH -#define DBENCH_START() uint64_t time = cpucycles_start() -#define DBENCH_STOP(t) t += cpucycles_stop() - time - timing_overhead -#else -#define DBENCH_START() -#define DBENCH_STOP(t) -#endif - -#ifdef USE_RDPMC // Needs echo 2 > /sys/devices/cpu/rdpmc -#ifdef SERIALIZE_RDC - -static inline uint64_t cpucycles_start(void) { - const uint32_t ecx = (1U << 30) + 1; - uint64_t result; - - asm volatile("cpuid; movl %1,%%ecx; rdpmc; shlq $32,%%rdx; orq %%rdx,%%rax" - : "=&a" (result) : "r" (ecx) : "rbx", "rcx", "rdx"); - - return result; -} - -static inline uint64_t cpucycles_stop(void) { - const uint32_t ecx = (1U << 30) + 1; - uint64_t result, dummy; - - asm volatile("rdpmc; shlq $32,%%rdx; orq %%rdx,%%rax; movq %%rax,%0; cpuid" - : "=&r" (result), "=c" (dummy) : "c" (ecx) : "rax", "rbx", "rdx"); - - return result; -} - -#else - -static inline uint64_t cpucycles_start(void) { - const uint32_t ecx = (1U << 30) + 1; - uint64_t result; - - asm volatile("rdpmc; shlq $32,%%rdx; orq %%rdx,%%rax" - : "=a" (result) : "c" (ecx) : "rdx"); - - return result; -} - -static inline uint64_t cpucycles_stop(void) { - const uint32_t ecx = (1U << 30) + 1; - uint64_t result; - - asm volatile("rdpmc; shlq $32,%%rdx; orq %%rdx,%%rax" - : "=a" (result) : "c" (ecx) : "rdx"); - - return result; -} - -#endif -#else -#ifdef SERIALIZE_RDC - -static inline uint64_t cpucycles_start(void) { - uint64_t result; - - asm volatile("cpuid; rdtsc; shlq $32,%%rdx; orq %%rdx,%%rax" - : "=a" (result) : : "%rbx", "%rcx", "%rdx"); - - return result; -} - -static inline uint64_t cpucycles_stop(void) { - uint64_t result; - - asm volatile("rdtscp; shlq $32,%%rdx; orq %%rdx,%%rax; mov %%rax,%0; cpuid" - : "=r" (result) : : "%rax", "%rbx", "%rcx", "%rdx"); - - return result; -} - -#else - -static inline uint64_t cpucycles_start(void) { - uint64_t result; - - asm volatile("rdtsc; shlq $32,%%rdx; orq %%rdx,%%rax" - : "=a" (result) : : "%rdx"); - - return result; -} - -static inline uint64_t cpucycles_stop(void) { - uint64_t result; - - asm volatile("rdtsc; shlq $32,%%rdx; orq %%rdx,%%rax" - : "=a" (result) : : "%rdx"); - - return result; -} - -#endif -#endif - -int64_t cpucycles_overhead(void); - -#endif*/ - -#ifndef FIPS202_H -#define FIPS202_H - +#ifndef HUSH_DILITHIUM_H +#define HUSH_DILITHIUM_H #define SHAKE128_RATE 168 #define SHAKE256_RATE 136 -void shake128_absorb(uint64_t *s, - const uint8_t *input, - int32_t inlen); - -void shake128_squeezeblocks(uint8_t *output, - int32_t nblocks, - uint64_t *s); - -void shake256_absorb(uint64_t *s, - const uint8_t *input, - int32_t inlen); - -void shake256_squeezeblocks(uint8_t *output, - int32_t nblocks, - uint64_t *s); - -void shake128(uint8_t *output, - int32_t outlen, - const uint8_t *input, - int32_t inlen); - -void shake256(uint8_t *output, - int32_t outlen, - const uint8_t *input, - int32_t inlen); +void shake128_absorb(uint64_t *s, const uint8_t *input, int32_t inlen); +void shake128_squeezeblocks(uint8_t *output, int32_t nblocks, uint64_t *s); +void shake256_absorb(uint64_t *s, const uint8_t *input, int32_t inlen); +void shake256_squeezeblocks(uint8_t *output, int32_t nblocks, uint64_t *s); +void shake128(uint8_t *output, int32_t outlen, const uint8_t *input, int32_t inlen); +void shake256(uint8_t *output, int32_t outlen, const uint8_t *input, int32_t inlen); #endif @@ -463,13 +340,7 @@ CRYPTO_BYTES size error #define CRYPTO_ALGNAME "Dilithium" int crypto_sign_keypair(uint8_t *pk, uint8_t *sk); - -int crypto_sign(uint8_t *sm, int32_t *smlen, - const uint8_t *msg, int32_t len, - const uint8_t *sk); - -int crypto_sign_open(uint8_t *m, int32_t *mlen, - const uint8_t *sm, int32_t smlen, - const uint8_t *pk); +int crypto_sign(uint8_t *sm, int32_t *smlen, const uint8_t *msg, int32_t len, const uint8_t *sk); +int crypto_sign_open(uint8_t *m, int32_t *mlen, const uint8_t *sm, int32_t smlen, const uint8_t *pk); #endif diff --git a/src/cc/disputepayout.cpp b/src/cc/disputepayout.cpp index 60924b00b..9e2015d2b 100644 --- a/src/cc/disputepayout.cpp +++ b/src/cc/disputepayout.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/fsm.cpp b/src/cc/fsm.cpp index 58b2120cf..650ba094b 100644 --- a/src/cc/fsm.cpp +++ b/src/cc/fsm.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/games/prices.c b/src/cc/games/prices.c index 1bc62533e..152768e67 100644 --- a/src/cc/games/prices.c +++ b/src/cc/games/prices.c @@ -1,4 +1,7 @@ - +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html + #include "prices.h" #include #include diff --git a/src/cc/games/prices.h b/src/cc/games/prices.h index ae1c46821..deb0948d7 100644 --- a/src/cc/games/prices.h +++ b/src/cc/games/prices.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html #ifndef H_PRICES_H #define H_PRICES_H diff --git a/src/cc/games/tetris.c b/src/cc/games/tetris.c index 8e7642837..73bd649d9 100644 --- a/src/cc/games/tetris.c +++ b/src/cc/games/tetris.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html #include "tetris.h" diff --git a/src/cc/games/tetris.h b/src/cc/games/tetris.h index c4cfb3b31..27117822a 100644 --- a/src/cc/games/tetris.h +++ b/src/cc/games/tetris.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html #ifndef H_TETRIS_H #define H_TETRIS_H diff --git a/src/cc/gamescc.cpp b/src/cc/gamescc.cpp index 43f2f4fd1..13f77147b 100644 --- a/src/cc/gamescc.cpp +++ b/src/cc/gamescc.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/gamescc.h b/src/cc/gamescc.h index b804216d7..3633e0feb 100644 --- a/src/cc/gamescc.h +++ b/src/cc/gamescc.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html #ifndef H_GAMESCC_H #define H_GAMESCC_H diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index 515c0b3cb..6dfa82cf5 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/importgateway.cpp b/src/cc/importgateway.cpp index 16b54d2b6..eb1cd0cb4 100644 --- a/src/cc/importgateway.cpp +++ b/src/cc/importgateway.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/importpayout.cpp b/src/cc/importpayout.cpp index 6df9a6b6a..bc7e19a4e 100644 --- a/src/cc/importpayout.cpp +++ b/src/cc/importpayout.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/lotto.cpp b/src/cc/lotto.cpp index db4414445..d612d9e0a 100644 --- a/src/cc/lotto.cpp +++ b/src/cc/lotto.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/musig.cpp b/src/cc/musig.cpp index e98937d71..3aff37b51 100644 --- a/src/cc/musig.cpp +++ b/src/cc/musig.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/oracles.cpp b/src/cc/oracles.cpp index 14a1e328f..b4089d35b 100644 --- a/src/cc/oracles.cpp +++ b/src/cc/oracles.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/payments.cpp b/src/cc/payments.cpp index 34b1a10ee..4943e5ee2 100644 --- a/src/cc/payments.cpp +++ b/src/cc/payments.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/pegs.cpp b/src/cc/pegs.cpp index 6ef33a884..876d4a595 100644 --- a/src/cc/pegs.cpp +++ b/src/cc/pegs.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/rewards.cpp b/src/cc/rewards.cpp index 9ff886212..3f72157df 100644 --- a/src/cc/rewards.cpp +++ b/src/cc/rewards.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cc/rogue_rpc.cpp b/src/cc/rogue_rpc.cpp index 7a39a724e..eebe14eaa 100644 --- a/src/cc/rogue_rpc.cpp +++ b/src/cc/rogue_rpc.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * diff --git a/src/cc/sudoku.cpp b/src/cc/sudoku.cpp index de1915c8b..d7ed51abe 100644 --- a/src/cc/sudoku.cpp +++ b/src/cc/sudoku.cpp @@ -1,4 +1,7 @@ -// start https://github.com/attractivechaos/plb/blob/master/sudoku/incoming/sudoku_solver.c +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html +// From https://github.com/attractivechaos/plb/blob/master/sudoku/incoming/sudoku_solver.c /************************************************************************************/ /* */ /* Author: Bill DuPree */ @@ -192,10 +195,10 @@ /* */ /* CHANGE LOG: */ /* */ -/* Rev. Date Init. Description */ +/* Rev. Date Init. Description */ /* -------------------------------------------------------------------------------- */ -/* 1.00 2006-02-25 WD Initial version. */ -/* 1.01 2006-03-13 WD Fixed return code calc. Added signon message. */ +/* 1.00 2006-02-25 WD Initial version. */ +/* 1.01 2006-03-13 WD Fixed return code calc. Added signon message. */ /* 1.10 2006-03-20 WD Added explain option, add'l speed optimizations */ /* 1.11 2006-03-23 WD More simple speed optimizations, cleanup, bug fixes */ /* */ diff --git a/src/cc/utils.cpp b/src/cc/utils.cpp deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/cc/utils.h b/src/cc/utils.h index 39bce0e95..bbb771936 100644 --- a/src/cc/utils.h +++ b/src/cc/utils.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * @@ -19,10 +22,7 @@ #include "streams.h" #include "version.h" - -/* - * Serialisation boilerplate - */ +// Serialization boilerplate template std::vector SerializeF(const T f) diff --git a/src/coins.cpp b/src/coins.cpp index 2fd175759..cf963208d 100644 --- a/src/coins.cpp +++ b/src/coins.cpp @@ -2,7 +2,6 @@ // Copyright (c) 2016-2020 The Hush developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html - /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * @@ -17,7 +16,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "coins.h" #include "memusage.h" #include "random.h" @@ -26,7 +24,6 @@ #include "hush_defs.h" #include "importcoin.h" #include - /** * calculate number of bytes for the bitmask, and its number of non-zero bytes * each bit in the bitmask represents the availability of one output, but the @@ -536,8 +533,6 @@ const CTxOut &CCoinsViewCache::GetOutputFor(const CTxIn& input) const return coins->vout[input.prevout.n]; } -//uint64_t komodo_interest(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uint32_t tiptime); -uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 hash,int32_t n,int32_t checkheight,uint64_t checkvalue,int32_t tipheight); extern char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN]; const CScript &CCoinsViewCache::GetSpendFor(const CCoins *coins, const CTxIn& input) @@ -570,20 +565,6 @@ CAmount CCoinsViewCache::GetValueIn(int32_t nHeight,int64_t *interestp,const CTr } value = GetOutputFor(tx.vin[i]).nValue; nResult += value; -#ifdef KOMODO_ENABLE_INTEREST - if ( SMART_CHAIN_SYMBOL[0] == 0 && nHeight >= 60000 ) - { - if ( value >= 10*COIN ) - { - int64_t interest; int32_t txheight; uint32_t locktime; - interest = komodo_accrued_interest(&txheight,&locktime,tx.vin[i].prevout.hash,tx.vin[i].prevout.n,0,value,(int32_t)nHeight); - //printf("nResult %.8f += val %.8f interest %.8f ht.%d lock.%u tip.%u\n",(double)nResult/COIN,(double)value/COIN,(double)interest/COIN,txheight,locktime,tiptime); - //fprintf(stderr,"nResult %.8f += val %.8f interest %.8f ht.%d lock.%u tip.%u\n",(double)nResult/COIN,(double)value/COIN,(double)interest/COIN,txheight,locktime,tiptime); - nResult += interest; - (*interestp) += interest; - } - } -#endif } nResult += tx.GetShieldedValueIn(); diff --git a/src/coins.h b/src/coins.h index b5023dbda..6e999d5a1 100644 --- a/src/coins.h +++ b/src/coins.h @@ -3,7 +3,6 @@ // Copyright (c) 2016-2020 The Hush developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html - /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * @@ -18,12 +17,8 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef HUSH_COINS_H #define HUSH_COINS_H - -#define KOMODO_ENABLE_INTEREST //enabling this is a hardfork, activate with new RR method - #include "compressor.h" #include "core_memusage.h" #include "memusage.h" @@ -31,12 +26,10 @@ #include "uint256.h" #include "base58.h" #include "pubkey.h" - #include #include #include #include - #include #include #include "zcash/IncrementalMerkleTree.hpp" diff --git a/src/ctest b/src/ctest deleted file mode 100755 index 1bb1a92a8..000000000 --- a/src/ctest +++ /dev/null @@ -1 +0,0 @@ -./komodod -ac_name=CTEST -ac_supply=1000000 -ac_perc=100000 -ac_pubkey=02ebc786cb83de8dc3922ab83c21f3f8a2f3216940c3bf9da43ce39e2a3a882c92 -ac_reward=300000000 -addnode=136.243.58.134 & diff --git a/src/hush.h b/src/hush.h index 451c3d0ee..3f25c47de 100644 --- a/src/hush.h +++ b/src/hush.h @@ -47,7 +47,6 @@ bool check_pprevnotarizedht(); #include "komodo_curve25519.h" #include "komodo_cJSON.c" #include "hush_bitcoind.h" -#include "komodo_interest.h" #include "komodo_pax.h" #include "hush_notary.h" @@ -805,7 +804,7 @@ int32_t komodo_notarycmp(uint8_t *scriptPubKey,int32_t scriptlen,uint8_t pubkeys return(-1); } -// Connect a Hush Block +// Connect a Hush Block, foshizzle int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block) { static int32_t hwmheight; diff --git a/src/hush_defs.h b/src/hush_defs.h index 3fbe054ce..ddb651717 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -563,7 +563,6 @@ int32_t komodo_nextheight(); uint32_t komodo_heightstamp(int32_t height); int64_t komodo_pricemult(int32_t ind); int32_t komodo_priceget(int64_t *buf64,int32_t ind,int32_t height,int32_t numblocks); -uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 hash,int32_t n,int32_t checkheight,uint64_t checkvalue,int32_t tipheight); int32_t komodo_currentheight(); int32_t komodo_notarized_bracket(struct notarized_checkpoint *nps[2],int32_t height); arith_uint256 komodo_adaptivepow_target(int32_t height,arith_uint256 bnTarget,uint32_t nTime); diff --git a/src/hushd b/src/hushd index 46e8a8ca2..d08407080 100755 --- a/src/hushd +++ b/src/hushd @@ -1,5 +1,7 @@ #!/bin/bash # Copyright (c) 2016-2020 The Hush developers +# Distributed under the GPLv3 software license, see the accompanying +# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html # set working directory to the location of this script # readlink -f does not always exist @@ -14,7 +16,8 @@ NAME=HUSH3 # this corresponds to FR address RHushEyeDm7XwtaTWtyCbjGQumYyV8vMjn SCRIPT=76a9145eb10cf64f2bab1b457f1f25e658526155928fac88ac -# First Pure Sapling Zcash Protocol chain! +# Hush was and will always be: +# The First Pure Sapling Zcash Protocol chain! SAPLING=1 # We use 3 "eras" of different supply curves @@ -68,8 +71,8 @@ else fi fi -# jl777 disgraced his village and so Duke The Elder journeys on -# with the True Cypherpunks +# jl777 dishonored his village and so Duke The Elder journeys on +# with the True Extreme Privacy Cypherpunks $KMD -ac_name=$NAME \ -ac_sapling=$SAPLING \ -ac_reward=$REWARD \ diff --git a/src/hushd-testnet b/src/hushd-testnet index 99b348a04..4612e7563 100755 --- a/src/hushd-testnet +++ b/src/hushd-testnet @@ -1,15 +1,23 @@ #!/bin/bash # Copyright (c) 2016-2020 The Hush developers +# Distributed under the GPLv3 software license, see the accompanying +# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html # set working directory to the location of this script DIR="$( cd "$( dirname "$( readlink -f "${BASH_SOURCE[0]}" )" )" && pwd )" cd $DIR +DIR="$( cd "$( dirname "$( readlink "${BASH_SOURCE[0]}" )" )" && pwd )" +cd $DIR # TESTING VALUES, DO NOT USE EXCEPT FOR DEVELOPMENT NAME=HUSH3T # this corresponds to FR address RHushEyeDm7XwtaTWtyCbjGQumYyV8vMjn SCRIPT=76a9145eb10cf64f2bab1b457f1f25e658526155928fac88ac +# Hush was and will always be: +# The First Pure Sapling Zcash Protocol chain! +SAPLING=1 + # Chain parameters ERAS=3 BLOCKTIME=150 @@ -32,20 +40,21 @@ ORACLE=236 GATEWAY=241 CCENABLE=$FAUCET,$HEIR,$CHANNEL,$ORACLE,$GATEWAY -#NOTE: This is not compatible with upstream KMD komodod, -# but you can reuse one hush3 komodod binary in various -# directories/repos on one server, to save disk space +# jl777 dishonored his village and so Duke The Elder journeys on +# with the True Extreme Privacy Cypherpunks KMD=${KOMODOD:-./komodod} -$KMD -ac_name=$NAME -ac_sapling=1 \ - -ac_reward=$REWARD \ - -ac_halving=$HALVING \ - -ac_end=$END \ - -ac_eras=$ERAS \ - -ac_blocktime=$BLOCKTIME \ - -ac_cc=2 -ac_ccenable=$CCENABLE \ - -ac_founders=$FOUNDERS -ac_supply=$SUPPLY \ - -ac_perc=$PERC \ - -clientname=$CLIENTNAME \ - -addnode=$SEEDNODE \ - -ac_cclib=$CCLIB \ +$KMD -ac_name=$NAME \ + -ac_sapling=$SAPLING \ + -ac_reward=$REWARD \ + -ac_halving=$HALVING \ + -ac_end=$END \ + -ac_eras=$ERAS \ + -ac_blocktime=$BLOCKTIME \ + -ac_cc=2 \ + -ac_ccenable=$CCENABLE \ + -ac_founders=$FOUNDERS \ + -ac_supply=$SUPPLY \ + -ac_perc=$PERC \ + -clientname=$CLIENTNAME \ + -ac_cclib=$CCLIB \ -ac_script=$SCRIPT "$@" diff --git a/src/komodo-tx.cpp b/src/komodo-tx.cpp index cb1476c5e..49831fc9d 100644 --- a/src/komodo-tx.cpp +++ b/src/komodo-tx.cpp @@ -41,14 +41,9 @@ using namespace std; #include "hush_structs.h" #include "hush_globals.h" #include "hush_defs.h" -#include "komodo_interest.h" CKey NSPV_key; char NSPV_pubkeystr[67],NSPV_wifstr[64]; -uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 hash,int32_t n,int32_t checkheight,uint64_t checkvalue,int32_t tipheight) -{ - return(0); -} static bool fCreateBlank; static std::map registers; diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 7720f50ad..870921d4b 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1422,8 +1422,6 @@ int32_t hush_faststateinit(struct hush_state *sp,char *fname,char *symbol,char * return(-1); } -uint64_t komodo_interestsum(); - void hush_passport_iteration() { static long lastpos[34]; static char userpass[33][1024]; static uint32_t lasttime,callcounter,lastinterest; @@ -1437,9 +1435,6 @@ void hush_passport_iteration() } if ( komodo_chainactive_timestamp() > lastinterest ) { - if ( SMART_CHAIN_SYMBOL[0] == 0 ) - komodo_interestsum(); - //hush_longestchain(); lastinterest = komodo_chainactive_timestamp(); } refsp = hush_stateptr(symbol,dest); diff --git a/src/komodo_interest.h b/src/komodo_interest.h deleted file mode 100644 index 60e3dfd4f..000000000 --- a/src/komodo_interest.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2016-2020 The Hush developers -// Distributed under the GPLv3 software license, see the accompanying -// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -/****************************************************************************** - * Copyright © 2014-2019 The SuperNET Developers. * - * * - * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * - * the top-level directory of this distribution for the individual copyright * - * holder information and the developer policies on copyright and licensing. * - * * - * Unless otherwise agreed in a custom licensing agreement, no part of the * - * SuperNET software, including this file may be copied, modified, propagated * - * or distributed except according to the terms contained in the LICENSE file * - * * - * Removal or modification of this copyright notice is prohibited. * - * * - ******************************************************************************/ - -#include "hush_defs.h" - -uint64_t _komodo_interestnew(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uint32_t tiptime) -{ - return 0; -} - -uint64_t komodo_interestnew(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uint32_t tiptime) -{ - return 0; -} - -uint64_t komodo_interest(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uint32_t tiptime) -{ - return 0; -} - diff --git a/src/komodo_nSPV_fullnode.h b/src/komodo_nSPV_fullnode.h index bfdd391a4..cb7cc5acf 100644 --- a/src/komodo_nSPV_fullnode.h +++ b/src/komodo_nSPV_fullnode.h @@ -1,4 +1,6 @@ - +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * @@ -13,7 +15,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef HUSH_NSPVFULLNODE_H #define HUSH_NSPVFULLNODE_H @@ -185,11 +186,6 @@ int32_t NSPV_getaddressutxos(struct NSPV_utxosresp *ptr,char *coinaddr,bool isCC ptr->utxos[ind].vout = (int32_t)it->first.index; ptr->utxos[ind].satoshis = it->second.satoshis; ptr->utxos[ind].height = it->second.blockHeight; - if ( SMART_CHAIN_SYMBOL[0] == 0 && it->second.satoshis >= 10*COIN ) - { - ptr->utxos[n].extradata = komodo_accrued_interest(&txheight,&locktime,ptr->utxos[ind].txid,ptr->utxos[ind].vout,ptr->utxos[ind].height,ptr->utxos[ind].satoshis,tipheight); - interest += ptr->utxos[ind].extradata; - } ind++; total += it->second.satoshis; } diff --git a/src/komodo_nSPV_wallet.h b/src/komodo_nSPV_wallet.h index ced0c22bc..8a5f7fe2b 100644 --- a/src/komodo_nSPV_wallet.h +++ b/src/komodo_nSPV_wallet.h @@ -1,4 +1,6 @@ - +// Copyright (c) 2016-2020 The Hush developers +// Distributed under the GPLv3 software license, see the accompanying +// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * @@ -13,11 +15,10 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef HUSH_NSPVWALLET_H #define HUSH_NSPVWALLET_H -// nSPV wallet uses superlite functions (and some komodod built in functions) to implement nSPV_spend +// nSPV wallet uses superlite functions (and some hushd built in functions) to implement nSPV_spend extern void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry); int32_t NSPV_validatehdrs(struct NSPV_ntzsproofresp *ptr) @@ -83,13 +84,7 @@ int32_t NSPV_gettransaction(int32_t skipvalidation,int32_t vout,uint256 txid,int retval = -2001; else if ( skipvalidation == 0 && ptr->unspentvalue <= 0 ) retval = -2002; - else if ( SMART_CHAIN_SYMBOL[0] == 0 && tiptime != 0 ) - { - rewards = komodo_interestnew(height,tx.vout[vout].nValue,tx.nLockTime,tiptime); - if ( rewards != extradata ) - fprintf(stderr,"extradata %.8f vs rewards %.8f\n",dstr(extradata),dstr(rewards)); - rewardsum += rewards; - } + //char coinaddr[64]; //Getscriptaddress(coinaddr,tx.vout[0].scriptPubKey); causes crash?? //fprintf(stderr,"%s txid.%s vs hash.%s\n",coinaddr,txid.GetHex().c_str(),tx.GetHash().GetHex().c_str()); diff --git a/src/main.cpp b/src/main.cpp index f3df763ca..ffd503ee0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2671,20 +2671,6 @@ namespace Consensus { // Check for negative or overflow input values nValueIn += coins->vout[prevout.n].nValue; -#ifdef KOMODO_ENABLE_INTEREST - if ( SMART_CHAIN_SYMBOL[0] == 0 && nSpendHeight > 60000 )//chainActive.LastTip() != 0 && chainActive.LastTip()->GetHeight() >= 60000 ) - { - if ( coins->vout[prevout.n].nValue >= 10*COIN ) - { - int64_t interest; int32_t txheight; uint32_t locktime; - if ( (interest= komodo_accrued_interest(&txheight,&locktime,prevout.hash,prevout.n,0,coins->vout[prevout.n].nValue,(int32_t)nSpendHeight-1)) != 0 ) - { - //fprintf(stderr,"checkResult %.8f += val %.8f interest %.8f ht.%d lock.%u tip.%u\n",(double)nValueIn/COIN,(double)coins->vout[prevout.n].nValue/COIN,(double)interest/COIN,txheight,locktime,chainActive.LastTip()->nTime); - nValueIn += interest; - } - } - } -#endif if (!MoneyRange(coins->vout[prevout.n].nValue) || !MoneyRange(nValueIn)) return state.DoS(100, error("CheckInputs(): txin values out of range"), REJECT_INVALID, "bad-txns-inputvalues-outofrange"); @@ -5096,18 +5082,15 @@ bool CheckBlock(int32_t *futureblockp,int32_t height,CBlockIndex *pindex,const C // Size limits //fprintf(stderr,"%s checkblock %d -> %d vs blocksize.%d\n",SMART_CHAIN_SYMBOL,height,MAX_BLOCK_SIZE(height),(int32_t)::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION)); if (block.vtx.empty() || block.vtx.size() > MAX_BLOCK_SIZE(height) || ::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION) > MAX_BLOCK_SIZE(height)) - return state.DoS(100, error("CheckBlock: size limits failed"), - REJECT_INVALID, "bad-blk-length"); + return state.DoS(100, error("CheckBlock: size limits failed"), REJECT_INVALID, "bad-blk-length"); // First transaction must be coinbase, the rest must not be if (block.vtx.empty() || !block.vtx[0].IsCoinBase()) - return state.DoS(100, error("CheckBlock: first tx is not coinbase"), - REJECT_INVALID, "bad-cb-missing"); + return state.DoS(100, error("CheckBlock: first tx is not coinbase"), REJECT_INVALID, "bad-cb-missing"); for (unsigned int i = 1; i < block.vtx.size(); i++) if (block.vtx[i].IsCoinBase()) - return state.DoS(100, error("CheckBlock: more than one coinbase"), - REJECT_INVALID, "bad-cb-multiple"); + return state.DoS(100, error("CheckBlock: more than one coinbase"), REJECT_INVALID, "bad-cb-multiple"); // Check transactions CTransaction sTx; @@ -5115,7 +5098,9 @@ bool CheckBlock(int32_t *futureblockp,int32_t height,CBlockIndex *pindex,const C if ( ASSETCHAINS_CC != 0 && !fCheckPOW ) return true; - if ( ASSETCHAINS_CC != 0 ) // CC contracts might refer to transactions in the current block, from a CC spend within the same block and out of order + /* + bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; + if (ASSETCHAINS_CC != 0 ) // CC contracts might refer to transactions in the current block, from a CC spend within the same block and out of order { int32_t i,j,rejects=0,lastrejects=0; //fprintf(stderr,"put block's tx into mempool\n"); @@ -5174,15 +5159,11 @@ bool CheckBlock(int32_t *futureblockp,int32_t height,CBlockIndex *pindex,const C } //fprintf(stderr,"done putting block's tx into mempool\n"); } + */ for (uint32_t i = 0; i < block.vtx.size(); i++) { const CTransaction& tx = block.vtx[i]; - if ( komodo_validate_interest(tx,height == 0 ? hush_block2height((CBlock *)&block) : height,block.nTime,0) < 0 ) - { - fprintf(stderr, "validate intrest failed for txnum.%i tx.%s\n", i, tx.ToString().c_str()); - return error("CheckBlock: komodo_validate_interest failed"); - } if (!CheckTransaction(tiptime,tx, state, verifier, i, (int32_t)block.vtx.size())) return error("CheckBlock: CheckTransaction failed"); } @@ -5195,6 +5176,7 @@ bool CheckBlock(int32_t *futureblockp,int32_t height,CBlockIndex *pindex,const C if (nSigOps > MAX_BLOCK_SIGOPS) return state.DoS(100, error("CheckBlock: out-of-bounds SigOpCount"), REJECT_INVALID, "bad-blk-sigops", true); + /* if ( fCheckPOW && komodo_check_deposit(height,block,(pindex==0||pindex->pprev==0)?0:pindex->pprev->nTime) < 0 ) { //static uint32_t counter; @@ -5218,6 +5200,7 @@ bool CheckBlock(int32_t *futureblockp,int32_t height,CBlockIndex *pindex,const C // empty the temp mempool for next time. tmpmempool.clear(); } + */ return true; } diff --git a/src/miner.cpp b/src/miner.cpp index 0db996bbc..0d6e16023 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -143,7 +143,6 @@ int32_t hush_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33,ui int32_t komodo_pax_opreturn(int32_t height,uint8_t *opret,int32_t maxsize); int32_t komodo_baseid(char *origbase); int32_t hush_longestchain(); -int32_t komodo_validate_interest(const CTransaction &tx,int32_t txheight,uint32_t nTime,int32_t dispflag); int64_t komodo_block_unlocktime(uint32_t nHeight); uint64_t the_commission(const CBlock *block,int32_t height); int32_t komodo_notaryvin(CMutableTransaction &txNew,uint8_t *notarypub33, void *ptr); @@ -292,14 +291,6 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 txvalue = tx.GetValueOut(); if ( KOMODO_VALUETOOBIG(txvalue) != 0 ) continue; - //if ( KOMODO_VALUETOOBIG(txvalue + voutsum) != 0 ) // has been commented from main.cpp ? - // continue; - //voutsum += txvalue; - if ( SMART_CHAIN_SYMBOL[0] == 0 && komodo_validate_interest(tx,nHeight,(uint32_t)pblock->nTime,0) < 0 ) - { - //fprintf(stderr,"CreateNewBlock: komodo_validate_interest failure nHeight.%d nTime.%u vs locktime.%u\n",nHeight,(uint32_t)pblock->nTime,(uint32_t)tx.nLockTime); - continue; - } COrphan* porphan = NULL; double dPriority = 0; diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 5466b9914..fa2683b9f 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -1487,9 +1487,6 @@ UniValue gettxout(const UniValue& params, bool fHelp, const CPubKey& mypk) ret.push_back(Pair("rawconfirmations", pindex->GetHeight() - coins.nHeight + 1)); } ret.push_back(Pair("value", ValueFromAmount(coins.vout[n].nValue))); - uint64_t interest; int32_t txheight; uint32_t locktime; - if ( (interest= komodo_accrued_interest(&txheight,&locktime,hash,n,coins.nHeight,coins.vout[n].nValue,(int32_t)pindex->GetHeight())) != 0 ) - ret.push_back(Pair("interest", ValueFromAmount(interest))); UniValue o(UniValue::VOBJ); ScriptPubKeyToJSON(coins.vout[n].scriptPubKey, o, true); ret.push_back(Pair("scriptPubKey", o)); diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 01774211f..e5b560d58 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2016-2020 The Hush developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html - /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "amount.h" #include "chainparams.h" #include "consensus/consensus.h" @@ -214,7 +212,7 @@ UniValue generate(const UniValue& params, bool fHelp, const CPubKey& mypk) throw JSONRPCError(RPC_METHOD_NOT_FOUND, "Wallet disabled and -mineraddress not set"); } #else - throw JSONRPCError(RPC_METHOD_NOT_FOUND, "komodod compiled without wallet and -mineraddress not set"); + throw JSONRPCError(RPC_METHOD_NOT_FOUND, "hushd compiled without wallet and -mineraddress not set"); #endif } if (!Params().MineBlocksOnDemand()) @@ -345,7 +343,7 @@ UniValue setgenerate(const UniValue& params, bool fHelp, const CPubKey& mypk) throw JSONRPCError(RPC_METHOD_NOT_FOUND, "Wallet disabled and -mineraddress not set"); } #else - throw JSONRPCError(RPC_METHOD_NOT_FOUND, "komodod compiled without wallet and -mineraddress not set"); + throw JSONRPCError(RPC_METHOD_NOT_FOUND, "hushd compiled without wallet and -mineraddress not set"); #endif } if (Params().MineBlocksOnDemand()) @@ -605,7 +603,7 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp, const CPubKey& myp throw JSONRPCError(RPC_METHOD_NOT_FOUND, "Wallet disabled and -mineraddress not set"); } #else - throw JSONRPCError(RPC_METHOD_NOT_FOUND, "komodod compiled without wallet and -mineraddress not set"); + throw JSONRPCError(RPC_METHOD_NOT_FOUND, "hushd compiled without wallet and -mineraddress not set"); #endif } diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 6590ed9b7..40e3e6dcd 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -37,6 +37,7 @@ #include #include #include "zcash/Address.hpp" +#include "build.h" using namespace std; @@ -54,7 +55,6 @@ using namespace std; * Or alternatively, create a specific query method for the information. **/ -uint64_t komodo_interestsum(); int32_t hush_longestchain(); int32_t hush_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp); bool komodo_txnotarizedconfirmed(uint256 txid); @@ -275,6 +275,7 @@ UniValue getinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) #endif obj.push_back(Pair("sapling", ASSETCHAINS_SAPLING)); } + obj.push_back(Pair("build_date", BUILD_DATE)); obj.push_back(Pair("timeoffset", 0)); obj.push_back(Pair("connections", (int)vNodes.size())); obj.push_back(Pair("tls_connections", (int)std::count_if(vNodes.begin(), vNodes.end(), [](CNode* n) {return n->ssl != NULL;}))); diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index b928980ca..948ad2eae 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2016-2020 The Hush developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html - /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "consensus/upgrades.h" #include "consensus/validation.h" #include "core_io.h" @@ -85,8 +83,6 @@ void ScriptPubKeyToJSON(const CScript& scriptPubKey, UniValue& out, bool fInclud out.push_back(Pair("addresses", a)); } -uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 hash,int32_t n,int32_t checkheight,uint64_t checkvalue,int32_t tipheight); - UniValue TxShieldedSpendsToJSON(const CTransaction& tx) { UniValue vdesc(UniValue::VARR); for (const SpendDescription& spendDesc : tx.vShieldedSpend) { @@ -217,13 +213,7 @@ void TxToJSONExpanded(const CTransaction& tx, const uint256 hashBlock, UniValue& const CTxOut& txout = tx.vout[i]; UniValue out(UniValue::VOBJ); out.push_back(Pair("value", ValueFromAmount(txout.nValue))); - if ( SMART_CHAIN_SYMBOL[0] == 0 && pindex != 0 && tx.nLockTime >= 500000000 && (tipindex= chainActive.LastTip()) != 0 ) - { - int64_t interest; int32_t txheight; uint32_t locktime; - interest = komodo_accrued_interest(&txheight,&locktime,tx.GetHash(),i,0,txout.nValue,(int32_t)tipindex->GetHeight()); - out.push_back(Pair("interest", ValueFromAmount(interest))); - } - out.push_back(Pair("valueSat", txout.nValue)); // [+] Decker + out.push_back(Pair("valueSat", txout.nValue)); out.push_back(Pair("n", (int64_t)i)); UniValue o(UniValue::VOBJ); ScriptPubKeyToJSON(txout.scriptPubKey, o, true); @@ -316,12 +306,6 @@ void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry) const CTxOut& txout = tx.vout[i]; UniValue out(UniValue::VOBJ); out.push_back(Pair("value", ValueFromAmount(txout.nValue))); - if ( HUSH_NSPV_FULLNODE && SMART_CHAIN_SYMBOL[0] == 0 && tx.nLockTime >= 500000000 && (tipindex= chainActive.LastTip()) != 0 ) - { - int64_t interest; int32_t txheight; uint32_t locktime; - interest = komodo_accrued_interest(&txheight,&locktime,tx.GetHash(),i,0,txout.nValue,(int32_t)tipindex->GetHeight()); - out.push_back(Pair("interest", ValueFromAmount(interest))); - } out.push_back(Pair("valueZat", txout.nValue)); out.push_back(Pair("n", (int64_t)i)); UniValue o(UniValue::VOBJ); diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp index e5b972d08..1de69fdd4 100644 --- a/src/rpc/server.cpp +++ b/src/rpc/server.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2016-2020 The Hush developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html - /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * @@ -18,9 +17,7 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "rpc/server.h" - #include "init.h" #include "key_io.h" #include "random.h" @@ -29,11 +26,8 @@ #include "util.h" #include "utilstrencodings.h" #include "asyncrpcqueue.h" - #include - #include - #include #include #include @@ -889,7 +883,7 @@ std::string HelpExampleRpc(const std::string& methodname, const std::string& arg string experimentalDisabledHelpMsg(const string& rpc, const string& enableArg) { - string daemon = SMART_CHAIN_SYMBOL[0] == 0 ? "komodod" : "hushd"; + string daemon = "hushd"; string ticker = SMART_CHAIN_SYMBOL[0] == 0 ? "komodo" : SMART_CHAIN_SYMBOL; return "\nWARNING: " + rpc + " is disabled.\n" diff --git a/src/txmempool.cpp b/src/txmempool.cpp index 66ed1452e..e3c68dd42 100644 --- a/src/txmempool.cpp +++ b/src/txmempool.cpp @@ -1,10 +1,8 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers // Copyright (c) 2016-2020 The Hush developers - // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html - /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * @@ -19,9 +17,7 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "txmempool.h" - #include "clientversion.h" #include "consensus/consensus.h" #include "consensus/validation.h" @@ -510,7 +506,6 @@ void CTxMemPool::removeConflicts(const CTransaction &tx, std::list } } -int32_t komodo_validate_interest(const CTransaction &tx,int32_t txheight,uint32_t nTime,int32_t dispflag); extern char SMART_CHAIN_SYMBOL[]; std::vector CTxMemPool::removeExpired(unsigned int nBlockHeight) @@ -524,6 +519,7 @@ std::vector CTxMemPool::removeExpired(unsigned int nBlockHeight) const CTransaction& tx = it->GetTx(); tipindex = chainActive.LastTip(); + /* bool fInterestNotValidated = SMART_CHAIN_SYMBOL[0] == 0 && tipindex != 0 && komodo_validate_interest(tx,tipindex->GetHeight()+1,tipindex->GetMedianTimePast() + 777,0) < 0; if (IsExpiredTx(tx, nBlockHeight) || fInterestNotValidated) { @@ -531,6 +527,7 @@ std::vector CTxMemPool::removeExpired(unsigned int nBlockHeight) LogPrintf("Removing interest violate txid.%s nHeight.%d nTime.%u vs locktime.%u\n",tx.GetHash().ToString(),tipindex->GetHeight()+1,tipindex->GetMedianTimePast() + 777,tx.nLockTime); transactionsToRemove.push_back(tx); } + */ } std::vector ids; for (const CTransaction& tx : transactionsToRemove) { @@ -542,9 +539,7 @@ std::vector CTxMemPool::removeExpired(unsigned int nBlockHeight) return ids; } -/** - * Called when a block is connected. Removes from mempool and updates the miner fee estimator. - */ +// Called when a block is connected. Removes from mempool and updates the miner fee estimator. void CTxMemPool::removeForBlock(const std::vector& vtx, unsigned int nBlockHeight, std::list& conflicts, bool fCurrentEstimate) { diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 20bbc44ab..e3e6ad3c2 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -130,11 +130,8 @@ void Unlock2NSPV(const CPubKey &pk) } } -uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 hash,int32_t n,int32_t checkheight,uint64_t checkvalue,int32_t tipheight); - void WalletTxToJSON(const CWalletTx& wtx, UniValue& entry) { - //int32_t i,n,txheight; uint32_t locktime; uint64_t interest = 0; int confirms = wtx.GetDepthInMainChain(); entry.push_back(Pair("rawconfirmations", confirms)); if (wtx.IsCoinBase()) @@ -976,11 +973,11 @@ UniValue getreceivedbyaddress(const UniValue& params, bool fHelp, const CPubKey& int nHeight = tx_height(wtx.GetHash()); int dpowconfs = hush_dpowconfs(nHeight, nDepth); if (dpowconfs >= nMinDepth) { - nAmount += txout.nValue; // komodo_interest? + nAmount += txout.nValue; } } else { if (nDepth >= nMinDepth) { - nAmount += txout.nValue; // komodo_interest? + nAmount += txout.nValue; } } } @@ -1039,7 +1036,7 @@ UniValue getreceivedbyaccount(const UniValue& params, bool fHelp, const CPubKey& CTxDestination address; if (ExtractDestination(txout.scriptPubKey, address) && IsMine(*pwalletMain, address) && setAddress.count(address)) if (wtx.GetDepthInMainChain() >= nMinDepth) - nAmount += txout.nValue; // komodo_interest? + nAmount += txout.nValue; } } @@ -1660,7 +1657,7 @@ UniValue ListReceived(const UniValue& params, bool fByAccounts) continue; tallyitem& item = mapTally[address]; - item.nAmount += txout.nValue; // komodo_interest? + item.nAmount += txout.nValue; item.nConf = min(item.nConf, nDepth); item.nHeight = komodo_blockheight(wtx.hashBlock); item.txids.push_back(wtx.GetHash()); @@ -2967,13 +2964,7 @@ UniValue listunspent(const UniValue& params, bool fHelp, const CPubKey& mypk) { BlockMap::iterator it = mapBlockIndex.find(pcoinsTip->GetBestBlock()); CBlockIndex *tipindex,*pindex = it->second; - uint64_t interest; uint32_t locktime; - if ( pindex != 0 && (tipindex= chainActive.LastTip()) != 0 ) - { - interest = komodo_accrued_interest(&txheight,&locktime,out.tx->GetHash(),out.i,0,nValue,(int32_t)tipindex->GetHeight()); - //interest = komodo_interest(txheight,nValue,out.tx->nLockTime,tipindex->nTime); - entry.push_back(Pair("interest",ValueFromAmount(interest))); - } + uint32_t locktime; //fprintf(stderr,"nValue %.8f pindex.%p tipindex.%p locktime.%u txheight.%d pindexht.%d\n",(double)nValue/COIN,pindex,chainActive.LastTip(),locktime,txheight,pindex->GetHeight()); } else if ( chainActive.LastTip() != 0 ) @@ -2987,42 +2978,7 @@ UniValue listunspent(const UniValue& params, bool fHelp, const CPubKey& mypk) return results; } -uint64_t komodo_interestsum() -{ -#ifdef ENABLE_WALLET - if ( SMART_CHAIN_SYMBOL[0] == 0 && GetBoolArg("-disablewallet", false) == 0 && HUSH_NSPV_FULLNODE ) - { - uint64_t interest,sum = 0; int32_t txheight; uint32_t locktime; - vector vecOutputs; - assert(pwalletMain != NULL); - LOCK2(cs_main, pwalletMain->cs_wallet); - pwalletMain->AvailableCoins(vecOutputs, false, NULL, true); - BOOST_FOREACH(const COutput& out,vecOutputs) - { - CAmount nValue = out.tx->vout[out.i].nValue; - if ( out.tx->nLockTime != 0 && out.fSpendable != 0 ) - { - BlockMap::iterator it = mapBlockIndex.find(pcoinsTip->GetBestBlock()); - CBlockIndex *tipindex,*pindex = it->second; - if ( pindex != 0 && (tipindex= chainActive.LastTip()) != 0 ) - { - interest = komodo_accrued_interest(&txheight,&locktime,out.tx->GetHash(),out.i,0,nValue,(int32_t)tipindex->GetHeight()); - //interest = komodo_interest(pindex->GetHeight(),nValue,out.tx->nLockTime,tipindex->nTime); - sum += interest; - } - } - } - KOMODO_INTERESTSUM = sum; - KOMODO_WALLETBALANCE = pwalletMain->GetBalance(); - return(sum); - } -#endif - return(0); -} - -/** - *Return current blockchain status, wallet balance, address balance and the last 200 transactions -**/ +// Return current blockchain status, wallet balance, address balance and the last 200 transactions UniValue getalldata(const UniValue& params, bool fHelp,const CPubKey&) { if (fHelp || params.size() > 3) @@ -3059,23 +3015,20 @@ UniValue getalldata(const UniValue& params, bool fHelp,const CPubKey&) LOCK2(cs_main, pwalletMain->cs_wallet); int nMinDepth = 1; - - CAmount confirmed = 0; - CAmount unconfirmed = 0; - CAmount locked = 0; - CAmount immature = 0; - - CAmount privateConfirmed = 0; - CAmount privateUnconfirmed = 0; - CAmount privateLocked = 0; - CAmount privateImmature = 0; - balancestruct txAmounts; - txAmounts.confirmed = 0; - txAmounts.unconfirmed = 0; - txAmounts.locked = 0; - txAmounts.immature = 0; + CAmount confirmed = 0; + CAmount unconfirmed = 0; + CAmount locked = 0; + CAmount immature = 0; + CAmount privateConfirmed = 0; + CAmount privateUnconfirmed = 0; + CAmount privateLocked = 0; + CAmount privateImmature = 0; + txAmounts.confirmed = 0; + txAmounts.unconfirmed = 0; + txAmounts.locked = 0; + txAmounts.immature = 0; //Create map of addresses //Add all Transaparent addresses to list @@ -3087,7 +3040,7 @@ UniValue getalldata(const UniValue& params, bool fHelp,const CPubKey&) addressBalances.insert(make_pair(addressString,txAmounts)); } - //Add all Sapling addresses to map + // Add all zaddrs std::set zs_addresses; pwalletMain->GetSaplingPaymentAddresses(zs_addresses); for (auto addr : zs_addresses) { @@ -4038,7 +3991,7 @@ CAmount getBalanceTaddr(std::string transparentAddress, int minDepth=1, bool ign } } - CAmount nValue = out.tx->vout[out.i].nValue; // komodo_interest + CAmount nValue = out.tx->vout[out.i].nValue; balance += nValue; } return balance; @@ -4299,14 +4252,12 @@ UniValue z_gettotalbalance(const UniValue& params, bool fHelp, const CPubKey& my // getbalance and "getbalance * 1 true" should return the same number // but they don't because wtx.GetAmounts() does not handle tx where there are no outputs // pwalletMain->GetBalance() does not accept min depth parameter - // so we use our own method to get balance of utxos. - CAmount nBalance = getBalanceTaddr("", nMinDepth, !fIncludeWatchonly); + // so we use our own method to get balance of utxos, lulzwtfbbq + CAmount nBalance = getBalanceTaddr("", nMinDepth, !fIncludeWatchonly); CAmount nPrivateBalance = getBalanceZaddr("", nMinDepth, !fIncludeWatchonly); - uint64_t interest = komodo_interestsum(); - CAmount nTotalBalance = nBalance + nPrivateBalance; + CAmount nTotalBalance = nBalance + nPrivateBalance; UniValue result(UniValue::VOBJ); result.push_back(Pair("transparent", FormatMoney(nBalance))); - result.push_back(Pair("interest", FormatMoney(interest))); result.push_back(Pair("private", FormatMoney(nPrivateBalance))); result.push_back(Pair("total", FormatMoney(nTotalBalance))); return result; diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 16ee73c6a..9257b7e01 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -18,10 +18,8 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "wallet/wallet.h" #include "asyncrpcqueue.h" - #include "checkpoints.h" #include "coincontrol.h" #include "consensus/upgrades.h" @@ -42,9 +40,7 @@ #include "wallet/asyncrpcoperation_saplingconsolidation.h" #include "zcash/zip32.h" #include "cc/CCinclude.h" - #include - #include #include #include @@ -1814,7 +1810,7 @@ CAmount CWallet::GetDebit(const CTxIn &txin, const isminefilter& filter) const const CWalletTx& prev = (*mi).second; if (txin.prevout.n < prev.vout.size()) if (::IsMine(*this, prev.vout[txin.prevout.n].scriptPubKey) & filter) - return prev.vout[txin.prevout.n].nValue; // komodo_interest? + return prev.vout[txin.prevout.n].nValue; } } return 0; @@ -3206,8 +3202,6 @@ CAmount CWallet::GetImmatureWatchOnlyBalance() const /** * populate vCoins with vector of available COutputs. */ -uint64_t komodo_interestnew(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uint32_t tiptime); -uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 hash,int32_t n,int32_t checkheight,uint64_t checkvalue,int32_t tipheight); void CWallet::AvailableCoins(vector& vCoins, bool fOnlyConfirmed, const CCoinControl *coinControl, bool fIncludeZeroValue, bool fIncludeCoinBase) const { @@ -3252,10 +3246,8 @@ void CWallet::AvailableCoins(vector& vCoins, bool fOnlyConfirmed, const { if ( (tipindex= chainActive.LastTip()) != 0 ) { - komodo_accrued_interest(&txheight,&locktime,wtxid,i,0,pcoin->vout[i].nValue,(int32_t)tipindex->GetHeight()); - interest = komodo_interestnew(txheight,pcoin->vout[i].nValue,locktime,tipindex->nTime); + interest = 0; } else interest = 0; - //interest = komodo_interestnew(chainActive.LastTip()->GetHeight()+1,pcoin->vout[i].nValue,pcoin->nLockTime,chainActive.LastTip()->nTime); if ( interest != 0 ) { ptr = (uint64_t *)&pcoin->vout[i].interest; @@ -3434,11 +3426,6 @@ bool CWallet::SelectCoins(const CAmount& nTargetValue, set vCoinsNoCoinbase, vCoinsWithCoinbase; AvailableCoins(vCoinsNoCoinbase, true, coinControl, false, false); AvailableCoins(vCoinsWithCoinbase, true, coinControl, false, true); @@ -3724,6 +3711,7 @@ bool CWallet::CreateTransaction(const vector& vecSend, CWalletTx& wt age += 1; dPriority += (double)nCredit * age; } + //TODO: delete this if ( SMART_CHAIN_SYMBOL[0] == 0 && DONATION_PUBKEY.size() == 66 && interest2 > 5000 ) { CScript scriptDonation = CScript() << ParseHex(DONATION_PUBKEY) << OP_CHECKSIG;