mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
update transaction decoding for debugging messages from hedera block explorer
This commit is contained in:
parent
ead0ec9edf
commit
4a5b043fb5
@ -5,5 +5,8 @@ CREATE TABLE `pending_tasks` (
|
||||
`created` datetime NOT NULL,
|
||||
`finished` datetime DEFAULT '2000-01-01 000000',
|
||||
`result_json` varchar(255) DEFAULT NULL,
|
||||
`task_type_id` int UNSIGNED NOT NULL
|
||||
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;;
|
||||
`task_type_id` int UNSIGNED NOT NULL,
|
||||
`child_pending_task_id` int UNSIGNED DEFAULT 0,
|
||||
`parent_pending_task_id` int UNSIGNED DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
@ -64,7 +64,7 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
bool transaction_finalize_run = false;
|
||||
bool transaction_finalize_result = false;
|
||||
auto transactions_to_sign = pt->getTransactionsUserMustSign(account_user);
|
||||
model::gradido::Transaction* transaction;
|
||||
model::gradido::Transaction* transaction = nullptr;
|
||||
Poco::AutoPtr<model::gradido::TransactionBody> transaction_body;
|
||||
|
||||
if(transactions_to_sign.size() > 0)
|
||||
|
||||
@ -8,10 +8,12 @@
|
||||
#line 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
|
||||
#include "sodium.h"
|
||||
#include "../proto/gradido/GradidoTransaction.pb.h"
|
||||
#include "../proto/gradido/TransactionBody.pb.h"
|
||||
#include "../controller/User.h"
|
||||
#include "../model/gradido/TransactionBase.h"
|
||||
#include "../model/gradido/TransactionCreation.h"
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
@ -31,10 +33,11 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
if (_compressResponse) response.set("Content-Encoding", "gzip");
|
||||
|
||||
Poco::Net::HTMLForm form(request, request.stream());
|
||||
#line 14 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 16 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
|
||||
const char* pageName = "Decode Transaction";
|
||||
proto::gradido::TransactionBody transactionBody;
|
||||
proto::gradido::GradidoTransaction transaction;
|
||||
bool decoded = false;
|
||||
bool adminUser = false;
|
||||
if(mSession && mSession->getNewUser()) {
|
||||
@ -51,6 +54,7 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
size_t resultingBinSize = 0;
|
||||
size_t base64_size = base64.size();
|
||||
bool encodingValid = false;
|
||||
bool encodedTransaction = false;
|
||||
if (!sodium_base642bin(
|
||||
binBuffer, base64_size,
|
||||
base64.data(), base64_size,
|
||||
@ -63,9 +67,10 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
base64.data(), base64_size,
|
||||
nullptr, &resultingBinSize, nullptr,
|
||||
sodium_base64_VARIANT_URLSAFE_NO_PADDING)) {
|
||||
//encodingValid = true;
|
||||
encodingValid = true;
|
||||
//free(binBuffer);
|
||||
addError(new Error("ProcessingTransaction", "it is maybe a Transaction, but I support only TransactionBodys"), false);
|
||||
//addError(new Error("ProcessingTransaction", "it is maybe a Transaction, but I support only TransactionBodys"), false);
|
||||
encodedTransaction = true;
|
||||
}
|
||||
if(false == encodingValid) {
|
||||
free(binBuffer);
|
||||
@ -73,11 +78,24 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
} else {
|
||||
std::string binString((char*)binBuffer, resultingBinSize);
|
||||
free(binBuffer);
|
||||
|
||||
if (!transactionBody.ParseFromString(binString)) {
|
||||
addError(new Error("ProcessingTransaction", "error creating Transaction from binary Message"), false);
|
||||
if(!encodedTransaction) {
|
||||
|
||||
if (!transactionBody.ParseFromString(binString)) {
|
||||
addError(new Error("ProcessingTransaction", "error creating Transaction Body from binary Message"), false);
|
||||
} else {
|
||||
decoded = true;
|
||||
}
|
||||
} else {
|
||||
decoded = true;
|
||||
|
||||
if(!transaction.ParseFromString(binString)) {
|
||||
addError(new Error("ProcessingTransaction", "error creating Transaction from binary Message"), false);
|
||||
} else {
|
||||
if(!transactionBody.ParseFromString(transaction.body_bytes())) {
|
||||
addError(new Error("ProcessingTransaction", "error creating Transaction Body from Transaction body bytes"), false);
|
||||
} else {
|
||||
decoded = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -158,35 +176,35 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << "<div class=\"grd_container\">\n";
|
||||
responseStream << "\t<h1>Transaktion dekodieren</h1>\n";
|
||||
responseStream << "\t";
|
||||
#line 72 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 90 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t<form method=\"POST\">\n";
|
||||
responseStream << "\t\t<fieldset class=\"grd_container_small\">\n";
|
||||
responseStream << "\t\t\t<legend>Transaktion dekodieren</legend>\n";
|
||||
responseStream << "\t\t\t<textarea style=\"width:100%;height:100px\" name=\"transaction\">";
|
||||
#line 76 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 94 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("transaction", "") : "" );
|
||||
responseStream << "</textarea>\n";
|
||||
responseStream << "\t\t</fieldset>\n";
|
||||
responseStream << "\t\t<input class=\"grd-form-bn grd-form-bn-succeed\" type=\"submit\" name=\"submit\" value=\"Dekodieren\">\n";
|
||||
responseStream << "\t</form>\n";
|
||||
responseStream << "\t";
|
||||
#line 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 98 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
if(decoded) { responseStream << "\n";
|
||||
responseStream << "\t\t<p><b>Verwendungszweck:</b></p>\n";
|
||||
responseStream << "\t\t<p>";
|
||||
#line 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 100 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( transactionBody.memo() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 83 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 101 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
if(transactionBody.has_transfer()) {
|
||||
auto transfer = transactionBody.transfer();
|
||||
char hex[65]; memset(hex, 0, 65);
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 87 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 105 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
if(transfer.has_local()) {
|
||||
auto local_transfer = transfer.local();
|
||||
auto sender_pubkey = local_transfer.sender().pubkey();
|
||||
@ -195,29 +213,29 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<h3>Local Transfer</h3>\n";
|
||||
responseStream << "\t\t\t\t<b>From: </b>";
|
||||
#line 94 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 112 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( hex );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 95 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 113 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
sodium_bin2hex(hex, 65, (const unsigned char*)receiver_pubkey.data(), receiver_pubkey.size()); responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<b>To: </b>";
|
||||
#line 96 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 114 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( hex );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<b>Amount: </b>";
|
||||
#line 97 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 115 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( model::gradido::TransactionBase::amountToString(local_transfer.sender().amount()) );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 98 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 116 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<h3>- Not implemented yet (Group Transfer) -</h3>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 100 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 118 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t";
|
||||
#line 102 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 120 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} else if(transactionBody.has_creation()) {
|
||||
auto creation = transactionBody.creation();
|
||||
|
||||
@ -238,36 +256,60 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t<h3>Creation</h3>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 120 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 139 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
if(!adminUser || user.isNull() || !user->getModel()) { responseStream << "\n";
|
||||
responseStream << "\t\t<p>pubkey: ";
|
||||
#line 121 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 140 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( hex );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 122 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 141 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t<p>user: </p>\n";
|
||||
responseStream << "\t\t<p>";
|
||||
#line 124 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 143 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( user->getModel()->toHTMLString() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 125 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 144 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t<p>amount: ";
|
||||
#line 126 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( TransactionBase::amountToString(receiver.amount()) );
|
||||
#line 145 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( model::gradido::TransactionBase::amountToString(receiver.amount()) );
|
||||
responseStream << " GDD</p>\n";
|
||||
responseStream << "\t\t<p>target date: ";
|
||||
#line 127 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 146 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( creationObject.getTargetDateString() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 128 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 147 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} else if(transactionBody.has_group_member_update()) {
|
||||
auto group_member_update = transactionBody.group_member_update();
|
||||
auto paired_transaction_id = group_member_update.paired_transaction_id();
|
||||
std::string paired_transaction_string = std::to_string(paired_transaction_id.seconds()) + "." + std::to_string(paired_transaction_id.nanos());
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t<h3>Group Member Update</h3>\n";
|
||||
responseStream << "\t\t\t<p><b>Target group alias: </b>";
|
||||
#line 153 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( group_member_update.target_group() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t<p><b>Paired transaction id: </b>";
|
||||
#line 154 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( paired_transaction_string );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t<p><b>Member Update Type: </b>";
|
||||
#line 155 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( proto::gradido::GroupMemberUpdate_MemberUpdateType_Name(group_member_update.member_update_type()) );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t<p><b>User Public Key Hex: </b>";
|
||||
#line 156 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( DataTypeConverter::pubkeyToHex((const unsigned char*)group_member_update.user_pubkey().data()) );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 157 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 129 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 158 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</div>\n";
|
||||
// begin include footer.cpsp
|
||||
|
||||
@ -343,7 +343,14 @@ namespace model {
|
||||
if (!crypto_key.isNull())
|
||||
{
|
||||
model::hedera::ConsensusSubmitMessage consensus_submit_message(topic_id);
|
||||
consensus_submit_message.setMessage(mProtoTransaction.SerializeAsString());
|
||||
std::string raw_message = mProtoTransaction.SerializeAsString();
|
||||
// if using testnet, transfer message base64 encoded to check messages in hedera block explorer
|
||||
if (network_type == table::HEDERA_TESTNET) {
|
||||
consensus_submit_message.setMessage(DataTypeConverter::binToBase64((const unsigned char*)raw_message.data(), raw_message.size(), sodium_base64_VARIANT_URLSAFE_NO_PADDING));
|
||||
}
|
||||
else {
|
||||
consensus_submit_message.setMessage(raw_message);
|
||||
}
|
||||
auto hedera_transaction_body = hedera_operator_account->createTransactionBody();
|
||||
hedera_transaction_body->setConsensusSubmitMessage(consensus_submit_message);
|
||||
model::hedera::Transaction hedera_transaction;
|
||||
@ -359,10 +366,16 @@ namespace model {
|
||||
return -2;
|
||||
}
|
||||
else {
|
||||
auto hedera_precheck_code_string = hedera_task.getTransactionResponse()->getPrecheckCodeString();
|
||||
auto cost = hedera_task.getTransactionResponse()->getCost();
|
||||
auto hedera_transaction_response = hedera_task.getTransactionResponse();
|
||||
auto hedera_precheck_code_string = hedera_transaction_response->getPrecheckCodeString();
|
||||
auto precheck_code = hedera_transaction_response->getPrecheckCode();
|
||||
auto cost = hedera_transaction_response->getCost();
|
||||
|
||||
printf("hedera response: %s, cost: %" PRIu64 "\n", hedera_precheck_code_string.data(), cost);
|
||||
if (precheck_code == proto::INVALID_TRANSACTION_START) {
|
||||
int zahl = 0;
|
||||
return -5;
|
||||
}
|
||||
|
||||
}
|
||||
//model::hedera::TransactionBody hedera_transaction_body()
|
||||
|
||||
@ -49,6 +49,7 @@ namespace model {
|
||||
|
||||
auto mm = MemoryManager::getInstance();
|
||||
mConnection = transactionBody->getConnection();
|
||||
transactionBody->updateTimestamp();
|
||||
auto transaction_body_proto = transactionBody->getProtoTransactionBody();
|
||||
auto body_bytes = transaction_body_proto->SerializeAsString();
|
||||
mTransaction->set_bodybytes(body_bytes.data(), body_bytes.size());
|
||||
|
||||
@ -127,8 +127,11 @@ namespace model {
|
||||
auto timestamp = transaction_id->mutable_transactionvalidstart();
|
||||
Poco::Timestamp now;
|
||||
auto microseconds = now.epochMicroseconds() - now.epochTime() * now.resolution(); // 1*10^6
|
||||
timestamp->set_seconds(now.epochTime());
|
||||
timestamp->set_nanos(microseconds * 1000);
|
||||
timestamp->set_seconds(now.epochTime()-1);
|
||||
//timestamp->set_nanos(microseconds * 1000);
|
||||
// make sure timestamp is some nanos old
|
||||
timestamp->set_nanos(microseconds * 900);
|
||||
printf("hedera transaction body timestamp: %d.%d\n", timestamp->seconds(), timestamp->nanos());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -21,7 +21,7 @@ namespace model
|
||||
}
|
||||
PendingTask::PendingTask(const PendingTaskTuple& tuple)
|
||||
: ModelBase(tuple.get<0>()), mUserId(tuple.get<1>()), mRequest(tuple.get<2>()), mCreated(tuple.get<3>()), mFinished(tuple.get<4>()),
|
||||
mResultJsonString(tuple.get<5>()), mTaskTypeId(tuple.get<6>())
|
||||
mResultJsonString(tuple.get<5>()), mTaskTypeId(tuple.get<6>()), mChildPendingTaskId(tuple.get<7>()), mParentPendingTaskId(tuple.get<8>())
|
||||
{
|
||||
|
||||
}
|
||||
@ -96,9 +96,10 @@ namespace model
|
||||
{
|
||||
Poco::Data::Statement select(session);
|
||||
|
||||
select << "SELECT id, user_id, request, created, finished, result_json, task_type_id FROM " << getTableName()
|
||||
select << "SELECT id, user_id, request, created, finished, result_json, task_type_id, child_pending_task_id, parent_pending_task_id FROM " << getTableName()
|
||||
<< " where " << fieldName << " = ?"
|
||||
, into(mID), into(mUserId), into(mRequest), into(mCreated), into(mFinished), into(mResultJsonString), into(mTaskTypeId);
|
||||
, into(mID), into(mUserId), into(mRequest), into(mCreated), into(mFinished), into(mResultJsonString),
|
||||
into(mTaskTypeId), into(mChildPendingTaskId), into(mParentPendingTaskId);
|
||||
|
||||
return select;
|
||||
}
|
||||
@ -107,7 +108,7 @@ namespace model
|
||||
{
|
||||
Poco::Data::Statement select(session);
|
||||
|
||||
select << "SELECT id, user_id, request, created, finished, result_json, task_type_id FROM " << getTableName();
|
||||
select << "SELECT id, user_id, request, created, finished, result_json, task_type_id, child_pending_task_id, parent_pending_task_id FROM " << getTableName();
|
||||
|
||||
return select;
|
||||
}
|
||||
@ -131,8 +132,8 @@ namespace model
|
||||
Poco::Data::Statement insert(session);
|
||||
lock();
|
||||
insert << "INSERT INTO " << getTableName()
|
||||
<< " (user_id, request, created, task_type_id) VALUES(?,?,?,?)"
|
||||
, use(mUserId), use(mRequest), use(mCreated), use(mTaskTypeId);
|
||||
<< " (user_id, request, created, task_type_id, child_pending_task_id, parent_pending_task_id) VALUES(?,?,?,?,?,?)"
|
||||
, use(mUserId), use(mRequest), use(mCreated), use(mTaskTypeId), use(mChildPendingTaskId), use(mParentPendingTaskId);
|
||||
unlock();
|
||||
return insert;
|
||||
}
|
||||
|
||||
@ -20,8 +20,8 @@ namespace model {
|
||||
TASK_TYPE_HEDERA_ACCOUNT_CREATE = 25,
|
||||
|
||||
};
|
||||
|
||||
typedef Poco::Tuple<int, int, Poco::Data::BLOB, Poco::DateTime, Poco::DateTime, std::string, int> PendingTaskTuple;
|
||||
|
||||
typedef Poco::Tuple<int, int, Poco::Data::BLOB, Poco::DateTime, Poco::DateTime, std::string, int, int, int> PendingTaskTuple;
|
||||
|
||||
class PendingTask : public ModelBase
|
||||
{
|
||||
@ -45,13 +45,18 @@ namespace model {
|
||||
inline std::string getRequestCopy() const { SHARED_LOCK; return std::string((const char*)mRequest.content().data(), mRequest.content().size()); }
|
||||
inline Poco::DateTime getCreated() const { SHARED_LOCK; return mCreated; }
|
||||
inline TaskType getTaskType() const { SHARED_LOCK; return (TaskType)mTaskTypeId; }
|
||||
inline int getChildPendingTaskId() const { SHARED_LOCK; return mChildPendingTaskId; }
|
||||
inline int getParentPendingTaskId() const { SHARED_LOCK; return mParentPendingTaskId; }
|
||||
|
||||
inline void setUserId(int userId) { UNIQUE_LOCK; mUserId = userId; }
|
||||
inline void setTaskType(TaskType type) { UNIQUE_LOCK; mTaskTypeId = type; }
|
||||
void setRequest(const std::string& serializedProto);
|
||||
inline bool isGradidoTransaction() { SHARED_LOCK; return isGradidoTransaction((TaskType)mTaskTypeId); }
|
||||
inline void setTaskType(TaskType type) { UNIQUE_LOCK; mTaskTypeId = type; }
|
||||
inline void setChildPendingTaskId(int childPendingTaskId) {UNIQUE_LOCK; mChildPendingTaskId = childPendingTaskId;}
|
||||
inline void setParentPendingTaskId(int parentPendingTaskId) { UNIQUE_LOCK; mParentPendingTaskId = parentPendingTaskId; }
|
||||
|
||||
inline bool isGradidoTransaction() { SHARED_LOCK; return isGradidoTransaction((TaskType)mTaskTypeId); }
|
||||
static bool isGradidoTransaction(TaskType type);
|
||||
|
||||
static const char* typeToString(TaskType type);
|
||||
protected:
|
||||
Poco::Data::Statement _loadFromDB(Poco::Data::Session session, const std::string& fieldName);
|
||||
@ -65,6 +70,8 @@ namespace model {
|
||||
Poco::DateTime mFinished;
|
||||
std::string mResultJsonString;
|
||||
int mTaskTypeId;
|
||||
int mChildPendingTaskId;
|
||||
int mParentPendingTaskId;
|
||||
|
||||
std::shared_mutex mSharedMutex;
|
||||
};
|
||||
|
||||
@ -46,7 +46,7 @@ enum PageState {
|
||||
bool transaction_finalize_run = false;
|
||||
bool transaction_finalize_result = false;
|
||||
auto transactions_to_sign = pt->getTransactionsUserMustSign(account_user);
|
||||
model::gradido::Transaction* transaction;
|
||||
model::gradido::Transaction* transaction = nullptr;
|
||||
Poco::AutoPtr<model::gradido::TransactionBody> transaction_body;
|
||||
|
||||
if(transactions_to_sign.size() > 0)
|
||||
|
||||
@ -6,14 +6,17 @@
|
||||
<%@ header include="SessionHTTPRequestHandler.h" %>
|
||||
<%!
|
||||
#include "sodium.h"
|
||||
#include "../proto/gradido/GradidoTransaction.pb.h"
|
||||
#include "../proto/gradido/TransactionBody.pb.h"
|
||||
#include "../controller/User.h"
|
||||
#include "../model/gradido/TransactionBase.h"
|
||||
#include "../model/gradido/TransactionCreation.h"
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
%>
|
||||
<%%
|
||||
const char* pageName = "Decode Transaction";
|
||||
proto::gradido::TransactionBody transactionBody;
|
||||
proto::gradido::GradidoTransaction transaction;
|
||||
bool decoded = false;
|
||||
bool adminUser = false;
|
||||
if(mSession && mSession->getNewUser()) {
|
||||
@ -30,6 +33,7 @@
|
||||
size_t resultingBinSize = 0;
|
||||
size_t base64_size = base64.size();
|
||||
bool encodingValid = false;
|
||||
bool encodedTransaction = false;
|
||||
if (!sodium_base642bin(
|
||||
binBuffer, base64_size,
|
||||
base64.data(), base64_size,
|
||||
@ -42,9 +46,10 @@
|
||||
base64.data(), base64_size,
|
||||
nullptr, &resultingBinSize, nullptr,
|
||||
sodium_base64_VARIANT_URLSAFE_NO_PADDING)) {
|
||||
//encodingValid = true;
|
||||
encodingValid = true;
|
||||
//free(binBuffer);
|
||||
addError(new Error("ProcessingTransaction", "it is maybe a Transaction, but I support only TransactionBodys"), false);
|
||||
//addError(new Error("ProcessingTransaction", "it is maybe a Transaction, but I support only TransactionBodys"), false);
|
||||
encodedTransaction = true;
|
||||
}
|
||||
if(false == encodingValid) {
|
||||
free(binBuffer);
|
||||
@ -52,11 +57,24 @@
|
||||
} else {
|
||||
std::string binString((char*)binBuffer, resultingBinSize);
|
||||
free(binBuffer);
|
||||
|
||||
if (!transactionBody.ParseFromString(binString)) {
|
||||
addError(new Error("ProcessingTransaction", "error creating Transaction from binary Message"), false);
|
||||
if(!encodedTransaction) {
|
||||
|
||||
if (!transactionBody.ParseFromString(binString)) {
|
||||
addError(new Error("ProcessingTransaction", "error creating Transaction Body from binary Message"), false);
|
||||
} else {
|
||||
decoded = true;
|
||||
}
|
||||
} else {
|
||||
decoded = true;
|
||||
|
||||
if(!transaction.ParseFromString(binString)) {
|
||||
addError(new Error("ProcessingTransaction", "error creating Transaction from binary Message"), false);
|
||||
} else {
|
||||
if(!transactionBody.ParseFromString(transaction.body_bytes())) {
|
||||
addError(new Error("ProcessingTransaction", "error creating Transaction Body from Transaction body bytes"), false);
|
||||
} else {
|
||||
decoded = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,6 +143,16 @@
|
||||
<% } %>
|
||||
<p>amount: <%= model::gradido::TransactionBase::amountToString(receiver.amount()) %> GDD</p>
|
||||
<p>target date: <%= creationObject.getTargetDateString() %></p>
|
||||
<% } else if(transactionBody.has_group_member_update()) {
|
||||
auto group_member_update = transactionBody.group_member_update();
|
||||
auto paired_transaction_id = group_member_update.paired_transaction_id();
|
||||
std::string paired_transaction_string = std::to_string(paired_transaction_id.seconds()) + "." + std::to_string(paired_transaction_id.nanos());
|
||||
%>
|
||||
<h3>Group Member Update</h3>
|
||||
<p><b>Target group alias: </b><%= group_member_update.target_group() %></p>
|
||||
<p><b>Paired transaction id: </b><%= paired_transaction_string %></p>
|
||||
<p><b>Member Update Type: </b><%= proto::gradido::GroupMemberUpdate_MemberUpdateType_Name(group_member_update.member_update_type()) %></p>
|
||||
<p><b>User Public Key Hex: </b><%= DataTypeConverter::pubkeyToHex((const unsigned char*)group_member_update.user_pubkey().data()) %></p>
|
||||
<% } %>
|
||||
<% } %>
|
||||
</div>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user