Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor data protocol #10

Merged
merged 4 commits into from
Aug 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 2 additions & 14 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ IF(WIN32)
find_package(openssl)
if(openssl_FOUND)
include_directories(${OPENSSL_INCLUDE_DIR})
add_compile_definitions(USE_HTTPS)
endif()
ELSE()
find_package(Sodium)
Expand All @@ -59,10 +60,6 @@ FILE(GLOB INTERACTION "include/gradido_blockchain/interaction/*.h" "src/interact
FILE(GLOB LIB_SRC "include/gradido_blockchain/lib/*.h" "src/lib/*.cpp")
FILE(GLOB MAIN "src/*.cpp" "src/*.c" "include/gradido_blockchain/*.h")
FILE(GLOB MEMORY "include/gradido_blockchain/memory/*.h" "src/memory/*.cpp")
FILE(GLOB MODEL "include/gradido_blockchain/model/*.h" "src/model/*.cpp")
#FILE(GLOB MODEL_PROTOBUF_WRAPPER "include/gradido_blockchain/model/protobufWrapper/*.h" "src/model/protobufWrapper/*.cpp")
FILE(GLOB MODEL_PROTOPUF "include/gradido_blockchain/model/protopuf/*.h" "src/model/protopuf/*.cpp")
FILE(GLOB MODEL_IOTA "include/gradido_blockchain/model/iota/*.h" "src/model/iota/*.cpp")
FILE(GLOB PROTO_GRADIDO "build/proto/gradido/*.cc" "build/proto/gradido/*.h")
FILE(GLOB TINF "dependencies/tinf/src/*.c" "dependencies/tinf/src/*.h")
FIlE(GLOB THREADING "include/gradido_blockchain/threading/*.h" "src/threading/*.cpp")
Expand Down Expand Up @@ -93,15 +90,12 @@ SET(GRADIDO_BLOCKCHAIN_LOCAL_SRCS
${BLOCKCHAIN}
${CRYPTO}
${DATA} ${DATA_IOTA}
#${HTTP}
${HTTP}
${INTERACTION}
${LIB_SRC}
${MAIN}
${MEMORY}
#${MODEL} ${MODEL_PROTOBUF_WRAPPER}
${MODEL_IOTA}
#${MODEL_PROTOPUF}
#${PROTO_GRADIDO}
${TINF}
${THREADING}
${INTERACTION_CALCULATE_ACCOUNT_BALANCE}
Expand All @@ -121,12 +115,6 @@ if(MSVC)
source_group("interaction" FILES ${INTERACTION})
source_group("lib" FILES ${LIB_SRC})
source_group("memory" FILES ${MEMORY})
source_group("model\\iota" FILES ${MODEL_IOTA})
source_group("model\\protocol\\3_3" FILES ${MODEL_PROTOCOL_3_3})
source_group("model\\protobufWrapper" FILES ${MODEL_PROTOBUF_WRAPPER})
#source_group("model\\protopuf" FILES ${MODEL_PROTOPUF})
source_group("model" FILES ${MODEL})
#source_group("proto\\gradido" FILES ${PROTO_GRADIDO})
source_group("tinf" FILES ${TINF})
source_group("threading" FILES ${THREADING})
source_group("interaction\\calculateAccountBalance" FILES ${INTERACTION_CALCULATE_ACCOUNT_BALANCE})
Expand Down
2 changes: 2 additions & 0 deletions include/gradido_blockchain/GradidoTransactionBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define __GRADIDO_BLOCKCHAIN_GRADIDO_TRANSACTION_BUILDER_H

#include "TransactionBodyBuilder.h"
#include "gradido_blockchain/data/GradidoTransaction.h"
#include "gradido_blockchain/crypto/KeyPairEd25519.h"

namespace gradido {
Expand All @@ -14,6 +15,7 @@ namespace gradido {
void reset();
std::unique_ptr<data::GradidoTransaction> build();
GradidoTransactionBuilder& setTransactionBody(std::unique_ptr<data::TransactionBody> body);
GradidoTransactionBuilder& setTransactionBody(memory::ConstBlockPtr bodyBytes);
GradidoTransactionBuilder& addSignaturePair(memory::ConstBlockPtr publicKey, memory::ConstBlockPtr signature);
GradidoTransactionBuilder& sign(std::shared_ptr<KeyPairEd25519> keyPair);
GradidoTransactionBuilder& setParentMessageId(memory::ConstBlockPtr paringMessageId);
Expand Down
174 changes: 129 additions & 45 deletions include/gradido_blockchain/TransactionBodyBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
#define __GRADIDO_BLOCKCHAIN_TRANSACTION_BODY_BUILDER_H

#include "gradido_blockchain/export.h"
#include "gradido_blockchain/data/Protocol.h"
#include "gradido_blockchain/data/TransactionBody.h"

namespace mem = memory;

namespace gradido {
class GRADIDOBLOCKCHAIN_EXPORT TransactionBodyBuilder
Expand All @@ -13,68 +15,50 @@ namespace gradido {
void reset();
std::unique_ptr<data::TransactionBody> build();

TransactionBodyBuilder& setDeferredTransfer(
memory::ConstBlockPtr senderPubkey,
const std::string& amountGddCent,
const std::string& communityId,
memory::ConstBlockPtr recipientPubkey,
Timepoint timeout
);
TransactionBodyBuilder& setCommunityFriendsUpdate(bool colorFusion);
inline TransactionBodyBuilder& setDeferredTransfer(data::GradidoTransfer transactionTransfer, Timepoint timeout);
TransactionBodyBuilder& setDeferredTransfer(std::unique_ptr<data::GradidoDeferredTransfer> deferredTransfer);

TransactionBodyBuilder& setRegisterAddress(
memory::ConstBlockPtr userPubkey,
inline TransactionBodyBuilder& setCommunityFriendsUpdate(bool colorFusion);
TransactionBodyBuilder& setCommunityFriendsUpdate(std::unique_ptr<data::CommunityFriendsUpdate> communityFriendsUpdate);

inline TransactionBodyBuilder& setRegisterAddress(
mem::ConstBlockPtr userPubkey,
data::AddressType type,
memory::ConstBlockPtr nameHash = nullptr,
memory::ConstBlockPtr accountPubkey = nullptr
mem::ConstBlockPtr nameHash = nullptr,
mem::ConstBlockPtr accountPubkey = nullptr
);
TransactionBodyBuilder& setRegisterAddress(std::unique_ptr<data::RegisterAddress> registerAddress);

TransactionBodyBuilder& setTransactionCreation(
memory::ConstBlockPtr recipientPubkey,
const std::string& amountGddCent,
Timepoint targetDate
);
inline TransactionBodyBuilder& setTransactionCreation(data::TransferAmount recipient, Timepoint targetDate);
TransactionBodyBuilder& setTransactionCreation(std::unique_ptr<data::GradidoCreation> creation);

TransactionBodyBuilder& setTransactionTransfer(
memory::ConstBlockPtr senderPubkey,
const std::string& amountGddCent,
const std::string& communityId,
memory::ConstBlockPtr recipientPubkey
);
inline TransactionBodyBuilder& setTransactionTransfer(data::TransferAmount sender, mem::ConstBlockPtr recipientPubkey);
TransactionBodyBuilder& setTransactionTransfer(std::unique_ptr<data::GradidoTransfer> transfer);

TransactionBodyBuilder& setCommunityRoot(
memory::ConstBlockPtr pubkey,
memory::ConstBlockPtr gmwPubkey,
memory::ConstBlockPtr aufPubkey
inline TransactionBodyBuilder& setCommunityRoot(
mem::ConstBlockPtr pubkey,
mem::ConstBlockPtr gmwPubkey,
mem::ConstBlockPtr aufPubkey
);
TransactionBodyBuilder& setCommunityRoot(std::unique_ptr<data::CommunityRoot> communityRoot);

//! if not called, time from calling TransactionBodyBuilder Constructor will be taken
inline TransactionBodyBuilder& setCreatedAt(Timepoint createdAt) {
mBody->createdAt = data::Timestamp(createdAt);
return *this;
}

inline TransactionBodyBuilder& setMemo(std::string& memo) {
mBody->memo = memo;
return *this;
}
//! \param createAt timestamp when transaction where created
inline TransactionBodyBuilder& setCreatedAt(Timepoint createdAt);
inline TransactionBodyBuilder& setMemo(std::string_view memo);
inline TransactionBodyBuilder& setVersionNumber(std::string_view versionNumber);

//! LOCAL is default value, if this function isn't called
inline TransactionBodyBuilder& setCrossGroupType(data::CrossGroupType type) {
mBody->type = type;
return *this;
}
inline TransactionBodyBuilder& setCrossGroupType(data::CrossGroupType type);

//! only needed for cross group transactions
inline TransactionBodyBuilder& setOtherGroup(std::string& otherGroup) {
mBody->otherGroup = otherGroup;
return *this;
}
inline TransactionBodyBuilder& setOtherGroup(std::string_view otherGroup);
protected:
std::unique_ptr<data::TransactionBody> mBody;
bool mSpecificTransactionChoosen;
};


// ******************* Exceptions ****************************
class TransactionBodyBuilderException : public GradidoBlockchainException
{
Expand All @@ -86,6 +70,106 @@ namespace gradido {
return what();
}
};

// ******************* inline declared functions *******************
TransactionBodyBuilder& TransactionBodyBuilder::setDeferredTransfer(
data::GradidoTransfer transactionTransfer,
Timepoint timeout
)
{
return setDeferredTransfer(
std::make_unique<data::GradidoDeferredTransfer>(
transactionTransfer,
timeout
)
);
}
TransactionBodyBuilder& TransactionBodyBuilder::setCommunityFriendsUpdate(bool colorFusion)
{
return setCommunityFriendsUpdate(
std::make_unique<data::CommunityFriendsUpdate>(
colorFusion
)
);
}

TransactionBodyBuilder& TransactionBodyBuilder::setRegisterAddress(
mem::ConstBlockPtr userPubkey,
data::AddressType type,
mem::ConstBlockPtr nameHash/* = nullptr*/,
mem::ConstBlockPtr accountPubkey/* = nullptr*/
)
{
return setRegisterAddress(
std::make_unique<data::RegisterAddress>(
type,
1,
userPubkey,
nameHash,
accountPubkey
)
);
};
TransactionBodyBuilder& TransactionBodyBuilder::setTransactionCreation(data::TransferAmount recipient, Timepoint targetDate)
{
return setTransactionCreation(
std::make_unique<data::GradidoCreation>(
recipient,
targetDate
)
);
}

TransactionBodyBuilder& TransactionBodyBuilder::setTransactionTransfer(
data::TransferAmount sender,
mem::ConstBlockPtr recipientPubkey
)
{
return setTransactionTransfer(
std::make_unique<data::GradidoTransfer>(
sender,
recipientPubkey
)
);
}
TransactionBodyBuilder& TransactionBodyBuilder::setCommunityRoot(
mem::ConstBlockPtr pubkey,
mem::ConstBlockPtr gmwPubkey,
mem::ConstBlockPtr aufPubkey
) {
return setCommunityRoot(
std::make_unique<data::CommunityRoot>(
pubkey,
gmwPubkey,
aufPubkey
)
);
}

TransactionBodyBuilder& TransactionBodyBuilder::setCreatedAt(Timepoint createdAt) {
mBody->mCreatedAt = data::Timestamp(createdAt);
return *this;
}
TransactionBodyBuilder& TransactionBodyBuilder::setMemo(std::string_view memo) {
mBody->mMemo = memo;
return *this;
}

TransactionBodyBuilder& TransactionBodyBuilder::setVersionNumber(std::string_view versionNumber) {
mBody->mVersionNumber = versionNumber;
return *this;
}

TransactionBodyBuilder& TransactionBodyBuilder::setCrossGroupType(data::CrossGroupType type) {
mBody->mType = type;
return *this;
}

TransactionBodyBuilder& TransactionBodyBuilder::setOtherGroup(std::string_view otherGroup) {
mBody->mOtherGroup = otherGroup;
return *this;
}

}

#endif //__GRADIDO_BLOCKCHAIN_TRANSACTION_BODY_BUILDER_H
1 change: 0 additions & 1 deletion include/gradido_blockchain/blockchain/InMemory.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

#include "Abstract.h"
#include "FilterResult.h"
#include "../data/Protocol.h"
#include "gradido_blockchain/export.h"
#include "gradido_blockchain/crypto/SignatureOctet.h"
#include "gradido_blockchain/memory/BlockKey.h"
Expand Down
4 changes: 2 additions & 2 deletions include/gradido_blockchain/blockchain/TransactionEntry.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#ifndef __GRADIDO_BLOCKCHAIN_BLOCKCHAIN_TRANSACTION_ENTRY_H
#define __GRADIDO_BLOCKCHAIN_BLOCKCHAIN_TRANSACTION_ENTRY_H

#include "gradido_blockchain/data/Protocol.h"
#include "gradido_blockchain/data/ConfirmedTransaction.h"
#include "gradido_blockchain/data/TransactionType.h"

#include "date/date.h"
Expand Down Expand Up @@ -52,7 +52,7 @@ namespace gradido {
inline data::TransactionType getTransactionType() const { return mTransactionType; }
inline std::string_view getCoinCommunityId() const { return mCoinCommunityId; }
static std::string getCoinCommunityId(const data::TransactionBody& body);
inline data::ConstTransactionBodyPtr getTransactionBody() const { return getConfirmedTransaction()->gradidoTransaction->getTransactionBody(); }
inline data::ConstTransactionBodyPtr getTransactionBody() const { return getConfirmedTransaction()->getGradidoTransaction()->getTransactionBody(); }

inline bool isTransfer() const { return mTransactionType == data::TransactionType::TRANSFER; }
inline bool isCreation() const { return mTransactionType == data::TransactionType::CREATION; }
Expand Down
22 changes: 22 additions & 0 deletions include/gradido_blockchain/data/CommunityFriendsUpdate.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#ifndef __GRADIDO_BLOCKCHAIN_DATA_COMMUNITY_FRIENDS_UPDATE_H
#define __GRADIDO_BLOCKCHAIN_DATA_COMMUNITY_FRIENDS_UPDATE_H

#include "gradido_blockchain/export.h"

namespace gradido {
namespace data {
class GRADIDOBLOCKCHAIN_EXPORT CommunityFriendsUpdate
{
public:
CommunityFriendsUpdate(bool colorFusion) : mColorFusion(colorFusion) {}

inline bool operator==(const CommunityFriendsUpdate& other) const {
return mColorFusion == other.mColorFusion;
}
inline bool getColorFusion() const { return mColorFusion; }
private:
bool mColorFusion;
};
}
}
#endif //__GRADIDO_BLOCKCHAIN_DATA_COMMUNITY_FRIENDS_UPDATE_H
34 changes: 34 additions & 0 deletions include/gradido_blockchain/data/CommunityRoot.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#ifndef __GRADIDO_BLOCKCHAIN_DATA_COMMUNITY_ROOT_H
#define __GRADIDO_BLOCKCHAIN_DATA_COMMUNITY_ROOT_H

#include "gradido_blockchain/export.h"
#include "gradido_blockchain/memory/Block.h"

namespace gradido {
namespace data {
class GRADIDOBLOCKCHAIN_EXPORT CommunityRoot
{
public:
// throw InvalidSizeException
CommunityRoot(
memory::ConstBlockPtr pubkeyPtr,
memory::ConstBlockPtr gmwPubkeyPtr,
memory::ConstBlockPtr aufPubkeyPtr
) : mPubkey(pubkeyPtr), mGmwPubkey(gmwPubkeyPtr), mAufPubkey(aufPubkeyPtr) {};

inline std::vector<memory::ConstBlockPtr> getInvolvedAddresses() const { return { mPubkey, mGmwPubkey, mAufPubkey }; }
bool isInvolved(memory::ConstBlockPtr publicKey) const;

inline memory::ConstBlockPtr getPubkey() const { return mPubkey; }
inline memory::ConstBlockPtr getGmwPubkey() const { return mGmwPubkey; }
inline memory::ConstBlockPtr getAufPubkey() const { return mAufPubkey; }

protected:
memory::ConstBlockPtr mPubkey;
memory::ConstBlockPtr mGmwPubkey;
memory::ConstBlockPtr mAufPubkey;
};
}
}

#endif //__GRADIDO_BLOCKCHAIN_DATA_COMMUNITY_ROOT_H
Loading
Loading