Skip to content

Releases: CashScript/cashscript

v0.13.0

26 May 08:53
a346166

Choose a tag to compare

This release contains several breaking changes, please refer to the migration notes for more information.

cashc compiler

  • ✨ Add support for for, while and do-while loops.
  • ✨ Add support for compound assignment operators (+=, -=) and increment/decrement operators (++, --).
  • ✨ Add support for bitwise and arithmetic shift operators (<<, >>) and bitwise inversion (~).
  • ✨ Add fingerprint field to artifact to allow for fingerprinting of the contract bytecode.
  • ✨ Add unsafe_bool() and unsafe_int() casting for semantic-only casts.
  • ✨ Add support for narrowing bytes types after x.length == N and checks in require or if statements.
  • 🛠️ BREAKING: Automatically inject require(tx.time >= tx.locktime) when a function uses tx.locktime without a tx.time check in scope, ensuring the spending input is non-final so nLockTime is enforced. This can be disabled with the enforceLocktimeGuard: false compiler option (CLI: --skip-enforce-locktime-guard).
  • 🛠️ BREAKING: Function parameter types are now strictly enforced (bounded bytes and boolean values). This can be disabled with the enforceFunctionParameterTypes: false compiler option (CLI: --skip-enforce-function-parameter-types).
  • 🐛 Fix issue where casting bytes larger than bytes8 to int was not allowed.
  • 🐛 Fix issue where empty bytecode contracts were not properly compiled.
  • 🐛 BREAKING: Fix issue where bool() casting did not change the value of the argument.
  • 💥 BREAKING: Rename bytes4(int) and bytes(int, 4) to toPaddedBytes(int, 4).
  • 💥 BREAKING: Rename bytes4(bytes) to unsafe_bytes4(bytes).
  • 🐎 Add optimisations for negated number comparisons and boolean comparisons.

CashScript SDK

  • ✨ Add support for loops in debug tooling.
  • ✨ Add support for p2s contract type.
  • ✨ Add addBchChangeOutputIfNeeded() method to TransactionBuilder class.
  • ✨ Add addTokenChangeOutputIfNeeded() method to TransactionBuilder class for adding a fungible token change output for a specific category.
  • ✨ Add getTransactionSize method to TransactionBuilder class.
  • ✨ Add lockingBytecode property to Contract class.
  • ✨ Add getUtxosForLockingBytecode() method to ElectrumNetworkProvider class and MockNetworkProvider interface.
  • ✨ In the MockNetworkProvider, addUtxo() now also allows UTXOs to be added by locking bytecode.
  • ✨ Add gatherBchUtxos() and gatherFungibleTokenUtxos() functions to the SDK for gathering UTXOs.
  • ✨ Add specific network error classes to standardise error handling in network providers.
  • ✨ Add TSDoc strings for all public classes and methods.
  • 🐛 Fix issue where FailedTransactionError would not show underlying error if BitAuth URI generation failed.
  • 💥 BREAKING: Remove BitcoinRpcNetworkProvider and FullStackNetworkProvider from the SDK.
  • 🛠️ BREAKING: Rename addressType option on Contract constructor to contractType.
  • 🛠️ BREAKING: Remove undocumented redeemScript property from Contract class.
  • 🛠️ BREAKING: Remove undocumented buildLibauthTransaction() method from TransactionBuilder class.
  • 🛠️ Update default VM target to BCH_2026_05.
  • 🛠️ Improve validation when adding outputs to a transaction.
  • 🛠️ Improve package size by tidying up dependencies.

Testing Suite

  • 🛠️ Add README.md to help guide users on how to use the testing suite.
  • 🛠️ Compile all contracts in the contracts/ directory and save the artifacts in the artifacts/ directory.
  • 🛠️ Compile TS artifacts as well as JSON artifacts.
  • 🛠️ Add key management utilities for testing.

v0.12.1

11 Dec 11:58
e2e12ba

Choose a tag to compare

CashScript SDK

  • ✨ Add Vitest extensions for automated testing (PR by @hereje)

v0.12.0

02 Oct 10:01

Choose a tag to compare

CashScript SDK

  • ✨ Add getVmResourceUsage method to TransactionBuilder.
  • ✨ Add maximumFeeSatsPerByte and allowImplicitFungibleTokenBurn options to TransactionBuilder constructor.
  • ✨ Add a configurable vmTarget option to MockNetworkProvider.
  • ✨ Add support for ECDSA signatures in contract unlockers for sig and datasig parameters.
  • ✨ Add signMessageHash() method to SignatureTemplate to allow for signing of non-transaction messages.
  • 💥 BREAKING: Remove deprecated "old" transaction builder (contract.functions).
  • 💥 BREAKING: Make provider a required option in Contract constructor.
  • 💥 BREAKING: Set updateUtxoSet to true by default for MockNetworkProvider.
  • 💥 BREAKING: No longer seed the MockNetworkProvider with any test UTXOs.
  • 💥 BREAKING: Replace setMaxFee() method on TransactionBuilder with maximumFeeSatoshis option.
  • 💥 BREAKING: Rename bitauthUri() method on TransactionBuilder to getBitauthUri() for consistency.
  • 🛠️ Improve libauth template generation.
  • 🐛 Fix bug where SignatureTemplate would not accept private key hex strings as a signer.

v0.11.5

29 Aug 10:00

Choose a tag to compare

CashScript SDK

  • ✨ Include input index in console.log statements for debugging.
  • ✨ Improve type inference for function and constructor arguments in the Contract class.
  • 🛠️ Replace redundant dependencies.
  • 🐛 Remove accidental dependency inclusion of @types/node.

v0.11.4

06 Aug 14:51
d878d06

Choose a tag to compare

CashScript SDK

  • ✨ Add updateUtxoSet option to MockNetworkProvider to allow for updating the UTXO set after a transaction is sent (PR by @mainnet-pat).
  • 🐛 Fix bug where sending P2PKH-only transactions would throw No placeholder scenario ID or script ID found (PR by @mainnet-pat).

v0.11.3

23 Jul 14:16

Choose a tag to compare

cashc compiler

  • ✨ Add .slice(start, end) operator for bytes and strings.
  • ✨ Add bounded bytes typing and bounds checking for .split() (includes checking for negative indices).
  • 🐎 Add optimisation for .slice(0, x) and .slice(x, y.length) (also applies to .split(0)[1]).
  • 🐛 Disallow incorrect bounded bytes typing when using .split().

CashScript SDK

  • 🐛 Fix bug with where ElectrumNetworkProvider would disconnect in browser on visibility change of the page.

v0.11.2

10 Jul 08:25

Choose a tag to compare

CashScript SDK

  • 🐛 Fix bug with new generateWcTransactionObject() throwing when using placeholderP2PKHUnlocker()

v0.11.1

08 Jul 09:26

Choose a tag to compare

CashScript SDK

  • ✨ Add generateWcTransactionObject() method to TransactionBuilder to generate a WcTransactionObject that can be used to sign a transaction with a WalletConnect client.
  • ✨ Add placeholderSignature(), placeholderPublicKey() and placeholderP2PKHUnlocker() helper functions to the SDK for WalletConnect usage.

https://x.com/CashScriptBCH/status/1942513305420968238

v0.11.0

20 Jun 13:16
47a9dbc

Choose a tag to compare

In this version we added debugging capabilities to the new Transaction Builder

This release also contains several breaking changes, please refer to the migration notes for more information.

cashc compiler

  • 🐛 Fix bug where source code in --format ts artifacts used incorrect quotation marks.
  • 🛠️ Remove warning for opcount and update warning for byte size to match new limits.
  • 💥 BREAKING: tx.age was renamed to this.age to better reflect that it enforces a UTXO-level locktime check (not transaction-level).
  • 💥 BREAKING: The entire debug object on the artifact is reworked to enable debugging the optimised contract bytecode.

CashScript SDK

  • ✨ Add debugging capabilities to the TransactionBuilder.
    • transaction.debug() & transaction.bitauthUri()
    • Output BitAuth IDE URI for debugging when transaction is rejected.
    • Libauth template generation and debugging for multi-contract transactions
  • ✨ Debugging now supports using the optimised contract bytecode (when compiled with cashc@0.11.0 or later).
  • ✨ Add setBlockHeight() method to MockNetworkProvider
  • ✨ Config-free usage of the CashScript SDK with Vite or Webpack
  • 🛠️ Update debug tooling to use the new BCH_2025_05 instruction set.
  • 🛠️ Deprecate the simple transaction builder. You can still use the simple transaction builder with the current SDK, but this support will be removed in a future release
  • 💥 BREAKING: the Jest utilities for automated testing are now synchronous and no longer work with the deprecated simple transaction builder
    • expect(transaction).toLog(message)
    • expect(transaction).toFailRequire()
    • expect(transaction).toFailRequireWith(message)
  • 💥 BREAKING: Remove support for custom Clusters from ElectrumNetworkProvider and added a configuration object to the constructor.
  • 💥 BREAKING: Remove support for old contracts compiled with CashScript v0.6.x or earlier.
  • 🐛 Fix bug where JestExtensions expect().toLog() would detect logs from different tests.
  • 🐛 Fix bug where certain edge cases in require statements caused the FailedRequireError message to be slightly different from the original error message.

@cashscript/utils

  • 💥 BREAKING: Remove importArtifact and exportArtifact helper functions. If you want to import or export artifacts, use 'fs' to read and write files directly.

https://x.com/CashScriptBCH/status/1935662184865890325

v0.10.5

18 Dec 15:08

Choose a tag to compare

cashc compiler

  • 🐛 Fix bug in new TypeScript typings for artifact.