From 7d6b0f588afa069c5b2aab2a51516ebe38a9626b Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 5 Sep 2018 19:57:26 -1100 Subject: [PATCH] Support 'd' and 'D' format types --- src/cc/CCinclude.h | 1 + src/cc/oracles.cpp | 34 +++++++++++++++++++++++----------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/cc/CCinclude.h b/src/cc/CCinclude.h index 1e2bcd4e0..d693a547c 100644 --- a/src/cc/CCinclude.h +++ b/src/cc/CCinclude.h @@ -47,6 +47,7 @@ one other technical note is that komodod has the insight-explorer extensions bui #include "../wallet/wallet.h" #include #include +#include "../komodo_globals.h" extern int32_t KOMODO_CONNECTING,KOMODO_CCACTIVATE; extern uint32_t ASSETCHAINS_CC; diff --git a/src/cc/oracles.cpp b/src/cc/oracles.cpp index bfa5f1e88..fce668dd6 100644 --- a/src/cc/oracles.cpp +++ b/src/cc/oracles.cpp @@ -281,13 +281,17 @@ uint256 OracleBatonUtxo(uint64_t txfee,struct CCcontract_info *cp,uint256 refora int32_t oracle_format(uint256 *hashp,int64_t *valp,char *str,uint8_t fmt,uint8_t *data,int32_t offset,int32_t datalen) { - char _str[65]; int32_t sflag = 0,i,val32,len = 0,slen = 0; uint32_t uval32; uint16_t uval16; int16_t val16; int64_t val = 0; uint64_t uval = 0; + char _str[65]; int32_t sflag = 0,i,val32,len = 0,slen = 0,dlen = 0; uint32_t uval32; uint16_t uval16; int16_t val16; int64_t val = 0; uint64_t uval = 0; *valp = 0; *hashp = zeroid; + if ( str != 0 ) + str[0] = 0; switch ( fmt ) { case 's': slen = data[offset++]; break; case 'S': slen = data[offset++]; slen |= ((int32_t)data[offset++] << 8); break; + case 'd': dlen = data[offset++]; break; + case 'D': dlen = data[offset++]; dlen |= ((int32_t)data[offset++] << 8); break; case 'c': len = 1; sflag = 1; break; case 'C': len = 1; break; case 't': len = 2; sflag = 1; break; @@ -303,16 +307,24 @@ int32_t oracle_format(uint256 *hashp,int64_t *valp,char *str,uint8_t fmt,uint8_t { if ( str != 0 ) { - for (i=0; i= datalen ) - { - str[i] = 0; - return(-1); - } - } - str[i] = 0; + for (i=0; i da UniValue OracleFormat(uint8_t *data,int32_t datalen,char *format,int32_t formatlen) { - UniValue obj(UniValue::VARR); uint256 hash; int32_t i,j=0; int64_t val; char str[16384]; + UniValue obj(UniValue::VARR); uint256 hash; int32_t i,j=0; int64_t val; char str[IGUANA_MAXSCRIPTSIZE*2+1]; for (i=0; i