随着区块链技术的普及,长安链作为国产自主可控的联盟链平台,在企业级应用中备受青睐。本文将引导你在Ubuntu Server上快速部署长安链,并通过Go智能合约实现一个简单的商品溯源系统。无论你是区块链初学者还是开发者,都可以按照本教程一步步操作。
首先,确保你有一台运行 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 长安链的官方代码仓库托管在 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 进入项目目录,执行编译脚本:
cd scripts./build.sh 编译完成后,可执行文件生成在 bin 目录。验证编译:
../bin/chainmaker version 为了快速体验,我们使用长安链提供的单机多节点示例配置。在 scripts 目录执行:
./prepare.sh 4 1 该命令会生成4个共识节点、1个普通节点的配置。然后启动所有节点:
./start.sh 使用 ps aux | grep chainmaker 查看进程,确保四个节点均正常运行。
长安链支持多种合约语言,我们将用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。
在合约目录下编译为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 成功后会返回合约名称和版本。
注册一个商品:
./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数据即商品信息,实现了基本溯源功能。
本文演示了在Ubuntu Server部署长安链并利用Go智能合约实现商品溯源的完整流程。通过长安链的高性能和可扩展性,你可以进一步增加物流流转、销售记录等环节,构建完整的溯源应用。希望本教程能帮助你快速上手长安链开发。
关键词:长安链、Ubuntu Server部署、Go智能合约、商品溯源
本文由主机测评网于2026-02-20发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20260226098.html