From f03d63720c43f2c63011d2c25f42a63cf5fc02d9 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 04:20:11 -0300 Subject: [PATCH 01/17] reduce allowed future timestamp 2hrs -> 10 min --- src/main.cpp | 2 +- src/miner.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 01bef8d78..e3b2b5903 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2949,7 +2949,7 @@ bool CheckBlockHeader(const CBlockHeader& block, CValidationState& state, bool f REJECT_INVALID, "high-hash"); // Check timestamp - if (block.GetBlockTime() > GetAdjustedTime() + 2 * 60 * 60) + if (block.GetBlockTime() > GetAdjustedTime() + 600) return state.Invalid(error("CheckBlockHeader(): block timestamp too far in the future"), REJECT_INVALID, "time-too-new"); diff --git a/src/miner.cpp b/src/miner.cpp index 67419da4a..6d873dccc 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -485,7 +485,7 @@ void static BitcoinMiner(CWallet *pwallet) } while (true); fprintf(stderr,"Found peers\n"); } - fprintf(stderr,"create new block\n"); + //fprintf(stderr,"create new block\n"); // // Create new block // From fcd361184f09fe17546698b0d13caddac5b63500 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 05:12:12 -0300 Subject: [PATCH 02/17] komodo message hooks --- src/komodo.h | 25 +++++++++++++++++++++++++ src/main.cpp | 5 +++-- 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 src/komodo.h diff --git a/src/komodo.h b/src/komodo.h new file mode 100644 index 000000000..5fbe51db7 --- /dev/null +++ b/src/komodo.h @@ -0,0 +1,25 @@ +/****************************************************************************** + * Copyright © 2014-2016 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. * + * * + ******************************************************************************/ + +#ifndef H_KOMODO_H +#define H_KOMODO_H + +int32_t "C" komodo_checkmsg(char *ipaddr,uint8_t *data,int32_t datalen) +{ + return(0); +} + + +#endif diff --git a/src/main.cpp b/src/main.cpp index e3b2b5903..ccfbdfd93 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,6 +3,7 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include "komodo.h" #include "main.h" #include "sodium.h" @@ -5078,8 +5079,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, else { - // Ignore unknown commands for extensibility - LogPrint("net", "Unknown command \"%s\" from peer=%d\n", SanitizeString(strCommand), pfrom->id); + if ( komodo_checkmsg(pfrom->addr.ToString(),vRecv.begin(),nMessageSize) < 0 ) + LogPrint("net", "Unknown command \"%s\" from peer=%d\n", SanitizeString(strCommand),pfrom->id); } From 1fb0786301be7142978ab0ebbe6464a84a0e48eb Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 05:14:32 -0300 Subject: [PATCH 03/17] syntax --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index ccfbdfd93..8947fe6f5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5079,7 +5079,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, else { - if ( komodo_checkmsg(pfrom->addr.ToString(),vRecv.begin(),nMessageSize) < 0 ) + if ( komodo_checkmsg(pfrom->addr.ToString(),msg.vRecv.begin(),hdr.nMessageSize) < 0 ) LogPrint("net", "Unknown command \"%s\" from peer=%d\n", SanitizeString(strCommand),pfrom->id); } From 93b5c955d4ef029a311126cdee15472b00f6bfb6 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 05:17:26 -0300 Subject: [PATCH 04/17] fix syntax --- src/komodo.h | 4 +++- src/main.cpp | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index 5fbe51db7..6ab00029a 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -16,7 +16,9 @@ #ifndef H_KOMODO_H #define H_KOMODO_H -int32_t "C" komodo_checkmsg(char *ipaddr,uint8_t *data,int32_t datalen) +#include + +int32_t "C" komodo_checkmsg(char *command,char *ipaddr,uint8_t *data,int32_t datalen) { return(0); } diff --git a/src/main.cpp b/src/main.cpp index 8947fe6f5..3bae95cc0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5079,7 +5079,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, else { - if ( komodo_checkmsg(pfrom->addr.ToString(),msg.vRecv.begin(),hdr.nMessageSize) < 0 ) + if ( komodo_checkmsg(hdr.GetCommand(),pfrom->addr.ToString(),msg.vRecv.begin(),hdr.nMessageSize) < 0 ) LogPrint("net", "Unknown command \"%s\" from peer=%d\n", SanitizeString(strCommand),pfrom->id); } From 9fc05259a7c075578bde1ea0cbb6a094c5c36c8a Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 05:21:26 -0300 Subject: [PATCH 05/17] syntax --- src/komodo.h | 2 +- src/main.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index 6ab00029a..37c3ec960 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -18,7 +18,7 @@ #include -int32_t "C" komodo_checkmsg(char *command,char *ipaddr,uint8_t *data,int32_t datalen) +int32_t komodo_checkmsg(char *command,char *ipaddr,uint8_t *data,int32_t datalen) { return(0); } diff --git a/src/main.cpp b/src/main.cpp index 3bae95cc0..937c8b102 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5079,7 +5079,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, else { - if ( komodo_checkmsg(hdr.GetCommand(),pfrom->addr.ToString(),msg.vRecv.begin(),hdr.nMessageSize) < 0 ) + if ( komodo_checkmsg(SanitizeString(strCommand),pfrom->addr.ToString(),vRecv.begin(),vRecv.in_avail()) < 0 ) LogPrint("net", "Unknown command \"%s\" from peer=%d\n", SanitizeString(strCommand),pfrom->id); } From 0217d91cd2ee558f3bab91862f13f8e57a641be1 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 05:22:33 -0300 Subject: [PATCH 06/17] ToString --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 937c8b102..c38ac93b8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5079,7 +5079,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, else { - if ( komodo_checkmsg(SanitizeString(strCommand),pfrom->addr.ToString(),vRecv.begin(),vRecv.in_avail()) < 0 ) + if ( komodo_checkmsg(SanitizeString(strCommand).ToString(),pfrom->addr.ToString(),vRecv.begin(),vRecv.in_avail()) < 0 ) LogPrint("net", "Unknown command \"%s\" from peer=%d\n", SanitizeString(strCommand),pfrom->id); } From d2451560a2f5f98bad81717910615879227d3a79 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 05:23:57 -0300 Subject: [PATCH 07/17] ss.str() --- src/main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index c38ac93b8..db12cb5b0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5079,7 +5079,9 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, else { - if ( komodo_checkmsg(SanitizeString(strCommand).ToString(),pfrom->addr.ToString(),vRecv.begin(),vRecv.in_avail()) < 0 ) + ostringstream ss; + ss << strCommand; + if ( komodo_checkmsg(ss.str(),pfrom->addr.ToString(),vRecv.begin(),vRecv.in_avail()) < 0 ) LogPrint("net", "Unknown command \"%s\" from peer=%d\n", SanitizeString(strCommand),pfrom->id); } From 07eff107910a92f8c3d61820138f897edcbc418d Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 05:25:07 -0300 Subject: [PATCH 08/17] syntax --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index db12cb5b0..b616cf02f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5081,7 +5081,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, { ostringstream ss; ss << strCommand; - if ( komodo_checkmsg(ss.str(),pfrom->addr.ToString(),vRecv.begin(),vRecv.in_avail()) < 0 ) + if ( komodo_checkmsg(ss.str().ToString(),pfrom->addr.ToString(),vRecv.begin(),vRecv.in_avail()) < 0 ) LogPrint("net", "Unknown command \"%s\" from peer=%d\n", SanitizeString(strCommand),pfrom->id); } From f211fbb32acbbe1f310dbdd1395c7002576f63f0 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 05:29:06 -0300 Subject: [PATCH 09/17] skip command --- src/komodo.h | 2 +- src/main.cpp | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index 37c3ec960..bd03f454b 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -18,7 +18,7 @@ #include -int32_t komodo_checkmsg(char *command,char *ipaddr,uint8_t *data,int32_t datalen) +int32_t komodo_checkmsg(char *ipaddr,uint8_t *data,int32_t datalen) { return(0); } diff --git a/src/main.cpp b/src/main.cpp index b616cf02f..ca9a276c2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5076,13 +5076,11 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } } } - + else if (strCommand == "komodo") + komodo_checkmsg(pfrom->addr.ToString(),vRecv.begin(),vRecv.in_avail(); else { - ostringstream ss; - ss << strCommand; - if ( komodo_checkmsg(ss.str().ToString(),pfrom->addr.ToString(),vRecv.begin(),vRecv.in_avail()) < 0 ) - LogPrint("net", "Unknown command \"%s\" from peer=%d\n", SanitizeString(strCommand),pfrom->id); + LogPrint("net", "Unknown \"%s\" from peer=%d\n", SanitizeString(strCommand),pfrom->id); } From 891b2e16b63af6d018eef08e0faed4dc8a1965c0 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 05:29:57 -0300 Subject: [PATCH 10/17] ) --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index ca9a276c2..91702ad56 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5077,7 +5077,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } } else if (strCommand == "komodo") - komodo_checkmsg(pfrom->addr.ToString(),vRecv.begin(),vRecv.in_avail(); + komodo_checkmsg(pfrom->addr.ToString(),vRecv.begin(),vRecv.in_avail()); else { LogPrint("net", "Unknown \"%s\" from peer=%d\n", SanitizeString(strCommand),pfrom->id); From f6b8d87ed4e3a0c33c3f55af38f2a0787c40969d Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 05:32:48 -0300 Subject: [PATCH 11/17] i hate c++ strings --- src/komodo.h | 2 +- src/main.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index bd03f454b..8b71fd34f 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -18,7 +18,7 @@ #include -int32_t komodo_checkmsg(char *ipaddr,uint8_t *data,int32_t datalen) +int32_t komodo_checkmsg(int32_t peerid,uint8_t *data,int32_t datalen) { return(0); } diff --git a/src/main.cpp b/src/main.cpp index 91702ad56..5d9668564 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5077,7 +5077,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } } else if (strCommand == "komodo") - komodo_checkmsg(pfrom->addr.ToString(),vRecv.begin(),vRecv.in_avail()); + komodo_checkmsg(pfrom->addr.id,vRecv.begin(),vRecv.in_avail()); else { LogPrint("net", "Unknown \"%s\" from peer=%d\n", SanitizeString(strCommand),pfrom->id); From ace19d6346c4dc1a7002835d9a07b1792b8e2436 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 05:34:34 -0300 Subject: [PATCH 12/17] id --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 5d9668564..5e25321d5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5077,7 +5077,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } } else if (strCommand == "komodo") - komodo_checkmsg(pfrom->addr.id,vRecv.begin(),vRecv.in_avail()); + komodo_checkmsg(pfrom->id,vRecv.begin(),vRecv.in_avail()); else { LogPrint("net", "Unknown \"%s\" from peer=%d\n", SanitizeString(strCommand),pfrom->id); From 2deb9e7483ee5999502bbb3f84808f07aeec1786 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 05:40:16 -0300 Subject: [PATCH 13/17] vector --- src/main.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 5e25321d5..e469bcbd4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5077,7 +5077,11 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } } else if (strCommand == "komodo") - komodo_checkmsg(pfrom->id,vRecv.begin(),vRecv.in_avail()); + { + vector vData; + vRecv >> vData; + komodo_checkmsg(pfrom->id,vData.data(),vData.size()); + } else { LogPrint("net", "Unknown \"%s\" from peer=%d\n", SanitizeString(strCommand),pfrom->id); From 431cce983e2c958fdb355968321f7fe7013be636 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 06:03:47 -0300 Subject: [PATCH 14/17] messages --- src/komodo.h | 3 +- src/main.cpp | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 89 insertions(+), 2 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index 8b71fd34f..51ff7760c 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -18,8 +18,9 @@ #include -int32_t komodo_checkmsg(int32_t peerid,uint8_t *data,int32_t datalen) +int32_t komodo_checkmsg(void *bitcoinpeer,uint8_t *data,int32_t datalen) { + fprintf(stderr,"KOMODO.[%d] message from peer.%p\n",datalen,bitcoinpeer); return(0); } diff --git a/src/main.cpp b/src/main.cpp index e469bcbd4..dd330a218 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5080,7 +5080,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, { vector vData; vRecv >> vData; - komodo_checkmsg(pfrom->id,vData.data(),vData.size()); + komodo_checkmsg(pfrom,vData.data(),vData.size()); } else { @@ -5491,3 +5491,89 @@ public: mapOrphanTransactionsByPrev.clear(); } } instance_of_cmaincleanup; + +int32_t SuperNET_retval = 0; + +extern "C" const char* getDataDir() +{ + return GetDataDir().string().c_str(); +} + +void set_pubaddr(CPubAddr &pubaddr,std::string msg,int32_t duration) +{ + pubaddr.teleportMsg = msg; + pubaddr.nPriority = 1; + pubaddr.nID = rand() % 100000001; + pubaddr.nVersion = PROTOCOL_VERSION; + pubaddr.nRelayUntil = pubaddr.nExpiration = (GetAdjustedTime() + duration); + CDataStream sMsg(SER_NETWORK,PROTOCOL_VERSION); + sMsg << (CUnsignedPubAddr)pubaddr; + pubaddr.vchMsg = vector(sMsg.begin(),sMsg.end()); + if(!pubaddr.CheckSignature()) + throw runtime_error("Failed to Unserialize PubAddr"); + //if ( pubaddr.ProcessPubAddr() == 0 ) + // throw runtime_error("set_pubaddr: Failed to process pubaddr.\n"); +} + +void broadcastPubAddr(char *msg,int32_t duration) +{ + CPubAddr *pubaddr = new CPubAddr; + set_pubaddr(*pubaddr,std::string(msg),duration); + fprintf(stderr,"Komodo BROADCAST.(%s)\n",msg); + // Relay pubaddr to all peers + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode *pnode,vNodes) + { + pubaddr->RelayTo(pnode); + } + } + delete pubaddr; +} + +extern "C" int32_t SuperNET_broadcast(char *msg,int32_t duration) +{ + printf("inside SuperNET_broadcast.(%s) retval.%d\n",msg,SuperNET_retval); + if ( SuperNET_retval <= 0 ) + return(-1); + broadcastPubAddr(msg,duration); + return(0); +} + +extern "C" int32_t SuperNET_narrowcast(char *destip,unsigned char *msg,int32_t len) //Send a PubAddr message to a specific peer +{ + int32_t retflag = 0; + CPubAddr *pubaddr = new CPubAddr; + std::string supernetmsg = ""; + CNode *peer; + if ( SuperNET_retval <= 0 ) + return(-1); + peer = FindNode((CService)destip); + if ( peer == NULL ) + { + std::cout << "<<<<<<< narrowcast sent to null peer. Trying to find node " << destip << std::endl; + CService *serv = new CService(destip); + CAddress *addrConnect = new CAddress(*serv); + peer = ConnectNode(*addrConnect, destip); + free(serv); + free(addrConnect); + // opennetworkconnection((CService)destip); + // peer = FindNode((CService)destip); + } + if ( peer == NULL ) + { + std::cout << destip << " could not be located for narrowcast." << std::endl; + return(-1); // Not a known peer + } + std::cout << destip << " was located for narrowcast." << std::endl; + for(int32_t i=0; iRelayTo(peer) != true ) + retflag = -2; + delete pubaddr; + //printf("SuperNET_narrowcast relay error\n"); + return(retflag); +} + + From a614521c1375c33402249be23a6e019460e5f267 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 06:08:33 -0300 Subject: [PATCH 15/17] ifdef --- src/main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index dd330a218..dbd8a7f92 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5499,6 +5499,7 @@ extern "C" const char* getDataDir() return GetDataDir().string().c_str(); } +#ifdef needs_to_be_ported // send komodo message void set_pubaddr(CPubAddr &pubaddr,std::string msg,int32_t duration) { pubaddr.teleportMsg = msg; @@ -5519,7 +5520,7 @@ void broadcastPubAddr(char *msg,int32_t duration) { CPubAddr *pubaddr = new CPubAddr; set_pubaddr(*pubaddr,std::string(msg),duration); - fprintf(stderr,"Komodo BROADCAST.(%s)\n",msg); + printf("Komodo BROADCAST.(%s)\n",msg); // Relay pubaddr to all peers { LOCK(cs_vNodes); @@ -5575,5 +5576,6 @@ extern "C" int32_t SuperNET_narrowcast(char *destip,unsigned char *msg,int32_t l //printf("SuperNET_narrowcast relay error\n"); return(retflag); } +#endif From 778ca57b14555206cc4d1c3444d92ea0b8e6943b Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 06:09:27 -0300 Subject: [PATCH 16/17] stdio --- src/komodo.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/komodo.h b/src/komodo.h index 51ff7760c..d84217e37 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -17,6 +17,7 @@ #define H_KOMODO_H #include +#include int32_t komodo_checkmsg(void *bitcoinpeer,uint8_t *data,int32_t datalen) { From d27afb07eb3c6b0a03f684a1c5585d56af32bda2 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 14 Sep 2016 06:22:24 -0300 Subject: [PATCH 17/17] block check overrides --- src/komodo.h | 5 +++++ src/main.cpp | 37 +++++++++++++++++++++---------------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/komodo.h b/src/komodo.h index d84217e37..8d56c0a8c 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -25,5 +25,10 @@ int32_t komodo_checkmsg(void *bitcoinpeer,uint8_t *data,int32_t datalen) return(0); } +int32_t komodo_blockcheck(void *block) +{ + fprintf(stderr,"check block %p\n",block); + return(-1); +} #endif diff --git a/src/main.cpp b/src/main.cpp index dbd8a7f92..9e66f7b99 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,6 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "komodo.h" #include "main.h" #include "sodium.h" @@ -42,6 +41,8 @@ using namespace std; # error "Bitcoin cannot be compiled without assertions." #endif +extern "C" int32_t komodo_blockcheck(void *block); + /** * Global state */ @@ -1349,10 +1350,12 @@ bool ReadBlockFromDisk(CBlock& block, const CDiskBlockPos& pos) } // Check the header - if (!(CheckEquihashSolution(&block, Params()) && - CheckProofOfWork(block.GetHash(), block.nBits, Params().GetConsensus()))) - return error("ReadBlockFromDisk: Errors in block header at %s", pos.ToString()); - + if ( komodo_blockcheck((void *)&block) < 0 ) + { + if (!(CheckEquihashSolution(&block, Params()) && + CheckProofOfWork(block.GetHash(), block.nBits, Params().GetConsensus()))) + return error("ReadBlockFromDisk: Errors in block header at %s", pos.ToString()); + } return true; } @@ -2939,21 +2942,22 @@ bool FindUndoPos(CValidationState &state, int nFile, CDiskBlockPos &pos, unsigne bool CheckBlockHeader(const CBlockHeader& block, CValidationState& state, bool fCheckPOW) { - // Check Equihash solution is valid - if (fCheckPOW && !CheckEquihashSolution(&block, Params())) - return state.DoS(100, error("CheckBlockHeader(): Equihash solution invalid"), - REJECT_INVALID, "invalid-solution"); - - // Check proof of work matches claimed amount - if (fCheckPOW && !CheckProofOfWork(block.GetHash(), block.nBits, Params().GetConsensus())) - return state.DoS(50, error("CheckBlockHeader(): proof of work failed"), - REJECT_INVALID, "high-hash"); - + if ( komodo_blockcheck((void *)&block) < 0 ) + { + // Check Equihash solution is valid + if (fCheckPOW && !CheckEquihashSolution(&block, Params())) + return state.DoS(100, error("CheckBlockHeader(): Equihash solution invalid"), + REJECT_INVALID, "invalid-solution"); + + // Check proof of work matches claimed amount + if (fCheckPOW && !CheckProofOfWork(block.GetHash(), block.nBits, Params().GetConsensus())) + return state.DoS(50, error("CheckBlockHeader(): proof of work failed"), + REJECT_INVALID, "high-hash"); + } // Check timestamp if (block.GetBlockTime() > GetAdjustedTime() + 600) return state.Invalid(error("CheckBlockHeader(): block timestamp too far in the future"), REJECT_INVALID, "time-too-new"); - return true; } @@ -4096,6 +4100,7 @@ string GetWarnings(string strFor) // // Messages // +#include "komodo.h" bool static AlreadyHave(const CInv& inv)