Skip to content

Commit 4a078de

Browse files
Squashed 'libbitcoinkernel-sys/bitcoin/' changes from 86b9d69f8829..9f6541e27cc6
9f6541e27cc6 Change kernel install directory temporarily dcc4322d6202 Add BlockReader functionality to kernel library REVERT: 86b9d69f8829 Change kernel install directory temporarily REVERT: 1ca61848e19c Add BlockReader functionality to kernel library git-subtree-dir: libbitcoinkernel-sys/bitcoin git-subtree-split: 9f6541e27cc656add6c44ba3a33841fdecfa3f75
1 parent a653fcc commit 4a078de

File tree

3 files changed

+68
-5
lines changed

3 files changed

+68
-5
lines changed

src/kernel/bitcoinkernel.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,11 @@ typedef struct kernel_TransactionOutPoint kernel_TransactionOutPoint;
138138
*/
139139
typedef struct kernel_TransactionScriptSig kernel_TransactionScriptSig;
140140

141+
/**
142+
* Opaque data structure for holding a witness.
143+
*/
144+
typedef struct kernel_TransactionWitness kernel_TransactionWitness;
145+
141146
/**
142147
* Opaque data structure for holding a logging connection.
143148
*

src/kernel/blockreader/blockreader.cpp

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ const CScript* cast_const_script_sig(const kernel_TransactionScriptSig* script_s
7070
return reinterpret_cast<const CScript*>(script_sig);
7171
}
7272

73+
const CScriptWitness* cast_const_witness(const kernel_TransactionWitness* witness)
74+
{
75+
return reinterpret_cast<const CScriptWitness*>(witness);
76+
}
77+
7378
kernel_blockreader_IBDStatus cast_ibd_status(IBDStatus status)
7479
{
7580
switch (status) {
@@ -472,18 +477,65 @@ kernel_ByteArray* kernel_copy_script_sig_data(const kernel_TransactionScriptSig*
472477
return byte_array;
473478
}
474479

475-
bool kernel_transaction_script_sig_is_push_only(const kernel_TransactionScriptSig* _script_sig)
480+
bool kernel_script_sig_is_push_only(const kernel_TransactionScriptSig* _script_sig)
476481
{
477482
const auto* script = cast_const_script_sig(_script_sig);
478483

479484
return script->IsPushOnly();
480485
}
481486

482-
bool kernel_transaction_script_sig_is_empty(const kernel_TransactionScriptSig* _script_sig)
487+
bool kernel_script_sig_is_empty(const kernel_TransactionScriptSig* _script_sig)
483488
{
484489
const auto* script = cast_const_script_sig(_script_sig);
485490

486491
return script->empty();
487492
}
488493

494+
uint32_t kernel_transaction_input_get_n_sequence(const kernel_TransactionInput* _input)
495+
{
496+
const auto* input = cast_const_transaction_input(_input);
497+
498+
return input->nSequence;
499+
}
500+
501+
const kernel_TransactionWitness* kernel_transaction_input_get_witness(const kernel_TransactionInput* _input)
502+
{
503+
const auto* input = cast_const_transaction_input(_input);
504+
505+
return reinterpret_cast<const kernel_TransactionWitness*>(&input->scriptWitness);
506+
}
507+
508+
uint32_t kernel_witness_get_stack_size(const kernel_TransactionWitness* _witness)
509+
{
510+
const auto* witness = cast_const_witness(_witness);
511+
512+
return witness->stack.size();
513+
}
514+
515+
kernel_ByteArray* kernel_witness_get_stack_item(const kernel_TransactionWitness* _witness, uint32_t index)
516+
{
517+
const auto* witness = cast_const_witness(_witness);
518+
519+
if (index >= witness->stack.size()) {
520+
return nullptr;
521+
}
522+
523+
const auto& stack_item = witness->stack.at(index);
524+
525+
auto byte_array = new kernel_ByteArray();
526+
byte_array->size = stack_item.size();
527+
byte_array->data = new unsigned char[byte_array->size];
528+
529+
std::memcpy(byte_array->data, stack_item.data(), byte_array->size);
530+
531+
return byte_array;
532+
}
533+
534+
bool kernel_witness_is_null(const kernel_TransactionWitness* _witness)
535+
{
536+
const auto* witness = cast_const_witness(_witness);
537+
538+
return witness->IsNull();
539+
}
540+
489541
} // extern "C"

src/kernel/blockreader/blockreader.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,19 @@ BITCOINKERNEL_API const kernel_TransactionScriptSig* BITCOINKERNEL_WARN_UNUSED_R
123123

124124
BITCOINKERNEL_API kernel_ByteArray* BITCOINKERNEL_WARN_UNUSED_RESULT kernel_copy_script_sig_data(const kernel_TransactionScriptSig* script_sig) BITCOINKERNEL_ARG_NONNULL(1);
125125

126-
BITCOINKERNEL_API bool BITCOINKERNEL_WARN_UNUSED_RESULT kernel_transaction_script_sig_is_push_only(const kernel_TransactionScriptSig* script_sig) BITCOINKERNEL_ARG_NONNULL(1);
126+
BITCOINKERNEL_API bool BITCOINKERNEL_WARN_UNUSED_RESULT kernel_script_sig_is_push_only(const kernel_TransactionScriptSig* script_sig) BITCOINKERNEL_ARG_NONNULL(1);
127127

128-
BITCOINKERNEL_API bool BITCOINKERNEL_WARN_UNUSED_RESULT kernel_transaction_script_sig_is_empty(const kernel_TransactionScriptSig* script_sig) BITCOINKERNEL_ARG_NONNULL(1);
128+
BITCOINKERNEL_API bool BITCOINKERNEL_WARN_UNUSED_RESULT kernel_script_sig_is_empty(const kernel_TransactionScriptSig* script_sig) BITCOINKERNEL_ARG_NONNULL(1);
129129

130-
BITCOINKERNEL_API void kernel_transaction_script_sig_destroy(kernel_TransactionScriptSig* script_sig) BITCOINKERNEL_ARG_NONNULL(1);
130+
BITCOINKERNEL_API uint32_t BITCOINKERNEL_WARN_UNUSED_RESULT kernel_transaction_input_get_n_sequence(const kernel_TransactionInput* input) BITCOINKERNEL_ARG_NONNULL(1);
131131

132+
BITCOINKERNEL_API const kernel_TransactionWitness* BITCOINKERNEL_WARN_UNUSED_RESULT kernel_transaction_input_get_witness(const kernel_TransactionInput* input) BITCOINKERNEL_ARG_NONNULL(1);
132133

134+
BITCOINKERNEL_API uint32_t BITCOINKERNEL_WARN_UNUSED_RESULT kernel_witness_get_stack_size(const kernel_TransactionWitness* witness) BITCOINKERNEL_ARG_NONNULL(1);
135+
136+
BITCOINKERNEL_API kernel_ByteArray* BITCOINKERNEL_WARN_UNUSED_RESULT kernel_witness_get_stack_item(const kernel_TransactionWitness* witness, uint32_t index) BITCOINKERNEL_ARG_NONNULL(1);
137+
138+
BITCOINKERNEL_API bool BITCOINKERNEL_WARN_UNUSED_RESULT kernel_witness_is_null(const kernel_TransactionWitness* witness) BITCOINKERNEL_ARG_NONNULL(1);
133139

134140
#ifdef __cplusplus
135141
}

0 commit comments

Comments
 (0)