当前位置:首页 > 系统教程 > 正文

长安链部署实战:Ubuntu Server上基于Go语言智能合约的商品溯源系统开发

长安链部署实战:Ubuntu Server上基于Go语言智能合约的商品溯源系统开发

从零开始快速部署长安链并实现商品溯源(附Go合约详解)

长安链部署实战:Ubuntu Server上基于Go语言智能合约的商品溯源系统开发 长安链  Ubuntu Server部署 Go智能合约 商品溯源 第1张

随着区块链技术的普及,长安链作为国产自主可控的联盟链平台,在企业级应用中备受青睐。本文将引导你在Ubuntu Server上快速部署长安链,并通过Go智能合约实现一个简单的商品溯源系统。无论你是区块链初学者还是开发者,都可以按照本教程一步步操作。

1. 环境准备:Ubuntu Server系统配置

首先,确保你有一台运行 Ubuntu Server 20.04 或 22.04 的机器(物理机或云服务器)。更新系统并安装必要的工具:

sudo apt update && sudo apt upgrade -ysudo apt install git curl wget make gcc build-essential -y

安装 Go 语言(版本建议 1.17+):

wget https://go.dev/dl/go1.20.5.linux-amd64.tar.gzsudo tar -C /usr/local -xzf go1.20.5.linux-amd64.tar.gzecho "export PATH=$PATH:/usr/local/go/bin" >> ~/.bashrcsource ~/.bashrcgo version

安装 Docker 和 Docker Compose(用于快速启动依赖服务):

curl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.shsudo usermod -aG docker $USERnewgrp dockerdocker version

2. 下载长安链(ChainMaker)源码

长安链的官方代码仓库托管在 chainmaker.org 和 GitHub 上。我们直接克隆 chainmaker-go 项目:

git clone https://git.chainmaker.org.cn/chainmaker/chainmaker-go.gitcd chainmaker-go

如果网络慢,也可以从 GitHub 镜像拉取:

git clone https://github.com/chainmaker/chainmaker-go.git

3. 编译长安链二进制

进入项目目录,执行编译脚本:

cd scripts./build.sh

编译完成后,可执行文件生成在 bin 目录。验证编译:

../bin/chainmaker version

4. 配置并启动单机四节点链

为了快速体验,我们使用长安链提供的单机多节点示例配置。在 scripts 目录执行:

./prepare.sh 4 1

该命令会生成4个共识节点、1个普通节点的配置。然后启动所有节点:

./start.sh

使用 ps aux | grep chainmaker 查看进程,确保四个节点均正常运行。

5. 编写Go智能合约:商品溯源

长安链支持多种合约语言,我们将用Go智能合约实现一个简单的商品溯源逻辑。创建一个新的合约目录:

mkdir -p ~/contracts/traceabilitycd ~/contracts/traceabilitygo mod init traceability

编写合约文件 main.go

package mainimport (    "encoding/json"    "fmt"    "strconv"    "chainmaker.org/chainmaker/contract-sdk-go/v2/sdk"    "chainmaker.org/chainmaker/contract-sdk-go/v2/standard")type Traceability struct {}func (t *Traceability) InitContract() {    // 初始化时可做任何操作}// 注册商品type Product struct {    ID          string json:"id"    Name        string json:"name"    Producer    string json:"producer"    ProductDate string json:"product_date"    Status      string json:"status" // 生产、运输、销售}func (t *Traceability) RegisterProduct() {    // 获取参数    args := sdk.Instance.GetArgs()    id := string(args["id"])    name := string(args["name"])    producer := string(args["producer"])    date := string(args["product_date"])    product := &Product{        ID:          id,        Name:        name,        Producer:    producer,        ProductDate: date,        Status:      "生产",    }    productBytes, _ := json.Marshal(product)    err := sdk.Instance.PutState("product", id, string(productBytes))    if err != nil {        sdk.Instance.ErrorResult("保存商品失败")        return    }    // 记录溯源事件    sdk.Instance.EmitEvent("register", []string{id, name})    sdk.Instance.SuccessResult("ok")}func (t *Traceability) QueryProduct() {    args := sdk.Instance.GetArgs()    id := string(args["id"])    data, err := sdk.Instance.GetState("product", id)    if err != nil || data == "" {        sdk.Instance.ErrorResult("商品不存在")        return    }    sdk.Instance.SuccessResult(data)}func main() {    err := sdk.Start(new(Traceability))    if err != nil {        panic(err)    }}

该合约实现了商品注册和查询功能,状态存储于链上。注意引入长安链合约SDK。

6. 编译并部署Go智能合约

在合约目录下编译为wasm(长安链Go合约编译成wasm):

GOOS=js GOARCH=wasm go build -o traceability.wasm main.go

然后将生成的wasm文件拷贝到长安链节点管理的合约目录,或者使用长安链CMC工具部署。这里使用CMC命令行工具(需提前编译安装)。

安装CMC:进入 chainmaker-go/tools/cmc 运行 go build,生成cmc二进制。

使用cmc创建合约:

./cmc client contract create \n--contract-name=traceability \n--runtime-type=WASMER \n--byte-code-path=./traceability.wasm \n--version=1.0 \n--sdk-conf-path=../../config/sdk_config.yml \n--params="{}" \n--admin-key-file=../../config/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.key \n--admin-crt-file=../../config/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.crt \n--org-id=wx-org1.chainmaker.org

成功后会返回合约名称和版本。

7. 调用合约实现商品溯源

注册一个商品:

./cmc client contract invoke \n--contract-name=traceability \n--method=RegisterProduct \n--sdk-conf-path=../../config/sdk_config.yml \n--params="{"id':"1001","name':"有机大米","producer':"五常农场","product_date':"2025-03-01'}" \n--org-id=wx-org1.chainmaker.org \n--sync-result=true

查询商品溯源信息:

./cmc client contract query \n--contract-name=traceability \n--method=QueryProduct \n--sdk-conf-path=../../config/sdk_config.yml \n--params="{"id':"1001'}" \n--org-id=wx-org1.chainmaker.org

返回的JSON数据即商品信息,实现了基本溯源功能。

8. 扩展与总结

本文演示了在Ubuntu Server部署长安链并利用Go智能合约实现商品溯源的完整流程。通过长安链的高性能和可扩展性,你可以进一步增加物流流转、销售记录等环节,构建完整的溯源应用。希望本教程能帮助你快速上手长安链开发。

关键词:长安链、Ubuntu Server部署、Go智能合约、商品溯源