Skip to content

Commit d67d1e4

Browse files
MicaiahReidjanniks
andcommitted
fix: add event index to transaction events (#495)
(this PR is just cherry-picking the relevant commits from @janniks in PR #417, which I apparently mucked up with some bad merging) - closes #387 - adds a position struct to the event and renames the event to payload (with enum type) - updates occurences.json to include the expected serialized position for testing --- **Note**: Any users running a Chainhook node (i.e. `chainhook service start ...`) will not have transaction event positions stored in the database, so all event position will have a value of: ``` JSON "position": { "index": 0 } ``` To rebuild the database with this data filled in: - Upgrade to the latest version of Chainhook - Delete the `stacks.rocksdb` folder inside the `working_dir` set in your `Chainhook.toml` - Rerun Chainhook This will rebuild your Stacks database from scratch. --------- Co-authored-by: janniks <[email protected]>
1 parent 1c13cdd commit d67d1e4

File tree

9 files changed

+426
-240
lines changed

9 files changed

+426
-240
lines changed

components/chainhook-cli/src/service/tests/helpers/mock_stacks_node.rs

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use chainhook_sdk::indexer::stacks::{NewBlock, NewEvent, NewTransaction};
55
use chainhook_sdk::types::{
66
FTBurnEventData, FTMintEventData, FTTransferEventData, NFTBurnEventData, NFTMintEventData,
77
NFTTransferEventData, STXBurnEventData, STXLockEventData, STXMintEventData,
8-
STXTransferEventData, SmartContractEventData, StacksTransactionEvent,
8+
STXTransferEventData, SmartContractEventData, StacksTransactionEventPayload,
99
};
1010

1111
use super::{branch_and_height_to_prefixed_hash, height_to_prefixed_hash};
@@ -21,69 +21,73 @@ pub fn create_tmp_working_dir() -> Result<(String, String), String> {
2121
.map_err(|e| format!("failed to create temp working dir: {}", e.to_string()))?;
2222
Ok((working_dir, tsv_dir))
2323
}
24-
fn create_stacks_new_event(tx_index: u64, index: u32, event: StacksTransactionEvent) -> NewEvent {
24+
fn create_stacks_new_event(
25+
tx_index: u64,
26+
index: u32,
27+
event: StacksTransactionEventPayload,
28+
) -> NewEvent {
2529
let mut event_type = String::new();
26-
let stx_transfer_event = if let StacksTransactionEvent::STXTransferEvent(data) = &event {
30+
let stx_transfer_event = if let StacksTransactionEventPayload::STXTransferEvent(data) = &event {
2731
event_type = format!("stx_transfer");
2832
Some(serde_json::to_value(data).unwrap())
2933
} else {
3034
None
3135
};
32-
let stx_mint_event = if let StacksTransactionEvent::STXMintEvent(data) = &event {
36+
let stx_mint_event = if let StacksTransactionEventPayload::STXMintEvent(data) = &event {
3337
event_type = format!("stx_mint");
3438
Some(serde_json::to_value(data).unwrap())
3539
} else {
3640
None
3741
};
38-
let stx_burn_event = if let StacksTransactionEvent::STXBurnEvent(data) = &event {
42+
let stx_burn_event = if let StacksTransactionEventPayload::STXBurnEvent(data) = &event {
3943
event_type = format!("stx_burn");
4044
Some(serde_json::to_value(data).unwrap())
4145
} else {
4246
None
4347
};
44-
let stx_lock_event = if let StacksTransactionEvent::STXLockEvent(data) = &event {
48+
let stx_lock_event = if let StacksTransactionEventPayload::STXLockEvent(data) = &event {
4549
event_type = format!("stx_lock");
4650
Some(serde_json::to_value(data).unwrap())
4751
} else {
4852
None
4953
};
50-
let nft_transfer_event = if let StacksTransactionEvent::NFTTransferEvent(data) = &event {
54+
let nft_transfer_event = if let StacksTransactionEventPayload::NFTTransferEvent(data) = &event {
5155
event_type = format!("nft_transfer");
5256
Some(serde_json::to_value(data).unwrap())
5357
} else {
5458
None
5559
};
56-
let nft_mint_event = if let StacksTransactionEvent::NFTMintEvent(data) = &event {
60+
let nft_mint_event = if let StacksTransactionEventPayload::NFTMintEvent(data) = &event {
5761
event_type = format!("nft_mint");
5862
Some(serde_json::to_value(data).unwrap())
5963
} else {
6064
None
6165
};
62-
let nft_burn_event = if let StacksTransactionEvent::NFTBurnEvent(data) = &event {
66+
let nft_burn_event = if let StacksTransactionEventPayload::NFTBurnEvent(data) = &event {
6367
event_type = format!("nft_burn");
6468
Some(serde_json::to_value(data).unwrap())
6569
} else {
6670
None
6771
};
68-
let ft_transfer_event = if let StacksTransactionEvent::FTTransferEvent(data) = &event {
72+
let ft_transfer_event = if let StacksTransactionEventPayload::FTTransferEvent(data) = &event {
6973
event_type = format!("ft_transfer");
7074
Some(serde_json::to_value(data).unwrap())
7175
} else {
7276
None
7377
};
74-
let ft_mint_event = if let StacksTransactionEvent::FTMintEvent(data) = &event {
78+
let ft_mint_event = if let StacksTransactionEventPayload::FTMintEvent(data) = &event {
7579
event_type = format!("ft_mint");
7680
Some(serde_json::to_value(data).unwrap())
7781
} else {
7882
None
7983
};
80-
let ft_burn_event = if let StacksTransactionEvent::FTBurnEvent(data) = &event {
84+
let ft_burn_event = if let StacksTransactionEventPayload::FTBurnEvent(data) = &event {
8185
event_type = format!("ft_burn");
8286
Some(serde_json::to_value(data).unwrap())
8387
} else {
8488
None
8589
};
86-
let contract_event = if let StacksTransactionEvent::SmartContractEvent(data) = &event {
90+
let contract_event = if let StacksTransactionEventPayload::SmartContractEvent(data) = &event {
8791
event_type = format!("smart_contract_print_event");
8892
Some(serde_json::to_value(data).unwrap())
8993
} else {
@@ -136,7 +140,7 @@ pub fn create_stacks_new_block(height: u64, burn_block_height: u64) -> NewBlock
136140
events.push(create_stacks_new_event(
137141
0,
138142
events.len() as u32,
139-
StacksTransactionEvent::STXTransferEvent(STXTransferEventData {
143+
StacksTransactionEventPayload::STXTransferEvent(STXTransferEventData {
140144
sender: format!(""),
141145
recipient: format!(""),
142146
amount: format!("1"),
@@ -145,23 +149,23 @@ pub fn create_stacks_new_block(height: u64, burn_block_height: u64) -> NewBlock
145149
events.push(create_stacks_new_event(
146150
0,
147151
events.len() as u32,
148-
StacksTransactionEvent::STXMintEvent(STXMintEventData {
152+
StacksTransactionEventPayload::STXMintEvent(STXMintEventData {
149153
recipient: format!(""),
150154
amount: format!("1"),
151155
}),
152156
));
153157
events.push(create_stacks_new_event(
154158
0,
155159
events.len() as u32,
156-
StacksTransactionEvent::STXBurnEvent(STXBurnEventData {
160+
StacksTransactionEventPayload::STXBurnEvent(STXBurnEventData {
157161
sender: format!(""),
158162
amount: format!("1"),
159163
}),
160164
));
161165
events.push(create_stacks_new_event(
162166
0,
163167
events.len() as u32,
164-
StacksTransactionEvent::STXLockEvent(STXLockEventData {
168+
StacksTransactionEventPayload::STXLockEvent(STXLockEventData {
165169
locked_amount: format!("1"),
166170
unlock_height: format!(""),
167171
locked_address: format!(""),
@@ -170,7 +174,7 @@ pub fn create_stacks_new_block(height: u64, burn_block_height: u64) -> NewBlock
170174
events.push(create_stacks_new_event(
171175
0,
172176
events.len() as u32,
173-
StacksTransactionEvent::NFTTransferEvent(NFTTransferEventData {
177+
StacksTransactionEventPayload::NFTTransferEvent(NFTTransferEventData {
174178
asset_class_identifier: format!(""),
175179
hex_asset_identifier: format!(""),
176180
sender: format!(""),
@@ -180,7 +184,7 @@ pub fn create_stacks_new_block(height: u64, burn_block_height: u64) -> NewBlock
180184
events.push(create_stacks_new_event(
181185
0,
182186
events.len() as u32,
183-
StacksTransactionEvent::NFTMintEvent(NFTMintEventData {
187+
StacksTransactionEventPayload::NFTMintEvent(NFTMintEventData {
184188
asset_class_identifier: format!(""),
185189
hex_asset_identifier: format!(""),
186190
recipient: format!(""),
@@ -189,7 +193,7 @@ pub fn create_stacks_new_block(height: u64, burn_block_height: u64) -> NewBlock
189193
events.push(create_stacks_new_event(
190194
0,
191195
events.len() as u32,
192-
StacksTransactionEvent::NFTBurnEvent(NFTBurnEventData {
196+
StacksTransactionEventPayload::NFTBurnEvent(NFTBurnEventData {
193197
asset_class_identifier: format!(""),
194198
hex_asset_identifier: format!(""),
195199
sender: format!(""),
@@ -198,7 +202,7 @@ pub fn create_stacks_new_block(height: u64, burn_block_height: u64) -> NewBlock
198202
events.push(create_stacks_new_event(
199203
0,
200204
events.len() as u32,
201-
StacksTransactionEvent::FTTransferEvent(FTTransferEventData {
205+
StacksTransactionEventPayload::FTTransferEvent(FTTransferEventData {
202206
asset_class_identifier: format!(""),
203207
sender: format!(""),
204208
recipient: format!(""),
@@ -208,7 +212,7 @@ pub fn create_stacks_new_block(height: u64, burn_block_height: u64) -> NewBlock
208212
events.push(create_stacks_new_event(
209213
0,
210214
events.len() as u32,
211-
StacksTransactionEvent::FTMintEvent(FTMintEventData {
215+
StacksTransactionEventPayload::FTMintEvent(FTMintEventData {
212216
asset_class_identifier: format!(""),
213217
recipient: format!(""),
214218
amount: format!("1"),
@@ -217,7 +221,7 @@ pub fn create_stacks_new_block(height: u64, burn_block_height: u64) -> NewBlock
217221
events.push(create_stacks_new_event(
218222
0,
219223
events.len() as u32,
220-
StacksTransactionEvent::FTBurnEvent(FTBurnEventData {
224+
StacksTransactionEventPayload::FTBurnEvent(FTBurnEventData {
221225
asset_class_identifier: format!(""),
222226
sender: format!(""),
223227
amount: format!("1"),
@@ -226,7 +230,7 @@ pub fn create_stacks_new_block(height: u64, burn_block_height: u64) -> NewBlock
226230
events.push(create_stacks_new_event(
227231
0,
228232
events.len() as u32,
229-
StacksTransactionEvent::SmartContractEvent(SmartContractEventData {
233+
StacksTransactionEventPayload::SmartContractEvent(SmartContractEventData {
230234
contract_identifier: format!(""),
231235
topic: format!("print"),
232236
hex_value: format!(""),

0 commit comments

Comments
 (0)