智能合约开发

最近更新时间:2026-04-21 14:13:02

我的收藏
本章节主要描述使用 Go 进行 ChainMaker 合约编写的方法,主要面向于使用 Go 进行 ChainMaker 的合约开发的开发者。Go 合约运行在独立的 Docker VM 容器中,与长安链节点通过 TCP(推荐) 或者 UNIX Domain Socket 通信。Go 合约推荐在 Linux 环境下进行编译。如果需要在其他系统环境下编译合约,可使用 Golang 的交叉编译修改编译命令。

合约编写

ChainMaker 官方 Golang 合约 SDK 支持通过 go.mod 的方式引用,可直接使用 go get 引用,示例如下:
go get chainmaker.org/chainmaker/contract-sdk-go/v2@v2.3.3
执行完成后,即可调用合约 SDK 的方法,编写合约。

合约编译

当合约编写完成后,则需要编译合约,具体教程如下:
1. 在合约工程中添加编译脚本 build.sh 搭建编译环境。
#!/bin/bash

# check if used for x86 system or arm system
# x86 system arch = "x86"
# arm syetem arch = "arm"
arch="x86"

contractName=$1
if [[ ! -n $contractName ]] ;then
echo "contractName is empty. use as: ./build.sh contractName"
exit 1
fi

if [[ ${arch} == 'x86' ]];then
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o $contractName
else
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 GOARM=7 go build -ldflags="-s -w" -o $contractName
fi

7z a $contractName $contractName
rm -f $contractName
2. 编译撰写好的智能合约。
其中 ContractName 请替换成需要安装的合约名称。
./build.sh $contractName
编译成功后可在当前目录得到文件<contract_name>.7z,之后可在 TBaaS 控制台 上传并部署。
用户使用 Go(DockerGo) 编写智能合约后,可以把源代码更新到 main.go 文件中并重新编译,可得到新的智能合约的压缩文件,并前往 TBaaS 控制台 上传并部署。更多关于使用 Go(DockerGo) 开发长安链智能合约的详情,可参考长安链官网 使用 Golang 进行智能合约开发