Changeset View
Changeset View
Standalone View
Standalone View
src/core_read.cpp
Show First 20 Lines • Show All 43 Lines • ▼ Show 20 Lines | if (mapOpNames.empty()) { | ||||
mapOpNames[strName] = (opcodetype)op; | mapOpNames[strName] = (opcodetype)op; | ||||
} | } | ||||
} | } | ||||
std::vector<std::string> words; | std::vector<std::string> words; | ||||
boost::algorithm::split(words, s, boost::algorithm::is_any_of(" \t\n"), | boost::algorithm::split(words, s, boost::algorithm::is_any_of(" \t\n"), | ||||
boost::algorithm::token_compress_on); | boost::algorithm::token_compress_on); | ||||
for (std::vector<std::string>::const_iterator w = words.begin(); | for (const auto &w : words) { | ||||
w != words.end(); ++w) { | if (w.empty()) { | ||||
if (w->empty()) { | |||||
// Empty string, ignore. (boost::split given '' will return one | // Empty string, ignore. (boost::split given '' will return one | ||||
// word) | // word) | ||||
} else if (all(*w, boost::algorithm::is_digit()) || | continue; | ||||
(boost::algorithm::starts_with(*w, "-") && | } | ||||
all(std::string(w->begin() + 1, w->end()), | |||||
if (all(w, boost::algorithm::is_digit()) || | |||||
(boost::algorithm::starts_with(w, "-") && | |||||
all(std::string(w.begin() + 1, w.end()), | |||||
boost::algorithm::is_digit()))) { | boost::algorithm::is_digit()))) { | ||||
// Number | // Number | ||||
int64_t n = atoi64(*w); | int64_t n = atoi64(w); | ||||
result << n; | result << n; | ||||
} else if (boost::algorithm::starts_with(*w, "0x") && | continue; | ||||
(w->begin() + 2 != w->end())) { | } | ||||
if (IsHex(std::string(w->begin() + 2, w->end()))) { | |||||
// Raw hex data, inserted NOT pushed onto stack: | if (boost::algorithm::starts_with(w, "0x") && | ||||
std::vector<uint8_t> raw = | (w.begin() + 2 != w.end())) { | ||||
ParseHex(std::string(w->begin() + 2, w->end())); | if (!IsHex(std::string(w.begin() + 2, w.end()))) { | ||||
result.insert(result.end(), raw.begin(), raw.end()); | |||||
} else { | |||||
// Should only arrive here for improperly formatted hex values | // Should only arrive here for improperly formatted hex values | ||||
throw std::runtime_error("Hex numbers expected to be formatted " | throw std::runtime_error("Hex numbers expected to be formatted " | ||||
"in full-byte chunks (ex: 0x00 " | "in full-byte chunks (ex: 0x00 " | ||||
"instead of 0x0)"); | "instead of 0x0)"); | ||||
} | } | ||||
} else if (w->size() >= 2 && boost::algorithm::starts_with(*w, "'") && | |||||
boost::algorithm::ends_with(*w, "'")) { | // Raw hex data, inserted NOT pushed onto stack: | ||||
std::vector<uint8_t> raw = | |||||
ParseHex(std::string(w.begin() + 2, w.end())); | |||||
result.insert(result.end(), raw.begin(), raw.end()); | |||||
continue; | |||||
} | |||||
if (w.size() >= 2 && boost::algorithm::starts_with(w, "'") && | |||||
boost::algorithm::ends_with(w, "'")) { | |||||
// Single-quoted string, pushed as data. NOTE: this is poor-man's | // Single-quoted string, pushed as data. NOTE: this is poor-man's | ||||
// parsing, spaces/tabs/newlines in single-quoted strings won't | // parsing, spaces/tabs/newlines in single-quoted strings won't | ||||
// work. | // work. | ||||
std::vector<uint8_t> value(w->begin() + 1, w->end() - 1); | std::vector<uint8_t> value(w.begin() + 1, w.end() - 1); | ||||
result << value; | result << value; | ||||
} else if (mapOpNames.count(*w)) { | continue; | ||||
} | |||||
if (mapOpNames.count(w)) { | |||||
// opcode, e.g. OP_ADD or ADD: | // opcode, e.g. OP_ADD or ADD: | ||||
result << mapOpNames[*w]; | result << mapOpNames[w]; | ||||
} else { | continue; | ||||
throw std::runtime_error("Error parsing script: " + s); | |||||
} | } | ||||
throw std::runtime_error("Error parsing script: " + s); | |||||
} | } | ||||
return result; | return result; | ||||
} | } | ||||
bool DecodeHexTx(CMutableTransaction &tx, const std::string &strHexTx) { | bool DecodeHexTx(CMutableTransaction &tx, const std::string &strHexTx) { | ||||
if (!IsHex(strHexTx)) { | if (!IsHex(strHexTx)) { | ||||
return false; | return false; | ||||
▲ Show 20 Lines • Show All 68 Lines • Show Last 20 Lines |