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

feat(tokenDissociateTransaction): Implement JSON-RPC method endpoint for TokenDissociateTransaction #839

9 changes: 9 additions & 0 deletions src/tck/include/token/TokenService.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ namespace Hiero::TCK::TokenService
struct AssociateTokenParams;
struct CreateTokenParams;
struct DeleteTokenParams;
struct DissociateTokenParams;
struct PauseTokenParams;
struct UnpauseTokenParams;
struct UpdateTokenFeeScheduleParams;
Expand Down Expand Up @@ -41,6 +42,14 @@ nlohmann::json createToken(const CreateTokenParams& params);
*/
nlohmann::json deleteToken(const DeleteTokenParams& params);

/**
* Dissociate an account from tokens.
*
* @param params The parameters to use to dissociate the account.
* @return A JSON response containing the status of the account dissociation.
*/
nlohmann::json dissociateToken(const DissociateTokenParams& params);

/**
* Pause a token.
*
Expand Down
2 changes: 1 addition & 1 deletion src/tck/include/token/params/DeleteTokenParams.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ struct DeleteTokenParams
std::optional<CommonTransactionParams> mCommonTxParams;
};

} // namespace Hedera::TCK::TokenService
} // namespace Hiero::TCK::TokenService

namespace nlohmann
{
Expand Down
62 changes: 62 additions & 0 deletions src/tck/include/token/params/DissociateTokenParams.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// SPDX-License-Identifier: Apache-2.0
#ifndef HIERO_TCK_CPP_DISSOCIATE_TOKEN_PARAMS_H_
#define HIERO_TCK_CPP_DISSOCIATE_TOKEN_PARAMS_H_

#include "common/CommonTransactionParams.h"
#include "json/JsonUtils.h"

#include <nlohmann/json.hpp>
#include <optional>
#include <string>

namespace Hiero::TCK::TokenService
{
/**
* Struct to hold the arguments for a `dissociateToken` JSON-RPC method call.
*/
struct DissociateTokenParams
{
/**
* The ID of the account from which to dissociate the token.
*/
std::optional<std::string> mAccountId;

/**
* The IDs of the tokens to dissociate.
*/
std::optional<std::vector<std::string>> mTokenIds;

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

} // namespace Hiero::TCK::TokenService

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

} // namespace nlohmann

#endif // HIERO_TCK_CPP_DISSOCIATE_TOKEN_PARAMS_H_
3 changes: 3 additions & 0 deletions src/tck/src/TckServer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "token/params/AssociateTokenParams.h"
#include "token/params/CreateTokenParams.h"
#include "token/params/DeleteTokenParams.h"
#include "token/params/DissociateTokenParams.h"
#include "token/params/PauseTokenParams.h"
#include "token/params/UnpauseTokenParams.h"
#include "token/params/UpdateTokenFeeScheduleParams.h"
Expand Down Expand Up @@ -359,6 +360,8 @@ template TckServer::MethodHandle TckServer::getHandle<TokenService::CreateTokenP
nlohmann::json (*method)(const TokenService::CreateTokenParams&));
template TckServer::MethodHandle TckServer::getHandle<TokenService::DeleteTokenParams>(
nlohmann::json (*method)(const TokenService::DeleteTokenParams&));
template TckServer::MethodHandle TckServer::getHandle<TokenService::DissociateTokenParams>(
nlohmann::json (*method)(const TokenService::DissociateTokenParams&));
template TckServer::MethodHandle TckServer::getHandle<TokenService::PauseTokenParams>(
nlohmann::json (*method)(const TokenService::PauseTokenParams&));
template TckServer::MethodHandle TckServer::getHandle<TokenService::UnpauseTokenParams>(
Expand Down
1 change: 1 addition & 0 deletions src/tck/src/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ int main(int argc, char** argv)
tckServer.add("associateToken", tckServer.getHandle(&TokenService::associateToken));
tckServer.add("createToken", tckServer.getHandle(&TokenService::createToken));
tckServer.add("deleteToken", tckServer.getHandle(&TokenService::deleteToken));
tckServer.add("dissociateToken", tckServer.getHandle(&TokenService::dissociateToken));
tckServer.add("pauseToken", tckServer.getHandle(&TokenService::pauseToken));
tckServer.add("unpauseToken", tckServer.getHandle(&TokenService::unpauseToken));
tckServer.add("updateTokenFeeSchedule", tckServer.getHandle(&TokenService::updateTokenFeeSchedule));
Expand Down
36 changes: 36 additions & 0 deletions src/tck/src/token/TokenService.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "token/params/AssociateTokenParams.h"
#include "token/params/CreateTokenParams.h"
#include "token/params/DeleteTokenParams.h"
#include "token/params/DissociateTokenParams.h"
#include "token/params/PauseTokenParams.h"
#include "token/params/UnpauseTokenParams.h"
#include "token/params/UpdateTokenFeeScheduleParams.h"
Expand All @@ -17,6 +18,7 @@
#include <TokenAssociateTransaction.h>
#include <TokenCreateTransaction.h>
#include <TokenDeleteTransaction.h>
#include <TokenDissociateTransaction.h>
#include <TokenFeeScheduleUpdateTransaction.h>
#include <TokenId.h>
#include <TokenPauseTransaction.h>
Expand Down Expand Up @@ -245,6 +247,40 @@ nlohmann::json deleteToken(const DeleteTokenParams& params)
};
}

//-----
nlohmann::json dissociateToken(const DissociateTokenParams& params)
{
TokenDissociateTransaction tokenDissociateTransaction;
tokenDissociateTransaction.setGrpcDeadline(std::chrono::seconds(SdkClient::DEFAULT_TCK_REQUEST_TIMEOUT));

if (params.mAccountId.has_value())
{
tokenDissociateTransaction.setAccountId(AccountId::fromString(params.mAccountId.value()));
}

if (params.mTokenIds.has_value())
{
std::vector<TokenId> tokenIds;
for (const std::string& tokenId : params.mTokenIds.value())
{
tokenIds.push_back(TokenId::fromString(tokenId));
}

tokenDissociateTransaction.setTokenIds(tokenIds);
}

if (params.mCommonTxParams.has_value())
{
params.mCommonTxParams->fillOutTransaction(tokenDissociateTransaction, SdkClient::getClient());
}

return {
{"status",
gStatusToString.at(
tokenDissociateTransaction.execute(SdkClient::getClient()).getReceipt(SdkClient::getClient()).mStatus)}
};
}

//-----
nlohmann::json pauseToken(const PauseTokenParams& params)
{
Expand Down
Loading