kernel: Add API function for getting a tx's nLockTime
What changed, and why it matters
This commit simply adds a new read-only function to the Bitcoin Core kernel library that lets callers retrieve a transaction's nLockTime value. nLockTime is a standard, public field in every Bitcoin transaction. The change does not alter how transactions are validated, stored, or relayed, and it introduces no security fix or vulnerability.
No security action needed. Treat as a routine API addition.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch adds btck_transaction_get_locktime() to the C API and a corresponding GetLocktime() wrapper in the C++ header. It returns the existing nLockTime member of a CTransaction. A unit test is updated to verify the value matches the expected locktime for a known test transaction. No logic changes occur in validation, mempool, consensus, or networking code.
Changed components
src/kernel/bitcoinkernel.cppsrc/kernel/bitcoinkernel.hsrc/kernel/bitcoinkernel_wrapper.hsrc/test/kernel/test_kernel.cppInspect captured patch +20 / −0
diff --git a/src/kernel/bitcoinkernel.cpp b/src/kernel/bitcoinkernel.cpp
index 09b4853f..b0ce1721 100644
--- a/src/kernel/bitcoinkernel.cpp
+++ b/src/kernel/bitcoinkernel.cpp
@@ -533,6 +533,11 @@ const btck_TransactionInput* btck_transaction_get_input_at(const btck_Transactio
return btck_TransactionInput::ref(&btck_Transaction::get(transaction)->vin[input_index]);
}
+uint32_t btck_transaction_get_locktime(const btck_Transaction* transaction)
+{
+ return btck_Transaction::get(transaction)->nLockTime;
+}
+
const btck_Txid* btck_transaction_get_txid(const btck_Transaction* transaction)
{
return btck_Txid::ref(&btck_Transaction::get(transaction)->GetHash());
diff --git a/src/kernel/bitcoinkernel.h b/src/kernel/bitcoinkernel.h
index 57c88c12..1513ae3f 100644
--- a/src/kernel/bitcoinkernel.h
+++ b/src/kernel/bitcoinkernel.h
@@ -576,6 +576,15 @@ BITCOINKERNEL_API const btck_TransactionInput* BITCOINKERNEL_WARN_UNUSED_RESULT
BITCOINKERNEL_API size_t BITCOINKERNEL_WARN_UNUSED_RESULT btck_transaction_count_inputs(
const btck_Transaction* transaction) BITCOINKERNEL_ARG_NONNULL(1);
+/**
+ * @brief Get a transaction's nLockTime value.
+ *
+ * @param[in] transaction Non-null.
+ * @return The nLockTime value.
+ */
+BITCOINKERNEL_API uint32_t BITCOINKERNEL_WARN_UNUSED_RESULT btck_transaction_get_locktime(
+ const btck_Transaction* transaction) BITCOINKERNEL_ARG_NONNULL(1);
+
/**
* @brief Get the txid of a transaction. The returned txid is not owned and
* depends on the lifetime of the transaction.
diff --git a/src/kernel/bitcoinkernel_wrapper.h b/src/kernel/bitcoinkernel_wrapper.h
index 064d0dd1..83ec5d02 100644
--- a/src/kernel/bitcoinkernel_wrapper.h
+++ b/src/kernel/bitcoinkernel_wrapper.h
@@ -596,6 +596,11 @@ public:
return TransactionInputView{btck_transaction_get_input_at(impl(), index)};
}
+ uint32_t GetLocktime() const
+ {
+ return btck_transaction_get_locktime(impl());
+ }
+
TxidView Txid() const
{
return TxidView{btck_transaction_get_txid(impl())};
diff --git a/src/test/kernel/test_kernel.cpp b/src/test/kernel/test_kernel.cpp
index 4a97f5ba..ab5d694f 100644
--- a/src/test/kernel/test_kernel.cpp
+++ b/src/test/kernel/test_kernel.cpp
@@ -401,6 +401,7 @@ BOOST_AUTO_TEST_CASE(btck_transaction_tests)
BOOST_CHECK_EQUAL(tx.CountOutputs(), 2);
BOOST_CHECK_EQUAL(tx.CountInputs(), 1);
+ BOOST_CHECK_EQUAL(tx.GetLocktime(), 510826);
auto broken_tx_data{std::span<std::byte>{tx_data.begin(), tx_data.begin() + 10}};
BOOST_CHECK_THROW(Transaction{broken_tx_data}, std::runtime_error);
auto output{tx.GetOutput(tx.CountOutputs() - 1)};
Why this scored 20/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.