From f0358de9be2a569cb7c5b24be89f772a0598af44 Mon Sep 17 00:00:00 2001 From: Benjamin Himes Date: Fri, 27 Jun 2025 16:57:38 +0200 Subject: [PATCH] Removes the AccountId decoding --- Cargo.lock | 75 --------------------------------- Cargo.toml | 2 - bt_decode.pyi | 6 +-- src/lib.rs | 114 ++++++++++---------------------------------------- 4 files changed, 22 insertions(+), 175 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d823a60..88fb112 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,36 +20,10 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" -[[package]] -name = "base58" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - [[package]] name = "bt_decode" version = "0.7.0" dependencies = [ - "base58", - "blake2", "custom_derive", "frame-metadata 16.0.0", "log", @@ -76,16 +50,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - [[package]] name = "custom_derive" version = "0.2.0" @@ -106,17 +70,6 @@ dependencies = [ "syn 2.0.87", ] -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", - "subtle", -] - [[package]] name = "either" version = "1.13.0" @@ -152,16 +105,6 @@ dependencies = [ "serde", ] -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - [[package]] name = "hashbrown" version = "0.14.5" @@ -524,12 +467,6 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - [[package]] name = "syn" version = "1.0.109" @@ -575,12 +512,6 @@ dependencies = [ "winnow", ] -[[package]] -name = "typenum" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" - [[package]] name = "unicode-ident" version = "1.0.12" @@ -593,12 +524,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - [[package]] name = "winnow" version = "0.5.40" diff --git a/Cargo.toml b/Cargo.toml index d90e11f..5a53533 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,5 +33,3 @@ scale-value = { version = "0.16.2", default-features = false } pythonize = "0.23.0" log = { version = "0.4.25", default-features = false } pyo3-log = { version = "0.12.1", default-features = false } -blake2 = "0.10" -base58 = "0.2" diff --git a/bt_decode.pyi b/bt_decode.pyi index 172add4..a0de935 100644 --- a/bt_decode.pyi +++ b/bt_decode.pyi @@ -346,10 +346,7 @@ class PortableRegistry: pass def decode( - type_string: str, - portable_registry: PortableRegistry, - encoded: bytes, - legacy_account_id: bool = True, + type_string: str, portable_registry: PortableRegistry, encoded: bytes ) -> Any: pass @@ -357,7 +354,6 @@ def decode_list( list_type_strings: list[str], portable_registry: PortableRegistry, list_encoded: list[bytes], - legacy_account_id: bool = True, ) -> list[Any]: """ Decode a list of SCALE-encoded types using a list of their type-strings. diff --git a/src/lib.rs b/src/lib.rs index 816390c..71fba14 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -32,8 +32,6 @@ mod dyndecoder; mod bt_decode { use std::collections::HashMap; - use base58::ToBase58; - use blake2::{Blake2b512, Digest}; use dyndecoder::{fill_memo_using_well_known_types, get_type_id_from_type_string}; use frame_metadata::v15::RuntimeMetadataV15; use pyo3::types::{PyDict, PyInt, PyList, PyTuple}; @@ -46,25 +44,6 @@ mod bt_decode { use super::*; - fn account_id_to_ss58(account_id: [u8; 32], ss58_prefix: u16) -> String { - let mut data = Vec::with_capacity(35); - match ss58_prefix { - 0..=63 => data.push(ss58_prefix as u8), - 64..=16383 => { - data.push(((ss58_prefix & 0b0011_1111) | 0b0100_0000) as u8); - data.push((ss58_prefix >> 6) as u8); - } - _ => panic!("Invalid SS58 prefix"), - } - data.extend(account_id); - let checksum = Blake2b512::new() - .chain_update(b"SS58PRE") - .chain_update(&data) - .finalize(); - data.extend_from_slice(&checksum[..2]); - data.to_base58() - } - #[pyclass(name = "AxonInfo", get_all)] #[derive(Clone, Encode, Decode)] struct AxonInfo { @@ -390,40 +369,32 @@ mod bt_decode { } } - fn composite_to_py_object( - py: Python, - value: Composite, - legacy_account_id: bool, - ) -> PyResult> { + fn composite_to_py_object(py: Python, value: Composite) -> PyResult> { match value { Composite::Named(inner_) => { let dict = PyDict::new_bound(py); for (key, val) in inner_.iter() { - let val_py = value_to_pyobject(py, val.clone(), legacy_account_id)?; + let val_py = value_to_pyobject(py, val.clone())?; dict.set_item(key, val_py)?; } + Ok(dict.to_object(py)) } Composite::Unnamed(inner_) => { - let items: Vec> = inner_ - .iter() - .map(|val| value_to_pyobject(py, val.clone(), legacy_account_id)) - .collect::>>>()?; - if !legacy_account_id && inner_.len() == 1 && inner_[0].context == 1 { - // AccountIds are the only ones with context of 1, this will cause them to not be placed in a tuple - return Ok(items[0].clone_ref(py)); - } - let tuple = PyTuple::new_bound(py, items); + let tuple = PyTuple::new_bound( + py, + inner_ + .iter() + .map(|val| value_to_pyobject(py, val.clone())) + .collect::>>>()?, + ); + Ok(tuple.to_object(py)) } } } - fn value_to_pyobject( - py: Python, - value: Value, - legacy_account_id: bool, - ) -> PyResult> { + fn value_to_pyobject(py: Python, value: Value) -> PyResult> { match value.value { ValueDef::::Primitive(inner) => { let value = match inner { @@ -443,58 +414,17 @@ mod bt_decode { Ok(value) } - ValueDef::::Composite(composite) => { - if legacy_account_id { - let value = composite_to_py_object(py, composite, legacy_account_id)?; - return Ok(value); - } else { - match &composite { - Composite::Unnamed(ref inner) if inner.len() == 32 => { - let mut account_id_bytes: Vec = Vec::with_capacity(32); - - for val in inner.iter() { - match val.value { - ValueDef::::Primitive(Primitive::U128(byte)) => { - account_id_bytes.push(byte as u8); - } - _ => { - let value = composite_to_py_object( - py, - composite, - legacy_account_id, - )?; - return Ok(value); - } - } - } - - let account_id_array: [u8; 32] = - account_id_bytes.try_into().map_err(|_| { - PyErr::new::( - "Invalid AccountId length", - ) - })?; + ValueDef::::Composite(inner) => { + let value = composite_to_py_object(py, inner)?; - let ss58_address = account_id_to_ss58(account_id_array, 42); - Ok(ss58_address.as_str().to_object(py)) - } - _ => { - let value = composite_to_py_object(py, composite, legacy_account_id)?; - Ok(value) - } - } - } + Ok(value) } ValueDef::::Variant(inner) => { if inner.name == "None" || inner.name == "Some" { match inner.name.as_str() { "None" => Ok(py.None()), "Some" => { - let some = composite_to_py_object( - py, - inner.values.clone(), - legacy_account_id, - )?; + let some = composite_to_py_object(py, inner.values.clone())?; if inner.values.len() == 1 { let tuple = some .downcast_bound::(py) @@ -516,7 +446,7 @@ mod bt_decode { let value = PyDict::new_bound(py); value.set_item( inner.name.clone(), - composite_to_py_object(py, inner.values, legacy_account_id)?, + composite_to_py_object(py, inner.values)?, )?; Ok(value.to_object(py)) @@ -1100,13 +1030,12 @@ mod bt_decode { pyobject_to_value_no_option_check(py, to_encode, ty, type_id, portable_registry) } - #[pyfunction(name = "decode", signature = (type_string, portable_registry, encoded, legacy_account_id=true))] + #[pyfunction(name = "decode")] fn py_decode( py: Python, type_string: &str, portable_registry: &PyPortableRegistry, encoded: &[u8], - legacy_account_id: bool, ) -> PyResult> { // Create a memoization table for the type string to type id conversion let mut memo = HashMap::::new(); @@ -1128,16 +1057,15 @@ mod bt_decode { )) })?; - value_to_pyobject(py, decoded, legacy_account_id) + value_to_pyobject(py, decoded) } - #[pyfunction(name = "decode_list", signature = (list_type_strings, portable_registry, list_encoded, legacy_account_id=true))] + #[pyfunction(name = "decode_list")] fn py_decode_list( py: Python, list_type_strings: Vec, portable_registry: &PyPortableRegistry, list_encoded: Vec>, - legacy_account_id: bool, ) -> PyResult>> { // Create a memoization table for the type string to type id conversion let mut memo = HashMap::::new(); @@ -1165,7 +1093,7 @@ mod bt_decode { )) })?; - decoded_list.push(value_to_pyobject(py, decoded, legacy_account_id)?); + decoded_list.push(value_to_pyobject(py, decoded)?); } Ok(decoded_list)