Ubuntu Server 快速部署长安链:基于 Go 的智能合约实现商品溯源

文章目录

简介

本文将带你快速上手 长安链(ChainMaker)管理平台 的部署与使用。从环境准备、证书生成、链创建,到合约编译、部署与调用,全流程演示如何搭建一条可运行的区块链网络,并基于智能合约实现一个 商品溯源应用。

在实战过程中,你将学会:

  • 使用 Docker 一键启动管理后台并登录平台;
  • 快速生成证书并配置多节点区块链;
  • 部署并运行链上合约,实现商品全生命周期的追踪;
  • 在平台界面上直观管理和查询商品的生产、运输、上架、销售等状态。

通过本文,你不仅能掌握长安链的基础部署方法,还能了解区块链在 商品溯源场景 下的具体落地方式,适合作为入门实践教程或后续开发的参考。

智能合约语言

长安链为了适应不同的开发场景和开发者群体,采用了多语言智能合约虚拟机的设计,目前支持:

语言 推荐度 特点与适用场景
Go ⭐️⭐️⭐️⭐️⭐️ (首选) 适用于长安链等国内联盟链。 性能优异,与底层技术栈统一,官方支持完善,工程化程度高。是企业级应用、政务、供应链金融等合规场景的首选。
Solidity ⭐️⭐️⭐️⭐️⭐️ (公链必备) 适用于以太坊及所有EVM兼容公链。 是DeFi、NFT、GameFi等加密货币领域的"世界语"。生态极其庞大,但代码安全性要求极高,直接关系资产安全。
Rust ⭐️⭐️⭐️⭐️ (次选/前沿) 适用于长安链、Solana、Polkadot等。 以内存安全和极致性能著称,学习曲线陡峭。是追求高性能和高安全性的复杂合约、以及新一代公链的绝佳选择。
C++ ⭐️⭐️⭐️ (特定场景) 适用于长安链、EOS等。 性能强大,但更为底层,易用性和安全性上不如Go和Rust。通常用于有历史C++代码需要移植或特定性能调优需求的场景。
TinyGo ⭐️⭐️⭐️ (特殊场景) Go 的轻量级版本,用于 WASM(WebAssembly)虚拟机。合约编译体积更小,启动更快,适合资源受限或需要与 Web 生态交互的场景。

智能合约

智能合约(Smart Contract) 是运行在区块链上的一段程序代码,它能够在满足预设条件时,自动执行相关的业务逻辑,确保执行结果公开透明、不可篡改。与传统系统中的"后台逻辑"不同,智能合约一旦部署到链上,就不能随意修改或删除,从而大大提升了可信度。

在本次商品溯源应用中,智能合约的主要作用是:

  • 记录商品信息: 如商品 ID、名称、生产厂家等;
  • 管理状态流转: 包括生产、运输、上架、销售等环节;
  • 保障数据可信: 所有状态变化和操作都写入链上,不可伪造;
  • 支持溯源查询: 任何人都可以根据商品 ID 查询完整的流通过程。

通过这些功能,智能合约让区块链不仅仅是一个"存数据的账本",而是一个能自动执行业务规则的 去中心化应用平台。

上链管理

上链管理 是指将业务数据通过智能合约写入区块链的过程。与传统数据库不同,区块链中的数据一旦写入就无法篡改,并且所有操作都会被完整记录和追溯。

在本次商品溯源应用中,上链管理的主要流程包括:

  • 生产商品: 记录商品的基本信息和初始状态;
  • 运输商品: 更新商品的物流状态,确保运输路径可追踪;
  • 上架商品: 标记商品进入销售环节;
  • 销售商品: 记录最终销售信息,形成完整的闭环;
  • 溯源查询: 任何用户都可以根据商品 ID 查看完整的生命周期轨迹。

通过上链管理,整个商品流转过程透明、可验证,极大提升了 可信度 和 监管能力,为供应链管理和消费者权益保护提供了坚实保障。

开发环境准备

长安链官网

官方源码仓库

注: 需要先注册 长安链账号 才能下载源代码。

官方文档

官方 Docker 镜像仓库

注: hub-dev.cnbn.org.cn 是长安链团队自建的镜像源,也可以直接访问该地址,通过左上角搜索的方式,获取目前支持的镜像列表。

  • 修改docker的配置文件:/etc/docker/daemon.json
json 复制代码
{
  "registry-mirrors": [
	"https://hub-dev.cnbn.org.cn",
    "https://mirror.ccs.tencentyun.com",
    "https://qpaqqzrt.mirror.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com"
  ]
}

部署管理平台

bash 复制代码
git clone -b v2.4.0 --depth=1 https://git.chainmaker.org.cn/chainmaker/management-backend.git
bash 复制代码
cd management-backend
docker compose up -d

登录管理平台

注: 账号/密码(admin/a123456

快速生成证书

新建区块链



链配置文件

注: 将下载的 trace.zip 文件复制到 Ubuntu Server 服务器上。

  • Ubuntu Server 安装 zip 与 7z 工具
bash 复制代码
sudo apt install -y zip unzip
sudo apt install -y p7zip-full
  • 从共享文件夹复制 trace.zip 到用户目录
bash 复制代码
cp trace.zip ~/
  • 解压 trace.zip 文件得到 release 目录
bash 复制代码
sudo unzip trace.zip
cd release
bash 复制代码
./start.sh
  • 4 个节点都启动成功

订阅长安链

  • 订阅成功

项目编译打包(商品溯源示例)

注: go 版本 go1.17+ ,本人使用的是 go1.25.0 当前最新版本

bash 复制代码
git clone --depth=1 https://git.chainmaker.org.cn/contracts/contracts-go.git
bash 复制代码
cd contracts-go/trace
go mod tidy
./build.sh trace

注: 智能合约部署在 Linux 环境上的,必须使用 Linux进行编译打包 ;本人使用 Mac 环境编译打包使用自己写的交叉编译脚本 mac_build.sh

  • mac_build.sh
bash 复制代码
#!/bin/bash

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

# 设置交叉编译目标为 Linux
export GOOS=linux
export GOARCH=amd64   # 如果目标是 ARM64 可改为 arm64
export CGO_ENABLED=0   # 禁用 cgo,保证可移植性

# 编译合约
echo "编译合约 $contractName 到 Linux..."
go build -ldflags="-s -w" -o "$contractName"

# 压缩成 7z
echo "压缩 $contractName..."
7z a "$contractName.7z" "$contractName"

# 删除原始可执行文件
rm -f "$contractName"

echo "编译并压缩完成: $contractName.7z"

部署合约


编辑合约

  • 新增合约调用方法
方法 操作 参数
newGoods 调用 goodsId,name,factory
transferGoods 调用 goodsId,from,to
uploadGoods 调用 goodsId,uploader
sellGoods 调用 goodsId,seller
goodsStatus 查询 goodsId
traceGoods 查询 goodsId

上链管理

生产商品

创建一件商品,并存储到商品库里,同时修改商品状态,以及记录溯源信息

  • 手动刷新页面

运输商品

修改商品运输状态,记录溯源信息


上架商品

修改商品上架状态,记录溯源信息

销售商品

修改商品销售状态,记录溯源信息

获取商品溯源信息

相关推荐
一叶龙洲1 天前
解决Ubuntu25.04无法使用快捷键打开
ubuntu
知识分享小能手1 天前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04中的Java与Android开发环境 (20)
java·学习·ubuntu
Aevget1 天前
智能高效Go开发工具GoLand v2025.3全新上线——新增资源泄漏分析
开发语言·ide·后端·golang·go
oMcLin1 天前
如何在 Ubuntu 22.04 服务器上实现分布式数据库 Cassandra 集群,优化数据一致性与写入吞吐量
服务器·分布式·ubuntu
区块链小八歌1 天前
Horizen隐私主网在Caldera正式上线,将隐私保护引入“链上网络“生态
区块链
DigitalOcean1 天前
Ubuntu服务器快速上手:初始配置与安全设置教程
ubuntu
asdfg12589631 天前
小程序开发中的JS和Go的对比及用途
开发语言·javascript·golang
习惯就好zz1 天前
在 Ubuntu 18.04 旧系统上部署新版 GitHub Actions Runner 的终极方案
linux·ubuntu·github·cicd·action
2501_941881401 天前
在墨西哥城复杂流量环境下构建高稳定性API网关的架构设计与实现实践分享
macos·golang·xcode
天远云服1 天前
Go语言高并发实战:集成天远手机号码归属地核验API打造高性能风控中台
大数据·开发语言·后端·golang