Skip to main content

Compiler

The CashScript compiler is called cashc and is used to compile CashScript .cash contract files into .json artifact files. These artifact files can be used to instantiate a CashScript contract with the help of the CashScript SDK. For more information on this artifact format refer to Artifacts.

Command Line Interface

The cashc command line interface is used to compile CashScript .cash files into .json artifact files.

Installation

You can use npm to install the cashc command line tool globally.

npm install -g cashc

CLI Usage

The cashc CLI tool can be used to compile .cash files to JSON artifact files.

Usage: cashc [options] [source_file]

Options:
-V, --version Output the version number.
-o, --output <path> Specify a file to output the generated artifact.
-h, --hex Compile the contract to hex format rather than a full artifact.
-A, --asm Compile the contract to ASM format rather than a full artifact.
-c, --opcount Display the number of opcodes in the compiled bytecode.
-s, --size Display the size in bytes of the compiled bytecode.
-?, --help Display help

JavaScript Compilation

Generally CashScript contracts are compiled to an Artifact JSON file using the CLI compiler. As an alternative to this, CashScript contracts can be compiled from within JavaScript apps using the cashc package. This package exports two compilation functions.

npm install cashc

compileFile()

compileFile(sourceFile: PathLike): Artifact

Compiles a CashScript contract from a source file. This is the recommended compile method if you're using Node.js and you have a source file available.

Example

const P2PKH = compileFile(new URL('p2pkh.cash', import.meta.url));

compileString()

compileString(sourceCode: string): Artifact

Compiles a CashScript contract from a source code string. This is the recommended compile method if you're building a webapp, because compileFile() only works from a Node.js context. This is also the recommended method if no source file is locally available (e.g. the source code is retrieved with a REST API).

const baseUrl = 'https://raw.githubusercontent.com/Bitcoin-com/cashscript'
const result = await fetch(`${baseUrl}/master/examples/p2pkh.cash`);
const source = await result.text();

const P2PKH = compileString(source);