From 142f5c112f14724af67e4b4cf0fda557f2227e26 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 29 Dec 2018 01:47:55 -1100 Subject: [PATCH 1/5] Selfimport --- src/rpc/crosschain.cpp | 11 +++++------ src/rpc/server.cpp | 1 + src/rpc/server.h | 1 + 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/rpc/crosschain.cpp b/src/rpc/crosschain.cpp index 4495ab0f3..77ca43f73 100644 --- a/src/rpc/crosschain.cpp +++ b/src/rpc/crosschain.cpp @@ -263,7 +263,6 @@ UniValue migrate_completeimporttransaction(const UniValue& params, bool fHelp) return HexStr(E_MARSHAL(ss << importTx)); } -#ifdef selfimport UniValue selfimport(const UniValue& params, bool fHelp) { TxProof proof; CTransaction importTx,burnTx; CTxOut burnOut; uint64_t burnAmount; uint256 blockHash; @@ -272,10 +271,10 @@ UniValue selfimport(const UniValue& params, bool fHelp) if (fHelp || params.size() != 2) throw runtime_error("selfimport txid burnamount\n\n" "creates signed selfimport transaction from txid"); - //txid = - //burnAmount = - - if ( GetTransaction(txid,burnTx,hashBlock,false) == 0 ) + txid = Parseuint256((char *)params[0].get_str().c_str()); + burnAmount = atof(params[1].get_str().c_str()) * COIN + 0.00000000499999; + + if ( GetTransaction(txid,burnTx,blockHash,false) == 0 ) throw runtime_error("selfimport couldnt find txid"); if ( GetSelfimportProof(proof,burnTx,txid) < 0 ) throw std::runtime_error("Failed validating selfimport"); @@ -284,8 +283,8 @@ UniValue selfimport(const UniValue& params, bool fHelp) importTx = MakeImportCoinTransaction(proof,burnTx,payouts); importTx.vout.clear(); importTx.vout.push_back(burnOut); + return HexStr(E_MARSHAL(ss << importTx)); } -#endif UniValue getNotarisationsForBlock(const UniValue& params, bool fHelp) { diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp index a4ec30b25..5bdc0b3ce 100644 --- a/src/rpc/server.cpp +++ b/src/rpc/server.cpp @@ -334,6 +334,7 @@ static const CRPCCommand vRPCCommands[] = { "crosschain", "migrate_converttoexport", &migrate_converttoexport, true }, { "crosschain", "migrate_createimporttransaction", &migrate_createimporttransaction, true }, { "crosschain", "migrate_completeimporttransaction", &migrate_completeimporttransaction, true }, + { "crosschain", "selfimport", &selfimport, true }, /* Mining */ { "mining", "getblocktemplate", &getblocktemplate, true }, diff --git a/src/rpc/server.h b/src/rpc/server.h index 7a8ed75e3..96e3da82f 100644 --- a/src/rpc/server.h +++ b/src/rpc/server.h @@ -392,6 +392,7 @@ extern UniValue getchaintips(const UniValue& params, bool fHelp); extern UniValue invalidateblock(const UniValue& params, bool fHelp); extern UniValue reconsiderblock(const UniValue& params, bool fHelp); extern UniValue getspentinfo(const UniValue& params, bool fHelp); +extern UniValue selfimport(const UniValue& params, bool fHelp); extern UniValue getblocksubsidy(const UniValue& params, bool fHelp); From 35b0a03eeabc00a5328cbcb7ce02d9783bc16bb3 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 29 Dec 2018 01:51:37 -1100 Subject: [PATCH 2/5] burnTx.vout --- src/rpc/crosschain.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rpc/crosschain.cpp b/src/rpc/crosschain.cpp index 77ca43f73..b90b8b3c4 100644 --- a/src/rpc/crosschain.cpp +++ b/src/rpc/crosschain.cpp @@ -265,7 +265,7 @@ UniValue migrate_completeimporttransaction(const UniValue& params, bool fHelp) UniValue selfimport(const UniValue& params, bool fHelp) { - TxProof proof; CTransaction importTx,burnTx; CTxOut burnOut; uint64_t burnAmount; uint256 blockHash; + TxProof proof; CTransaction importTx,burnTx; CTxOut burnOut; uint64_t burnAmount; uint256 txid,blockHash; if ( ASSETCHAINS_SELFIMPORT.size() == 0 ) throw runtime_error("selfimport only works on -ac_import chains"); if (fHelp || params.size() != 2) @@ -280,7 +280,7 @@ UniValue selfimport(const UniValue& params, bool fHelp) throw std::runtime_error("Failed validating selfimport"); burnOut = MakeBurnOutput(burnAmount,0xffffffff,ASSETCHAINS_SELFIMPORT,burnTx.vout); - importTx = MakeImportCoinTransaction(proof,burnTx,payouts); + importTx = MakeImportCoinTransaction(proof,burnTx,burnTx.vout); importTx.vout.clear(); importTx.vout.push_back(burnOut); return HexStr(E_MARSHAL(ss << importTx)); From 66fa31ba94c21e95f3259a7f75ac9ac9ccf37183 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 29 Dec 2018 01:54:43 -1100 Subject: [PATCH 3/5] Max --- src/rpc/crosschain.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/rpc/crosschain.cpp b/src/rpc/crosschain.cpp index b90b8b3c4..c2df6ef5e 100644 --- a/src/rpc/crosschain.cpp +++ b/src/rpc/crosschain.cpp @@ -265,7 +265,8 @@ UniValue migrate_completeimporttransaction(const UniValue& params, bool fHelp) UniValue selfimport(const UniValue& params, bool fHelp) { - TxProof proof; CTransaction importTx,burnTx; CTxOut burnOut; uint64_t burnAmount; uint256 txid,blockHash; + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + TxProof proof; CTransaction burnTx; CTxOut burnOut; uint64_t burnAmount; uint256 txid,blockHash; if ( ASSETCHAINS_SELFIMPORT.size() == 0 ) throw runtime_error("selfimport only works on -ac_import chains"); if (fHelp || params.size() != 2) @@ -280,10 +281,10 @@ UniValue selfimport(const UniValue& params, bool fHelp) throw std::runtime_error("Failed validating selfimport"); burnOut = MakeBurnOutput(burnAmount,0xffffffff,ASSETCHAINS_SELFIMPORT,burnTx.vout); - importTx = MakeImportCoinTransaction(proof,burnTx,burnTx.vout); - importTx.vout.clear(); - importTx.vout.push_back(burnOut); - return HexStr(E_MARSHAL(ss << importTx)); + mtx = MakeImportCoinTransaction(proof,burnTx,burnTx.vout); + mtx.vout.clear(); + mtx.vout.push_back(burnOut); + return HexStr(E_MARSHAL(ss << mtx)); } UniValue getNotarisationsForBlock(const UniValue& params, bool fHelp) From 588eb54211cd4f064645d305159b37dc554bb943 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 29 Dec 2018 01:56:13 -1100 Subject: [PATCH 4/5] Externs --- src/rpc/crosschain.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/rpc/crosschain.cpp b/src/rpc/crosschain.cpp index c2df6ef5e..098076ef3 100644 --- a/src/rpc/crosschain.cpp +++ b/src/rpc/crosschain.cpp @@ -31,6 +31,10 @@ int32_t komodo_MoMoMdata(char *hexstr,int32_t hexsize,struct komodo_ccdataMoMoM 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); extern std::string ASSETCHAINS_SELFIMPORT; +int komodo_nextheight(); +uint256 Parseuint256(char *hexstr); +int32_t GetSelfimportProof(TxProof &proof,CTransaction burnTx,uint256 hash); + UniValue assetchainproof(const UniValue& params, bool fHelp) { From 5f3417a2206d3e73fd0654bd1f8a86f9cdcecb33 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 29 Dec 2018 02:26:40 -1100 Subject: [PATCH 5/5] Tombstone of 4 --- src/importcoin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/importcoin.cpp b/src/importcoin.cpp index 3c5ae323b..c16822579 100644 --- a/src/importcoin.cpp +++ b/src/importcoin.cpp @@ -106,7 +106,7 @@ void AddImportTombstone(const CTransaction &importTx, CCoinsViewCache &inputs, i uint256 burnHash = importTx.vin[0].prevout.hash; CCoinsModifier modifier = inputs.ModifyCoins(burnHash); modifier->nHeight = nHeight; - modifier->nVersion = 1; + modifier->nVersion = 4;//1; modifier->vout.push_back(CTxOut(0, CScript() << OP_0)); }