MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / create_self_transfer

Method create_self_transfer

test/functional/test_framework/wallet.py:354–391  ·  view source on GitHub ↗

Create and return a tx with the specified fee. If fee is 0, use fee_rate, where the resulting fee may be exact or at most one satoshi higher than needed.

(
            self,
            *,
            fee_rate=Decimal("0.003"),
            fee=Decimal("0"),
            utxo_to_spend=None,
            target_vsize=0,
            confirmed_only=False,
            **kwargs,
    )

Source from the content-addressed store, hash-verified

352 }
353
354 def create_self_transfer(
355 self,
356 *,
357 fee_rate=Decimal("0.003"),
358 fee=Decimal("0"),
359 utxo_to_spend=None,
360 target_vsize=0,
361 confirmed_only=False,
362 **kwargs,
363 ):
364 """Create and return a tx with the specified fee. If fee is 0, use fee_rate, where the resulting fee may be exact or at most one satoshi higher than needed."""
365 utxo_to_spend = utxo_to_spend or self.get_utxo(confirmed_only=confirmed_only)
366 assert fee_rate >= 0
367 assert fee >= 0
368 # calculate fee
369 if self._mode in (MiniWalletMode.RAW_OP_TRUE, MiniWalletMode.ADDRESS_OP_TRUE):
370 vsize = Decimal(104) # anyone-can-spend
371 elif self._mode == MiniWalletMode.RAW_P2PK:
372 vsize = Decimal(168) # P2PK (73 bytes scriptSig + 35 bytes scriptPubKey + 60 bytes other)
373 else:
374 assert False
375 if target_vsize and not fee: # respect fee_rate if target vsize is passed
376 fee = get_fee(target_vsize, fee_rate)
377 send_value = utxo_to_spend["value"] - (fee or (fee_rate * vsize / 1000))
378 if send_value <= 0:
379 raise RuntimeError(f"UTXO value {utxo_to_spend['value']} is too small to cover fees {(fee or (fee_rate * vsize / 1000))}")
380 # create tx
381 tx = self.create_self_transfer_multi(
382 utxos_to_spend=[utxo_to_spend],
383 amount_per_output=int(COIN * send_value),
384 target_vsize=target_vsize,
385 **kwargs,
386 )
387 if not target_vsize:
388 assert_equal(tx["tx"].get_vsize(), vsize)
389 tx["new_utxo"] = tx.pop("new_utxos")[0]
390
391 return tx
392
393 def sendrawtransaction(self, *, from_node, tx_hex, maxfeerate=0, **kwargs):
394 txid = from_node.sendrawtransaction(hexstring=tx_hex, maxfeerate=maxfeerate, **kwargs)

Callers 15

run_testMethod · 0.95
run_testMethod · 0.95
run_testMethod · 0.95
test_generateblockMethod · 0.95
run_testMethod · 0.95
run_testMethod · 0.95
run_testMethod · 0.95
send_self_transferMethod · 0.95
send_toMethod · 0.95

Calls 5

get_utxoMethod · 0.95
get_feeFunction · 0.90
assert_equalFunction · 0.90
get_vsizeMethod · 0.45