mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-15 12:51:00 +02:00
Merge a56876e6b9 into merged_master (Bitcoin PR bitcoin/bitcoin#26024)
This commit is contained in:
commit
fc8637248f
2 changed files with 22 additions and 0 deletions
|
|
@ -1527,6 +1527,11 @@ RPCHelpMan sendall()
|
|||
}
|
||||
}
|
||||
|
||||
// If this transaction is too large, e.g. because the wallet has many UTXOs, it will be rejected by the node's mempool.
|
||||
if (tx_size.weight > MAX_STANDARD_TX_WEIGHT) {
|
||||
throw JSONRPCError(RPC_WALLET_ERROR, "Transaction too large.");
|
||||
}
|
||||
|
||||
CAmount output_amounts_claimed{0};
|
||||
for (const CTxOut& out : rawTx.vout) {
|
||||
output_amounts_claimed += out.nValue.GetAmount(); // ELEMENTS FIXME: is the unblinded value always available since it's in our wallet?
|
||||
|
|
|
|||
|
|
@ -292,6 +292,20 @@ class SendallTest(BitcoinTestFramework):
|
|||
recipients=[self.remainder_target],
|
||||
fee_rate=100000)
|
||||
|
||||
# This tests needs to be the last one otherwise @cleanup will fail with "Transaction too large" error
|
||||
def sendall_fails_with_transaction_too_large(self):
|
||||
self.log.info("Test that sendall fails if resulting transaction is too large")
|
||||
# create many inputs
|
||||
outputs = {self.wallet.getnewaddress(): 0.000025 for _ in range(1500)} # ELEMENTS reduced since our txs are bigger
|
||||
self.def_wallet.sendmany(amounts=outputs)
|
||||
self.generate(self.nodes[0], 1)
|
||||
|
||||
assert_raises_rpc_error(
|
||||
-4,
|
||||
"Transaction too large.",
|
||||
self.wallet.sendall,
|
||||
recipients=[self.remainder_target])
|
||||
|
||||
def run_test(self):
|
||||
self.nodes[0].createwallet("activewallet")
|
||||
self.wallet = self.nodes[0].get_wallet_rpc("activewallet")
|
||||
|
|
@ -343,5 +357,8 @@ class SendallTest(BitcoinTestFramework):
|
|||
# Sendall fails when providing a fee that is too high
|
||||
self.sendall_fails_on_high_fee()
|
||||
|
||||
# Sendall fails when many inputs result to too large transaction
|
||||
self.sendall_fails_with_transaction_too_large()
|
||||
|
||||
if __name__ == '__main__':
|
||||
SendallTest().main()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue