Would you mind sharing your use cases for hal-simplicity?
Maybe there is a story behind its creation?
I’d really appreciate your feedback so we can better tailor the extension.
I have a document I was working on that was going to advocate adding some of this functionality to the simplex CLI based on the commonly-expressed idea that simplex is the main tool that most developers would use for their development workflow. What I was interested in was especially a way to run (and trace) transactions without writing any Rust code. hal-simplicity is good for this now (it can, in turn, be useful for demos and for debugging), and I thought we could have a subcommand like simplex quickrun. I haven’t finished or posted this yet, though.
The original workflow for committing to and spending from SimplicityHL contracts was basically shell scripts using simc to do the initial compilation, then hal-simplicity to derive an on-chain address (via hal-simplicity simplicity info on the compiled program), and various commands to build up the PSET for the redeem transaction.
I particularly like hal-simplicity simplicity pset run, which gives an execution trace for a contract executing a specified transaction environment. It turns out there’s a nice equivalent of this in Simplex using -vv, although the Simplex version is currently slightly more limited in some ways.
Some of the other features are useful for more advanced debugging, like the block and transaction decoders. Interestingly, there isn’t a full PSET decoder, although that functionality can be found in elements-cli.
Another advantage of hal-simplicity’s PSET orientation is that you can use it effectively in conjunction with other tools that understand PSETs, including in a multi-signer wallet spending flow, or creating a transaction that spends simultaneously from an external wallet and a contract (and hence requires signatures from a key named in the contract and from a key held by the wallet that controls some other funds).