Skip to content
34 changes: 15 additions & 19 deletions src/sdk/main/src/Status.cc
Original file line number Diff line number Diff line change
Expand Up @@ -344,19 +344,19 @@ const std::unordered_map<proto::ResponseCodeEnum, Status> gProtobufResponseCodeT
{ proto::ResponseCodeEnum::FQDN_SIZE_TOO_LARGE, Status::FQDN_SIZE_TOO_LARGE },
{ proto::ResponseCodeEnum::INVALID_ENDPOINT, Status::INVALID_ENDPOINT },
{ proto::ResponseCodeEnum::GOSSIP_ENDPOINTS_EXCEEDED_LIMIT, Status::GOSSIP_ENDPOINTS_EXCEEDED_LIMIT },
{ proto::ResponseCodeEnum::SCHEDULE_EXPIRATION_TIME_MUST_BE_HIGHER_THAN_CONSENSUS_TIME,
{ proto::ResponseCodeEnum::SCHEDULE_EXPIRATION_TIME_MUST_BE_HIGHER_THAN_CONSENSUS_TIME,
Status::SCHEDULE_EXPIRATION_TIME_MUST_BE_HIGHER_THAN_CONSENSUS_TIME },
{ proto::ResponseCodeEnum::SCHEDULE_EXPIRATION_TIME_TOO_FAR_IN_FUTURE,
{ proto::ResponseCodeEnum::SCHEDULE_EXPIRATION_TIME_TOO_FAR_IN_FUTURE,
Status::SCHEDULE_EXPIRATION_TIME_TOO_FAR_IN_FUTURE },
{ proto::ResponseCodeEnum::SCHEDULE_EXPIRY_IS_BUSY, Status::SCHEDULE_EXPIRY_IS_BUSY },
{ proto::ResponseCodeEnum::MISSING_EXPIRY_TIME, Status::MISSING_EXPIRY_TIME },
{ proto::ResponseCodeEnum::NO_SCHEDULING_ALLOWED_AFTER_SCHEDULED_RECURSION,
{ proto::ResponseCodeEnum::NO_SCHEDULING_ALLOWED_AFTER_SCHEDULED_RECURSION,
Status::NO_SCHEDULING_ALLOWED_AFTER_SCHEDULED_RECURSION },
{ proto::ResponseCodeEnum::RECURSIVE_SCHEDULING_LIMIT_REACHED, Status::RECURSIVE_SCHEDULING_LIMIT_REACHED },
{ proto::ResponseCodeEnum::WAITING_FOR_LEDGER_ID, Status::WAITING_FOR_LEDGER_ID },
{ proto::ResponseCodeEnum::MAX_ENTRIES_FOR_FEE_EXEMPT_KEY_LIST_EXCEEDED,
{ proto::ResponseCodeEnum::MAX_ENTRIES_FOR_FEE_EXEMPT_KEY_LIST_EXCEEDED,
Status::MAX_ENTRIES_FOR_FEE_EXEMPT_KEY_LIST_EXCEEDED },
{ proto::ResponseCodeEnum::FEE_EXEMPT_KEY_LIST_CONTAINS_DUPLICATED_KEYS,
{ proto::ResponseCodeEnum::FEE_EXEMPT_KEY_LIST_CONTAINS_DUPLICATED_KEYS,
Status::FEE_EXEMPT_KEY_LIST_CONTAINS_DUPLICATED_KEYS },
{ proto::ResponseCodeEnum::INVALID_KEY_IN_FEE_EXEMPT_KEY_LIST, Status::INVALID_KEY_IN_FEE_EXEMPT_KEY_LIST },
{ proto::ResponseCodeEnum::INVALID_FEE_SCHEDULE_KEY, Status::INVALID_FEE_SCHEDULE_KEY },
Expand All @@ -365,12 +365,11 @@ const std::unordered_map<proto::ResponseCodeEnum, Status> gProtobufResponseCodeT
{ proto::ResponseCodeEnum::MAX_CUSTOM_FEE_LIMIT_EXCEEDED, Status::MAX_CUSTOM_FEE_LIMIT_EXCEEDED },
{ proto::ResponseCodeEnum::NO_VALID_MAX_CUSTOM_FEE, Status::NO_VALID_MAX_CUSTOM_FEE },
{ proto::ResponseCodeEnum::INVALID_MAX_CUSTOM_FEES, Status::INVALID_MAX_CUSTOM_FEES },
{ proto::ResponseCodeEnum::DUPLICATE_DENOMINATION_IN_MAX_CUSTOM_FEE_LIST,
{ proto::ResponseCodeEnum::DUPLICATE_DENOMINATION_IN_MAX_CUSTOM_FEE_LIST,
Status::DUPLICATE_DENOMINATION_IN_MAX_CUSTOM_FEE_LIST },
{ proto::ResponseCodeEnum::DUPLICATE_ACCOUNT_ID_IN_MAX_CUSTOM_FEE_LIST,
{ proto::ResponseCodeEnum::DUPLICATE_ACCOUNT_ID_IN_MAX_CUSTOM_FEE_LIST,
Status::DUPLICATE_ACCOUNT_ID_IN_MAX_CUSTOM_FEE_LIST },
{ proto::ResponseCodeEnum::MAX_CUSTOM_FEES_IS_NOT_SUPPORTED, Status::MAX_CUSTOM_FEES_IS_NOT_SUPPORTED }

};

//-----
Expand Down Expand Up @@ -712,19 +711,19 @@ const std::unordered_map<Status, proto::ResponseCodeEnum> gStatusToProtobufRespo
{ Status::FQDN_SIZE_TOO_LARGE, proto::ResponseCodeEnum::FQDN_SIZE_TOO_LARGE },
{ Status::INVALID_ENDPOINT, proto::ResponseCodeEnum::INVALID_ENDPOINT },
{ Status::GOSSIP_ENDPOINTS_EXCEEDED_LIMIT, proto::ResponseCodeEnum::GOSSIP_ENDPOINTS_EXCEEDED_LIMIT },
{ Status::SCHEDULE_EXPIRATION_TIME_MUST_BE_HIGHER_THAN_CONSENSUS_TIME,
{ Status::SCHEDULE_EXPIRATION_TIME_MUST_BE_HIGHER_THAN_CONSENSUS_TIME,
proto::ResponseCodeEnum::SCHEDULE_EXPIRATION_TIME_MUST_BE_HIGHER_THAN_CONSENSUS_TIME },
{ Status::SCHEDULE_EXPIRATION_TIME_TOO_FAR_IN_FUTURE,
{ Status::SCHEDULE_EXPIRATION_TIME_TOO_FAR_IN_FUTURE,
proto::ResponseCodeEnum::SCHEDULE_EXPIRATION_TIME_TOO_FAR_IN_FUTURE },
{ Status::SCHEDULE_EXPIRY_IS_BUSY, proto::ResponseCodeEnum::SCHEDULE_EXPIRY_IS_BUSY },
{ Status::MISSING_EXPIRY_TIME, proto::ResponseCodeEnum::MISSING_EXPIRY_TIME },
{ Status::NO_SCHEDULING_ALLOWED_AFTER_SCHEDULED_RECURSION,
{ Status::NO_SCHEDULING_ALLOWED_AFTER_SCHEDULED_RECURSION,
proto::ResponseCodeEnum::NO_SCHEDULING_ALLOWED_AFTER_SCHEDULED_RECURSION },
{ Status::RECURSIVE_SCHEDULING_LIMIT_REACHED, proto::ResponseCodeEnum::RECURSIVE_SCHEDULING_LIMIT_REACHED },
{ Status::WAITING_FOR_LEDGER_ID, proto::ResponseCodeEnum::WAITING_FOR_LEDGER_ID },
{ Status::MAX_ENTRIES_FOR_FEE_EXEMPT_KEY_LIST_EXCEEDED,
{ Status::MAX_ENTRIES_FOR_FEE_EXEMPT_KEY_LIST_EXCEEDED,
proto::ResponseCodeEnum::MAX_ENTRIES_FOR_FEE_EXEMPT_KEY_LIST_EXCEEDED },
{ Status::FEE_EXEMPT_KEY_LIST_CONTAINS_DUPLICATED_KEYS,
{ Status::FEE_EXEMPT_KEY_LIST_CONTAINS_DUPLICATED_KEYS,
proto::ResponseCodeEnum::FEE_EXEMPT_KEY_LIST_CONTAINS_DUPLICATED_KEYS },
{ Status::INVALID_KEY_IN_FEE_EXEMPT_KEY_LIST, proto::ResponseCodeEnum::INVALID_KEY_IN_FEE_EXEMPT_KEY_LIST },
{ Status::INVALID_FEE_SCHEDULE_KEY, proto::ResponseCodeEnum::INVALID_FEE_SCHEDULE_KEY },
Expand All @@ -733,12 +732,11 @@ const std::unordered_map<Status, proto::ResponseCodeEnum> gStatusToProtobufRespo
{ Status::MAX_CUSTOM_FEE_LIMIT_EXCEEDED, proto::ResponseCodeEnum::MAX_CUSTOM_FEE_LIMIT_EXCEEDED },
{ Status::NO_VALID_MAX_CUSTOM_FEE, proto::ResponseCodeEnum::NO_VALID_MAX_CUSTOM_FEE },
{ Status::INVALID_MAX_CUSTOM_FEES, proto::ResponseCodeEnum::INVALID_MAX_CUSTOM_FEES },
{ Status::DUPLICATE_DENOMINATION_IN_MAX_CUSTOM_FEE_LIST,
{ Status::DUPLICATE_DENOMINATION_IN_MAX_CUSTOM_FEE_LIST,
proto::ResponseCodeEnum::DUPLICATE_DENOMINATION_IN_MAX_CUSTOM_FEE_LIST },
{ Status::DUPLICATE_ACCOUNT_ID_IN_MAX_CUSTOM_FEE_LIST,
{ Status::DUPLICATE_ACCOUNT_ID_IN_MAX_CUSTOM_FEE_LIST,
proto::ResponseCodeEnum::DUPLICATE_ACCOUNT_ID_IN_MAX_CUSTOM_FEE_LIST },
{ Status::MAX_CUSTOM_FEES_IS_NOT_SUPPORTED, proto::ResponseCodeEnum::MAX_CUSTOM_FEES_IS_NOT_SUPPORTED }

};

//-----
Expand Down Expand Up @@ -1062,7 +1060,7 @@ const std::unordered_map<Status, std::string> gStatusToString = {
{ Status::FQDN_SIZE_TOO_LARGE, "FQDN_SIZE_TOO_LARGE" },
{ Status::INVALID_ENDPOINT, "INVALID_ENDPOINT" },
{ Status::GOSSIP_ENDPOINTS_EXCEEDED_LIMIT, "GOSSIP_ENDPOINTS_EXCEEDED_LIMIT" },
{ Status::SCHEDULE_EXPIRATION_TIME_MUST_BE_HIGHER_THAN_CONSENSUS_TIME,
{ Status::SCHEDULE_EXPIRATION_TIME_MUST_BE_HIGHER_THAN_CONSENSUS_TIME,
"SCHEDULE_EXPIRATION_TIME_MUST_BE_HIGHER_THAN_CONSENSUS_TIME" },
{ Status::SCHEDULE_EXPIRATION_TIME_TOO_FAR_IN_FUTURE, "SCHEDULE_EXPIRATION_TIME_TOO_FAR_IN_FUTURE" },
{ Status::SCHEDULE_EXPIRY_IS_BUSY, "SCHEDULE_EXPIRY_IS_BUSY" },
Expand All @@ -1082,8 +1080,6 @@ const std::unordered_map<Status, std::string> gStatusToString = {
{ Status::DUPLICATE_DENOMINATION_IN_MAX_CUSTOM_FEE_LIST, "DUPLICATE_DENOMINATION_IN_MAX_CUSTOM_FEE_LIST" },
{ Status::DUPLICATE_ACCOUNT_ID_IN_MAX_CUSTOM_FEE_LIST, "DUPLICATE_ACCOUNT_ID_IN_MAX_CUSTOM_FEE_LIST" },
{ Status::MAX_CUSTOM_FEES_IS_NOT_SUPPORTED, "MAX_CUSTOM_FEES_IS_NOT_SUPPORTED" }


};

} // namespace Hiero
9 changes: 9 additions & 0 deletions src/tck/include/account/AccountService.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ struct ApproveAllowanceParams;
struct CreateAccountParams;
struct DeleteAccountParams;
struct DeleteAllowanceParams;
struct TransferCryptoParams;
struct UpdateAccountParams;

/**
Expand Down Expand Up @@ -47,6 +48,14 @@ nlohmann::json createAccount(const CreateAccountParams& params);
*/
nlohmann::json deleteAccount(const DeleteAccountParams& params);

/**
* Transfer crypto between accounts.
*
* @param params The parameters to use to transfer crypto.
* @return A JSON response containing the status of the transfer.
*/
nlohmann::json transferCrypto(const TransferCryptoParams& params);

/**
* Update an account.
*
Expand Down
57 changes: 57 additions & 0 deletions src/tck/include/account/params/TransferCryptoParams.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// SPDX-License-Identifier: Apache-2.0
#ifndef HIERO_TCK_CPP_TRANSFER_CRYPTO_PARAMS_H_
#define HIERO_TCK_CPP_TRANSFER_CRYPTO_PARAMS_H_

#include "account/params/transfer/TransferParams.h"
#include "common/CommonTransactionParams.h"
#include "json/JsonUtils.h"

#include <optional>
#include <vector>

namespace Hiero::TCK::AccountService
{
/**
* Struct to hold the arguments for a `transferCrypto` JSON-RPC method call.
*/
struct TransferCryptoParams
{
/**
* The desired key for the account.
*/
std::optional<std::vector<TransferParams>> mTransfers;

/**
* Any parameters common to all transaction types.
*/
std::optional<CommonTransactionParams> mCommonTxParams;
};

} // namespace Hiero::TCK::AccountService

namespace nlohmann
{
/**
* JSON serializer template specialization required to convert TransferCryptoParams arguments properly.
*/
template<>
struct [[maybe_unused]] adl_serializer<Hiero::TCK::AccountService::TransferCryptoParams>
{
/**
* Convert a JSON object to a TransferCryptoParams.
*
* @param jsonFrom The JSON object with which to fill the TransferCryptoParams.
* @param params The TransferCryptoParams to fill with the JSON object.
*/
static void from_json(const json& jsonFrom, Hiero::TCK::AccountService::TransferCryptoParams& params)
{
params.mTransfers = Hiero::TCK::getOptionalJsonParameter<std::vector<Hiero::TCK::AccountService::TransferParams>>(
jsonFrom, "transfers");
params.mCommonTxParams =
Hiero::TCK::getOptionalJsonParameter<Hiero::TCK::CommonTransactionParams>(jsonFrom, "commonTransactionParams");
}
};

} // namespace nlohmann

#endif // HIERO_TCK_CPP_TRANSFER_CRYPTO_PARAMS_H_
69 changes: 69 additions & 0 deletions src/tck/include/account/params/transfer/HbarTransferParams.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
// SPDX-License-Identifier: Apache-2.0
#ifndef HIERO_TCK_CPP_HBAR_TRANSFER_PARAMS_H_
#define HIERO_TCK_CPP_HBAR_TRANSFER_PARAMS_H_

#include "json/JsonErrorType.h"
#include "json/JsonRpcException.h"
#include "json/JsonUtils.h"

#include <optional>
#include <string>
#include <vector>

namespace Hiero::TCK::AccountService
{
/**
* Struct that contains the parameters of an Hbar transfer.
*/
struct HbarTransferParams
{
/**
* REQUIRED if mEvmAddress is not provided. The ID of the account associated with the transfer.
*/
std::optional<std::string> mAccountId;

/**
* REQUIRED if mAccountId is not provided. The ID of the account associated with the transfer.
*/
std::optional<std::string> mEvmAddress;

/**
* The amount of Hbar transferred (in tinybars).
*/
std::string mAmount;
};

} // namespace Hiero::TCK::AccountService

namespace nlohmann
{
/**
* JSON serializer template specialization required to convert HbarTransferParams arguments properly.
*/
template<>
struct [[maybe_unused]] adl_serializer<Hiero::TCK::AccountService::HbarTransferParams>
{
/**
* Convert a JSON object to a HbarTransferParams.
*
* @param jsonFrom The JSON object with which to fill the HbarTransferParams.
* @param params The HbarTransferParams to fill with the JSON object.
*/
static void from_json(const json& jsonFrom, Hiero::TCK::AccountService::HbarTransferParams& params)
{
params.mAccountId = Hiero::TCK::getOptionalJsonParameter<std::string>(jsonFrom, "accountId");
params.mEvmAddress = Hiero::TCK::getOptionalJsonParameter<std::string>(jsonFrom, "evmAddress");
params.mAmount = Hiero::TCK::getRequiredJsonParameter<std::string>(jsonFrom, "amount");

if ((params.mAccountId.has_value() && params.mEvmAddress.has_value()) ||
(!params.mAccountId.has_value() && !params.mEvmAddress.has_value()))
{
throw Hiero::TCK::JsonRpcException(Hiero::TCK::JsonErrorType::INVALID_PARAMS,
"invalid parameters: only one of accountId or evmAddress SHALL be provided.");
}
}
};

} // namespace nlohmann

#endif // HIERO_TCK_CPP_HBAR_TRANSFER_PARAMS_H_
65 changes: 65 additions & 0 deletions src/tck/include/account/params/transfer/NftTransferParams.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
// SPDX-License-Identifier: Apache-2.0
#ifndef HIERO_TCK_CPP_NFT_TRANSFER_PARAMS_H_
#define HIERO_TCK_CPP_NFT_TRANSFER_PARAMS_H_

#include "json/JsonUtils.h"

#include <optional>
#include <string>

namespace Hiero::TCK::AccountService
{
/**
* Struct that contains the parameters of an NFT transfer.
*/
struct NftTransferParams
{
/**
* The ID of the account sending the NFT.
*/
std::string mSenderAccountId;

/**
* The ID of the account receiving the NFT.
*/
std::string mReceiverAccountId;

/**
* The ID of the token associated with the transfer.
*/
std::string mTokenId;

/**
* The serial number of the NFT being transferred.
*/
std::string mSerialNumber;
};

} // namespace Hiero::TCK::AccountService

namespace nlohmann
{
/**
* JSON serializer template specialization required to convert NftTransferParams arguments properly.
*/
template<>
struct [[maybe_unused]] adl_serializer<Hiero::TCK::AccountService::NftTransferParams>
{
/**
* Convert a JSON object to a NftTransferParams.
*
* @param jsonFrom The JSON object with which to fill the NftTransferParams.
* @param params The NftTransferParams to fill with the JSON object.
*/
static void from_json(const json& jsonFrom, Hiero::TCK::AccountService::NftTransferParams& params)
{
params.mSenderAccountId = Hiero::TCK::getRequiredJsonParameter<std::string>(jsonFrom, "senderAccountId");
params.mReceiverAccountId = Hiero::TCK::getRequiredJsonParameter<std::string>(jsonFrom, "receiverAccountId");
params.mTokenId = Hiero::TCK::getRequiredJsonParameter<std::string>(jsonFrom, "tokenId");
params.mSerialNumber = Hiero::TCK::getRequiredJsonParameter<std::string>(jsonFrom, "serialNumber");
}
};

} // namespace nlohmann

#endif // HIERO_TCK_CPP_NFT_TRANSFER_PARAMS_H_
65 changes: 65 additions & 0 deletions src/tck/include/account/params/transfer/TokenTransferParams.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
// SPDX-License-Identifier: Apache-2.0
#ifndef HIERO_TCK_CPP_TOKEN_TRANSFER_PARAMS_H_
#define HIERO_TCK_CPP_TOKEN_TRANSFER_PARAMS_H_

#include "json/JsonUtils.h"

#include <optional>
#include <string>

namespace Hiero::TCK::AccountService
{
/**
* Struct that contains the parameters of a token transfer.
*/
struct TokenTransferParams
{
/**
* The ID of the account associated with the transfer.
*/
std::string mAccountId;

/**
* The ID of the token associated with the transfer.
*/
std::string mTokenId;

/**
* The amount of token to be transferred.
*/
std::string mAmount;

/**
* The decimals of the token to be transferred.
*/
std::optional<uint32_t> mDecimals;
};

} // namespace Hiero::TCK::AccountService

namespace nlohmann
{
/**
* JSON serializer template specialization required to convert TokenTransferParams arguments properly.
*/
template<>
struct [[maybe_unused]] adl_serializer<Hiero::TCK::AccountService::TokenTransferParams>
{
/**
* Convert a JSON object to a TokenTransferParams.
*
* @param jsonFrom The JSON object with which to fill the TokenTransferParams.
* @param params The TokenTransferParams to fill with the JSON object.
*/
static void from_json(const json& jsonFrom, Hiero::TCK::AccountService::TokenTransferParams& params)
{
params.mAccountId = Hiero::TCK::getRequiredJsonParameter<std::string>(jsonFrom, "accountId");
params.mTokenId = Hiero::TCK::getRequiredJsonParameter<std::string>(jsonFrom, "tokenId");
params.mAmount = Hiero::TCK::getRequiredJsonParameter<std::string>(jsonFrom, "amount");
params.mDecimals = Hiero::TCK::getOptionalJsonParameter<uint32_t>(jsonFrom, "decimals");
}
};

} // namespace nlohmann

#endif // HIERO_TCK_CPP_TOKEN_TRANSFER_PARAMS_H_
Loading
Loading