Skip to content

Commit 4bc03bf

Browse files
committed
ffi: remove c_set_rawElementsTransaction
1 parent b0e8484 commit 4bc03bf

3 files changed

Lines changed: 20 additions & 49 deletions

File tree

simplicity-sys/depend/env.c

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,6 @@ const size_t rustsimplicity_0_5_c_alignof_rawElementsTransaction = alignof(rawEl
2525
const size_t rustsimplicity_0_5_c_alignof_rawElementsTapEnv = alignof(rawElementsTapEnv);
2626
const size_t rustsimplicity_0_5_c_alignof_txEnv = alignof(txEnv);
2727

28-
void rustsimplicity_0_5_c_set_rawElementsTransaction(rawElementsTransaction *result, unsigned int version,
29-
const unsigned char *txid,
30-
const rawElementsInput *input, unsigned int numInputs,
31-
const rawElementsOutput *output, unsigned int numOutputs,
32-
unsigned int lockTime)
33-
{
34-
*result = (rawElementsTransaction){
35-
.version = version,
36-
.txid = txid,
37-
.input = input,
38-
.numInputs = numInputs,
39-
.output = output,
40-
.numOutputs = numOutputs,
41-
.lockTime = lockTime,
42-
};
43-
}
44-
4528
void rustsimplicity_0_5_c_set_rawElementsTapEnv(rawElementsTapEnv *result, const unsigned char *controlBlock, unsigned char pathLen, const unsigned char *scriptCMR)
4629
{
4730
*result = (rawElementsTapEnv){.controlBlock = controlBlock, .pathLen = pathLen, .scriptCMR = scriptCMR};

simplicity-sys/src/c_jets/c_env/elements.rs

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,13 @@ pub struct CRawInput<'raw> {
113113
#[derive(Debug)]
114114
#[repr(C)]
115115
pub struct CRawTransaction<'raw> {
116-
txid: *const c_uchar,
117-
inputs: *const CRawInput<'raw>,
118-
outputs: *const CRawOutput<'raw>,
119-
version: u32,
120-
locktime: u32,
121-
n_inputs: u32,
122-
n_outputs: u32,
116+
pub txid: &'raw [c_uchar; 32],
117+
pub inputs: *const CRawInput<'raw>,
118+
pub outputs: *const CRawOutput<'raw>,
119+
pub n_inputs: u32,
120+
pub n_outputs: u32,
121+
pub version: u32,
122+
pub locktime: u32,
123123
}
124124

125125
#[derive(Debug)]
@@ -173,17 +173,6 @@ extern "C" {
173173
#[link_name = "rustsimplicity_0_5_c_alignof_txEnv"]
174174
pub static c_alignof_txEnv: c_size_t;
175175

176-
#[link_name = "rustsimplicity_0_5_c_set_rawElementsTransaction"]
177-
pub fn c_set_rawTransaction(
178-
result: *mut CRawTransaction,
179-
version: c_uint,
180-
txid: *const c_uchar,
181-
input: *const CRawInput,
182-
numInputs: c_uint,
183-
output: *const CRawOutput,
184-
numOutputs: c_uint,
185-
lockTime: c_uint,
186-
);
187176
#[link_name = "rustsimplicity_0_5_c_set_rawElementsTapEnv"]
188177
pub fn c_set_rawTapEnv(
189178
result: *mut CRawTapEnv,

src/jet/elements/c_env.rs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
//!
55
66
use hashes::Hash;
7-
use std::os::raw::{c_uchar, c_uint};
7+
use std::os::raw::c_uchar;
88

99
use elements::{
1010
confidential,
@@ -128,20 +128,19 @@ pub(super) fn new_tx(
128128
for (out, out_data) in tx.output.iter().zip(tx_data.outputs.iter()) {
129129
raw_outputs.push(new_raw_output(out, out_data));
130130
}
131+
132+
let c_raw_tx = c_elements::CRawTransaction {
133+
txid: txid.as_raw_hash().as_byte_array(),
134+
inputs: raw_inputs.as_ptr(),
135+
outputs: raw_outputs.as_ptr(),
136+
n_inputs: raw_inputs.len().try_into().expect("sane length"),
137+
n_outputs: raw_outputs.len().try_into().expect("sane length"),
138+
version: tx.version,
139+
locktime: tx.lock_time.to_consensus_u32(),
140+
};
131141
unsafe {
132-
let mut raw_tx = std::mem::MaybeUninit::<c_elements::CRawTransaction>::uninit();
133-
c_elements::c_set_rawTransaction(
134-
raw_tx.as_mut_ptr(),
135-
tx.version as c_uint,
136-
AsRef::<[u8]>::as_ref(&txid).as_ptr(),
137-
raw_inputs.as_ptr(),
138-
raw_inputs.len() as c_uint,
139-
raw_outputs.as_ptr(),
140-
raw_outputs.len() as c_uint,
141-
tx.lock_time.to_consensus_u32() as c_uint,
142-
);
143-
let raw_tx = raw_tx.assume_init();
144-
c_elements::simplicity_mallocTransaction(&raw_tx)
142+
// SAFETY: this is a FFI call and we constructed its argument correctly.
143+
c_elements::simplicity_mallocTransaction(&c_raw_tx)
145144
}
146145
}
147146

0 commit comments

Comments
 (0)