Skip to content

Commit

Permalink
MWEB: TxToUniv updates
Browse files Browse the repository at this point in the history
  • Loading branch information
DavidBurkett committed Jan 30, 2022
1 parent c51647e commit bc9dc94
Showing 1 changed file with 68 additions and 26 deletions.
94 changes: 68 additions & 26 deletions src/core_write.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -190,47 +190,89 @@ void TxToUniv(const CTransaction& tx, const uint256& hashBlock, UniValue& entry,
entry.pushKV("locktime", (int64_t)tx.nLockTime);

UniValue vin(UniValue::VARR);
for (unsigned int i = 0; i < tx.vin.size(); i++) {
const CTxIn& txin = tx.vin[i];
for (const CTxInput& input : tx.GetInputs()) {
UniValue in(UniValue::VOBJ);
if (tx.IsCoinBase())
in.pushKV("coinbase", HexStr(txin.scriptSig));
else {
in.pushKV("txid", txin.prevout.hash.GetHex());
in.pushKV("vout", (int64_t)txin.prevout.n);
UniValue o(UniValue::VOBJ);
o.pushKV("asm", ScriptToAsmStr(txin.scriptSig, true));
o.pushKV("hex", HexStr(txin.scriptSig));
in.pushKV("scriptSig", o);
}
if (!tx.vin[i].scriptWitness.IsNull()) {
UniValue txinwitness(UniValue::VARR);
for (const auto& item : tx.vin[i].scriptWitness.stack) {
txinwitness.push_back(HexStr(item));
in.pushKV("ismweb", input.IsMWEB());

if (input.IsMWEB()) {
in.pushKV("output_id", input.ToMWEB().ToHex());
} else {
const CTxIn& txin = input.GetTxIn();
if (tx.IsCoinBase())
in.pushKV("coinbase", HexStr(txin.scriptSig));
else {
in.pushKV("txid", txin.prevout.hash.GetHex());
in.pushKV("vout", (int64_t)txin.prevout.n);
UniValue o(UniValue::VOBJ);
o.pushKV("asm", ScriptToAsmStr(txin.scriptSig, true));
o.pushKV("hex", HexStr(txin.scriptSig));
in.pushKV("scriptSig", o);
}
if (!txin.scriptWitness.IsNull()) {
UniValue txinwitness(UniValue::VARR);
for (const auto& item : txin.scriptWitness.stack) {
txinwitness.push_back(HexStr(item));
}
in.pushKV("txinwitness", txinwitness);
}
in.pushKV("txinwitness", txinwitness);
in.pushKV("sequence", (int64_t)txin.nSequence);
}
in.pushKV("sequence", (int64_t)txin.nSequence);

vin.push_back(in);
}
entry.pushKV("vin", vin);

UniValue vout(UniValue::VARR);
for (unsigned int i = 0; i < tx.vout.size(); i++) {
const CTxOut& txout = tx.vout[i];

int64_t n = 0;
for (const CTxOutput& output : tx.GetOutputs()) {
UniValue out(UniValue::VOBJ);
out.pushKV("ismweb", output.IsMWEB());

if (output.IsMWEB()) {
out.pushKV("output_id", output.ToMWEB().ToHex());
} else {
const CTxOut& txout = output.GetTxOut();
out.pushKV("value", ValueFromAmount(txout.nValue));
out.pushKV("n", n++);

out.pushKV("value", ValueFromAmount(txout.nValue));
out.pushKV("n", (int64_t)i);
UniValue o(UniValue::VOBJ);
ScriptPubKeyToUniv(txout.scriptPubKey, o, true);
out.pushKV("scriptPubKey", o);
}

UniValue o(UniValue::VOBJ);
ScriptPubKeyToUniv(txout.scriptPubKey, o, true);
out.pushKV("scriptPubKey", o);
vout.push_back(out);
}
entry.pushKV("vout", vout);

if (tx.HasMWEBTx()) {
UniValue vkern(UniValue::VARR);

for (const Kernel& kernel : tx.mweb_tx.m_transaction->GetKernels()) {
UniValue kern(UniValue::VOBJ);
kern.pushKV("kernel_id", kernel.GetKernelID().ToHex());

kern.pushKV("fee", kernel.GetFee());
kern.pushKV("pegin", kernel.GetPegIn());

UniValue pegouts(UniValue::VARR);
for (const PegOutCoin& pegout : kernel.GetPegOuts()) {
UniValue uni_pegout(UniValue::VOBJ);
uni_pegout.pushKV("value", pegout.GetAmount());

UniValue p(UniValue::VOBJ);
ScriptPubKeyToUniv(pegout.GetScriptPubKey(), p, true);
uni_pegout.pushKV("scriptPubKey", p);

pegouts.push_back(uni_pegout);
}
kern.pushKV("pegout", pegouts);

vkern.push_back(kern);
}

entry.pushKV("vkern", vkern);
}

if (!hashBlock.IsNull())
entry.pushKV("blockhash", hashBlock.GetHex());

Expand Down

0 comments on commit bc9dc94

Please sign in to comment.