diff --git a/src/cpp/HTTPInterface/AdminTopicPage.cpp b/src/cpp/HTTPInterface/AdminTopicPage.cpp index 6b4c59e2f..728b91903 100644 --- a/src/cpp/HTTPInterface/AdminTopicPage.cpp +++ b/src/cpp/HTTPInterface/AdminTopicPage.cpp @@ -242,7 +242,7 @@ void AdminTopicPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco:: std::string timeout_color = "success-color"; if(hedera_topic_model->getCurrentTimeout() < Poco::DateTime()) { timeout_color = "alert-color"; - } else if(hedera_topic_model->getCurrentTimeout() - Poco::DateTime() > Poco::Timespan(2,0,0,0,0)) { + } else if((hedera_topic_model->getCurrentTimeout() - Poco::DateTime()) < Poco::Timespan(2,0,0,0,0)) { timeout_color = "orange-color"; } responseStream << "\n"; diff --git a/src/cpp/controller/HederaTopic.cpp b/src/cpp/controller/HederaTopic.cpp index 8a8ab9661..5dad41814 100644 --- a/src/cpp/controller/HederaTopic.cpp +++ b/src/cpp/controller/HederaTopic.cpp @@ -74,7 +74,7 @@ namespace controller { auto payer_account = getAutoRenewAccount(); auto node_server = NodeServer::pick(payer_account->getModel()->getNetworkType(), getModel()->getGroupId()); auto query = model::hedera::Query::getTopicInfo(getTopicHederaId(), payer_account->getHederaId(), node_server); - query->setResponseType(proto::ANSWER_ONLY); + query->setResponseType(proto::COST_ANSWER); model::hedera::Response response; HederaRequest request; query->sign(payer_account->getCryptoKey()->getKeyPair(user)); @@ -89,18 +89,21 @@ namespace controller { if (HEDERA_REQUEST_RETURN_OK == request.request(query, &response)) { auto consensus_topic_info = response.getConsensusTopicInfo(); - addNotification(new ParamSuccess("consensus get topic info", "memo: ", consensus_topic_info->getMemo())); + //addNotification(new ParamSuccess("consensus get topic info", "memo: ", consensus_topic_info->getMemo())); + //addNotification(new ParamSuccess("consensus get topic info", "string: ", consensus_topic_info->toStringHtml())); auto model = getModel(); model->setAutoRenewPeriod(consensus_topic_info->getAutoRenewPeriod().seconds()); model->setCurrentTimeout(consensus_topic_info->getExpirationTime()); model->setSequeceNumber(consensus_topic_info->getSequenceNumber()); + + std::string fieldNames[] = { "auto_renew_period", "current_timeout", "sequence_number" }; if (model->updateIntoDB( fieldNames, model->getAutoRenewPeriod(), model->getCurrentTimeout(), model->getSequenceNumber() - ) != 1) { + ) > 1) { addError(new Error("DB", "error saving changes in DB")); getErrors(model); return false; diff --git a/src/cpp/lib/DataTypeConverter.cpp b/src/cpp/lib/DataTypeConverter.cpp index cfe63c7b9..8616282fd 100644 --- a/src/cpp/lib/DataTypeConverter.cpp +++ b/src/cpp/lib/DataTypeConverter.cpp @@ -265,11 +265,12 @@ namespace DataTypeConverter Poco::Timestamp convertFromProtoTimestamp(const proto::Timestamp& timestamp) { // microseconds - return timestamp.seconds() * 10e6 + (google::protobuf::int64)(timestamp.nanos()) / 10e3; + google::protobuf::int64 microseconds = timestamp.seconds() * (google::protobuf::int64)10e5 + (google::protobuf::int64)(timestamp.nanos()) / (google::protobuf::int64)10e2; + return microseconds; } Poco::Timespan convertFromProtoDuration(const proto::Duration& duration) { - return (duration.seconds(), 0); + return Poco::Timespan(duration.seconds(), 0); } } \ No newline at end of file diff --git a/src/cpp/model/hedera/ConsensusTopicInfo.cpp b/src/cpp/model/hedera/ConsensusTopicInfo.cpp index 1a7519fbb..38b7d44bc 100644 --- a/src/cpp/model/hedera/ConsensusTopicInfo.cpp +++ b/src/cpp/model/hedera/ConsensusTopicInfo.cpp @@ -1,11 +1,14 @@ #include "ConsensusTopicInfo.h" +#include +#include "../../lib/DataTypeConverter.h" +#include "Poco/DateTimeFormatter.h" + namespace model { namespace hedera { ConsensusTopicInfo::ConsensusTopicInfo(const proto::ConsensusTopicInfo& consensusTopicInfo) : mProto(consensusTopicInfo) { - int zahl = 1; } ConsensusTopicInfo::~ConsensusTopicInfo() @@ -22,5 +25,44 @@ namespace model { return running_hash_bin; } + std::string ConsensusTopicInfo::toString() + { + std::stringstream ss; + ss << "memo: " << mProto.memo() << std::endl; + ss << "running hash: " << DataTypeConverter::binToHex((const unsigned char*)mProto.runninghash().data(), mProto.runninghash().size()) << std::endl; + ss << "sequence number: " << mProto.sequencenumber() << std::endl; + Poco::DateTime expiration_time = DataTypeConverter::convertFromProtoTimestamp(mProto.expirationtime()); + + ss << "expiration time: " << Poco::DateTimeFormatter::format(expiration_time, "%f.%m.%Y %H:%M:%S") << std::endl; + ss << "has admin key: " << mProto.has_adminkey() << std::endl; + ss << "has submit key: " << mProto.has_submitkey() << std::endl; + auto auto_renew_period = DataTypeConverter::convertFromProtoDuration(mProto.autorenewperiod()); + ss << "auto renew period: " << std::to_string(auto_renew_period.seconds()) << " seconds" << std::endl; + auto acc_id = mProto.autorenewaccount(); + ss << "auto renew account: " << acc_id.shardnum() << ", " << acc_id.realmnum() << ", " << acc_id.accountnum() << std::endl; + + return ss.str(); + } + + std::string ConsensusTopicInfo::toStringHtml() + { + std::stringstream ss; + ss << ""; + + return ss.str(); + } } } \ No newline at end of file diff --git a/src/cpp/model/hedera/ConsensusTopicInfo.h b/src/cpp/model/hedera/ConsensusTopicInfo.h index 2b1a8338c..123b9496b 100644 --- a/src/cpp/model/hedera/ConsensusTopicInfo.h +++ b/src/cpp/model/hedera/ConsensusTopicInfo.h @@ -20,7 +20,10 @@ namespace model MemoryBin* getRunningHashCopy() const; Poco::UInt64 getSequenceNumber() const { return mProto.sequencenumber(); } inline Poco::DateTime getExpirationTime() const { return DataTypeConverter::convertFromProtoTimestamp(mProto.expirationtime());} - inline Poco::Timespan getAutoRenewPeriod() const { return DataTypeConverter::convertFromProtoDuration(mProto.autorenewperiod()); } + inline proto::Duration getAutoRenewPeriod() const { return mProto.autorenewperiod(); } + + std::string toString(); + std::string toStringHtml(); protected: proto::ConsensusTopicInfo mProto; diff --git a/src/cpp/model/hedera/Query.cpp b/src/cpp/model/hedera/Query.cpp index ad118c0f1..421266173 100644 --- a/src/cpp/model/hedera/Query.cpp +++ b/src/cpp/model/hedera/Query.cpp @@ -76,11 +76,23 @@ namespace model { return query; } + proto::QueryHeader* Query::getQueryHeader() + { + if (mQueryProto.has_cryptogetaccountbalance()) { + return mQueryProto.mutable_cryptogetaccountbalance()->mutable_header(); + } + else if (mQueryProto.has_consensusgettopicinfo()) { + return mQueryProto.mutable_consensusgettopicinfo()->mutable_header(); + } + return nullptr; + } + bool Query::sign(std::unique_ptr keyPairHedera) { Transaction transaction; + mTransactionBody->updateTimestamp(); auto sign_result = transaction.sign(std::move(keyPairHedera), mTransactionBody); - auto query_header = mQueryProto.mutable_cryptogetaccountbalance()->mutable_header(); + auto query_header = getQueryHeader(); query_header->set_allocated_payment(transaction.getTransaction()); transaction.resetPointer(); @@ -89,16 +101,13 @@ namespace model { void Query::setResponseType(proto::ResponseType type) { - auto get_account_balance = mQueryProto.mutable_cryptogetaccountbalance(); - auto query_header = get_account_balance->mutable_header(); + auto query_header = getQueryHeader(); query_header->set_responsetype(type); - } proto::ResponseType Query::getResponseType() { - auto get_account_balance = mQueryProto.mutable_cryptogetaccountbalance(); - auto query_header = get_account_balance->mutable_header(); + auto query_header = getQueryHeader(); return query_header->responsetype(); } diff --git a/src/cpp/model/hedera/Query.h b/src/cpp/model/hedera/Query.h index 5c633e66c..56db4529f 100644 --- a/src/cpp/model/hedera/Query.h +++ b/src/cpp/model/hedera/Query.h @@ -32,6 +32,8 @@ namespace model { inline const proto::Query* getProtoQuery() const { return &mQueryProto; } inline std::string getConnectionString() const { return mTransactionBody->getConnectionString(); } + proto::QueryHeader* getQueryHeader(); + protected: Query(); proto::Query mQueryProto; diff --git a/src/cpp/model/hedera/TransactionBody.h b/src/cpp/model/hedera/TransactionBody.h index c05f419ff..7697434ec 100644 --- a/src/cpp/model/hedera/TransactionBody.h +++ b/src/cpp/model/hedera/TransactionBody.h @@ -51,8 +51,9 @@ namespace model { inline controller::NodeServerConnection getConnection() const { return mConnection; } inline TransactionBodyType getType() const { return mType; } - protected: void updateTimestamp(); + protected: + proto::TransactionBody mTransactionBody; controller::NodeServerConnection mConnection; bool mHasBody; diff --git a/src/cpp/model/table/HederaTopic.cpp b/src/cpp/model/table/HederaTopic.cpp index 66a101226..e26e6627e 100644 --- a/src/cpp/model/table/HederaTopic.cpp +++ b/src/cpp/model/table/HederaTopic.cpp @@ -47,7 +47,7 @@ namespace model { std::string HederaTopic::getAutoRenewPeriodString() const { - return secondsToReadableDuration(mAutoRenewPeriod) + "(" + std::to_string(mAutoRenewPeriod) + " seconds)"; + return secondsToReadableDuration(mAutoRenewPeriod) + " (" + std::to_string(mAutoRenewPeriod) + " seconds)"; } std::string HederaTopic::getCurrentTimeoutString() const diff --git a/src/cpp/model/table/ModelBase.h b/src/cpp/model/table/ModelBase.h index 50d928814..55227da6a 100644 --- a/src/cpp/model/table/ModelBase.h +++ b/src/cpp/model/table/ModelBase.h @@ -287,9 +287,10 @@ namespace model { return 0; } - update << "UPDATE " << getTableName(); + update << "UPDATE " << getTableName() << " SET "; for (int i = 0; i < 2; i++) { - update << "SET " << fieldNames[i] << " = ? "; + if (i) update << ", "; + update << fieldNames[i] << " = ? "; } update << "WHERE id = ?" , Poco::Data::Keywords::bind(fieldValue1), Poco::Data::Keywords::bind(fieldValue2) @@ -324,9 +325,10 @@ namespace model { return 0; } - update << "UPDATE " << getTableName(); + update << "UPDATE " << getTableName() << " SET "; for (int i = 0; i < 3; i++) { - update << "SET " << fieldNames[i] << " = ? "; + if (i) update << ", "; + update << fieldNames[i] << " = ? "; } update << "WHERE id = ?" , Poco::Data::Keywords::bind(fieldValue1), Poco::Data::Keywords::bind(fieldValue2), Poco::Data::Keywords::bind(fieldValue3) diff --git a/src/cpsp/adminTopic.cpsp b/src/cpsp/adminTopic.cpsp index 09c70fe82..32dfb68c8 100644 --- a/src/cpsp/adminTopic.cpsp +++ b/src/cpsp/adminTopic.cpsp @@ -160,7 +160,7 @@ std::string timeout_color = "success-color"; if(hedera_topic_model->getCurrentTimeout() < Poco::DateTime()) { timeout_color = "alert-color"; - } else if(hedera_topic_model->getCurrentTimeout() - Poco::DateTime() > Poco::Timespan(2,0,0,0,0)) { + } else if((hedera_topic_model->getCurrentTimeout() - Poco::DateTime()) < Poco::Timespan(2,0,0,0,0)) { timeout_color = "orange-color"; } %>