Cell Script is a newly designed language for smart-contract programming on the UTXO chain, which currently supports CKB.
Here is an example of a simple cell script.
import "debug"
import "tx"
import "cell"
func main() {
if tx.isOwnerMode() {
return 0
}
in_sum, out_sum := 0, 0
ins := tx.inputs()
if len(ins) == int32(0) {
return 1
}
for input := range tx.inputs() {
in_sum += input
}
for output := range tx.outputs() {
out_sum += output
}
if in_sum < out_sum {
debug.Printf("Invalid Amount")
return 1
}
return 0
}
The ideas and specs can be found here.
The internal discussion can be found here.
brew install [email protected]
brew install antlr@4
brew install openjdk@21
brew install llvm@18
brew tap riscv-software-src/riscv
brew install riscv-tools
export PATH="/opt/homebrew/bin:$PATH"
export PATH="/opt/homebrew/opt/llvm@18/bin:$PATH"
make build
source install.sh
Install golang 1.22
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt update
sudo apt install golang-go
Install antlr4, openjdk-21, clang
sudo apt install antlr4
sudo apt install openjdk-21-jdk
sudo apt install clang
Install llvm
sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"
or
sudo apt install llvm
sudo apt install lld
Install riscv-tools
sudo apt update
sudo apt upgrade
sudo apt install autoconf automake autotools-dev curl python3 python3-pip libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev libslirp-dev
mkdir risc-v
cd risc-v
git clone https://github.com/riscv-collab/riscv-gnu-toolchain.git
cd riscv-gnu-toolchain
sudo mkdir /opt/riscv
./configure --prefix=/opt/riscv
sudo make linux
echo 'export PATH="$PATH:/opt/riscv/bin"' >> ~/.bashrc
source ~/.bashrc
or
sudo apt install gcc-riscv64-unknown-elf
You can write your program in file with .cell. Here for example, we say hello.cell
cell hello.cell
You will get the output file also known as elf file named hello in the root folder. Just run it ./hello!
To compile elf
cell -t riscv hello.cell
You will get the elf executable named hello in the root folder.
To run the elf file, we need ckb-debugger the default debugger for ckb programs.
Run the following command to install ckb-debugger, suppose you already know what is cargo.
cargo install --git https://github.com/nervosnetwork/ckb-standalone-debugger ckb-debugger
Run below command to debug & run the hello program.
ckb-debugger --bin hello
Use cell --help to view the usage instructions.
Usage: cell [options] <filename>
-d, --debug Emit debug information during compile time
-h, --help Show help message
-O, --optimize Enable clang optimization
-o, --output string Output binary filename
-t, --target string Compile to this target (default "native")
-v, --verbose Emit verbose command during compiling
ckb-c-stdlib use molecule 0.7.1
cargo install [email protected] --locked
git clone [email protected]:cell-labs/cell-cli.git
cd cell-cli
npm install
npm install -g .
# 1、Copy the cell bin file to the Cell-Cli folder: exmple: helloworld
# 2、Enter your CKB private key in cell.config.js
cell-cli deploy ./helloworld