Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions packages/wasm-dot/js/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ export interface Material {
specVersion: number;
/** Transaction format version */
txVersion: number;
/** Runtime metadata bytes (hex encoded) - required for encoding calls */
metadata: string;
/** Runtime metadata bytes - required for encoding calls */
metadata: Uint8Array;
}

/**
Expand Down
2 changes: 1 addition & 1 deletion packages/wasm-dot/src/address.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ pub fn decode_ss58(address: &str) -> Result<(Vec<u8>, u16), WasmDotError> {
/// Validate an SS58 address
pub fn validate_address(address: &str, expected_prefix: Option<u16>) -> bool {
match decode_ss58(address) {
Ok((_, prefix)) => expected_prefix.map_or(true, |expected| prefix == expected),
Ok((_, prefix)) => expected_prefix.is_none_or(|expected| prefix == expected),
Err(_) => false,
}
}
Expand Down
2 changes: 1 addition & 1 deletion packages/wasm-dot/src/builder/calls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ fn account_id(address: &str) -> Result<Value<()>, WasmDotError> {
v.len()
))
})?;
Ok(Value::from_bytes(&bytes))
Ok(Value::from_bytes(bytes))
}

#[cfg(test)]
Expand Down
11 changes: 4 additions & 7 deletions packages/wasm-dot/src/builder/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,9 @@ pub fn build_transaction(
Ok(tx)
}

/// Decode metadata from hex string
fn decode_metadata(metadata_hex: &str) -> Result<subxt_core::metadata::Metadata, WasmDotError> {
let bytes = hex::decode(metadata_hex.trim_start_matches("0x"))
.map_err(|e| WasmDotError::InvalidInput(format!("Invalid metadata hex: {}", e)))?;

subxt_core::metadata::decode_from(&bytes[..])
/// Decode metadata from raw bytes
fn decode_metadata(metadata_bytes: &[u8]) -> Result<subxt_core::metadata::Metadata, WasmDotError> {
subxt_core::metadata::decode_from(metadata_bytes)
.map_err(|e| WasmDotError::InvalidInput(format!("Failed to decode metadata: {}", e)))
}

Expand All @@ -60,7 +57,7 @@ fn compute_era(validity: &Validity) -> Era {
if validity.max_duration == 0 {
Era::Immortal
} else {
let period = validity.max_duration.next_power_of_two().min(65536).max(4);
let period = validity.max_duration.next_power_of_two().clamp(4, 65536);
let phase = validity.first_valid % period;
Era::Mortal { period, phase }
}
Expand Down
2 changes: 1 addition & 1 deletion packages/wasm-dot/src/builder/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ mod tests {
"specName": "polkadot",
"specVersion": 9150,
"txVersion": 9,
"metadata": "0x00"
"metadata": [0]
},
"validity": {
"firstValid": 1000,
Expand Down
9 changes: 3 additions & 6 deletions packages/wasm-dot/src/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,12 +99,9 @@ pub fn parse_transaction(
})
}

/// Decode metadata from hex string (same pattern as builder)
fn decode_metadata(metadata_hex: &str) -> Result<subxt_core::metadata::Metadata, WasmDotError> {
let bytes = hex::decode(metadata_hex.trim_start_matches("0x"))
.map_err(|e| WasmDotError::InvalidInput(format!("Invalid metadata hex: {}", e)))?;

subxt_core::metadata::decode_from(&bytes[..])
/// Decode metadata from raw bytes
fn decode_metadata(metadata_bytes: &[u8]) -> Result<subxt_core::metadata::Metadata, WasmDotError> {
subxt_core::metadata::decode_from(metadata_bytes)
.map_err(|e| WasmDotError::InvalidInput(format!("Failed to decode metadata: {}", e)))
}

Expand Down
33 changes: 15 additions & 18 deletions packages/wasm-dot/src/transaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -399,12 +399,9 @@ impl Transaction {
// Helper functions
// =============================================================================

/// Decode metadata from hex string
fn decode_metadata(metadata_hex: &str) -> Result<Metadata, WasmDotError> {
let bytes = hex::decode(metadata_hex.trim_start_matches("0x"))
.map_err(|e| WasmDotError::InvalidInput(format!("Invalid metadata hex: {}", e)))?;

subxt_core::metadata::decode_from(&bytes[..])
/// Decode metadata from raw bytes
fn decode_metadata(metadata_bytes: &[u8]) -> Result<Metadata, WasmDotError> {
subxt_core::metadata::decode_from(metadata_bytes)
.map_err(|e| WasmDotError::InvalidInput(format!("Failed to decode metadata: {}", e)))
}

Expand Down Expand Up @@ -438,22 +435,22 @@ pub(crate) fn encode_era(era: &Era) -> Vec<u8> {
}
}

/// Parsed extrinsic data: (is_signed, sender, signature, era, nonce, tip, call_data)
type ParsedExtrinsic = (
bool,
Option<[u8; 32]>,
Option<[u8; 64]>,
Era,
u32,
u128,
Vec<u8>,
);

/// Parse a raw extrinsic
fn parse_extrinsic(
bytes: &[u8],
metadata: Option<&Metadata>,
) -> Result<
(
bool,
Option<[u8; 32]>,
Option<[u8; 64]>,
Era,
u32,
u128,
Vec<u8>,
),
WasmDotError,
> {
) -> Result<ParsedExtrinsic, WasmDotError> {
use parity_scale_codec::{Compact, Decode};

let mut cursor = 0;
Expand Down
4 changes: 2 additions & 2 deletions packages/wasm-dot/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ pub struct Material {
pub spec_version: u32,
/// Transaction format version
pub tx_version: u32,
/// Runtime metadata bytes (hex encoded)
/// Runtime metadata bytes
/// Required for encoding calls - handles runtime upgrades automatically
pub metadata: String,
pub metadata: Vec<u8>,
}

/// Validity window for mortal transactions
Expand Down
4 changes: 2 additions & 2 deletions packages/wasm-dot/src/wasm/transaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ impl MaterialJs {
spec_name: &str,
spec_version: u32,
tx_version: u32,
metadata: &str,
metadata: &[u8],
) -> MaterialJs {
MaterialJs {
inner: Material {
Expand All @@ -233,7 +233,7 @@ impl MaterialJs {
spec_name: spec_name.to_string(),
spec_version,
tx_version,
metadata: metadata.to_string(),
metadata: metadata.to_vec(),
},
}
}
Expand Down
4 changes: 2 additions & 2 deletions packages/wasm-dot/test/builder.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as assert from "assert";
import { buildTransaction, type TransactionIntent, type BuildContext } from "../js/index.js";
import { westendMetadataRpc } from "./resources/westend.js";
import { getWestendMetadata } from "./resources/westend.js";

/** Convert Uint8Array to hex string (no 0x prefix) */
function toHex(bytes: Uint8Array): string {
Expand All @@ -21,7 +21,7 @@ describe("buildTransaction", () => {
specName: "westend",
specVersion: 9420,
txVersion: 16,
metadata: westendMetadataRpc,
metadata: getWestendMetadata(),
};

// Reference block (use genesis for testing)
Expand Down
4 changes: 2 additions & 2 deletions packages/wasm-dot/test/explain.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
type TransactionIntent,
type BuildContext,
} from "../js/index.js";
import { westendMetadataRpc } from "./resources/westend.js";
import { getWestendMetadata } from "./resources/westend.js";

describe("explainTransaction", () => {
const SENDER = "5EGoFA95omzemRssELLDjVenNZ68aXyUeqtKQScXSEBvVJkr";
Expand All @@ -20,7 +20,7 @@ describe("explainTransaction", () => {
specName: "westend",
specVersion: 9420,
txVersion: 16,
metadata: westendMetadataRpc,
metadata: getWestendMetadata(),
};

const REFERENCE_BLOCK = "0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e";
Expand Down
15 changes: 15 additions & 0 deletions packages/wasm-dot/test/resources/westend.ts

Large diffs are not rendered by default.