From bb95bce9e70d5e51b3f517a223e5adddea1103a0 Mon Sep 17 00:00:00 2001 From: blackjok3r Date: Thu, 3 Jan 2019 01:02:45 +0800 Subject: [PATCH] Add source chain to burn op return, and extract it in getimports RPC if it exists. --- src/importcoin.cpp | 17 +++++++++++++---- src/komodo_globals.h | 2 +- src/rpc/crosschain.cpp | 38 ++++++++++++++++++++++++++++---------- 3 files changed, 42 insertions(+), 15 deletions(-) diff --git a/src/importcoin.cpp b/src/importcoin.cpp index 402a1fb36..b47832beb 100644 --- a/src/importcoin.cpp +++ b/src/importcoin.cpp @@ -70,10 +70,19 @@ bool UnmarshalBurnTx(const CTransaction &burnTx, std::string &targetSymbol, uint if (burnTx.vout.size() == 0) return false; GetOpReturnData(burnTx.vout.back().scriptPubKey, burnOpret); E_UNMARSHAL(burnOpret, ss >> VARINT(ccid)); - return E_UNMARSHAL(burnOpret, ss >> VARINT(*targetCCid); - ss >> targetSymbol; - ss >> payoutsHash; - ss >> rawproof); + if ( ccid != 0xffffffff ) + { + return E_UNMARSHAL(burnOpret, ss >> VARINT(*targetCCid); + ss >> targetSymbol; + ss >> payoutsHash); + } + else + { + return E_UNMARSHAL(burnOpret, ss >> VARINT(*targetCCid); + ss >> targetSymbol; + ss >> payoutsHash; + ss >> rawproof); + } } diff --git a/src/komodo_globals.h b/src/komodo_globals.h index c2d6aa0c4..815dbafe2 100644 --- a/src/komodo_globals.h +++ b/src/komodo_globals.h @@ -46,7 +46,7 @@ int COINBASE_MATURITY = _COINBASE_MATURITY;//100; int32_t KOMODO_MININGTHREADS = -1,IS_KOMODO_NOTARY,IS_STAKED_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,KOMODO_PASSPORT_INITDONE,KOMODO_PAX,KOMODO_EXCHANGEWALLET,KOMODO_REWIND,STAKED_ERA,KOMODO_CONNECTING = -1,KOMODO_DEALERNODE,KOMODO_EXTRASATOSHI,ASSETCHAINS_FOUNDERS; int32_t KOMODO_INSYNC,KOMODO_LASTMINED,prevKOMODO_LASTMINED,KOMODO_CCACTIVATE,JUMBLR_PAUSE = 1; -std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES,ASSETCHAINS_OVERRIDE_PUBKEY,DONATION_PUBKEY,ASSETCHAINS_SCRIPTPUB,NOTARY_ADDRESS,WHITELIST_ADDRESS,,ASSETCHAINS_SELFIMPORT; +std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES,ASSETCHAINS_OVERRIDE_PUBKEY,DONATION_PUBKEY,ASSETCHAINS_SCRIPTPUB,NOTARY_ADDRESS,WHITELIST_ADDRESS,ASSETCHAINS_SELFIMPORT; uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEYHASH[20],ASSETCHAINS_PUBLIC,ASSETCHAINS_PRIVATE,ASSETCHAINS_TXPOW,NUM_NOTARIES; bool VERUS_MINTBLOCKS; diff --git a/src/rpc/crosschain.cpp b/src/rpc/crosschain.cpp index 7b12128e2..49c506e78 100644 --- a/src/rpc/crosschain.cpp +++ b/src/rpc/crosschain.cpp @@ -163,7 +163,7 @@ UniValue calc_MoM(const UniValue& params, bool fHelp) UniValue migrate_converttoexport(const UniValue& params, bool fHelp) { - std::vector rawproof; uint8_t *ptr; int32_t i; uint32_t ccid = ASSETCHAINS_CC; + std::vector rawproof; uint8_t *ptr; uint8_t i; uint32_t ccid = ASSETCHAINS_CC; if (fHelp || params.size() != 2) throw runtime_error( "migrate_converttoexport rawTx dest_symbol\n" @@ -374,7 +374,7 @@ UniValue getimports(const UniValue& params, bool fHelp) " \"export\" { (json object)\n" " \"txid\" : (string)\n" " \"value\" : (numeric)\n" - " \"chain\" : (string)\n" //TODO! + " \"chain\" : (string)\n" " }\n" " }" " ]\n" @@ -437,22 +437,40 @@ UniValue getimports(const UniValue& params, bool fHelp) { UniValue objTx(UniValue::VOBJ); objTx.push_back(Pair("txid",tx.GetHash().ToString())); - TxProof proof; - CTransaction burnTx; - std::vector payouts; + TxProof proof; CTransaction burnTx; std::vector payouts; CTxDestination importaddress; TotalImported += tx.vout[1].nValue; - printf("nvalue.%li TotalImported.%li\n",tx.vout[1].nValue,TotalImported); objTx.push_back(Pair("amount", ValueFromAmount(tx.vout[1].nValue))); - CTxDestination importaddress; if (ExtractDestination(tx.vout[1].scriptPubKey, importaddress)) { objTx.push_back(Pair("address", CBitcoinAddress(importaddress).ToString())); } UniValue objBurnTx(UniValue::VOBJ); - if (UnmarshalImportTx(tx, proof, burnTx, payouts)) { + if (UnmarshalImportTx(tx, proof, burnTx, payouts)) + { + if (burnTx.vout.size() == 0) + continue; objBurnTx.push_back(Pair("txid", burnTx.GetHash().ToString())); - objBurnTx.push_back(Pair("amount", ValueFromAmount(burnTx.vout.size() ? burnTx.vout.back().nValue : 0))); - // TODO: add source chain, using new data in burn OP_RETURN from upsteam. + objBurnTx.push_back(Pair("amount", ValueFromAmount(burnTx.vout.back().nValue))); + // extract op_return to get burn source chain. + std::vector burnOpret; std::string targetSymbol; uint32_t targetCCid; uint256 payoutsHash; std::vectorrawproof; + GetOpReturnData(burnTx.vout.back().scriptPubKey, burnOpret); + if (E_UNMARSHAL(burnOpret, ss >> VARINT(targetCCid); + ss >> targetSymbol; + ss >> payoutsHash; + ss >> rawproof)); + { + if (rawproof.size() > 0) + { + char *buffer; int32_t n; + buffer = (char*) malloc (65); + if (buffer!=NULL) + { + for (n=0; n<65; n++) + buffer[n]=rawproof[n]; + objBurnTx.push_back(Pair("source", buffer)); + } + } + } } objTx.push_back(Pair("export", objBurnTx)); imports.push_back(objTx);