Skip to content

Commit d3673f8

Browse files
committed
fix: use discountvsize in miner if discount enabled
1 parent e1d6b66 commit d3673f8

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

src/node/miner.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,8 +448,12 @@ void BlockAssembler::addPackageTxs(int& nPackagesSelected, int& nDescendantsUpda
448448
}
449449

450450
if (packageFees < blockMinFeeRate.GetFee(packageSize)) {
451-
// Everything else we might consider has a lower fee rate
452-
return;
451+
// ELEMENTS: check discountvsize
452+
uint64_t discountSize = fUsingModified ? modit->discountSizeWithAncestors : iter->GetDiscountSizeWithAncestors();
453+
if (packageFees < blockMinFeeRate.GetFee(discountSize)) {
454+
// Everything else we might consider has a lower fee rate
455+
return;
456+
}
453457
}
454458

455459
if (!TestPackage(packageSize, packageSigOpsCost)) {

test/functional/feature_discount_ct.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ def set_test_params(self):
1919
"-con_connect_genesis_outputs=1",
2020
"-initialfreecoins=2100000000000000",
2121
"-txindex=1",
22+
"-minrelaytxfee=0.00000100",
23+
"-blockmintxfee=0.00000100",
24+
"-fallbackfee=0.00000100",
2225
]
2326
self.extra_args = [
2427
# node 0 does not accept nor create discounted CTs
@@ -154,6 +157,33 @@ def run_test(self):
154157
tx = node0.getrawtransaction(txid, True)
155158
assert_equal(tx['vsize'], 2575)
156159

160+
# check liquidv1 min feerate
161+
feerate = 0.1
162+
self.log.info(f"Send confidential (discounted) tx to node 1 at {feerate} sats/vb")
163+
addr = node1.getnewaddress()
164+
info = node1.getaddressinfo(addr)
165+
txid = node2.sendtoaddress(info['confidential'], 1.0, "", "", False, None, None, None, None, None, None, feerate)
166+
self.sync_mempools([node1, node2])
167+
assert_equal(node0.getrawmempool(), [])
168+
self.generate(node2, 1, sync_fun=self.sync_blocks)
169+
for node in [node2, node1]:
170+
tx = node.gettransaction(txid, True, True)
171+
assert_equal(tx["confirmations"], 1)
172+
decoded = tx['decoded']
173+
vin = decoded['vin']
174+
vout = decoded['vout']
175+
assert_equal(len(vin), 2)
176+
assert_equal(len(vout), 3)
177+
if 'bitcoin' in decoded['fee']:
178+
assert_equal(decoded['fee']['bitcoin'], Decimal('-0.00000041'))
179+
else:
180+
assert_equal(decoded['fee'][bitcoin], Decimal('0.00000041'))
181+
assert_equal(decoded['vsize'], 2575)
182+
assert_equal(decoded['discountvsize'], 410)
183+
# node0 only has vsize
184+
tx = node0.getrawtransaction(txid, True)
185+
assert_equal(tx['vsize'], 2575)
186+
157187

158188
if __name__ == '__main__':
159189
CTTest().main()

0 commit comments

Comments
 (0)