Skip to content

Commit 51e073b

Browse files
authored
Update RPC to v0.5.1 (#1223)
* Update RPC to v0.5.1 * Add missing documentation * Add missing class in migration guide minor changes
1 parent 94321d3 commit 51e073b

File tree

6 files changed

+55
-29
lines changed

6 files changed

+55
-29
lines changed

docs/migration_guide.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Version 0.18.3 of **starknet.py** comes with support for RPC 0.5.0!
1212
------------------------
1313

1414
- Starknet - `0.12.2 <https://community.starknet.io/t/introducing-p2p-authentication-and-mismatch-resolution-in-v0-12-2/97993>`_
15-
- RPC - `0.5.0 <https://github.com/starkware-libs/starknet-specs/releases/tag/v0.5.0>`_
15+
- RPC - `0.5.1 <https://github.com/starkware-libs/starknet-specs/releases/tag/v0.5.1>`_
1616

1717

1818
0.18.3 Breaking changes
@@ -36,8 +36,8 @@ Version 0.18.3 of **starknet.py** comes with support for RPC 0.5.0!
3636
1. :class:`StarknetBlock`, :class:`StarknetBlockWithTxHashes`, :class:`PendingStarknetBlock` and :class:`PendingStarknetBlockWithTxHashes` now have two additional fields: ``starknet_version`` and ``l1_gas_price``.
3737
2. :class:`PendingStarknetBlock` and :class:`PendingStarknetBlockWithTxHashes` fields ``timestamp``, ``sequencer_address`` and ``parent_block_hash`` are now required, not optional.
3838
3. :class:`TransactionReceipt` now has an additional field - ``message_hash`` (for ``L1_HANDLER_TXN_RECEIPT``).
39-
4. All optional fields in ``TransactionTrace`` classes are now required.
40-
5. :class:`InvokeTransactionTrace`, :class:`DeclareTransactionTrace` and :class:`DeployAccountTransactionTrace` classes now have an additional field - ``state_diff``.
39+
4. Most fields in ``TransactionTrace`` classes are now optional.
40+
5. :class:`InvokeTransactionTrace`, :class:`DeclareTransactionTrace`, :class:`DeployAccountTransactionTrace` and :class:`L1HandlerTransactionTrace` classes now have an additional field - ``state_diff``.
4141

4242

4343
|

starknet_py/hash/address.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,15 @@ def compute_address(
4242

4343

4444
def get_checksum_address(address: str) -> str:
45+
"""
46+
Outputs formatted checksum address.
47+
48+
Follows implementation of starknet.js. It is not compatible with EIP55 as it treats hex string as encoded number,
49+
instead of encoding it as ASCII string.
50+
51+
:param address: Address to encode
52+
:return: Checksum address
53+
"""
4554
if not address.lower().startswith(HEX_PREFIX):
4655
raise ValueError(f"{address} is not a valid hexadecimal address.")
4756

@@ -64,4 +73,7 @@ def get_checksum_address(address: str) -> str:
6473

6574

6675
def is_checksum_address(address: str) -> bool:
76+
"""
77+
Checks if provided string is in a checksum address format.
78+
"""
6779
return get_checksum_address(address) == address

starknet_py/net/client_models.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -842,6 +842,7 @@ class CallType(Enum):
842842
Enum class representing call types.
843843
"""
844844

845+
DELEGATE = "DELEGATE"
845846
LIBRARY_CALL = "LIBRARY_CALL"
846847
CALL = "CALL"
847848

@@ -881,10 +882,10 @@ class InvokeTransactionTrace:
881882
Dataclass representing a transaction trace of an INVOKE transaction.
882883
"""
883884

884-
validate_invocation: FunctionInvocation
885885
execute_invocation: Union[FunctionInvocation, RevertedFunctionInvocation]
886-
fee_transfer_invocation: FunctionInvocation
887-
state_diff: StateDiff
886+
validate_invocation: Optional[FunctionInvocation] = None
887+
fee_transfer_invocation: Optional[FunctionInvocation] = None
888+
state_diff: Optional[StateDiff] = None
888889

889890

890891
@dataclass
@@ -893,9 +894,9 @@ class DeclareTransactionTrace:
893894
Dataclass representing a transaction trace of an DECLARE transaction.
894895
"""
895896

896-
validate_invocation: FunctionInvocation
897-
fee_transfer_invocation: FunctionInvocation
898-
state_diff: StateDiff
897+
validate_invocation: Optional[FunctionInvocation] = None
898+
fee_transfer_invocation: Optional[FunctionInvocation] = None
899+
state_diff: Optional[StateDiff] = None
899900

900901

901902
@dataclass
@@ -904,10 +905,10 @@ class DeployAccountTransactionTrace:
904905
Dataclass representing a transaction trace of an DEPLOY_ACCOUNT transaction.
905906
"""
906907

907-
validate_invocation: FunctionInvocation
908908
constructor_invocation: FunctionInvocation
909-
fee_transfer_invocation: FunctionInvocation
910-
state_diff: StateDiff
909+
validate_invocation: Optional[FunctionInvocation] = None
910+
fee_transfer_invocation: Optional[FunctionInvocation] = None
911+
state_diff: Optional[StateDiff] = None
911912

912913

913914
@dataclass
@@ -917,6 +918,7 @@ class L1HandlerTransactionTrace:
917918
"""
918919

919920
function_invocation: FunctionInvocation
921+
state_diff: Optional[StateDiff] = None
920922

921923

922924
TransactionTrace = Union[

starknet_py/net/full_node_client.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,10 @@ async def get_transaction(
326326
return cast(Transaction, TypesOfTransactionsSchema().load(res, unknown=EXCLUDE))
327327

328328
async def get_l1_message_hash(self, tx_hash: Hash) -> Hash:
329+
"""
330+
:param tx_hash: Transaction's hash
331+
:return: Message hash
332+
"""
329333
tx = await self.get_transaction(tx_hash)
330334
if not isinstance(tx, L1HandlerTransaction):
331335
raise TypeError(

starknet_py/net/schemas/rpc.py

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -667,18 +667,20 @@ def get_data_type(self, data):
667667

668668

669669
class InvokeTransactionTraceSchema(Schema):
670-
validate_invocation = fields.Nested(
671-
FunctionInvocationSchema(), data_key="validate_invocation", load_default=None
672-
)
673670
execute_invocation = fields.Nested(
674671
ExecuteInvocationSchema(), data_key="execute_invocation", required=True
675672
)
673+
validate_invocation = fields.Nested(
674+
FunctionInvocationSchema(), data_key="validate_invocation", load_default=None
675+
)
676676
fee_transfer_invocation = fields.Nested(
677677
FunctionInvocationSchema(),
678678
data_key="fee_transfer_invocation",
679679
load_default=None,
680680
)
681-
state_diff = fields.Nested(StateDiffSchema(), data_key="state_diff", required=True)
681+
state_diff = fields.Nested(
682+
StateDiffSchema(), data_key="state_diff", load_default=None
683+
)
682684

683685
@post_load
684686
def make_dataclass(self, data, **kwargs) -> InvokeTransactionTrace:
@@ -694,26 +696,30 @@ class DeclareTransactionTraceSchema(Schema):
694696
data_key="fee_transfer_invocation",
695697
load_default=None,
696698
)
697-
state_diff = fields.Nested(StateDiffSchema(), data_key="state_diff", required=True)
699+
state_diff = fields.Nested(
700+
StateDiffSchema(), data_key="state_diff", load_default=None
701+
)
698702

699703
@post_load
700704
def make_dataclass(self, data, **kwargs) -> DeclareTransactionTrace:
701705
return DeclareTransactionTrace(**data)
702706

703707

704708
class DeployAccountTransactionTraceSchema(Schema):
705-
validate_invocation = fields.Nested(
706-
FunctionInvocationSchema(), data_key="validate_invocation", load_default=None
707-
)
708709
constructor_invocation = fields.Nested(
709710
FunctionInvocationSchema(), data_key="constructor_invocation", required=True
710711
)
712+
validate_invocation = fields.Nested(
713+
FunctionInvocationSchema(), data_key="validate_invocation", load_default=None
714+
)
711715
fee_transfer_invocation = fields.Nested(
712716
FunctionInvocationSchema(),
713717
data_key="fee_transfer_invocation",
714718
load_default=None,
715719
)
716-
state_diff = fields.Nested(StateDiffSchema(), data_key="state_diff", required=True)
720+
state_diff = fields.Nested(
721+
StateDiffSchema(), data_key="state_diff", load_default=None
722+
)
717723

718724
@post_load
719725
def make_dataclass(self, data, **kwargs) -> DeployAccountTransactionTrace:
@@ -724,6 +730,9 @@ class L1HandlerTransactionTraceSchema(Schema):
724730
function_invocation = fields.Nested(
725731
FunctionInvocationSchema(), data_key="function_invocation", required=True
726732
)
733+
state_diff = fields.Nested(
734+
StateDiffSchema(), data_key="state_diff", load_default=None
735+
)
727736

728737
@post_load
729738
def make_dataclass(self, data, **kwargs) -> L1HandlerTransactionTrace:

starknet_py/tests/e2e/tests_on_networks/trace_api_test.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,16 @@ async def test_trace_transaction_invoke(full_node_client_testnet):
4848
invoke_tx_hash = 0xDC6B381884866DD6C4ACCDE75AA1FA7506E6B57612D3D3659F7B919EA07D7C
4949
trace = await full_node_client_testnet.trace_transaction(tx_hash=invoke_tx_hash)
5050

51-
assert type(trace) == InvokeTransactionTrace
52-
assert trace.state_diff is not None
51+
assert type(trace) is InvokeTransactionTrace
52+
assert trace.execute_invocation is not None
5353

5454

5555
@pytest.mark.asyncio
5656
async def test_trace_transaction_declare(full_node_client_testnet):
5757
declare_tx_hash = 0x62DD22627065568C6E4BD619C511217456B5A82ACBDEAD7C3B5DFFF92209451
5858
trace = await full_node_client_testnet.trace_transaction(tx_hash=declare_tx_hash)
5959

60-
assert type(trace) == DeclareTransactionTrace
61-
assert trace.state_diff is not None
60+
assert type(trace) is DeclareTransactionTrace
6261

6362

6463
@pytest.mark.asyncio
@@ -70,8 +69,8 @@ async def test_trace_transaction_deploy_account(full_node_client_testnet):
7069
tx_hash=deploy_account_tx_hash
7170
)
7271

73-
assert type(trace) == DeployAccountTransactionTrace
74-
assert trace.state_diff is not None
72+
assert type(trace) is DeployAccountTransactionTrace
73+
assert trace.constructor_invocation is not None
7574

7675

7776
@pytest.mark.asyncio
@@ -81,7 +80,8 @@ async def test_trace_transaction_l1_handler(full_node_client_testnet):
8180
)
8281
trace = await full_node_client_testnet.trace_transaction(tx_hash=l1_handler_tx_hash)
8382

84-
assert type(trace) == L1HandlerTransactionTrace
83+
assert type(trace) is L1HandlerTransactionTrace
84+
assert trace.function_invocation is not None
8585

8686

8787
@pytest.mark.asyncio
@@ -135,4 +135,3 @@ async def test_simulate_transactions_declare_on_network(
135135

136136
assert isinstance(simulated_txs[0].transaction_trace, DeclareTransactionTrace)
137137
assert simulated_txs[0].fee_estimation.overall_fee > 0
138-
assert simulated_txs[0].transaction_trace.validate_invocation is not None

0 commit comments

Comments
 (0)