|
|
|
@ -300,6 +300,7 @@ struct PSBTInput
|
|
|
|
|
template <typename Stream>
|
|
|
|
|
inline void Unserialize(Stream& s) {
|
|
|
|
|
// Read loop
|
|
|
|
|
bool found_sep = false;
|
|
|
|
|
while(!s.empty()) {
|
|
|
|
|
// Read
|
|
|
|
|
std::vector<unsigned char> key;
|
|
|
|
@ -307,7 +308,10 @@ struct PSBTInput
|
|
|
|
|
|
|
|
|
|
// the key is empty if that was actually a separator byte
|
|
|
|
|
// This is a special case for key lengths 0 as those are not allowed (except for separator)
|
|
|
|
|
if (key.empty()) return;
|
|
|
|
|
if (key.empty()) {
|
|
|
|
|
found_sep = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// First byte of key is the type
|
|
|
|
|
unsigned char type = key[0];
|
|
|
|
@ -422,6 +426,10 @@ struct PSBTInput
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!found_sep) {
|
|
|
|
|
throw std::ios_base::failure("Separator is missing at the end of an input map");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template <typename Stream>
|
|
|
|
@ -475,6 +483,7 @@ struct PSBTOutput
|
|
|
|
|
template <typename Stream>
|
|
|
|
|
inline void Unserialize(Stream& s) {
|
|
|
|
|
// Read loop
|
|
|
|
|
bool found_sep = false;
|
|
|
|
|
while(!s.empty()) {
|
|
|
|
|
// Read
|
|
|
|
|
std::vector<unsigned char> key;
|
|
|
|
@ -482,7 +491,10 @@ struct PSBTOutput
|
|
|
|
|
|
|
|
|
|
// the key is empty if that was actually a separator byte
|
|
|
|
|
// This is a special case for key lengths 0 as those are not allowed (except for separator)
|
|
|
|
|
if (key.empty()) return;
|
|
|
|
|
if (key.empty()) {
|
|
|
|
|
found_sep = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// First byte of key is the type
|
|
|
|
|
unsigned char type = key[0];
|
|
|
|
@ -527,6 +539,10 @@ struct PSBTOutput
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!found_sep) {
|
|
|
|
|
throw std::ios_base::failure("Separator is missing at the end of an output map");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template <typename Stream>
|
|
|
|
@ -602,6 +618,7 @@ struct PartiallySignedTransaction
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Read global data
|
|
|
|
|
bool found_sep = false;
|
|
|
|
|
while(!s.empty()) {
|
|
|
|
|
// Read
|
|
|
|
|
std::vector<unsigned char> key;
|
|
|
|
@ -609,7 +626,10 @@ struct PartiallySignedTransaction
|
|
|
|
|
|
|
|
|
|
// the key is empty if that was actually a separator byte
|
|
|
|
|
// This is a special case for key lengths 0 as those are not allowed (except for separator)
|
|
|
|
|
if (key.empty()) break;
|
|
|
|
|
if (key.empty()) {
|
|
|
|
|
found_sep = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// First byte of key is the type
|
|
|
|
|
unsigned char type = key[0];
|
|
|
|
@ -649,6 +669,10 @@ struct PartiallySignedTransaction
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!found_sep) {
|
|
|
|
|
throw std::ios_base::failure("Separator is missing at the end of the global map");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Make sure that we got an unsigned tx
|
|
|
|
|
if (!tx) {
|
|
|
|
|
throw std::ios_base::failure("No unsigned transcation was provided");
|
|
|
|
|