diff --git a/mix/ClientModel.cpp b/mix/ClientModel.cpp index b8f7c9a2b..ca7849412 100644 --- a/mix/ClientModel.cpp +++ b/mix/ClientModel.cpp @@ -207,15 +207,14 @@ void ClientModel::executeSequence(std::vector const& _seque if (!f) BOOST_THROW_EXCEPTION(FunctionNotFoundException() << FunctionName(transaction.functionId.toStdString())); - for (int k = 0; k < f->parametersList() .size(); k++) - { - if (f->parametersList().at(k)->type() != transaction.parameterValues.at(k)->declaration()->type()) - BOOST_THROW_EXCEPTION(ParameterChangedException() << FunctionName(f->parametersList().at(k)->type().toStdString())); - } - encoder.encode(f); for (int p = 0; p < transaction.parameterValues.size(); p++) + { + if (f->parametersList().at(p)->type() != transaction.parameterValues.at(p)->declaration()->type()) + BOOST_THROW_EXCEPTION(ParameterChangedException() << FunctionName(f->parametersList().at(p)->type().toStdString())); encoder.push(transaction.parameterValues.at(p)->encodeValue()); + } + if (transaction.functionId.isEmpty()) { @@ -229,10 +228,6 @@ void ClientModel::executeSequence(std::vector const& _seque else { callContract(m_contractAddress, encoder.encodedData(), transaction); - - // Used to log return values. TODO move this to QML. - ExecutionResult const& last = m_client->record().back().transactions.back(); - encoder.decode(f->returnParameters(), last.returnValue); } } onNewTransaction(); @@ -331,11 +326,6 @@ void ClientModel::onNewTransaction() bool creation = tr.contractAddress != 0; - if (creation) - returned = QString::fromStdString(toJS(tr.contractAddress)); - else - returned = QString::fromStdString(toJS(tr.returnValue)); - //TODO: handle value transfer FixedHash<4> functionHash; bool call = false; @@ -364,6 +354,10 @@ void ClientModel::onNewTransaction() function = QObject::tr(""); } + if (creation) + returned = QString::fromStdString(toJS(tr.contractAddress)); + + QList returnValues; if (m_contractAddress != 0 && (tr.address == m_contractAddress || tr.contractAddress == m_contractAddress)) { auto compilerRes = m_context->codeModel()->code(); @@ -373,7 +367,13 @@ void ClientModel::onNewTransaction() { QFunctionDefinition* funcDef = def->getFunction(functionHash); if (funcDef) + { function = funcDef->name(); + ContractCallDataEncoder encoder; + returnValues = encoder.decode(funcDef->returnParameters(), tr.returnValue); + for (auto const& var: returnValues) + returned += var->value() + " | "; + } } }