Skip to content

Commit 6fc6e42

Browse files
Merge branch 'main' into feat/pr-review-status-evaluator
2 parents 714aa04 + 0b670f4 commit 6fc6e42

10 files changed

Lines changed: 113 additions & 7 deletions

File tree

.github/workflows/pr-check-primary-codeql.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ jobs:
4242
egress-policy: audit
4343

4444
- name: Initialize CodeQL
45-
uses: github/codeql-action/init@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
45+
uses: github/codeql-action/init@f205ea1c3313d32999d8d6a48b4f6530d4437b38 # v4.37.4
4646
with:
4747
languages: ${{ matrix.language }}
4848
build-mode: ${{ matrix.build-mode }}
@@ -66,6 +66,6 @@ jobs:
6666
run: uv sync --frozen --all-groups --all-packages --all-extras
6767

6868
- name: Perform CodeQL Analysis
69-
uses: github/codeql-action/analyze@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
69+
uses: github/codeql-action/analyze@f205ea1c3313d32999d8d6a48b4f6530d4437b38 # v4.37.4
7070
with:
7171
category: "/language:${{matrix.language}}"

.github/workflows/pr-check-secondary-examples.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ jobs:
7575
uses: hiero-ledger/hiero-solo-action@531a2b283ca4912df537d64bf89da0f6be4c2574 # v0.22.0
7676
with:
7777
installMirrorNode: true
78-
soloVersion: v0.74.0
78+
soloVersion: v0.79.1
7979
mirrorNodeVersion: v0.153.0
8080
hieroVersion: v0.73.0
8181

.github/workflows/pr-check-secondary-unit-integration-test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ jobs:
132132
uses: hiero-ledger/hiero-solo-action@531a2b283ca4912df537d64bf89da0f6be4c2574 # v0.22.0
133133
with:
134134
installMirrorNode: true
135-
soloVersion: v0.74.0
135+
soloVersion: v0.79.1
136136
mirrorNodeVersion: v0.153.0
137137
hieroVersion: v0.73.0
138138

examples/transaction/transfer_transaction_gigabar.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,11 @@ def create_account(client, operator_key):
5050
print("\nSTEP 1: Creating a new recipient account...")
5151
recipient_key = PrivateKey.generate()
5252
try:
53-
tx = AccountCreateTransaction().set_key(recipient_key.public_key()).set_initial_balance(Hbar.from_tinybars(0))
53+
tx = (
54+
AccountCreateTransaction()
55+
.set_key_without_alias(recipient_key.public_key())
56+
.set_initial_balance(Hbar.from_tinybars(0))
57+
)
5458

5559
receipt = tx.freeze_with(client).sign(operator_key).execute(client)
5660

examples/transaction/transfer_transaction_tinybar.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def create_account(client, operator_key):
5050
try:
5151
tx = (
5252
AccountCreateTransaction()
53-
.set_key(recipient_key.public_key())
53+
.set_key_without_alias(recipient_key.public_key())
5454
.set_initial_balance(Hbar.from_tinybars(100_000_000))
5555
)
5656
receipt = tx.freeze_with(client).sign(operator_key).execute(client)

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ requires-python = ">=3.10, <4"
1616
dependencies = [
1717
"protobuf>=4.21.12,<8",
1818
"grpcio>=1.76.0,<2",
19-
"cryptography>=44.0.1,<50",
19+
"cryptography>=44.0.1,<51",
2020
"requests>=2.31.0,<3",
2121
"pycryptodome>=3.18.0,<4",
2222
"eth-abi>=5.1.0,<6",

tck/handlers/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from . import (
66
account,
77
allowance,
8+
file,
89
key,
910
sdk, # setup, reset
1011
token,

tck/handlers/file.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
from __future__ import annotations
2+
3+
from hiero_sdk_python.file.file_create_transaction import FileCreateTransaction
4+
from hiero_sdk_python.response_code import ResponseCode
5+
from hiero_sdk_python.timestamp import Timestamp
6+
from hiero_sdk_python.transaction.transaction_receipt import TransactionReceipt
7+
from tck.errors import JsonRpcError
8+
from tck.handlers.registry import rpc_method
9+
from tck.param.file import CreateFileParams
10+
from tck.response.file import CreateFileResponse
11+
from tck.util.client_utils import get_client
12+
from tck.util.constants import DEFAULT_GRPC_TIMEOUT
13+
from tck.util.key_utils import get_key_from_string
14+
from tck.util.param_utils import to_int
15+
16+
17+
def _build_create_file_transaction(params: CreateFileParams) -> FileCreateTransaction:
18+
transaction = FileCreateTransaction().set_grpc_deadline(DEFAULT_GRPC_TIMEOUT)
19+
20+
if params.keys is not None:
21+
transaction.set_keys([get_key_from_string(key) for key in params.keys])
22+
23+
if params.contents is not None:
24+
transaction.set_contents(params.contents)
25+
26+
if params.expirationTime is not None:
27+
expiration_time = to_int(params.expirationTime)
28+
if expiration_time is None:
29+
raise JsonRpcError.invalid_params_error("expirationTime must be an integer")
30+
transaction.set_expiration_time(Timestamp(seconds=expiration_time, nanos=0))
31+
32+
if params.memo is not None:
33+
transaction.set_file_memo(params.memo)
34+
35+
return transaction
36+
37+
38+
@rpc_method("createFile")
39+
def create_file(params: CreateFileParams) -> CreateFileResponse:
40+
"""Create a file."""
41+
client = get_client(params.sessionId)
42+
43+
transaction = _build_create_file_transaction(params)
44+
45+
if params.commonTransactionParams is not None:
46+
params.commonTransactionParams.apply_common_params(transaction, client)
47+
48+
response = transaction.execute(client, wait_for_receipt=False)
49+
receipt: TransactionReceipt = response.get_receipt(client, validate_status=True)
50+
51+
file_id = ""
52+
if receipt.status == ResponseCode.SUCCESS and receipt.file_id is not None:
53+
file_id = str(receipt.file_id)
54+
55+
return CreateFileResponse(file_id, ResponseCode(receipt.status).name)

tck/param/file.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from __future__ import annotations
2+
3+
from dataclasses import dataclass
4+
5+
from tck.param.base import BaseTransactionParams
6+
from tck.util.param_utils import parse_common_transaction_params, parse_session_id
7+
8+
9+
@dataclass
10+
class CreateFileParams(BaseTransactionParams):
11+
"""Parameters for creating a file. Extends BaseTransactionParams to include common transaction parameters."""
12+
13+
keys: list[str] | None = None
14+
contents: str | None = None
15+
expirationTime: str | None = None
16+
memo: str | None = None
17+
18+
@classmethod
19+
def parse_json_params(cls, params: dict) -> CreateFileParams:
20+
keys = params.get("keys")
21+
if keys is not None:
22+
if not isinstance(keys, list):
23+
raise ValueError("keys must be a list")
24+
for key in keys:
25+
if not isinstance(key, str) or not key.strip():
26+
raise ValueError("keys must be a list of non-empty strings")
27+
28+
return cls(
29+
keys=keys,
30+
contents=params.get("contents"),
31+
expirationTime=params.get("expirationTime"),
32+
memo=params.get("memo"),
33+
sessionId=parse_session_id(params),
34+
commonTransactionParams=parse_common_transaction_params(params),
35+
)

tck/response/file.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from __future__ import annotations
2+
3+
from dataclasses import dataclass
4+
5+
6+
@dataclass
7+
class CreateFileResponse:
8+
"""Response payload for createFile."""
9+
10+
fileId: str | None = None
11+
status: str | None = None

0 commit comments

Comments
 (0)