simplicityhl 0.6.0

Rust-like language that compiles to Simplicity bytecode.
Documentation
[package]
name = "simplicityhl"
version = "0.6.0"
authors = ["sanket1729 <sanket1729@gmail.com>"]
license = "CC0-1.0"
homepage = "https://github.com/BlockstreamResearch/SimplicityHL"
repository = "https://github.com/BlockstreamResearch/SimplicityHL"
description = "Rust-like language that compiles to Simplicity bytecode."
edition = "2021"
rust-version = "1.79.0"
default-run = "simc"

[package.metadata.rbmt.lint]
# Existing transitive split: derive_arbitrary uses syn 1 while serde/wasm tooling uses syn 2.
allowed_duplicates = ["syn"]

[lib]
name = "simplicityhl"
path = "src/lib.rs"

[[bin]]
name = "simc"
path = "src/main.rs"

[[bin]]
name = "simplicityhl-codegen"
path = "codegen/src/main.rs"
required-features = ["docs", "serde"]

[features]
default = [ "serde" ]
serde = ["dep:serde", "dep:serde_json"]
docs = []
external-jets = []

[dependencies]
base64 = "0.21.2"
serde = { version = "1.0.188", features = ["derive"], optional = true }
serde_json = { version = "1.0.105", optional = true }
simplicity-lang = { version = "0.8.0" }
miniscript = "12.3.1"
either = "1.12.0"
itertools = "0.13.0"
arbitrary = { version = "1", optional = true, features = ["derive"] }
clap = "4.5.37"
chumsky = "0.11.2"

[target.wasm32-unknown-unknown.dependencies]
getrandom = { version = "0.2", features = ["js"] }

[workspace]
members = ["codegen", "fuzz", "external-jet-lib-example"]
exclude = ["bitcoind-tests"]

[workspace.metadata.rbmt.toolchains]
nightly = "nightly-2025-08-23"
stable = "1.95.0"

[workspace.metadata.rbmt.tools]
cargo-fuzz = "0.13.1"

[lints.clippy]
# Exclude lints we don't think are valuable.
large_enum_variant = "allow" # docs say "measure before paying attention to this"; why is it on by default??
similar_names = "allow" # Too many (subjectively) false positives.
uninlined_format_args = "allow" # This is a subjective style choice.
indexing_slicing = "allow" # Too many false positives ... would be cool though
match_bool = "allow" # Adds extra indentation and LOC.
match_same_arms = "allow" # Collapses things that are conceptually unrelated to each other.
must_use_candidate = "allow" # Useful for audit but many false positives.
# Whitelist the cast lints because sometimes casts are unavoidable. But
# every cast should contain a code comment!
cast_possible_truncation = "allow"
cast_possible_wrap = "allow"
cast_sign_loss = "allow"
# Exhaustive list of pedantic clippy lints
assigning_clones = "warn"
bool_to_int_with_if = "warn"
borrow_as_ptr = "warn"
case_sensitive_file_extension_comparisons = "warn"
cast_lossless = "warn"
cast_precision_loss = "warn"
cast_ptr_alignment = "warn"
checked_conversions = "warn"
cloned_instead_of_copied = "warn"
copy_iterator = "warn"
default_trait_access = "warn"
doc_link_with_quotes = "warn"
doc_markdown = "warn"
empty_enum = "warn"
enum_glob_use = "allow"
expl_impl_clone_on_copy = "warn"
explicit_deref_methods = "warn"
explicit_into_iter_loop = "warn"
explicit_iter_loop = "warn"
filter_map_next = "warn"
flat_map_option = "warn"
float_cmp = "warn"
fn_params_excessive_bools = "warn"
from_iter_instead_of_collect = "warn"
if_not_else = "warn"
ignored_unit_patterns = "warn"
implicit_clone = "warn"
implicit_hasher = "warn"
inconsistent_struct_constructor = "warn"
index_refutable_slice = "warn"
inefficient_to_string = "allow"
inline_always = "warn"
into_iter_without_iter = "warn"
invalid_upcast_comparisons = "warn"
items_after_statements = "warn"
iter_filter_is_ok = "warn"
iter_filter_is_some = "warn"
iter_not_returning_iterator = "warn"
iter_without_into_iter = "warn"
large_digit_groups = "warn"
large_futures = "warn"
large_stack_arrays = "warn"
large_types_passed_by_value = "warn"
linkedlist = "warn"
macro_use_imports = "warn"
manual_assert = "warn"
manual_instant_elapsed = "warn"
manual_is_power_of_two = "warn"
manual_is_variant_and = "warn"
manual_let_else = "warn"
manual_ok_or = "warn"
manual_string_new = "warn"
many_single_char_names = "warn"
map_unwrap_or = "warn"
match_wild_err_arm = "warn"
match_wildcard_for_single_variants = "allow"
maybe_infinite_iter = "warn"
mismatching_type_param_order = "warn"
missing_errors_doc = "allow"
missing_fields_in_debug = "warn"
missing_panics_doc = "allow"
mut_mut = "warn"
naive_bytecount = "warn"
needless_bitwise_bool = "warn"
needless_continue = "allow"
needless_for_each = "warn"
needless_pass_by_value = "allow"
needless_raw_string_hashes = "allow"
no_effect_underscore_binding = "warn"
no_mangle_with_rust_abi = "warn"
option_as_ref_cloned = "warn"
option_option = "allow"
ptr_as_ptr = "warn"
ptr_cast_constness = "warn"
pub_underscore_fields = "warn"
range_minus_one = "warn"
range_plus_one = "warn"
redundant_closure_for_method_calls = "allow"
redundant_else = "warn"
ref_as_ptr = "warn"
ref_binding_to_reference = "warn"
ref_option = "warn"
ref_option_ref = "warn"
return_self_not_must_use = "allow"
same_functions_in_if_condition = "warn"
semicolon_if_nothing_returned = "allow"
should_panic_without_expect = "warn"
single_char_pattern = "warn"
single_match_else = "allow"
stable_sort_primitive = "warn"
str_split_at_newline = "warn"
string_add_assign = "warn"
struct_excessive_bools = "warn"
struct_field_names = "warn"
too_many_lines = "allow"
transmute_ptr_to_ptr = "warn"
trivially_copy_pass_by_ref = "warn"
unchecked_duration_subtraction = "warn"
unicode_not_nfc = "warn"
unnecessary_box_returns = "warn"
unnecessary_join = "warn"
unnecessary_literal_bound = "warn"
unnecessary_wraps = "warn"
unnested_or_patterns = "allow"
unreadable_literal = "allow"
unsafe_derive_deserialize = "warn"
unused_async = "warn"
unused_self = "warn"
used_underscore_binding = "warn"
used_underscore_items = "warn"
verbose_bit_mask = "warn"
wildcard_imports = "allow"
zero_sized_map_values = "warn"