Skip to content

Commit 1ed458f

Browse files
committed
update
1 parent 53ee70c commit 1ed458f

File tree

2 files changed

+31
-25
lines changed

2 files changed

+31
-25
lines changed

bindings/src/adaptors/primitives.rs

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,15 @@ use bitcoin_hashes::sha256d::Hash as Sha256dHash;
88
macro_rules! array_struct{
99
($name:ident, $ty:ty) => {
1010
#[repr(C)]
11-
pub struct $name {
11+
pub struct $name<'a> {
1212
ptr: *const $ty,
1313
len: u64,
14+
_marker: std::marker::PhantomData<&'a $ty>
15+
}
16+
unsafe_impl!("Simulate the effect with `Unique<T>`" => impl<'a> Send for $name<'a> where $ty: Send{});
17+
unsafe_impl!("Simulate the effect with `Unique<T>`" => impl<'a> Sync for $name<'a> where $ty: Sync{});
18+
impl<'a> $name<'a> {
19+
fn new(ptr: *const $ty, len: u64) -> Self { $name{ ptr: ptr, len: len, _marker: std::marker::PhantomData } }
1420
}
1521
}
1622
}
@@ -23,62 +29,62 @@ array_struct!(PublicKey, u8);
2329

2430
array_struct!(FFISha256dHash, u8);
2531

26-
impl From<&Sha256dHash> for FFISha256dHash {
32+
impl<'a> From<&Sha256dHash> for FFISha256dHash<'a> {
2733
fn from(hash: &Sha256dHash) -> Self {
2834
let len = hash.len() as u64;
2935
let ptr = hash.as_ptr();
30-
FFISha256dHash { ptr: ptr, len: len, }
36+
FFISha256dHash::new(ptr, len)
3137
}
3238
}
3339

34-
impl From<Sha256dHash> for FFISha256dHash {
40+
impl<'a> From<Sha256dHash> for FFISha256dHash<'a> {
3541
fn from(hash: Sha256dHash) -> Self {
3642
let len = hash.len() as u64; let ptr = hash.as_ptr();
37-
FFISha256dHash{ ptr: ptr, len: len, }
43+
FFISha256dHash::new(ptr, len)
3844
}
3945
}
4046

4147

4248
array_struct!(FFIScript, u8);
4349

44-
impl From<Script> for FFIScript {
50+
impl<'a> From<Script> for FFIScript<'a> {
4551
fn from(script: Script) -> Self {
4652
let len = script.len() as u64;
4753
let ptr = script.as_bytes().as_ptr();
48-
FFIScript { ptr: ptr, len: len, }
54+
FFIScript::new(ptr, len)
4955
}
5056
}
51-
impl From<&Script> for FFIScript {
57+
impl<'a> From<&Script> for FFIScript<'a> {
5258
fn from(script: &Script) -> Self {
5359
let len = script.len() as u64;
5460
let ptr = script.as_bytes().as_ptr();
55-
FFIScript { ptr: ptr, len: len, }
61+
FFIScript::new(ptr, len)
5662
}
5763
}
5864

5965
#[repr(C)]
60-
pub struct FFIOutPoint {
61-
pub txid: FFISha256dHash,
66+
pub struct FFIOutPoint<'a> {
67+
pub txid: FFISha256dHash<'a>,
6268
pub index: u16,
6369
}
6470

6571
#[repr(C)]
66-
pub struct FFITxOut {
72+
pub struct FFITxOut<'a> {
6773
value: u64,
68-
script_pubkey: FFIScript,
74+
script_pubkey: FFIScript<'a>,
6975
}
7076

7177
array_struct!(FFITransaction, u8);
72-
impl From<Transaction> for FFITransaction {
78+
impl<'a> From<Transaction> for FFITransaction<'a> {
7379
fn from(tx: Transaction) -> Self {
7480
let txb = serialize(&tx);
75-
FFITransaction {
76-
ptr: txb.as_ptr(),
77-
len: txb.len() as u64,
78-
}
81+
FFITransaction::new(
82+
txb.as_ptr(),
83+
txb.len() as u64,
84+
)
7985
}
8086
}
81-
impl From<&Transaction> for FFITransaction {
87+
impl<'a> From<&Transaction> for FFITransaction<'a> {
8288
fn from(tx: &Transaction) -> Self {
8389
Self::from(tx.clone())
8490
}

bindings/src/broadcaster.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,18 @@ use bitcoin::Transaction;
99
use crate::handle::{Ref, Out, HandleShared};
1010
use crate::error::FFIResult;
1111

12+
use lightning::chain::chaininterface::{BroadcasterInterface};
13+
1214
#[cfg(feature = "debug_assertions")]
1315
#[repr(C)]
14-
struct BroadcasterWrapper {
16+
pub struct BroadcasterWrapper {
1517
broadcaster: Arc<FFIBroadCaster>,
1618
}
1719

1820
#[cfg(feature = "debug_assertions")]
1921
impl BroadcasterWrapper {
2022
pub fn broadcast(&self, tx: &Transaction) {
21-
self.broadcaster.broadcast_transaction(&tx)
23+
self.broadcaster.as_ref().broadcast_transaction(&tx)
2224
}
2325
}
2426
type FFIBroadCasterHandle<'a> = HandleShared<'a, FFIBroadCaster>;
@@ -39,7 +41,7 @@ ffi! {
3941
}
4042
#[cfg(feature = "debug_assertions")]
4143
ffi! {
42-
fn ffi_test_broadcaster(broadcaster_ptr: Ref<FFIBroadCaster>) -> FFIResult {
44+
fn ffi_test_broadcaster(broadcaster_ptr: FFIBroadCasterHandle) -> FFIResult {
4345
let broadcaster = unsafe_block!("" => broadcaster_ptr.as_ref());
4446
let tx: Transaction = bitcoin::consensus::deserialize(&hex::decode("020000000001031cfbc8f54fbfa4a33a30068841371f80dbfe166211242213188428f437445c91000000006a47304402206fbcec8d2d2e740d824d3d36cc345b37d9f65d665a99f5bd5c9e8d42270a03a8022013959632492332200c2908459547bf8dbf97c65ab1a28dec377d6f1d41d3d63e012103d7279dfb90ce17fe139ba60a7c41ddf605b25e1c07a4ddcb9dfef4e7d6710f48feffffff476222484f5e35b3f0e43f65fc76e21d8be7818dd6a989c160b1e5039b7835fc00000000171600140914414d3c94af70ac7e25407b0689e0baa10c77feffffffa83d954a62568bbc99cc644c62eb7383d7c2a2563041a0aeb891a6a4055895570000000017160014795d04cc2d4f31480d9a3710993fbd80d04301dffeffffff06fef72f000000000017a91476fd7035cd26f1a32a5ab979e056713aac25796887a5000f00000000001976a914b8332d502a529571c6af4be66399cd33379071c588ac3fda0500000000001976a914fc1d692f8de10ae33295f090bea5fe49527d975c88ac522e1b00000000001976a914808406b54d1044c429ac54c0e189b0d8061667e088ac6eb68501000000001976a914dfab6085f3a8fb3e6710206a5a959313c5618f4d88acbba20000000000001976a914eb3026552d7e3f3073457d0bee5d4757de48160d88ac0002483045022100bee24b63212939d33d513e767bc79300051f7a0d433c3fcf1e0e3bf03b9eb1d70220588dc45a9ce3a939103b4459ce47500b64e23ab118dfc03c9caa7d6bfc32b9c601210354fd80328da0f9ae6eef2b3a81f74f9a6f66761fadf96f1d1d22b1fd6845876402483045022100e29c7e3a5efc10da6269e5fc20b6a1cb8beb92130cc52c67e46ef40aaa5cac5f0220644dd1b049727d991aece98a105563416e10a5ac4221abac7d16931842d5c322012103960b87412d6e169f30e12106bdf70122aabb9eb61f455518322a18b920a4dfa887d30700")?)?;
4547
broadcaster.broadcast_transaction(&tx);
@@ -48,9 +50,7 @@ ffi! {
4850
fn ffi_test_broadcaster_in_wrapper(broadcaster_ptr: Ref<FFIBroadCaster>, out: Out<BroadcasterWrapper>) -> FFIResult {
4951
let broadcaster = unsafe_block!("" => broadcaster_ptr.as_arc());
5052
let wrapper_raw = BroadcasterWrapper{ broadcaster: broadcaster };
51-
let tx: Transaction = bitcoin::consensus::deserialize(&hex::decode("020000000001031cfbc8f54fbfa4a33a30068841371f80dbfe166211242213188428f437445c91000000006a47304402206fbcec8d2d2e740d824d3d36cc345b37d9f65d665a99f5bd5c9e8d42270a03a8022013959632492332200c2908459547bf8dbf97c65ab1a28dec377d6f1d41d3d63e012103d7279dfb90ce17fe139ba60a7c41ddf605b25e1c07a4ddcb9dfef4e7d6710f48feffffff476222484f5e35b3f0e43f65fc76e21d8be7818dd6a989c160b1e5039b7835fc00000000171600140914414d3c94af70ac7e25407b0689e0baa10c77feffffffa83d954a62568bbc99cc644c62eb7383d7c2a2563041a0aeb891a6a4055895570000000017160014795d04cc2d4f31480d9a3710993fbd80d04301dffeffffff06fef72f000000000017a91476fd7035cd26f1a32a5ab979e056713aac25796887a5000f00000000001976a914b8332d502a529571c6af4be66399cd33379071c588ac3fda0500000000001976a914fc1d692f8de10ae33295f090bea5fe49527d975c88ac522e1b00000000001976a914808406b54d1044c429ac54c0e189b0d8061667e088ac6eb68501000000001976a914dfab6085f3a8fb3e6710206a5a959313c5618f4d88acbba20000000000001976a914eb3026552d7e3f3073457d0bee5d4757de48160d88ac0002483045022100bee24b63212939d33d513e767bc79300051f7a0d433c3fcf1e0e3bf03b9eb1d70220588dc45a9ce3a939103b4459ce47500b64e23ab118dfc03c9caa7d6bfc32b9c601210354fd80328da0f9ae6eef2b3a81f74f9a6f66761fadf96f1d1d22b1fd6845876402483045022100e29c7e3a5efc10da6269e5fc20b6a1cb8beb92130cc52c67e46ef40aaa5cac5f0220644dd1b049727d991aece98a105563416e10a5ac4221abac7d16931842d5c322012103960b87412d6e169f30e12106bdf70122aabb9eb61f455518322a18b920a4dfa887d30700")?)?;
52-
let wrapper = out.init(wrapper_raw);
53-
wrapper_raw.broadcast(&tx);
53+
unsafe_block!("" => out.init(wrapper_raw));
5454
FFIResult::ok()
5555
}
5656

0 commit comments

Comments
 (0)