Skip to main content


Compiled contracts can be represented by so-called artifacts. These artifacts contain all information that is needed to interact with the smart contracts on-chain. Artifacts are stored in .json files so they can be shared and stored for later usage without having to recompile the contract.

Did you know?

Artifacts allow any third-party SDKs to be developed, since these SDKs only need to import and use an artifact file, while the compilation of the contract is left to the official cashc compiler.

Artifact specification‚Äč

interface Artifact {
contractName: string // Contract name
constructorInputs: AbiInput[] // Arguments required to instantiate a contract
abi: AbiFunction[] // functions that can be called
bytecode: string // Compiled Script without constructor parameters added (in ASM format)
source: string // Source code of the CashScript contract
compiler: {
name: string // Compiler used to compile this contract
version: string // Compiler version used to compile this contract
debug?: {
bytecode: string // unlike `bytecode` property above, this is a hex-encoded binary string
sourceMap: string // see documentation for `generateSourceMap`
logs: LogEntry[] // log entries generated from `console.log` statements
requires: RequireStatement[] // messages for failing `require` statements
updatedAt: string // Last datetime this artifact was updated (in ISO format)

interface AbiInput {
name: string // Input name
type: string // Input type (see language documentation)

interface AbiFunction {
name: string // Function name
inputs: AbiInput[] // Function inputs / parameters

interface LogEntry {
ip: number; // instruction pointer
line: number; // line in the source code
data: Array<{ stackIndex: number, type: string } | string>; // data to be logged

interface RequireMessage {
ip: number; // instruction pointer
line: number; // line in the source code
message: string; // custom message for failing `require` statement