A domain-specific language to write Bitcoin transactions, based on the paper A formal model of Bitcoin transactions presented at Financial Cryptography and Data Security 2018.
Online editor: balzac-lang.xyz
Documentation: docs.balzac-lang.xyz
docker pull balzaclang/balzac:latest
docker run --rm -p 8080:8080 --name balzac balzaclang/balzac:latest
Execute the script install-deps.sh
or alternatively follow these steps:
Install a customized version of BitcoinJ
echo "Cloning https://github.com/natzei/bitcoinj.git"
git -C $HOME clone https://github.com/natzei/bitcoinj.git
git -C $HOME/bitcoinj checkout lib
gradle -p $HOME/bitcoinj install -x test
export MAVEN_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"
mvn -f xyz.balzaclang.balzac.parent/ -U clean install
In order to run Balzac locally you can
- build on your machine and run using Maven + Jetty
- build on your machine and load the war (saved into
xyz.balzaclang.balzac.web/target/
) inside any web container (e.g. Tomcat) - build on your machine and run in Docker (see
docker/Dockerfile-slim
to create the image) - download from DockerHub and run in Docker
The following commands assume this variable has been set:
export MAVEN_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"
mvn -f xyz.balzaclang.balzac.web/ package
The WAR package is saved in xyz.balzaclang.balzac.web/target/
.
mvn -f xyz.balzaclang.balzac.web/ jetty:run
Or alternatively
mvn -f xyz.balzaclang.balzac.web/ jetty:run-war
Assuming the WAR package is saved in xyz.balzaclang.balzac.web/target/
, you can generate the Docker image by executing:
docker build -t balzaclang/balzac:latest .
You can specify a custom war file by using the build-arg war=<path>
parameter.
DockerHub: balzaclang/balzac
docker pull balzaclang/balzac:latest
Balzac is available for the following architectures:
- linux/amd64
- linux/arm/v7
- linux/arm64
docker run --rm -p 8080:8080 --name balzac balzaclang/balzac:latest
The project is currently developed using Eclipse IDE for Java and DSL Developers (generally the latest version). Install it using the Eclipse installer.
Dependencies
- Xsemantics
- Jacoco (optional)