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

上链管理

生产商品

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

  • 手动刷新页面

运输商品

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


上架商品

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

销售商品

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

获取商品溯源信息

相关推荐
HAORChain1 小时前
Hyperledger Fabric官方中文教程-改进笔记(十七)-编写第一个链码
笔记·区块链·fabric
TechubNews6 小时前
比特币操作系统:释放比特币在支付领域的潜力
区块链
HAORChain6 小时前
Hyperledger Fabric官方中文教程-改进笔记(十四)-向通道中添加组织
笔记·区块链·fabric
blasit6 小时前
Ubuntu 20.04.6交叉编译得到Ubuntu 16.04.6的可执行文件
linux·运维·ubuntu
dora8 小时前
DoraFund 2.0 集成与支付教程
android·区块链·github
满目82810 小时前
【Ubuntu系统实战】一站式部署与管理MySQL、MongoDB、Redis三大数据库
数据库·redis·mysql·mongodb·ubuntu·数据库布置
终端域名11 小时前
质押、ETF、财库三箭齐发:以太坊价值逻辑的重构与演进
区块链·数字货币
澡点睡觉13 小时前
【golang长途旅行第32站】反射
开发语言·后端·golang
软件测试大叔14 小时前
ubuntu替换源为阿里源(修改ubuntu.source文件)
linux·运维·ubuntu