文章目录
简介
本文将带你快速上手 长安链(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 查看完整的生命周期轨迹。
通过上链管理,整个商品流转过程透明、可验证,极大提升了 可信度 和 监管能力,为供应链管理和消费者权益保护提供了坚实保障。
开发环境准备
- VirtualBox 安装 Ubuntu Server 系统及 Ubuntu 初始配置
- Ubuntu Server 系统安装 Docker
- Ubuntu 安装 gvm 管理 Go 语言开发环境
- Trae 通过 SSH 连接远程 Ubuntu Server 环境进行开发
长安链官网
官方源码仓库
- https://git.chainmaker.org.cn/chainmaker/management-backend
- https://git.chainmaker.org.cn/chainmaker/chainmaker-go
- https://git.chainmaker.org.cn/chainmaker/chainmaker-tools
- https://git.chainmaker.org.cn/chainmaker/chainmaker-docs
- https://git.chainmaker.org.cn/contracts/contracts-go
注: 需要先注册 长安链账号 才能下载源代码。
官方文档
官方 Docker 镜像仓库
注: hub-dev.cnbn.org.cn 是长安链团队自建的镜像源,也可以直接访问该地址,通过左上角搜索的方式,获取目前支持的镜像列表。
- 修改docker的配置文件:/etc/docker/daemon.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"
]
}
部署管理平台
git clone -b v2.4.0 --depth=1 https://git.chainmaker.org.cn/chainmaker/management-backend.git
cd management-backend
docker compose up -d
登录管理平台
注: 账号/密码(admin/a123456)
快速生成证书
新建区块链
链配置文件
注: 将下载的 trace.zip 文件复制到 Ubuntu Server 服务器上。
- Ubuntu Server 安装 zip 与 7z 工具
sudo apt install -y zip unzip
sudo apt install -y p7zip-full
- 从共享文件夹复制 trace.zip 到用户目录
cp trace.zip ~/
- 解压 trace.zip 文件得到 release 目录
sudo unzip trace.zip
cd release
- 执行 start.sh 启动长安链
./start.sh
- 4 个节点都启动成功
订阅长安链
- 订阅成功
项目编译打包(商品溯源示例)
注: go 版本 go1.17+,本人使用的是 go1.25.0 当前最新版本
git clone --depth=1 https://git.chainmaker.org.cn/contracts/contracts-go.git
cd contracts-go/trace
go mod tidy
./build.sh trace
注: 智能合约部署在 Linux 环境上的,必须使用 Linux进行编译打包;本人使用 Mac 环境编译打包使用自己写的交叉编译脚本 mac_build.sh。
- mac_build.sh
#!/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 |
上链管理
生产商品
创建一件商品,并存储到商品库里,同时修改商品状态,以及记录溯源信息
- 手动刷新页面
运输商品
修改商品运输状态,记录溯源信息
上架商品
修改商品上架状态,记录溯源信息
销售商品
修改商品销售状态,记录溯源信息