Skip to content

Commit 7a8dca5

Browse files
Ludo Galabrurafaelcr
Ludo Galabru
andauthored
fix: issue #296 (#300)
* fix: synthetic predicate * fix: set height 0 for regtest, etc. * fix: issue #296 * chore: update chainhook-sdk * fix: use latest chainhook * fix: augment block with brc20 while indexing * fix: force input 0 --------- Co-authored-by: Rafael Cardenas <rafael@rafaelcr.com>
1 parent 729affb commit 7a8dca5

File tree

10 files changed

+234
-137
lines changed

10 files changed

+234
-137
lines changed

Cargo.lock

+18-18
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components/ordhook-cli/src/cli/mod.rs

+10-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use clap::{Parser, Subcommand};
44
use hiro_system_kit;
55
use ordhook::chainhook_sdk::bitcoincore_rpc::{Auth, Client, RpcApi};
66
use ordhook::chainhook_sdk::chainhooks::types::{
7-
BitcoinChainhookSpecification, HttpHook, InscriptionFeedData,
7+
BitcoinChainhookSpecification, HttpHook, InscriptionFeedData, OrdinalsMetaProtocol,
88
};
99
use ordhook::chainhook_sdk::chainhooks::types::{
1010
BitcoinPredicateType, ChainhookFullSpecification, HookAction, OrdinalOperations,
@@ -31,11 +31,12 @@ use ordhook::db::{
3131
open_readonly_ordhook_db_conn_rocks_db, BlockBytesCursor,
3232
};
3333
use ordhook::download::download_ordinals_dataset_if_required;
34-
use ordhook::{hex, initialize_db};
3534
use ordhook::scan::bitcoin::scan_bitcoin_chainstate_via_rpc_using_predicate;
3635
use ordhook::service::observers::initialize_observers_db;
3736
use ordhook::service::{start_observer_forwarding, Service};
37+
use ordhook::{hex, initialize_db};
3838
use reqwest::Client as HttpClient;
39+
use std::collections::HashSet;
3940
use std::io::{BufReader, Read};
4041
use std::path::PathBuf;
4142
use std::process;
@@ -972,6 +973,12 @@ pub fn build_predicate_from_cli(
972973
(Some(start), None) => (Some(start), None, None),
973974
_ => unreachable!(),
974975
};
976+
let mut meta_protocols: Option<HashSet<OrdinalsMetaProtocol>> = None;
977+
if config.meta_protocols.brc20 {
978+
let mut meta = HashSet::<OrdinalsMetaProtocol>::new();
979+
meta.insert(OrdinalsMetaProtocol::All);
980+
meta_protocols = Some(meta.clone());
981+
}
975982
let predicate = BitcoinChainhookSpecification {
976983
network: config.network.bitcoin_network.clone(),
977984
uuid: post_to.to_string(),
@@ -989,9 +996,7 @@ pub fn build_predicate_from_cli(
989996
expired_at: None,
990997
enabled: true,
991998
predicate: BitcoinPredicateType::OrdinalsProtocol(OrdinalOperations::InscriptionFeed(
992-
InscriptionFeedData {
993-
meta_protocols: None,
994-
},
999+
InscriptionFeedData { meta_protocols },
9951000
)),
9961001
action: HookAction::HttpPost(HttpHook {
9971002
url: post_to.to_string(),

components/ordhook-core/Cargo.toml

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ serde_derive = "1"
1111
hex = "0.4.3"
1212
rand = "0.8.5"
1313
lru = "0.12.3"
14-
chainhook-sdk = { version = "=0.12.8", features = ["zeromq"] }
15-
# chainhook-sdk = { version = "=0.12.5", path = "../../../chainhook/components/chainhook-sdk", features = ["zeromq"] }
14+
chainhook-sdk = { version = "=0.12.10", features = ["zeromq"] }
15+
# chainhook-sdk = { version = "=0.12.10", path = "../../../chainhook/components/chainhook-sdk", features = ["zeromq"] }
1616
hiro-system-kit = "0.3.1"
1717
reqwest = { version = "0.11", default-features = false, features = [
1818
"stream",
@@ -35,7 +35,7 @@ dashmap = "5.4.0"
3535
fxhash = "0.2.1"
3636
rusqlite = { version = "0.28.0", features = ["bundled"] }
3737
anyhow = { version = "1.0.56", features = ["backtrace"] }
38-
schemars = { version = "0.8.10", git = "https://github.com/hirosystems/schemars.git", branch = "feat-chainhook-fixes" }
38+
schemars = { version = "0.8.16", git = "https://github.com/hirosystems/schemars.git", branch = "feat-chainhook-fixes" }
3939
progressing = '3'
4040
futures = "0.3.28"
4141
rocksdb = { version = "0.21.0", default-features = false, features = [

components/ordhook-core/src/core/meta_protocols/brc20/mod.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,17 @@ pub mod test_utils;
99
pub fn brc20_activation_height(network: &BitcoinNetwork) -> u64 {
1010
match network {
1111
BitcoinNetwork::Mainnet => 779832,
12-
BitcoinNetwork::Regtest => todo!(),
13-
BitcoinNetwork::Testnet => todo!(),
14-
BitcoinNetwork::Signet => todo!(),
12+
BitcoinNetwork::Regtest => 0,
13+
BitcoinNetwork::Testnet => 0,
14+
BitcoinNetwork::Signet => 0,
1515
}
1616
}
1717

1818
pub fn brc20_self_mint_activation_height(network: &BitcoinNetwork) -> u64 {
1919
match network {
2020
BitcoinNetwork::Mainnet => 837090,
21-
BitcoinNetwork::Regtest => todo!(),
22-
BitcoinNetwork::Testnet => todo!(),
23-
BitcoinNetwork::Signet => todo!(),
21+
BitcoinNetwork::Regtest => 0,
22+
BitcoinNetwork::Testnet => 0,
23+
BitcoinNetwork::Signet => 0,
2424
}
2525
}

components/ordhook-core/src/core/mod.rs

+8-11
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ pub fn resolve_absolute_pointer(inputs: &Vec<u64>, absolute_pointer_value: u64)
7979
}
8080

8181
pub fn compute_next_satpoint_data(
82-
_tx_index: usize,
8382
input_index: usize,
8483
inputs: &Vec<u64>,
8584
outputs: &Vec<u64>,
@@ -220,40 +219,39 @@ pub fn should_sync_ordhook_db(
220219
#[test]
221220
fn test_identify_next_output_index_destination() {
222221
assert_eq!(
223-
compute_next_satpoint_data(0, 0, &vec![20, 30, 45], &vec![20, 30, 45], 10, None),
222+
compute_next_satpoint_data(0, &vec![20, 30, 45], &vec![20, 30, 45], 10, None),
224223
SatPosition::Output((0, 10))
225224
);
226225
assert_eq!(
227-
compute_next_satpoint_data(0, 0, &vec![20, 30, 45], &vec![20, 30, 45], 20, None),
226+
compute_next_satpoint_data(0, &vec![20, 30, 45], &vec![20, 30, 45], 20, None),
228227
SatPosition::Output((1, 0))
229228
);
230229
assert_eq!(
231-
compute_next_satpoint_data(0, 1, &vec![20, 30, 45], &vec![20, 30, 45], 25, None),
230+
compute_next_satpoint_data(1, &vec![20, 30, 45], &vec![20, 30, 45], 25, None),
232231
SatPosition::Output((1, 25))
233232
);
234233
assert_eq!(
235-
compute_next_satpoint_data(0, 1, &vec![20, 30, 45], &vec![20, 5, 45], 26, None),
234+
compute_next_satpoint_data(1, &vec![20, 30, 45], &vec![20, 5, 45], 26, None),
236235
SatPosition::Output((2, 21))
237236
);
238237
assert_eq!(
239-
compute_next_satpoint_data(0, 1, &vec![10, 10, 10], &vec![30], 20, None),
238+
compute_next_satpoint_data(1, &vec![10, 10, 10], &vec![30], 20, None),
240239
SatPosition::Fee(0)
241240
);
242241
assert_eq!(
243-
compute_next_satpoint_data(0, 0, &vec![10, 10, 10], &vec![30], 30, None),
242+
compute_next_satpoint_data(0, &vec![10, 10, 10], &vec![30], 30, None),
244243
SatPosition::Fee(0)
245244
);
246245
assert_eq!(
247-
compute_next_satpoint_data(0, 0, &vec![10, 10, 10], &vec![30], 0, None),
246+
compute_next_satpoint_data(0, &vec![10, 10, 10], &vec![30], 0, None),
248247
SatPosition::Output((0, 0))
249248
);
250249
assert_eq!(
251-
compute_next_satpoint_data(0, 2, &vec![20, 30, 45], &vec![20, 30, 45], 95, None),
250+
compute_next_satpoint_data(2, &vec![20, 30, 45], &vec![20, 30, 45], 95, None),
252251
SatPosition::Fee(50)
253252
);
254253
assert_eq!(
255254
compute_next_satpoint_data(
256-
0,
257255
2,
258256
&vec![1000, 600, 546, 63034],
259257
&vec![1600, 10000, 15000],
@@ -264,7 +262,6 @@ fn test_identify_next_output_index_destination() {
264262
);
265263
assert_eq!(
266264
compute_next_satpoint_data(
267-
0,
268265
3,
269266
&vec![6100, 148660, 103143, 7600],
270267
&vec![81434, 173995],

components/ordhook-core/src/core/pipeline/processors/inscription_indexing.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ pub fn process_block(
333333

334334
if let Some(brc20_db_tx) = brc20_db_tx {
335335
write_brc20_block_operations(
336-
&block,
336+
block,
337337
&mut brc20_operation_map,
338338
brc20_cache,
339339
&brc20_db_tx,

components/ordhook-core/src/core/protocol/inscription_sequencing.rs

+9-11
Original file line numberDiff line numberDiff line change
@@ -617,7 +617,7 @@ pub fn augment_block_with_ordinals_inscriptions_data(
617617

618618
let network = get_bitcoin_network(&block.metadata.network);
619619
let coinbase_subsidy = Height(block.block_identifier.index).subsidy();
620-
let coinbase_txid = &block.transactions[0].transaction_identifier.clone();
620+
let coinbase_tx = &block.transactions[0].clone();
621621
let mut cumulated_fees = 0u64;
622622

623623
for (tx_index, tx) in block.transactions.iter_mut().enumerate() {
@@ -628,7 +628,7 @@ pub fn augment_block_with_ordinals_inscriptions_data(
628628
sequence_cursor,
629629
&network,
630630
inscriptions_data,
631-
coinbase_txid,
631+
coinbase_tx,
632632
coinbase_subsidy,
633633
&mut cumulated_fees,
634634
&mut sats_overflows,
@@ -684,7 +684,7 @@ fn augment_transaction_with_ordinals_inscriptions_data(
684684
sequence_cursor: &mut SequenceCursor,
685685
network: &Network,
686686
inscriptions_data: &mut BTreeMap<(TransactionIdentifier, usize, u64), TraversalResult>,
687-
coinbase_txid: &TransactionIdentifier,
687+
coinbase_tx: &BitcoinTransactionData,
688688
coinbase_subsidy: u64,
689689
cumulated_fees: &mut u64,
690690
sats_overflows: &mut VecDeque<(usize, usize)>,
@@ -773,11 +773,10 @@ fn augment_transaction_with_ordinals_inscriptions_data(
773773

774774
let (destination, satpoint_post_transfer, output_value) = compute_satpoint_post_transfer(
775775
&&*tx,
776-
tx_index,
777776
input_index,
778777
relative_offset,
779778
network,
780-
coinbase_txid,
779+
coinbase_tx,
781780
coinbase_subsidy,
782781
cumulated_fees,
783782
ctx,
@@ -842,7 +841,7 @@ fn augment_transaction_with_ordinals_inscriptions_data(
842841
fn consolidate_transaction_with_pre_computed_inscription_data(
843842
tx: &mut BitcoinTransactionData,
844843
tx_index: usize,
845-
coinbase_txid: &TransactionIdentifier,
844+
coinbase_tx: &BitcoinTransactionData,
846845
coinbase_subsidy: u64,
847846
cumulated_fees: &mut u64,
848847
network: &Network,
@@ -889,11 +888,10 @@ fn consolidate_transaction_with_pre_computed_inscription_data(
889888
// Compute satpoint_post_inscription
890889
let (destination, satpoint_post_transfer, output_value) = compute_satpoint_post_transfer(
891890
tx,
892-
tx_index,
893891
input_index,
894892
relative_offset,
895893
network,
896-
coinbase_txid,
894+
coinbase_tx,
897895
coinbase_subsidy,
898896
cumulated_fees,
899897
ctx,
@@ -930,7 +928,7 @@ pub fn consolidate_block_with_pre_computed_ordinals_data(
930928
) {
931929
let network = get_bitcoin_network(&block.metadata.network);
932930
let coinbase_subsidy = Height(block.block_identifier.index).subsidy();
933-
let coinbase_txid = &block.transactions[0].transaction_identifier.clone();
931+
let coinbase_tx = &block.transactions[0].clone();
934932
let mut cumulated_fees = 0;
935933
let expected_inscriptions_count = get_inscriptions_revealed_in_block(&block).len();
936934
let mut inscriptions_data = loop {
@@ -959,7 +957,7 @@ pub fn consolidate_block_with_pre_computed_ordinals_data(
959957
consolidate_transaction_with_pre_computed_inscription_data(
960958
tx,
961959
tx_index,
962-
coinbase_txid,
960+
&coinbase_tx,
963961
coinbase_subsidy,
964962
&mut cumulated_fees,
965963
&network,
@@ -973,7 +971,7 @@ pub fn consolidate_block_with_pre_computed_ordinals_data(
973971
tx,
974972
tx_index,
975973
&network,
976-
&coinbase_txid,
974+
&coinbase_tx,
977975
coinbase_subsidy,
978976
&mut cumulated_fees,
979977
inscriptions_db_tx,

0 commit comments

Comments
 (0)