Page MenuHomePhabricator

D16917.diff
No OneTemporary

D16917.diff

diff --git a/chronik/chronik-db/src/groups/script.rs b/chronik/chronik-db/src/groups/script.rs
--- a/chronik/chronik-db/src/groups/script.rs
+++ b/chronik/chronik-db/src/groups/script.rs
@@ -51,15 +51,20 @@
if self.is_coinbase && !self.is_outputs {
return None;
}
+ let script = if self.is_outputs {
+ // Skip OP_RETURN scripts
+ while self.tx.outputs.get(self.idx)?.script.is_opreturn() {
+ self.idx += 1;
+ }
+ &self.tx.outputs[self.idx].script
+ } else {
+ &self.tx.inputs.get(self.idx)?.coin.as_ref()?.output.script
+ };
let idx = self.idx;
self.idx += 1;
Some(MemberItem {
idx,
- member: if self.is_outputs {
- &self.tx.outputs.get(idx)?.script
- } else {
- &self.tx.inputs.get(idx)?.coin.as_ref()?.output.script
- },
+ member: script,
})
}
}
@@ -147,7 +152,7 @@
..Default::default()
})
.collect(),
- outputs: [[0x53].as_ref(), &[0x51]]
+ outputs: [[0x53].as_ref(), &[0x6a], &[0x6a], &[0x51], &[0x6a]]
.into_iter()
.map(|script| TxOutput {
script: Script::new(script.into()),
@@ -191,7 +196,7 @@
script_group.output_members(query, &()).collect::<Vec<_>>(),
vec![
make_member_item(0, &make_script(vec![0x53])),
- make_member_item(1, &make_script(vec![0x51])),
+ make_member_item(3, &make_script(vec![0x51])),
],
);
@@ -214,7 +219,7 @@
script_group.output_members(query, &()).collect::<Vec<_>>(),
vec![
make_member_item(0, &make_script(vec![0x53])),
- make_member_item(1, &make_script(vec![0x51])),
+ make_member_item(3, &make_script(vec![0x51])),
],
);
diff --git a/test/functional/chronik_script_history.py b/test/functional/chronik_script_history.py
--- a/test/functional/chronik_script_history.py
+++ b/test/functional/chronik_script_history.py
@@ -18,6 +18,7 @@
)
from test_framework.messages import COutPoint, CTransaction, CTxIn, CTxOut
from test_framework.p2p import P2PDataStore
+from test_framework.script import OP_RETURN, CScript
from test_framework.test_framework import BitcoinTestFramework
from test_framework.txtools import pad_tx
from test_framework.util import assert_equal, iter_chunks
@@ -195,6 +196,7 @@
coinblock = node.getblock(coinblockhash)
cointxids.append(coinblock["tx"][0])
+ op_return_script = CScript([OP_RETURN, b"hello"])
mempool_txs = []
mempool_txids = []
# Send 10 mempool txs, each with their own mocktime
@@ -209,13 +211,21 @@
scriptSig=SCRIPTSIG_OP_TRUE,
)
]
- tx.vout = [CTxOut(coinvalue - 1000, P2SH_OP_TRUE)]
+ tx.vout = [
+ CTxOut(coinvalue - 1000, P2SH_OP_TRUE),
+ CTxOut(0, op_return_script),
+ ]
pad_tx(tx)
mempool_txs.append(tx)
node.setmocktime(mocktime + mocktime_offset)
txid = node.sendrawtransaction(tx.serialize().hex())
mempool_txids.append(txid)
+ assert_equal(
+ chronik.script("other", op_return_script.hex()).history().ok(),
+ pb.TxHistoryPage(),
+ )
+
def tx_sort_key(entry):
time_first_seen = entry["time_first_seen"]
txid = entry["txid"]
@@ -271,6 +281,12 @@
check_tx_history([], newblocktxs + blocktxs, page_size=25)
check_tx_history([], newblocktxs + blocktxs, page_size=200)
+ # Still no OP_RETURN outputs indexed
+ assert_equal(
+ chronik.script("other", op_return_script.hex()).history().ok(),
+ pb.TxHistoryPage(),
+ )
+
# Order for different page sizes is not guaranteed within blocks.
txs_individually = [
chronik.script(script_type, payload_hex)
diff --git a/test/functional/chronik_script_utxos.py b/test/functional/chronik_script_utxos.py
--- a/test/functional/chronik_script_utxos.py
+++ b/test/functional/chronik_script_utxos.py
@@ -20,6 +20,7 @@
)
from test_framework.messages import COutPoint, CTransaction, CTxIn, CTxOut
from test_framework.p2p import P2PDataStore
+from test_framework.script import OP_RETURN, CScript
from test_framework.test_framework import BitcoinTestFramework
from test_framework.txtools import pad_tx
from test_framework.util import assert_equal
@@ -167,12 +168,13 @@
pb.ScriptUtxos(script=bytes(P2SH_OP_TRUE), utxos=expected_utxos),
)
- # Make tx spending the 3rd UTXO, and creating 1 UTXO
+ # Make tx spending the 3rd UTXO, and creating 1 UTXO, and one OP_RETURN
+ op_return_script = CScript([OP_RETURN, b"hello"])
tx2 = CTransaction()
tx2.vin = [
CTxIn(outpoint=COutPoint(int(txid, 16), 3), scriptSig=SCRIPTSIG_OP_TRUE)
]
- tx2.vout = [CTxOut(2500, P2SH_OP_TRUE)]
+ tx2.vout = [CTxOut(2500, P2SH_OP_TRUE), CTxOut(0, op_return_script)]
pad_tx(tx2)
txid2 = node.sendrawtransaction(tx2.serialize().hex())
@@ -195,6 +197,11 @@
pb.ScriptUtxos(script=bytes(P2SH_OP_TRUE), utxos=expected_utxos),
)
+ assert_equal(
+ chronik.script("other", op_return_script.hex()).utxos().ok(),
+ pb.ScriptUtxos(script=bytes(op_return_script), utxos=[]),
+ )
+
# Make tx spending a DB UTXO and a mempool UTXO
tx3 = CTransaction()
tx3.vin = [

File Metadata

Mime Type
text/plain
Expires
Sat, Apr 26, 11:16 (10 h, 42 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5573381
Default Alt Text
D16917.diff (5 KB)

Event Timeline