1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct STXTransferEventData {
    pub sender: String,
    pub recipient: String,
    pub amount: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct STXMintEventData {
    pub recipient: String,
    pub amount: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct STXLockEventData {
    pub locked_amount: String,
    pub unlock_height: String,
    pub locked_address: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct STXBurnEventData {
    pub sender: String,
    pub amount: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct NFTTransferEventData {
    #[serde(rename = "asset_identifier")]
    pub asset_class_identifier: String,
    #[serde(rename = "raw_value")]
    pub hex_asset_identifier: String,
    pub sender: String,
    pub recipient: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct NFTMintEventData {
    #[serde(rename = "asset_identifier")]
    pub asset_class_identifier: String,
    #[serde(rename = "raw_value")]
    pub hex_asset_identifier: String,
    pub recipient: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct NFTBurnEventData {
    #[serde(rename = "asset_identifier")]
    pub asset_class_identifier: String,
    #[serde(rename = "raw_value")]
    pub hex_asset_identifier: String,
    pub sender: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct FTTransferEventData {
    #[serde(rename = "asset_identifier")]
    pub asset_class_identifier: String,
    pub sender: String,
    pub recipient: String,
    pub amount: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct FTMintEventData {
    #[serde(rename = "asset_identifier")]
    pub asset_class_identifier: String,
    pub recipient: String,
    pub amount: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct FTBurnEventData {
    #[serde(rename = "asset_identifier")]
    pub asset_class_identifier: String,
    pub sender: String,
    pub amount: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct DataVarSetEventData {
    pub contract_identifier: String,
    pub var: String,
    #[serde(rename = "raw_new_value")]
    pub hex_new_value: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct DataMapInsertEventData {
    pub contract_identifier: String,
    pub map: String,
    #[serde(rename = "raw_inserted_key")]
    pub hex_inserted_key: String,
    #[serde(rename = "raw_inserted_value")]
    pub hex_inserted_value: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct DataMapUpdateEventData {
    pub contract_identifier: String,
    pub map: String,
    #[serde(rename = "raw_key")]
    pub hex_key: String,
    #[serde(rename = "raw_new_value")]
    pub hex_new_value: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct DataMapDeleteEventData {
    pub contract_identifier: String,
    pub map: String,
    #[serde(rename = "raw_deleted_key")]
    pub hex_deleted_key: String,
}

#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
pub struct SmartContractEventData {
    pub contract_identifier: String,
    pub topic: String,
    #[serde(rename = "raw_value")]
    pub hex_value: String,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(tag = "type", content = "data")]
pub enum StacksTransactionEventPayload {
    STXTransferEvent(STXTransferEventData),
    STXMintEvent(STXMintEventData),
    STXLockEvent(STXLockEventData),
    STXBurnEvent(STXBurnEventData),
    NFTTransferEvent(NFTTransferEventData),
    NFTMintEvent(NFTMintEventData),
    NFTBurnEvent(NFTBurnEventData),
    FTTransferEvent(FTTransferEventData),
    FTMintEvent(FTMintEventData),
    FTBurnEvent(FTBurnEventData),
    DataVarSetEvent(DataVarSetEventData),
    DataMapInsertEvent(DataMapInsertEventData),
    DataMapUpdateEvent(DataMapUpdateEventData),
    DataMapDeleteEvent(DataMapDeleteEventData),
    SmartContractEvent(SmartContractEventData),
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct StacksTransactionEvent {
    #[serde(flatten)]
    pub event_payload: StacksTransactionEventPayload,
    #[serde(default)]
    pub position: StacksTransactionEventPosition,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct StacksTransactionEventPosition {
    pub index: u32,
}

impl Default for StacksTransactionEventPosition {
    fn default() -> Self {
        Self { index: 0 }
    }
}