ERGO

ErgoScript Compiler

The ErgoScript Compiler is a Command Line Interface (CLI) tool designed to compile ErgoScript code into an Ergo address.

User Guide

Setup and Compilation

  1. If you're starting from source, compile the ErgoScript compiler using these steps:
    • Clone the repository by executing git clone https://github.com/scalahub/ErgoScriptCompiler.git.
    • Make sure SBT is installed and correctly set up in your path.
    • Use the command sbt assembly in the project root folder to compile the JAR file.

    Upon successful compilation, a JAR file is generated in the following path: target/scala-2.12/ErgoScriptCompiler-assembly-0.1.jar. In the steps below, <jarFile> refers to this JAR.

    If you're using the precompiled JAR, proceed directly to the next step.

  2. Compiling ErgoScript code involves the following steps:
    • Save your ErgoScript code in a text file, for example, myScript.es. You can choose any file extension.
    • If your code references any symbols (constants), save them in a separate file, for instance, mySymbols.json. Refer to the section below on how to write this file.
    • This symbols file is optional and is only required if your code references any symbols.
    • Use the command java -cp <jarFile> Compile <ergoScriptFile> <optionalSymbolsFile> to compile the file. For example:
      • java -cp ErgoScriptCompiler.jar Compile myScript.es mySymbols.json
      • java -cp ErgoScriptCompiler.jar Compile myScript.es

Refer to the example below for a sample output.

Integration in Your Project

To use ErgoScript Compiler in your project, add the following to your build.sbt:
libraryDependencies += "io.github.ergoplatform" %% "ergoscriptcompiler" % "1.0"
Then call: util.Compiler.compile(ergoScriptFile: String, symbolsFile: Option[String])

Examples and Outputs

The src/test/resources directory contains sample ErgoScript and symbol files. Here's an example execution:
java -cp \
      target/scala-2.12/ErgoScriptCompiler-assembly-0.1.jar \
      Compile \
      src/test/resources/AgeUSD.es \
      src/test/resources/AgeUSD_symbols.json
The output includes:
  1. The ErgoTree corresponding to the Script, serialized and hex-encoded.
  2. The Blake2b256 hash of the ErgoTree, hex-encoded.
  3. The address corresponding to the ErgoTree.

Symbol File Format

If your ErgoScript code references token IDs or script hashes, encode such values in a "symbols" file as follows (any file extension is permissible):
{
  "symbols":[
    {
      "name":"poolTokenId",
      "type":"CollByte",
      "value":"0fb1eca4646950743bc5a8c341c16871a0ad9b4077e3b276bf93855d51a042d1"
    },
    {
      "name":"epochPrepScriptHash",
      "type":"CollByte",
      "value":"d998e06e0c093b0990fa3da4f3bea4364546803551ea9cac02623e9675ba4522"
    },
    {
      "name":"buffer",
      "type":"Int",
      "value":"4"
    }
  ]


}

Generating Payment Requests

Apart from compiling ErgoScript, this tool can generate a "payment request". It replaces register values from human-understandable forms to serialized-hex needed by the Ergo client's REST API. For instance, to store the integer 1, you would provide the register value as 0402.
The command to generate payment requests is: java -cp <jarFile> Payment <humanRequest.json> <symbolsFile.json>