Skip to content

Commit 8d76ee0

Browse files
committed
Add keys (indexed fields aka topics) to the EventType (abi v2)
1 parent 2a84190 commit 8d76ee0

File tree

6 files changed

+14
-5
lines changed

6 files changed

+14
-5
lines changed

starknet_py/abi/v2/parser.py

+4
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ def _parse_event(self, event: EventDict) -> EventType:
234234
types=self._parse_members(
235235
cast(List[TypedParameterDict], members_), event["name"]
236236
),
237+
keys=self._parse_keys(cast(List[EventStructMemberDict], members_)),
237238
)
238239

239240
TypedParam = TypeVar(
@@ -250,6 +251,9 @@ def _parse_members(
250251
for name, param in members.items()
251252
)
252253

254+
def _parse_keys(self, params: List[EventStructMemberDict]) -> List[str]:
255+
return [param["name"] for param in params if param["kind"] == "key"]
256+
253257
def _parse_interface(self, interface: InterfaceDict) -> Abi.Interface:
254258
return Abi.Interface(
255259
name=interface["name"],

starknet_py/abi/v2/schemas.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from marshmallow import Schema, fields
1+
from marshmallow import Schema, fields, validate
22
from marshmallow_oneofschema.one_of_schema import OneOfSchema
33

44
from starknet_py.abi.v2.shape import (
@@ -9,6 +9,7 @@
99
FUNCTION_ENTRY,
1010
IMPL_ENTRY,
1111
INTERFACE_ENTRY,
12+
KEY_KIND,
1213
L1_HANDLER_ENTRY,
1314
NESTED_KIND,
1415
STRUCT_ENTRY,
@@ -51,7 +52,9 @@ class L1HandlerAbiEntrySchema(FunctionBaseSchema):
5152

5253

5354
class EventStructMemberSchema(TypedParameterSchema):
54-
kind = fields.Constant(DATA_KIND, data_key="kind", required=True)
55+
kind = fields.String(
56+
validate=validate.OneOf([KEY_KIND, DATA_KIND]), data_key="kind", required=True
57+
)
5558

5659

5760
class EventStructAbiEntrySchema(Schema):

starknet_py/abi/v2/shape.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
IMPL_ENTRY = "impl"
1212
INTERFACE_ENTRY = "interface"
1313

14+
KEY_KIND = "key"
1415
DATA_KIND = "data"
1516
NESTED_KIND = "nested"
1617

@@ -56,7 +57,7 @@ class EventBaseDict(TypedDict):
5657

5758

5859
class EventStructMemberDict(TypedParameterDict):
59-
kind: Literal["data"]
60+
kind: Union[Literal["key"], Literal["data"]]
6061

6162

6263
class EventStructDict(EventBaseDict):

starknet_py/cairo/data_types.py

+1
Original file line numberDiff line numberDiff line change
@@ -121,3 +121,4 @@ class EventType(CairoType):
121121

122122
name: str
123123
types: OrderedDict[str, CairoType]
124+
keys: List[str]

starknet_py/tests/e2e/fixtures/abi_v2_structures.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77
pool_id_struct = StructType("PoolId", OrderedDict(value=UintType(256)))
88

99
pool_id_added_event: EventType = EventType(
10-
"PoolIdAdded",
11-
OrderedDict(pool_id=pool_id_struct),
10+
"PoolIdAdded", OrderedDict(pool_id=pool_id_struct), []
1211
)
1312

1413
abi_v2 = Abi(

starknet_py/tests/unit/abi/v2/parser_test.py

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"TestEnum",
2323
"TestOption",
2424
"TokenBridge",
25+
"l1_l2",
2526
],
2627
)
2728
def test_abi_parse(contract_name):

0 commit comments

Comments
 (0)