Skip to content

Commit 78c2c48

Browse files
committed
[bindings] Support exposing bitcoin::OutPoints as our common type
1 parent ce56152 commit 78c2c48

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

c-bindings-gen/src/types.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -401,10 +401,9 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
401401
"bitcoin::secp256k1::Error" if !is_ref => Some("crate::c_types::Secp256k1Error"),
402402
"bitcoin::blockdata::script::Script" if is_ref => Some("crate::c_types::u8slice"),
403403
"bitcoin::blockdata::script::Script" if !is_ref => Some("crate::c_types::derived::CVec_u8Z"),
404-
"bitcoin::blockdata::transaction::OutPoint" if is_ref => Some("crate::chain::transaction::OutPoint"),
404+
"bitcoin::blockdata::transaction::OutPoint" => Some("crate::chain::transaction::OutPoint"),
405405
"bitcoin::blockdata::transaction::Transaction" => Some("crate::c_types::Transaction"),
406406
"bitcoin::blockdata::transaction::TxOut" if !is_ref => Some("crate::c_types::TxOut"),
407-
"bitcoin::OutPoint" => Some("crate::chain::transaction::OutPoint"),
408407
"bitcoin::network::constants::Network" => Some("crate::bitcoin::network::Network"),
409408
"bitcoin::blockdata::block::BlockHeader" if is_ref => Some("*const [u8; 80]"),
410409
"bitcoin::blockdata::block::Block" if is_ref => Some("crate::c_types::u8slice"),
@@ -615,6 +614,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
615614
"bitcoin::blockdata::script::Script" if is_ref => Some("crate::c_types::u8slice::from_slice(&"),
616615
"bitcoin::blockdata::script::Script" if !is_ref => Some(""),
617616
"bitcoin::blockdata::transaction::Transaction" => Some("crate::c_types::Transaction::from_vec(local_"),
617+
"bitcoin::blockdata::transaction::OutPoint" => Some("crate::c_types::bitcoin_to_C_outpoint("),
618618
"bitcoin::blockdata::transaction::TxOut" if !is_ref => Some("crate::c_types::TxOut::from_rust("),
619619
"bitcoin::blockdata::block::BlockHeader" if is_ref => Some("&local_"),
620620
"bitcoin::blockdata::block::Block" if is_ref => Some("crate::c_types::u8slice::from_slice(&local_"),
@@ -679,6 +679,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
679679
"bitcoin::blockdata::script::Script" if is_ref => Some("[..])"),
680680
"bitcoin::blockdata::script::Script" if !is_ref => Some(".into_bytes().into()"),
681681
"bitcoin::blockdata::transaction::Transaction" => Some(")"),
682+
"bitcoin::blockdata::transaction::OutPoint" => Some(")"),
682683
"bitcoin::blockdata::transaction::TxOut" if !is_ref => Some(")"),
683684
"bitcoin::blockdata::block::BlockHeader" if is_ref => Some(""),
684685
"bitcoin::blockdata::block::Block" if is_ref => Some(")"),

lightning-c-bindings/src/c_types/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@ pub mod derived;
22

33
use bitcoin::Script as BitcoinScript;
44
use bitcoin::Transaction as BitcoinTransaction;
5+
use bitcoin::hashes::Hash;
56
use bitcoin::secp256k1::key::PublicKey as SecpPublicKey;
67
use bitcoin::secp256k1::key::SecretKey as SecpSecretKey;
78
use bitcoin::secp256k1::Signature as SecpSignature;
89
use bitcoin::secp256k1::Error as SecpError;
910

11+
use std::convert::TryInto; // Bindings need at least rustc 1.34
12+
1013
#[derive(Clone)]
1114
#[repr(C)]
1215
pub struct PublicKey {
@@ -130,6 +133,10 @@ impl Drop for Transaction {
130133
#[no_mangle]
131134
pub extern "C" fn Transaction_free(_res: Transaction) { }
132135

136+
pub(crate) fn bitcoin_to_C_outpoint(outpoint: ::bitcoin::blockdata::transaction::OutPoint) -> crate::chain::transaction::OutPoint {
137+
crate::chain::transaction::OutPoint_new(ThirtyTwoBytes { data: outpoint.txid.into_inner() }, outpoint.vout.try_into().unwrap())
138+
}
139+
133140
#[repr(C)]
134141
#[derive(Clone)]
135142
/// A transaction output including a scriptPubKey and value.

0 commit comments

Comments
 (0)