void serialize(Transaction& tx, ISerializer& serializer) { serialize(static_cast<TransactionPrefix&>(tx), serializer); size_t sigSize = tx.inputs.size(); //TODO: make arrays without sizes // serializer.beginArray(sigSize, "signatures"); if (serializer.type() == ISerializer::INPUT) { tx.signatures.resize(sigSize); } bool signaturesNotExpected = tx.signatures.empty(); if (!signaturesNotExpected && tx.inputs.size() != tx.signatures.size()) { throw std::runtime_error("Serialization error: unexpected signatures size"); } for (size_t i = 0; i < tx.inputs.size(); ++i) { size_t signatureSize = getSignaturesCount(tx.inputs[i]); if (signaturesNotExpected) { if (signatureSize == 0) { continue; } else { throw std::runtime_error("Serialization error: signatures are not expected"); } } if (serializer.type() == ISerializer::OUTPUT) { if (signatureSize != tx.signatures[i].size()) { throw std::runtime_error("Serialization error: unexpected signatures size"); } for (Crypto::Signature& sig : tx.signatures[i]) { serializePod(sig, "", serializer); } } else { std::vector<Crypto::Signature> signatures(signatureSize); for (Crypto::Signature& sig : signatures) { serializePod(sig, "", serializer); } tx.signatures[i] = std::move(signatures); } } // serializer.endArray(); }
void function::argument_error(PyObject* args, PyObject* /*keywords*/) const { static handle<> exception( PyErr_NewException(const_cast<char*>("Boost.Python.ArgumentError"), PyExc_TypeError, 0)); object message = "Python argument types in\n %s.%s(" % make_tuple(this->m_namespace, this->m_name); list actual_args; for (ssize_t i = 0; i < PyTuple_Size(args); ++i) { char const* name = PyTuple_GetItem(args, i)->ob_type->tp_name; actual_args.append(str(name)); } message += str(", ").join(actual_args); message += ")\ndid not match C++ signature:\n "; message += str("\n ").join(signatures()); #if BOOST_PYTHON_DEBUG_ERROR_MESSAGES std::printf("\n--------\n%s\n--------\n", extract<const char*>(message)()); #endif PyErr_SetObject(exception.get(), message.ptr()); throw_error_already_set(); }
bool BlocksQuery::operator==(const ModelType &rhs) const { return creatorAccountId() == rhs.creatorAccountId() and queryCounter() == rhs.queryCounter() and createdTime() == rhs.createdTime() and signatures() == rhs.signatures(); }