|
7 | 7 | See https://github.com/bitcoin/bitcoin/blob/master/doc/tracing.md#context-mempool
|
8 | 8 | """
|
9 | 9 |
|
| 10 | +import ctypes |
10 | 11 | from decimal import Decimal
|
11 | 12 |
|
12 | 13 | # Test will be skipped if we don't have bcc installed
|
|
63 | 64 | u8 replacement_hash[HASH_LENGTH];
|
64 | 65 | s32 replacement_vsize;
|
65 | 66 | s64 replacement_fee;
|
| 67 | + bool replaced_by_transaction; |
66 | 68 | };
|
67 | 69 |
|
68 | 70 | // BPF perf buffer to push the data to user space.
|
|
115 | 117 | bpf_usdt_readarg_p(5, ctx, &replaced.replacement_hash, HASH_LENGTH);
|
116 | 118 | bpf_usdt_readarg(6, ctx, &replaced.replacement_vsize);
|
117 | 119 | bpf_usdt_readarg(7, ctx, &replaced.replacement_fee);
|
| 120 | + bpf_usdt_readarg(8, ctx, &replaced.replaced_by_transaction); |
118 | 121 |
|
119 | 122 | replaced_events.perf_submit(ctx, &replaced, sizeof(replaced));
|
120 | 123 | return 0;
|
|
123 | 126 | """
|
124 | 127 |
|
125 | 128 |
|
| 129 | +class MempoolReplaced(ctypes.Structure): |
| 130 | + _fields_ = [ |
| 131 | + ("replaced_hash", ctypes.c_ubyte * 32), |
| 132 | + ("replaced_vsize", ctypes.c_int32), |
| 133 | + ("replaced_fee", ctypes.c_int64), |
| 134 | + ("replaced_entry_time", ctypes.c_uint64), |
| 135 | + ("replacement_hash", ctypes.c_ubyte * 32), |
| 136 | + ("replacement_vsize", ctypes.c_int32), |
| 137 | + ("replacement_fee", ctypes.c_int64), |
| 138 | + ("replaced_by_transaction", ctypes.c_bool), |
| 139 | + ] |
| 140 | + |
| 141 | + |
126 | 142 | class MempoolTracepointTest(BitcoinTestFramework):
|
127 | 143 | def set_test_params(self):
|
128 | 144 | self.num_nodes = 1
|
@@ -230,7 +246,8 @@ def replaced_test(self):
|
230 | 246 | bpf = BPF(text=MEMPOOL_TRACEPOINTS_PROGRAM, usdt_contexts=[ctx], debug=0, cflags=["-Wno-error=implicit-function-declaration"])
|
231 | 247 |
|
232 | 248 | def handle_replaced_event(_, data, __):
|
233 |
| - events.append(bpf["replaced_events"].event(data)) |
| 249 | + event = ctypes.cast(data, ctypes.POINTER(MempoolReplaced)).contents |
| 250 | + events.append(event) |
234 | 251 |
|
235 | 252 | bpf["replaced_events"].open_perf_buffer(handle_replaced_event)
|
236 | 253 |
|
@@ -261,6 +278,7 @@ def handle_replaced_event(_, data, __):
|
261 | 278 | assert_equal(bytes(event.replacement_hash)[::-1].hex(), replacement_tx["txid"])
|
262 | 279 | assert_equal(event.replacement_vsize, replacement_tx["tx"].get_vsize())
|
263 | 280 | assert_equal(event.replacement_fee, replacement_fee)
|
| 281 | + assert_equal(event.replaced_by_transaction, True) |
264 | 282 |
|
265 | 283 | bpf.cleanup()
|
266 | 284 | self.generate(self.wallet, 1)
|
|
0 commit comments