ontology 合约

admin
admin 2020年06月12日
  • 在其它设备中阅读本文章

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 参数来预执行交易,即本地交易,不会将此交易打包到区块中去