Skip to content

Commit 992b668

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

File tree

6 files changed

+14
-3
lines changed

6 files changed

+14
-3
lines changed

starknet_py/abi/v2/parser.py

Lines changed: 6 additions & 0 deletions
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,11 @@ def _parse_members(
250251
for name, param in members.items()
251252
)
252253

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

starknet_py/abi/v2/schemas.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
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 (
55
CONSTRUCTOR_ENTRY,
6+
KEY_KIND,
67
DATA_KIND,
78
ENUM_ENTRY,
89
EVENT_ENTRY,
@@ -51,7 +52,7 @@ class L1HandlerAbiEntrySchema(FunctionBaseSchema):
5152

5253

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

5657

5758
class EventStructAbiEntrySchema(Schema):

starknet_py/abi/v2/shape.py

Lines changed: 2 additions & 1 deletion
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

Lines changed: 1 addition & 0 deletions
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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
pool_id_added_event: EventType = EventType(
1010
"PoolIdAdded",
1111
OrderedDict(pool_id=pool_id_struct),
12+
[]
1213
)
1314

1415
abi_v2 = Abi(

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

Lines changed: 1 addition & 0 deletions
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)