ontology 合约
ontology 简称本体,是新一代公有基础链项目与分布式信任协作平台,提供智能合约支持。
创建并运行 debian10 镜像
docker run --name onto --restart always -p 20334-20336:20334-20336 -itd debian:10
进入 debian 终端
docker exec -it onto /bin/bash
换源(加速下载包)和更新
/bin/bash -c 'echo -e "\
deb http://mirrors.163.com/debian/ buster main non-free contrib\n\
deb http://mirrors.163.com/debian/ buster-updates main non-free contrib\n\
deb http://mirrors.163.com/debian/ buster-backports main non-free contrib\n\
deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib" > /etc/apt/sources.list;\
apt update;\
apt upgrade -y;'
安装所需的包
apt install -y curl git gcc xxd
安装 go1.14,设置 go 代理,默认的无法访问
cd /usr/local/ && curl -O https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
tar -xvf go1.14.4.linux-amd64.tar.gz && rm go1.14.4.linux-amd64.tar.gz
ln go/bin/go bin/go && ln go/bin/gofmt bin/gofmt && go env -w GOPROXY=https://goproxy.cn
安装 ontology
git clone https://github.com/ontio/ontology ~/go/src/github.com/ontio/ontology -b v1.10.0 --depth 1
cd ~/go/src/github.com/ontio/ontology && go install .
echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
安装 rust
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain nightly
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
rustup 换源 ,加速下载
/bin/bash -c 'echo -e "\
[source.crates-io]\n\
replace-with = "tuna"\n\
\n\
[source.tuna]\n\
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"" > $HOME/.cargo/config;'
安装 wasm 编译器
rustup target add wasm32-unknown-unknown
cargo install --git=https://github.com/ontio/ontio-wasm-build
拉取 rust 版 wasm 工具和示例代码
cd && git clone https://github.com/ontio/ontology-wasm-cdt-rust --depth 1
编译示例代码 ,编译出来的 wasm 文件在 target/wasm32-unknown-unknown/release
cd ontology-wasm-cdt-rust && bash build.sh
生成测试钱包 ,需要输入密码,记住这个密码,启动节点和签名交易需要它,以 123456 密码为例
cd && ontology account add -d
启动测试节点 ,使用 - p 参数指定密码或者按提示输入
ontology --testmode -p 123456
在网站 smartx.ont.io 上部署 wasm 合约 smartx.ont.io
是本体在线开发合约工具,支持编辑、编译、部署等一站式服务,但是目前不支持 wasm 合约的编辑与编译,可以部署 wasm 合约,还需要安装本体的钱包来签名和发送交易。
通过合约子命令部署与调用合约
生成 16 进制的合约代码,wasm 合约是二进制形式的,本地部署不支持这种形式的,使用 xxd 命令转换,以前面的示例合约 hello 为例
xxd -p ~/ontology-wasm-cdt-rust/target/wasm32-unknown-unknown/release/helloworld.wasm | tr -d $'\n' > ~/hello
部署合约,如果成功将会打印合约地址
ontology contract deploy --gasprice 0 --gaslimit 100000000 --vmtype 3 --code hello --name hello
调用合约,下面的地址填写实际部署成功返回的合约地址
ontology contract invoke --gasprice 0 --gaslimit 100000000 --address 9fa035fbf7b10dffa1d98003c97136fa88c0323a --vmtype 3 --params string:hello
注:可以使用 - p 参数来预执行交易,即本地交易,不会将此交易打包到区块中去