mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-09-12 05:32:22 +02:00
kernel: expose scriptSig for btck_TransactionInput
This commit is contained in:
@@ -715,6 +715,12 @@ const btck_WitnessStack* btck_transaction_input_get_witness_stack(const btck_Tra
|
||||
return btck_WitnessStack::ref(&btck_TransactionInput::get(input).scriptWitness);
|
||||
}
|
||||
|
||||
int btck_transaction_input_get_script_sig(const btck_TransactionInput* input, btck_WriteBytes writer, void* user_data)
|
||||
{
|
||||
const auto& script_sig{btck_TransactionInput::get(input).scriptSig};
|
||||
return writer(script_sig.data(), script_sig.size(), user_data);
|
||||
}
|
||||
|
||||
void btck_transaction_input_destroy(btck_TransactionInput* input)
|
||||
{
|
||||
delete input;
|
||||
|
||||
@@ -1697,6 +1697,20 @@ BITCOINKERNEL_API uint32_t btck_transaction_input_get_sequence(
|
||||
BITCOINKERNEL_API const btck_WitnessStack* btck_transaction_input_get_witness_stack(
|
||||
const btck_TransactionInput* transaction_input) BITCOINKERNEL_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Serialize the script sig of a transaction input through the passed
|
||||
* in callback.
|
||||
*
|
||||
* @param[in] transaction_input Non-null.
|
||||
* @param[in] writer Non-null, function pointer for writing bytes.
|
||||
* @param[in] user_data Nullable, passed back through the writer callback.
|
||||
* @return The return value of the writer.
|
||||
*/
|
||||
BITCOINKERNEL_API int BITCOINKERNEL_WARN_UNUSED_RESULT btck_transaction_input_get_script_sig(
|
||||
const btck_TransactionInput* transaction_input,
|
||||
btck_WriteBytes writer,
|
||||
void* user_data) BITCOINKERNEL_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* Destroy the transaction input.
|
||||
*/
|
||||
|
||||
@@ -635,6 +635,10 @@ public:
|
||||
return WitnessStackView{btck_transaction_input_get_witness_stack(impl())};
|
||||
}
|
||||
|
||||
std::vector<std::byte> GetScriptSig() const
|
||||
{
|
||||
return write_bytes(impl(), btck_transaction_input_get_script_sig);
|
||||
}
|
||||
};
|
||||
|
||||
class TransactionInputView : public View<btck_TransactionInput>, public TransactionInputApi<TransactionInputView>
|
||||
|
||||
@@ -518,6 +518,10 @@ BOOST_AUTO_TEST_CASE(btck_transaction_input)
|
||||
BOOST_CHECK_EQUAL(ws_0.CountItems(), 0);
|
||||
BOOST_CHECK(ws_0.Items().empty());
|
||||
|
||||
// P2PKH: DER sig + compressed pubkey push.
|
||||
BOOST_CHECK(input_0.GetScriptSig() == hex_string_to_byte_vec("473044022004893432347f39beaa280e99da595681ddb20fc45010176897e6e055d716dbfa022040a9e46648a5d10c33ef7cee5e6cf4b56bd513eae3ae044f0039824b02d0f44c012102982331a52822fd9b62e9b5d120da1d248558fac3da3a3c51cd7d9c8ad3da760e"));
|
||||
BOOST_CHECK(input_1.GetScriptSig() == hex_string_to_byte_vec("473044022068bcedc7fe39c9f21ad318df2c2da62c2dc9522a89c28c8420ff9d03d2e6bf7b0220132afd752754e5cb1ea2fd0ed6a38ec666781e34b0e93dc9a08f2457842cf5660121033aeb9c079ea3e08ea03556182ab520ce5c22e6b0cb95cee6435ee17144d860cd"));
|
||||
|
||||
// P2WSH input: OP_0, sig, sig, redeem_script (0, 71, 71, 105 bytes); no scriptSig.
|
||||
Transaction segwit_tx{hex_string_to_byte_vec("010000000001011f97548fbbe7a0db7588a66e18d803d0089315aa7d4cc28360b6ec50ef36718a0100000000ffffffff02df1776000000000017a9146c002a686959067f4866b8fb493ad7970290ab728757d29f0000000000220020701a8d401c84fb13e6baf169d59684e17abd9fa216c8cc5b9fc63d622ff8c58d04004730440220565d170eed95ff95027a69b313758450ba84a01224e1f7f130dda46e94d13f8602207bdd20e307f062594022f12ed5017bbf4a055a06aea91c10110a0e3bb23117fc014730440220647d2dc5b15f60bc37dc42618a370b2a1490293f9e5c8464f53ec4fe1dfe067302203598773895b4b16d37485cbe21b337f4e4b650739880098c592553add7dd4355016952210375e00eb72e29da82b89367947f29ef34afb75e8654f6ea368e0acdfd92976b7c2103a1b26313f430c4b15bb1fdce663207659d8cac749a0e53d70eff01874496feff2103c96d495bfdd5ba4145e3e046fee45e84a8a48ad05bd8dbb395c011a32cf9f88053ae00000000")};
|
||||
TransactionInputView segwit_input = segwit_tx.GetInput(0);
|
||||
@@ -535,6 +539,7 @@ BOOST_AUTO_TEST_CASE(btck_transaction_input)
|
||||
WitnessStack owned_ws_0{ws_0};
|
||||
WitnessStack owned_ws{ws};
|
||||
CheckHandle(owned_ws_0, owned_ws);
|
||||
BOOST_CHECK(segwit_input.GetScriptSig().empty());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(btck_precomputed_txdata) {
|
||||
|
||||
Reference in New Issue
Block a user