You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This issue is a good fit for contributors who are already familiar with the Hiero C++ SDK and feel comfortable navigating the codebase.
Intermediate Issues often involve:
Exploring existing implementations
Understanding how different components work together
Making thoughtful changes that follow established patterns
The goal is to support deeper problem-solving while keeping the task clear, focused, and enjoyable to work on.
Important
🧭 About Intermediate Issues
Intermediate Issues are a great next step for contributors who enjoy
digging into the codebase and reasoning about how things work.
These issues often:
Involve multiple related files or components
Encourage investigation and understanding of existing behavior
Leave room for thoughtful implementation choices
Stay focused on a clearly defined goal
Other kinds of contributions — from beginner-friendly tasks to large
system-level changes — are just as valuable and use different labels.
🐞 Problem Description
The TCK (Test Compatibility Kit) server in this repository exposes JSON-RPC endpoints that the hiero-sdk-tck test suite calls to verify SDK behavior across all Hiero SDKs.
The FileService currently implements createFile, deleteFile, and updateFile, but is missing the appendFile endpoint. The TCK test file test-file-append-transaction.ts calls this method and cannot run against this C++ SDK until it is implemented.
The full TCK specification for this endpoint — including all input/output parameters, test cases, and example JSON-RPC requests — is published here:
The SDK already has a fully implemented FileAppendTransaction class in src/sdk/main/include/FileAppendTransaction.h. This issue is about wiring up that existing class to the TCK server.
What makes this interesting: Unlike the other FileService transaction endpoints, FileAppendTransaction extends ChunkedTransaction rather than Transaction. This introduces two additional parameters (maxChunks and chunkSize) that require using methods inherited from ChunkedTransaction.
💡 Expected Outcome
The TCK server should respond to a new appendFile JSON-RPC method. The full input/output parameter specification is defined in the TCK docs. In summary:
Output:{ "status": "..." } — the status string from the TransactionReceipt
The implementation should:
Follow the existing patterns in FileService.cc for transaction endpoints
Use FileAppendTransaction from the SDK
Support maxChunks and chunkSize via ChunkedTransaction::setMaxChunks(unsigned int) and ChunkedTransaction::setChunkSize(unsigned int)
Accept commonTransactionParams using the existing CommonTransactionParams::fillOutTransaction template
Not modify any existing endpoints or SDK behavior
🧠 Implementation Notes
Architecture
Each TCK endpoint has four parts:
Params struct — a header in src/tck/include/file/params/ that defines the JSON-RPC parameters and their deserialization
Service header — a function declaration in src/tck/include/file/FileService.h
Service implementation — the function body in src/tck/src/file/FileService.cc
Server registration — wiring in src/tck/src/TckServer.cc (include, addMethod call, template instantiation)
Reference implementations
What you're building
Closest existing reference
AppendFileParams struct
src/tck/include/file/params/UpdateFileParams.h (similar transaction params pattern, but replace file-specific fields with contents, maxChunks, chunkSize)
appendFile function
updateFile in src/tck/src/file/FileService.cc (line 105) — same pattern, but uses FileAppendTransaction and adds chunking parameters
ChunkedTransaction methods
src/sdk/main/include/ChunkedTransaction.h — provides setMaxChunks(unsigned int) and setChunkSize(unsigned int)
Things to think about
ChunkedTransaction compatibility:FileAppendTransaction inherits from ChunkedTransaction<FileAppendTransaction> which extends Transaction<FileAppendTransaction>. The CommonTransactionParams::fillOutTransaction template accepts Transaction<T>&, so it should work. Verify this compiles.
Content setting:FileAppendTransaction provides setContents(std::string_view) which accepts a string directly — no byte conversion needed.
Parameter types: The TCK spec sends maxChunks and chunkSize as numbers. The params struct should use std::optional<int> or similar, and cast to unsigned int when calling the SDK methods.
Files to create and modify
File
Action
src/tck/include/file/params/AppendFileParams.h
Create — params struct with mFileId, mContents, mMaxChunks, mChunkSize, mCommonTxParams
src/tck/include/file/FileService.h
Edit — add forward declaration and function declaration
🧩 Intermediate Friendly
This issue is a good fit for contributors who are already familiar with the Hiero C++ SDK and feel comfortable navigating the codebase.
Intermediate Issues often involve:
The goal is to support deeper problem-solving while keeping the task clear, focused, and enjoyable to work on.
Important
🧭 About Intermediate Issues
Intermediate Issues are a great next step for contributors who enjoy
digging into the codebase and reasoning about how things work.
These issues often:
Other kinds of contributions — from beginner-friendly tasks to large
system-level changes — are just as valuable and use different labels.
🐞 Problem Description
The TCK (Test Compatibility Kit) server in this repository exposes JSON-RPC endpoints that the hiero-sdk-tck test suite calls to verify SDK behavior across all Hiero SDKs.
The
FileServicecurrently implementscreateFile,deleteFile, andupdateFile, but is missing theappendFileendpoint. The TCK test filetest-file-append-transaction.tscalls this method and cannot run against this C++ SDK until it is implemented.The full TCK specification for this endpoint — including all input/output parameters, test cases, and example JSON-RPC requests — is published here:
The SDK already has a fully implemented
FileAppendTransactionclass insrc/sdk/main/include/FileAppendTransaction.h. This issue is about wiring up that existing class to the TCK server.What makes this interesting: Unlike the other FileService transaction endpoints,
FileAppendTransactionextendsChunkedTransactionrather thanTransaction. This introduces two additional parameters (maxChunksandchunkSize) that require using methods inherited fromChunkedTransaction.💡 Expected Outcome
The TCK server should respond to a new
appendFileJSON-RPC method. The full input/output parameter specification is defined in the TCK docs. In summary:Inputs:
fileId,contents,maxChunks,chunkSize,commonTransactionParams(all optional exceptcontents)Output:
{ "status": "..." }— the status string from theTransactionReceiptThe implementation should:
FileService.ccfor transaction endpointsFileAppendTransactionfrom the SDKmaxChunksandchunkSizeviaChunkedTransaction::setMaxChunks(unsigned int)andChunkedTransaction::setChunkSize(unsigned int)commonTransactionParamsusing the existingCommonTransactionParams::fillOutTransactiontemplate🧠 Implementation Notes
Architecture
Each TCK endpoint has four parts:
src/tck/include/file/params/that defines the JSON-RPC parameters and their deserializationsrc/tck/include/file/FileService.hsrc/tck/src/file/FileService.ccsrc/tck/src/TckServer.cc(include,addMethodcall, template instantiation)Reference implementations
AppendFileParamsstructsrc/tck/include/file/params/UpdateFileParams.h(similar transaction params pattern, but replace file-specific fields withcontents,maxChunks,chunkSize)appendFilefunctionupdateFileinsrc/tck/src/file/FileService.cc(line 105) — same pattern, but usesFileAppendTransactionand adds chunking parametersChunkedTransactionmethodssrc/sdk/main/include/ChunkedTransaction.h— providessetMaxChunks(unsigned int)andsetChunkSize(unsigned int)Things to think about
ChunkedTransactioncompatibility:FileAppendTransactioninherits fromChunkedTransaction<FileAppendTransaction>which extendsTransaction<FileAppendTransaction>. TheCommonTransactionParams::fillOutTransactiontemplate acceptsTransaction<T>&, so it should work. Verify this compiles.Content setting:
FileAppendTransactionprovidessetContents(std::string_view)which accepts a string directly — no byte conversion needed.Parameter types: The TCK spec sends
maxChunksandchunkSizeas numbers. The params struct should usestd::optional<int>or similar, and cast tounsigned intwhen calling the SDK methods.Files to create and modify
src/tck/include/file/params/AppendFileParams.hmFileId,mContents,mMaxChunks,mChunkSize,mCommonTxParamssrc/tck/include/file/FileService.hsrc/tck/src/file/FileService.ccappendFileimplementationsrc/tck/src/TckServer.ccKey SDK headers to study
src/sdk/main/include/FileAppendTransaction.hsetFileId,setContents(std::string_view), inheritedsetMaxChunks/setChunkSizesrc/sdk/main/include/ChunkedTransaction.hsetMaxChunks(unsigned int)(line 241),setChunkSize(unsigned int)(line 249)src/tck/include/common/CommonTransactionParams.hfillOutTransactiontemplate — works withTransaction<T>&✅ Acceptance Criteria
To help get this change merged smoothly:
appendFileis registered inTckServerand responds to JSON-RPC callsfileId,contents,maxChunks,chunkSize, andcommonTransactionParamsmaxChunksandchunkSizeare passed through toChunkedTransactionmethodsFileServiceendpoints📋 Contribution Guide
To help your contribution go as smoothly as possible, we recommend following these steps:
/assignto request the issueREADME.md-s -SRead Workflow Guide for step-by-step workflow guidance.
Read README.md for setup instructions.
❗ Pull requests cannot be merged without
Sandssigned commits.See the Signing Guide.
📚 Additional Context or Resources
commonTransactionParamsobject specificationIf you have questions, the community is happy to help:
Hiero-SDK-C++ Discord