MCPcopy Create free account
hub / github.com/bcndev/bytecoin / process_input

Method process_input

src/Core/BlockChainState.cpp:1268–1308  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1266}
1267
1268void BlockChainState::process_input(const Hash &tid, size_t iid, const InputKey &input) {
1269 if (chain_reaction == 0)
1270 return;
1271 if (input.output_indexes.size() == 1) {
1272 size_t hidden_index = 0;
1273 invariant(read_hidden_amount_map(input.amount, input.output_indexes.at(0), &hidden_index), "");
1274 OutputIndexData unp;
1275 invariant(read_hidden_amount_output(hidden_index, &unp), "");
1276 spend_output(std::move(unp), hidden_index, std::numeric_limits<size_t>::max(), 0, true);
1277 return;
1278 }
1279 if (chain_reaction == 1)
1280 return;
1281 const auto input_index = m_next_nz_input_index;
1282 auto din_key = DIN_PREFIX + common::write_varint_sqlite4(m_next_nz_input_index);
1283 m_next_nz_input_index += 1;
1284 std::vector<size_t> absolute_indexes;
1285 invariant(relative_output_offsets_to_absolute(&absolute_indexes, input.output_indexes), "");
1286 InputDesc din;
1287 std::vector<OutputIndexData> unspents;
1288 for (size_t i = 0; i != absolute_indexes.size(); ++i) {
1289 size_t hidden_index = 0;
1290 invariant(read_hidden_amount_map(input.amount, absolute_indexes.at(i), &hidden_index), "");
1291 OutputIndexData unp;
1292 invariant(read_hidden_amount_output(hidden_index, &unp), "");
1293 if (unp.spent)
1294 continue;
1295 din.first.push_back(hidden_index);
1296 unspents.push_back(std::move(unp));
1297 }
1298 if (din.first.size() > 1)
1299 for (size_t i = 0; i != din.first.size(); ++i) {
1300 unspents[i].dins.push_back(input_index);
1301 auto key = OUTPUT_PREFIX + common::write_varint_sqlite4(din.first[i]);
1302 m_db.put(key, seria::to_binary(unspents[i]), false);
1303 }
1304 m_db.put(din_key, seria::to_binary(din), true);
1305 if (din.first.size() == 1) {
1306 spend_output(std::move(unspents[0]), din.first[0], input_index, 0, true);
1307 }
1308}
1309
1310void BlockChainState::unprocess_input(const InputKey &input) {
1311 if (chain_reaction == 0)

Callers

nothing calls this directly

Calls 5

write_varint_sqlite4Function · 0.85
to_binaryFunction · 0.85
atMethod · 0.80
sizeMethod · 0.45
putMethod · 0.45

Tested by

no test coverage detected