MCPcopy Create free account
hub / github.com/citp/BlockSci / p2shGenerate

Function p2shGenerate

tools/parser/script_input.cpp:45–70  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

43}
44
45std::pair<AnyScriptOutput, std::unique_ptr<AnyScriptInput>> p2shGenerate(const InputView &inputView, const blocksci::CScriptView &scriptView, const RawTransaction &tx, const SpendData<blocksci::AddressType::Enum::SCRIPTHASH> &) {
46 blocksci::CScriptView::iterator pc1 = scriptView.begin();
47 blocksci::CScriptView::iterator prevpc = scriptView.begin();
48 blocksci::CScriptView::iterator prevprevpc = scriptView.begin();
49 blocksci::opcodetype opcode1;
50 ranges::subrange<const unsigned char *> vch1;
51
52 ranges::subrange<const unsigned char *> lastScript;
53 while(true) {
54 prevprevpc = prevpc;
55 prevpc = pc1;
56 lastScript = vch1;
57 if(!scriptView.GetOp(pc1, opcode1, vch1)) {
58 break;
59 }
60 }
61
62 blocksci::CScriptView::iterator begin = scriptView.begin();
63 auto wrappedInputBegin = &*begin;
64 auto wrappedInputLength = static_cast<uint32_t>(std::distance(begin, prevprevpc));
65
66 blocksci::CScriptView wrappedOutputScript(lastScript.begin(), lastScript.end());
67 blocksci::CScriptView p2shScriptView{wrappedInputBegin, wrappedInputBegin + wrappedInputLength};
68 AnyScriptOutput wrappedScriptOutput(wrappedOutputScript, false, inputView.witnessActivated);
69 return std::make_pair(wrappedScriptOutput, std::make_unique<AnyScriptInput>(inputView, p2shScriptView, tx, AnySpendData{wrappedScriptOutput}));
70}
71
72ScriptInputData<blocksci::AddressType::Enum::SCRIPTHASH>::ScriptInputData(std::pair<AnyScriptOutput, std::unique_ptr<AnyScriptInput>> data) : wrappedScriptOutput(data.first), wrappedScriptInput(std::move(data.second)) {}
73

Callers 1

ScriptInputDataMethod · 0.85

Calls 3

beginMethod · 0.45
GetOpMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected