当前位置: 首页 > news >正文

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

文章目录

  • 简介
  • 智能合约语言
  • 智能合约
  • 上链管理
  • 开发环境准备
  • 长安链官网
  • 官方源码仓库
  • 官方文档
  • 官方 Docker 镜像仓库
  • 部署管理平台
  • 登录管理平台
  • 快速生成证书
  • 新建区块链
  • 链配置文件
  • 订阅长安链
  • 项目编译打包(商品溯源示例)
  • 部署合约
    • 编辑合约
  • 上链管理
    • 生产商品
    • 运输商品
    • 上架商品
    • 销售商品
    • 获取商品溯源信息

简介

本文将带你快速上手 长安链(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/users/sign_in

官方源码仓库

  • 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 镜像仓库

  • https://hub-dev.cnbn.org.cn/account/sign-in?globalSearch=chainmaker

在这里插入图片描述

注: 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

  • http://192.168.0.25/login

在这里插入图片描述

快速生成证书

在这里插入图片描述

新建区块链

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

链配置文件

在这里插入图片描述

注: 将下载的 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 ]]; thenecho "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

在这里插入图片描述

上链管理

生产商品

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

在这里插入图片描述

  • 手动刷新页面

在这里插入图片描述

运输商品

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

在这里插入图片描述
在这里插入图片描述

上架商品

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

在这里插入图片描述

销售商品

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

在这里插入图片描述

获取商品溯源信息

在这里插入图片描述

在这里插入图片描述

http://www.dtcms.com/a/351039.html

相关文章:

  • 质押、ETF、财库三箭齐发:以太坊价值逻辑的重构与演进
  • Linux系统中,利用sed命令删除文档空格的方法汇总
  • Redis ZSET 深度剖析:从命令、原理到实战
  • 基于 Elasticsearch 解决分库分表查询难题
  • [Maven 基础课程]Maven 是什么
  • 【Linux操作系统】简学深悟启示录:环境变量进程地址
  • Java基础第5天总结(final关键字,枚举,抽象类)
  • Redis-数据类型与常用命令
  • Java数据结构——9.排序
  • 【OpenAI】ChatGPT-4o 全能AI-omni的详细介绍+API KET的使用教程!
  • Stream API 新玩法:从 teeing()到 mapMulti()
  • 多种“找不到vcruntime140.dll,无法继续执行代码”提示的解决方法:从原理到实操,轻松修复系统故障
  • 【Delphi】中通过索引动态定位并创建对应窗体类实例
  • CMake构建学习笔记20-iconv库的构建
  • MATLAB在生态环境数据处理与分析中的应用,生态系统模型构建与数值模拟等
  • 简述滚珠丝杆升降机的结构和原理
  • CSS 结构伪类选择器
  • 【BUG排查】调试瑞萨RH850F1KMS1时候随机出现进入到unused_isr
  • 一款基于 .NET 开源、功能强大的 Windows 搜索工具
  • GD32VW553-IOT开发板测评 搭建环境到电灯(QA分享)
  • 使用提供的 YAML 文件在 Conda 中创建环境
  • Conda的配置
  • 实时平台Flink热更新技术——实现不停机升级!
  • Caddy + CoreDNS 深度解析:从功能架构到性能优化实践(上)
  • webrtc音频QOS方法一.1(NetEQ之音频网络延时DelayManager计算补充)
  • 设计模式学习笔记-----抽象策略模式
  • 【Ansible】Ansible部署K8s集群--准备环境--配置网络
  • 主流的 AI Agent 开发框架
  • 论文阅读(四)| 软件运行时配置研究综述
  • 游戏玩家批量多开挂机如何选择:云手机还是模拟器