Add source chain to burn op return, and extract it in getimports RPC if it exists.
This commit is contained in:
@@ -70,10 +70,19 @@ bool UnmarshalBurnTx(const CTransaction &burnTx, std::string &targetSymbol, uint
|
|||||||
if (burnTx.vout.size() == 0) return false;
|
if (burnTx.vout.size() == 0) return false;
|
||||||
GetOpReturnData(burnTx.vout.back().scriptPubKey, burnOpret);
|
GetOpReturnData(burnTx.vout.back().scriptPubKey, burnOpret);
|
||||||
E_UNMARSHAL(burnOpret, ss >> VARINT(ccid));
|
E_UNMARSHAL(burnOpret, ss >> VARINT(ccid));
|
||||||
return E_UNMARSHAL(burnOpret, ss >> VARINT(*targetCCid);
|
if ( ccid != 0xffffffff )
|
||||||
ss >> targetSymbol;
|
{
|
||||||
ss >> payoutsHash;
|
return E_UNMARSHAL(burnOpret, ss >> VARINT(*targetCCid);
|
||||||
ss >> rawproof);
|
ss >> targetSymbol;
|
||||||
|
ss >> payoutsHash);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return E_UNMARSHAL(burnOpret, ss >> VARINT(*targetCCid);
|
||||||
|
ss >> targetSymbol;
|
||||||
|
ss >> payoutsHash;
|
||||||
|
ss >> rawproof);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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_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;
|
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;
|
uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEYHASH[20],ASSETCHAINS_PUBLIC,ASSETCHAINS_PRIVATE,ASSETCHAINS_TXPOW,NUM_NOTARIES;
|
||||||
bool VERUS_MINTBLOCKS;
|
bool VERUS_MINTBLOCKS;
|
||||||
|
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ UniValue calc_MoM(const UniValue& params, bool fHelp)
|
|||||||
|
|
||||||
UniValue migrate_converttoexport(const UniValue& params, bool fHelp)
|
UniValue migrate_converttoexport(const UniValue& params, bool fHelp)
|
||||||
{
|
{
|
||||||
std::vector<uint8_t> rawproof; uint8_t *ptr; int32_t i; uint32_t ccid = ASSETCHAINS_CC;
|
std::vector<uint8_t> rawproof; uint8_t *ptr; uint8_t i; uint32_t ccid = ASSETCHAINS_CC;
|
||||||
if (fHelp || params.size() != 2)
|
if (fHelp || params.size() != 2)
|
||||||
throw runtime_error(
|
throw runtime_error(
|
||||||
"migrate_converttoexport rawTx dest_symbol\n"
|
"migrate_converttoexport rawTx dest_symbol\n"
|
||||||
@@ -374,7 +374,7 @@ UniValue getimports(const UniValue& params, bool fHelp)
|
|||||||
" \"export\" { (json object)\n"
|
" \"export\" { (json object)\n"
|
||||||
" \"txid\" : (string)\n"
|
" \"txid\" : (string)\n"
|
||||||
" \"value\" : (numeric)\n"
|
" \"value\" : (numeric)\n"
|
||||||
" \"chain\" : (string)\n" //TODO!
|
" \"chain\" : (string)\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" }"
|
" }"
|
||||||
" ]\n"
|
" ]\n"
|
||||||
@@ -437,22 +437,40 @@ UniValue getimports(const UniValue& params, bool fHelp)
|
|||||||
{
|
{
|
||||||
UniValue objTx(UniValue::VOBJ);
|
UniValue objTx(UniValue::VOBJ);
|
||||||
objTx.push_back(Pair("txid",tx.GetHash().ToString()));
|
objTx.push_back(Pair("txid",tx.GetHash().ToString()));
|
||||||
TxProof proof;
|
TxProof proof; CTransaction burnTx; std::vector<CTxOut> payouts; CTxDestination importaddress;
|
||||||
CTransaction burnTx;
|
|
||||||
std::vector<CTxOut> payouts;
|
|
||||||
TotalImported += tx.vout[1].nValue;
|
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)));
|
objTx.push_back(Pair("amount", ValueFromAmount(tx.vout[1].nValue)));
|
||||||
CTxDestination importaddress;
|
|
||||||
if (ExtractDestination(tx.vout[1].scriptPubKey, importaddress))
|
if (ExtractDestination(tx.vout[1].scriptPubKey, importaddress))
|
||||||
{
|
{
|
||||||
objTx.push_back(Pair("address", CBitcoinAddress(importaddress).ToString()));
|
objTx.push_back(Pair("address", CBitcoinAddress(importaddress).ToString()));
|
||||||
}
|
}
|
||||||
UniValue objBurnTx(UniValue::VOBJ);
|
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("txid", burnTx.GetHash().ToString()));
|
||||||
objBurnTx.push_back(Pair("amount", ValueFromAmount(burnTx.vout.size() ? burnTx.vout.back().nValue : 0)));
|
objBurnTx.push_back(Pair("amount", ValueFromAmount(burnTx.vout.back().nValue)));
|
||||||
// TODO: add source chain, using new data in burn OP_RETURN from upsteam.
|
// extract op_return to get burn source chain.
|
||||||
|
std::vector<uint8_t> burnOpret; std::string targetSymbol; uint32_t targetCCid; uint256 payoutsHash; std::vector<uint8_t>rawproof;
|
||||||
|
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));
|
objTx.push_back(Pair("export", objBurnTx));
|
||||||
imports.push_back(objTx);
|
imports.push_back(objTx);
|
||||||
|
|||||||
Reference in New Issue
Block a user