Scott Sadler
6 years ago
18 changed files with 264 additions and 305 deletions
@ -0,0 +1,158 @@ |
|||
#include "amount.h" |
|||
#include "chain.h" |
|||
#include "chainparams.h" |
|||
#include "checkpoints.h" |
|||
#include "crosschain.h" |
|||
#include "base58.h" |
|||
#include "consensus/validation.h" |
|||
#include "cc/eval.h" |
|||
#include "main.h" |
|||
#include "primitives/transaction.h" |
|||
#include "rpcserver.h" |
|||
#include "sync.h" |
|||
#include "util.h" |
|||
#include "script/script.h" |
|||
#include "script/script_error.h" |
|||
#include "script/sign.h" |
|||
#include "script/standard.h" |
|||
|
|||
#include <stdint.h> |
|||
|
|||
#include <univalue.h> |
|||
|
|||
#include <regex> |
|||
|
|||
using namespace std; |
|||
|
|||
int32_t komodo_MoM(int32_t *notarized_htp,uint256 *MoMp,uint256 *kmdtxidp,int32_t nHeight,uint256 *MoMoMp,int32_t *MoMoMoffsetp,int32_t *MoMoMdepthp,int32_t *kmdstartip,int32_t *kmdendip); |
|||
int32_t komodo_MoMoMdata(char *hexstr,int32_t hexsize,struct komodo_ccdataMoMoM *mdata,char *symbol,int32_t kmdheight,int32_t notarized_height); |
|||
struct komodo_ccdata_entry *komodo_allMoMs(int32_t *nump,uint256 *MoMoMp,int32_t kmdstarti,int32_t kmdendi); |
|||
uint256 komodo_calcMoM(int32_t height,int32_t MoMdepth); |
|||
|
|||
|
|||
UniValue assetchainproof(const UniValue& params, bool fHelp) |
|||
{ |
|||
uint256 hash; |
|||
|
|||
// parse params and get notarisation data for tx
|
|||
if ( fHelp || params.size() != 1) |
|||
throw runtime_error("assetchainproof needs a txid"); |
|||
|
|||
hash = uint256S(params[0].get_str()); |
|||
|
|||
auto proof = GetAssetchainProof(hash); |
|||
auto proofData = E_MARSHAL(ss << proof); |
|||
return HexStr(proofData); |
|||
} |
|||
|
|||
|
|||
UniValue crosschainproof(const UniValue& params, bool fHelp) |
|||
{ |
|||
|
|||
|
|||
} |
|||
|
|||
|
|||
UniValue getproofroot(const UniValue& params, bool fHelp) |
|||
{ |
|||
std::string symbol; |
|||
int kmdHeight; |
|||
|
|||
// parse params and get notarisation data for tx
|
|||
if ( fHelp || params.size() != 2) |
|||
throw runtime_error("getproofroot needs a symbol and a kmdHeight"); |
|||
symbol = params[0].get_str(); |
|||
kmdHeight = atoi(params[0].get_str().c_str()); |
|||
if (kmdHeight <= 0) |
|||
throw runtime_error("Invalid kmdHeight"); |
|||
|
|||
UniValue ret(UniValue::VOBJ); |
|||
return ret; |
|||
} |
|||
|
|||
|
|||
UniValue height_MoM(const UniValue& params, bool fHelp) |
|||
{ |
|||
int32_t height,depth,notarized_height,MoMoMdepth,MoMoMoffset,kmdstarti,kmdendi; uint256 MoM,MoMoM,kmdtxid; uint32_t timestamp = 0; UniValue ret(UniValue::VOBJ); UniValue a(UniValue::VARR); |
|||
if ( fHelp || params.size() != 1 ) |
|||
throw runtime_error("height_MoM height\n"); |
|||
LOCK(cs_main); |
|||
height = atoi(params[0].get_str().c_str()); |
|||
if ( height <= 0 ) |
|||
{ |
|||
if ( chainActive.Tip() == 0 ) |
|||
{ |
|||
ret.push_back(Pair("error",(char *)"no active chain yet")); |
|||
return(ret); |
|||
} |
|||
height = chainActive.Tip()->nHeight; |
|||
} |
|||
//fprintf(stderr,"height_MoM height.%d\n",height);
|
|||
depth = komodo_MoM(¬arized_height,&MoM,&kmdtxid,height,&MoMoM,&MoMoMoffset,&MoMoMdepth,&kmdstarti,&kmdendi); |
|||
ret.push_back(Pair("coin",(char *)(ASSETCHAINS_SYMBOL[0] == 0 ? "KMD" : ASSETCHAINS_SYMBOL))); |
|||
ret.push_back(Pair("height",height)); |
|||
ret.push_back(Pair("timestamp",(uint64_t)timestamp)); |
|||
if ( depth > 0 ) |
|||
{ |
|||
ret.push_back(Pair("depth",depth)); |
|||
ret.push_back(Pair("notarized_height",notarized_height)); |
|||
ret.push_back(Pair("MoM",MoM.GetHex())); |
|||
ret.push_back(Pair("kmdtxid",kmdtxid.GetHex())); |
|||
if ( ASSETCHAINS_SYMBOL[0] != 0 ) |
|||
{ |
|||
ret.push_back(Pair("MoMoM",MoMoM.GetHex())); |
|||
ret.push_back(Pair("MoMoMoffset",MoMoMoffset)); |
|||
ret.push_back(Pair("MoMoMdepth",MoMoMdepth)); |
|||
ret.push_back(Pair("kmdstarti",kmdstarti)); |
|||
ret.push_back(Pair("kmdendi",kmdendi)); |
|||
} |
|||
} else ret.push_back(Pair("error",(char *)"no MoM for height")); |
|||
|
|||
return ret; |
|||
} |
|||
|
|||
UniValue MoMoMdata(const UniValue& params, bool fHelp) |
|||
{ |
|||
if ( fHelp || params.size() != 3 ) |
|||
throw runtime_error("MoMoMdata symbol kmdheight ccid\n"); |
|||
UniValue ret(UniValue::VOBJ); |
|||
char* symbol = (char *)params[0].get_str().c_str(); |
|||
int kmdheight = atoi(params[1].get_str().c_str()); |
|||
int ccid = atoi(params[2].get_str().c_str()); |
|||
ret.push_back(Pair("coin",symbol)); |
|||
ret.push_back(Pair("kmdheight",kmdheight)); |
|||
ret.push_back(Pair("ccid", ccid)); |
|||
|
|||
uint256 destNotarisationTxid; |
|||
std::vector<uint256> moms; |
|||
uint256 MoMoM = CalculateProofRoot(symbol, ccid, kmdheight, moms, destNotarisationTxid); |
|||
|
|||
UniValue valMoms(UniValue::VARR); |
|||
for (int i=0; i<moms.size(); i++) valMoms.push_back(moms[i].GetHex()); |
|||
ret.push_back(Pair("MoMs", valMoms)); |
|||
ret.push_back(Pair("notarization_hash", destNotarisationTxid.GetHex())); |
|||
ret.push_back(Pair("MoMoM", MoMoM.GetHex())); |
|||
auto vmomomdata = E_MARSHAL(ss << MoMoM; ss << ((uint32_t)0)); |
|||
ret.push_back(Pair("data", HexStr(vmomomdata))); |
|||
return ret; |
|||
} |
|||
|
|||
|
|||
UniValue calc_MoM(const UniValue& params, bool fHelp) |
|||
{ |
|||
int32_t height,MoMdepth; uint256 MoM; UniValue ret(UniValue::VOBJ); UniValue a(UniValue::VARR); |
|||
if ( fHelp || params.size() != 2 ) |
|||
throw runtime_error("calc_MoM height MoMdepth\n"); |
|||
LOCK(cs_main); |
|||
height = atoi(params[0].get_str().c_str()); |
|||
MoMdepth = atoi(params[1].get_str().c_str()); |
|||
if ( height <= 0 || MoMdepth <= 0 || MoMdepth >= height ) |
|||
throw runtime_error("calc_MoM illegal height or MoMdepth\n"); |
|||
//fprintf(stderr,"height_MoM height.%d\n",height);
|
|||
MoM = komodo_calcMoM(height,MoMdepth); |
|||
ret.push_back(Pair("coin",(char *)(ASSETCHAINS_SYMBOL[0] == 0 ? "KMD" : ASSETCHAINS_SYMBOL))); |
|||
ret.push_back(Pair("height",height)); |
|||
ret.push_back(Pair("MoMdepth",MoMdepth)); |
|||
ret.push_back(Pair("MoM",MoM.GetHex())); |
|||
return ret; |
|||
} |
Loading…
Reference in new issue