Skip to content

Commit 20951a5

Browse files
OttoAllmendingerllm-git
andcommitted
feat(wasm-utxo): rename Network to UtxolibNetwork for better semantics
Rename Network class to UtxolibNetwork to better represent its purpose as a compatibility layer with utxo-lib. This helps avoid confusion with other network objects while maintaining functionality. Issue: BTC-2652 Co-authored-by: llm-git <[email protected]>
1 parent 217fa9f commit 20951a5

File tree

3 files changed

+38
-23
lines changed

3 files changed

+38
-23
lines changed

packages/wasm-utxo/src/address/utxolib_compat.rs

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,23 @@ pub struct CashAddr {
1717
pub script_hash: u32,
1818
}
1919

20-
pub struct Network {
20+
/// This maps to the structure of `utxolib.Network` so that we can use it for address encoding/decoding.
21+
/// We also use it to infer the output script support for the network.
22+
///
23+
/// We cannot precisely map it to the proper `networks::Network` enum because certain
24+
/// different networks are structurally identical (all bitcoin testnets).
25+
pub struct UtxolibNetwork {
2126
pub pub_key_hash: u32,
2227
pub script_hash: u32,
2328
pub cash_addr: Option<CashAddr>,
2429
pub bech32: Option<String>,
2530
}
2631

27-
impl Network {
28-
/// Parse a Network object from a JavaScript value
32+
impl UtxolibNetwork {
33+
/// Parse a UtxolibNetwork object from a JavaScript value
2934
pub fn from_js_value(js_network: &JsValue) -> Result<Self> {
3035
use crate::try_from_js_value::TryFromJsValue;
31-
Network::try_from_js_value(js_network)
36+
UtxolibNetwork::try_from_js_value(js_network)
3237
.map_err(|e| AddressError::InvalidAddress(e.to_string()))
3338
}
3439
pub fn output_script_support(&self) -> OutputScriptSupport {
@@ -46,10 +51,10 @@ impl Network {
4651
}
4752
}
4853

49-
/// Convert output script to address string using a utxolib Network object
54+
/// Convert output script to address string using a utxolib UtxolibNetwork object
5055
pub fn from_output_script_with_network(
5156
script: &Script,
52-
network: &Network,
57+
network: &UtxolibNetwork,
5358
format: AddressFormat,
5459
) -> Result<String> {
5560
network.output_script_support().assert_support(script)?;
@@ -94,8 +99,8 @@ pub fn from_output_script_with_network(
9499
}
95100
}
96101

97-
/// Convert address string to output script using a utxolib Network object
98-
pub fn to_output_script_with_network(address: &str, network: &Network) -> Result<ScriptBuf> {
102+
/// Convert address string to output script using a utxolib UtxolibNetwork object
103+
pub fn to_output_script_with_network(address: &str, network: &UtxolibNetwork) -> Result<ScriptBuf> {
99104
use crate::address::AddressCodec;
100105
use crate::bitcoin::hashes::Hash;
101106
use crate::bitcoin::{PubkeyHash, ScriptHash};
@@ -148,16 +153,16 @@ impl UtxolibCompatNamespace {
148153
///
149154
/// # Arguments
150155
/// * `script` - The output script as a byte array
151-
/// * `network` - The utxolib Network object from JavaScript
156+
/// * `network` - The UtxolibNetwork object from JavaScript
152157
/// * `format` - Optional address format: "default" or "cashaddr" (only applicable for Bitcoin Cash and eCash)
153158
#[wasm_bindgen]
154159
pub fn from_output_script(
155160
script: &[u8],
156161
network: JsValue,
157162
format: Option<String>,
158163
) -> std::result::Result<String, JsValue> {
159-
let network =
160-
Network::from_js_value(&network).map_err(|e| JsValue::from_str(&e.to_string()))?;
164+
let network = UtxolibNetwork::from_js_value(&network)
165+
.map_err(|e| JsValue::from_str(&e.to_string()))?;
161166

162167
let script_obj = Script::from_bytes(script);
163168

@@ -173,16 +178,16 @@ impl UtxolibCompatNamespace {
173178
///
174179
/// # Arguments
175180
/// * `address` - The address string
176-
/// * `network` - The utxolib Network object from JavaScript
181+
/// * `network` - The UtxolibNetwork object from JavaScript
177182
/// * `format` - Optional address format (currently unused for decoding as all formats are accepted)
178183
#[wasm_bindgen]
179184
pub fn to_output_script(
180185
address: &str,
181186
network: JsValue,
182187
format: Option<String>,
183188
) -> std::result::Result<Vec<u8>, JsValue> {
184-
let network =
185-
Network::from_js_value(&network).map_err(|e| JsValue::from_str(&e.to_string()))?;
189+
let network = UtxolibNetwork::from_js_value(&network)
190+
.map_err(|e| JsValue::from_str(&e.to_string()))?;
186191

187192
// Validate format parameter even though we don't use it for decoding
188193
if let Some(fmt) = format {

packages/wasm-utxo/src/fixed_script_wallet/mod.rs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ pub use wallet_keys::*;
1212
pub use wallet_scripts::*;
1313
use wasm_bindgen::prelude::*;
1414

15-
use crate::address::networks::{AddressFormat};
15+
use crate::address::networks::AddressFormat;
1616
use crate::error::WasmMiniscriptError;
1717
use crate::try_from_js_value::TryFromJsValue;
18-
use crate::utxolib_compat::Network;
18+
use crate::utxolib_compat::UtxolibNetwork;
1919

2020
#[wasm_bindgen]
2121
pub struct FixedScriptWalletNamespace;
@@ -29,12 +29,17 @@ impl FixedScriptWalletNamespace {
2929
index: u32,
3030
network: JsValue,
3131
) -> Result<Vec<u8>, WasmMiniscriptError> {
32-
let network = Network::try_from_js_value(&network)?;
32+
let network = UtxolibNetwork::try_from_js_value(&network)?;
3333
let chain = Chain::try_from(chain)
3434
.map_err(|e| WasmMiniscriptError::new(&format!("Invalid chain: {}", e)))?;
3535

3636
let wallet_keys = RootWalletKeys::from_jsvalue(&keys)?;
37-
let scripts = WalletScripts::from_wallet_keys(&wallet_keys, chain, index, &network.output_script_support())?;
37+
let scripts = WalletScripts::from_wallet_keys(
38+
&wallet_keys,
39+
chain,
40+
index,
41+
&network.output_script_support(),
42+
)?;
3843
Ok(scripts.output_script().to_bytes())
3944
}
4045

@@ -46,11 +51,16 @@ impl FixedScriptWalletNamespace {
4651
network: JsValue,
4752
address_format: Option<String>,
4853
) -> Result<String, WasmMiniscriptError> {
49-
let network = Network::try_from_js_value(&network)?;
54+
let network = UtxolibNetwork::try_from_js_value(&network)?;
5055
let wallet_keys = RootWalletKeys::from_jsvalue(&keys)?;
5156
let chain = Chain::try_from(chain)
5257
.map_err(|e| WasmMiniscriptError::new(&format!("Invalid chain: {}", e)))?;
53-
let scripts = WalletScripts::from_wallet_keys(&wallet_keys, chain, index, &network.output_script_support())?;
58+
let scripts = WalletScripts::from_wallet_keys(
59+
&wallet_keys,
60+
chain,
61+
index,
62+
&network.output_script_support(),
63+
)?;
5464
let script = scripts.output_script();
5565
let address_format = AddressFormat::from_optional_str(address_format.as_deref())
5666
.map_err(|e| WasmMiniscriptError::new(&format!("Invalid address format: {}", e)))?;

packages/wasm-utxo/src/try_from_js_value.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::address::utxolib_compat::{CashAddr, Network};
1+
use crate::address::utxolib_compat::{CashAddr, UtxolibNetwork};
22
use crate::error::WasmMiniscriptError;
33
use wasm_bindgen::JsValue;
44

@@ -119,14 +119,14 @@ pub(crate) fn get_buffer_field_vec(
119119
Ok(bytes)
120120
}
121121

122-
impl TryFromJsValue for Network {
122+
impl TryFromJsValue for UtxolibNetwork {
123123
fn try_from_js_value(value: &JsValue) -> Result<Self, WasmMiniscriptError> {
124124
let pub_key_hash = get_field(value, "pubKeyHash")?;
125125
let script_hash = get_field(value, "scriptHash")?;
126126
let bech32 = get_field(value, "bech32")?;
127127
let cash_addr = get_field(value, "cashAddr")?;
128128

129-
Ok(Network {
129+
Ok(UtxolibNetwork {
130130
pub_key_hash,
131131
script_hash,
132132
cash_addr,

0 commit comments

Comments
 (0)