添加完整的环境配置文件和工具链管理

- 添加rust-toolchain.toml锁定Rust 1.75.0
- 添加.go-version锁定Go 1.21.0
- 添加Makefile简化编译命令
- 添加scripts/setup_env.sh一键安装环境
- 添加scripts/verify_env.sh验证环境配置
- 添加scripts/build_all.sh编译所有模块
- 添加scripts/test_all.sh测试所有模块
- 添加scripts/clean_all.sh清理编译产物

作者:NAC公链开发小组
This commit is contained in:
NAC Development Team 2026-02-16 20:23:04 -05:00
parent 33df3f7ab9
commit ab6940407f
8 changed files with 751 additions and 0 deletions

1
.go-version Normal file
View File

@ -0,0 +1 @@
1.21.0

107
Makefile Normal file
View File

@ -0,0 +1,107 @@
# NAC区块链 Makefile
# 作者NAC公链开发小组
# 版本v1.0.0
.PHONY: all build test clean help install check fmt clippy doc
# 默认目标
all: build
# 帮助信息
help:
@echo "NAC区块链开发工具"
@echo ""
@echo "可用命令:"
@echo " make install - 安装开发环境"
@echo " make check - 验证环境配置"
@echo " make build - 编译所有模块release模式"
@echo " make build-dev - 编译所有模块debug模式"
@echo " make test - 运行所有测试"
@echo " make fmt - 格式化代码"
@echo " make clippy - 运行代码检查"
@echo " make doc - 生成文档"
@echo " make clean - 清理编译产物"
@echo " make help - 显示此帮助信息"
@echo ""
# 安装开发环境
install:
@echo "正在安装NAC开发环境..."
@chmod +x scripts/setup_env.sh
@./scripts/setup_env.sh
# 验证环境配置
check:
@echo "正在验证环境配置..."
@chmod +x scripts/verify_env.sh
@./scripts/verify_env.sh
# 编译所有模块release模式
build:
@echo "正在编译所有模块release模式..."
@chmod +x scripts/build_all.sh
@./scripts/build_all.sh --release
# 编译所有模块debug模式
build-dev:
@echo "正在编译所有模块debug模式..."
@chmod +x scripts/build_all.sh
@./scripts/build_all.sh
# 运行所有测试
test:
@echo "正在运行所有测试..."
@chmod +x scripts/test_all.sh
@./scripts/test_all.sh
# 格式化代码
fmt:
@echo "正在格式化代码..."
@cd nac-udm && cargo fmt
@if [ -d "charter-compiler" ]; then cd charter-compiler && cargo fmt; fi
@if [ -d "nvm_v2" ]; then cd nvm_v2 && cargo fmt; fi
@if [ -d "nac-nvm" ]; then cd nac-nvm && cargo fmt; fi
@if [ -d "nac-cbpp" ]; then cd nac-cbpp && cargo fmt; fi
@if [ -d "nac-gnacs" ]; then cd nac-gnacs && cargo fmt; fi
@if [ -d "nac-acc" ]; then cd nac-acc && cargo fmt; fi
@if [ -d "nac-rpc" ]; then cd nac-rpc && cargo fmt; fi
@if [ -d "nac-storage" ]; then cd nac-storage && cargo fmt; fi
@echo "✓ 代码格式化完成"
# 运行代码检查
clippy:
@echo "正在运行代码检查..."
@cd nac-udm && cargo clippy -- -D warnings
@if [ -d "charter-compiler" ]; then cd charter-compiler && cargo clippy -- -D warnings; fi
@if [ -d "nvm_v2" ]; then cd nvm_v2 && cargo clippy -- -D warnings; fi
@if [ -d "nac-nvm" ]; then cd nac-nvm && cargo clippy -- -D warnings; fi
@if [ -d "nac-cbpp" ]; then cd nac-cbpp && cargo clippy -- -D warnings; fi
@if [ -d "nac-gnacs" ]; then cd nac-gnacs && cargo clippy -- -D warnings; fi
@if [ -d "nac-acc" ]; then cd nac-acc && cargo clippy -- -D warnings; fi
@if [ -d "nac-rpc" ]; then cd nac-rpc && cargo clippy -- -D warnings; fi
@if [ -d "nac-storage" ]; then cd nac-storage && cargo clippy -- -D warnings; fi
@echo "✓ 代码检查完成"
# 生成文档
doc:
@echo "正在生成文档..."
@cd nac-udm && cargo doc --no-deps
@if [ -d "charter-compiler" ]; then cd charter-compiler && cargo doc --no-deps; fi
@if [ -d "nvm_v2" ]; then cd nvm_v2 && cargo doc --no-deps; fi
@echo "✓ 文档生成完成"
@echo "文档位置: target/doc/index.html"
# 清理编译产物
clean:
@echo "正在清理编译产物..."
@chmod +x scripts/clean_all.sh
@./scripts/clean_all.sh
@echo "✓ 清理完成"
# 快速开发循环
dev: fmt clippy test
@echo "✓ 开发检查完成"
# 完整构建流程
full: clean build test doc
@echo "✓ 完整构建完成"

5
rust-toolchain.toml Normal file
View File

@ -0,0 +1,5 @@
[toolchain]
channel = "1.75.0"
components = ["rustfmt", "clippy", "rust-src"]
targets = ["x86_64-unknown-linux-gnu", "wasm32-unknown-unknown"]
profile = "default"

114
scripts/build_all.sh Executable file
View File

@ -0,0 +1,114 @@
#!/bin/bash
# NAC区块链统一编译脚本
# 作者NAC公链开发小组
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 默认为debug模式
BUILD_MODE="debug"
CARGO_FLAGS=""
# 解析参数
while [[ $# -gt 0 ]]; do
case $1 in
--release|-r)
BUILD_MODE="release"
CARGO_FLAGS="--release"
shift
;;
*)
echo "未知参数: $1"
exit 1
;;
esac
done
echo "========================================="
echo " NAC区块链统一编译脚本"
echo " 模式: ${BUILD_MODE}"
echo "========================================="
echo ""
SUCCESS=0
FAILED=0
# 编译模块函数
build_module() {
local module=$1
local name=$2
if [ -d "$module" ]; then
echo -e "${YELLOW}正在编译 ${name}...${NC}"
cd "$module"
if cargo build $CARGO_FLAGS 2>&1 | tee /tmp/build_${name}.log; then
echo -e "${GREEN}${name} 编译成功${NC}"
((SUCCESS++))
else
echo -e "${RED}${name} 编译失败${NC}"
echo "错误日志: /tmp/build_${name}.log"
((FAILED++))
fi
cd ..
echo ""
else
echo -e "${YELLOW}跳过 ${name}(目录不存在)${NC}"
echo ""
fi
}
# 开始编译
START_TIME=$(date +%s)
# 1. 编译nac-udm核心模块
build_module "nac-udm" "NAC统一数据模型"
# 2. 编译charter-compiler
build_module "charter-compiler" "Charter编译器"
# 3. 编译nvm_v2
build_module "nvm_v2" "NAC虚拟机v2"
# 4. 编译其他模块(如果存在)
build_module "nac-nvm" "NAC虚拟机"
build_module "nac-cbpp" "CBPP共识协议"
build_module "nac-gnacs" "GNACS资产分类"
build_module "nac-acc" "ACC协议"
build_module "nac-acc20c" "ACC-20C合规协议"
build_module "nac-rpc" "NAC RPC接口"
build_module "nac-storage" "NAC存储层"
# 计算耗时
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
# 输出统计
echo "========================================="
echo "编译完成"
echo "========================================="
echo -e "成功: ${GREEN}${SUCCESS}${NC}"
echo -e "失败: ${RED}${FAILED}${NC}"
echo "耗时: ${DURATION}"
echo ""
if [ $FAILED -eq 0 ]; then
echo -e "${GREEN}✓ 所有模块编译成功!${NC}"
echo ""
echo "编译产物位置:"
if [ "$BUILD_MODE" == "release" ]; then
echo " target/release/"
else
echo " target/debug/"
fi
exit 0
else
echo -e "${RED}✗ 部分模块编译失败,请检查错误日志${NC}"
exit 1
fi

63
scripts/clean_all.sh Executable file
View File

@ -0,0 +1,63 @@
#!/bin/bash
# NAC区块链统一清理脚本
# 作者NAC公链开发小组
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
echo "========================================="
echo " NAC区块链统一清理脚本"
echo "========================================="
echo ""
CLEANED=0
# 清理模块函数
clean_module() {
local module=$1
local name=$2
if [ -d "$module" ]; then
echo -e "${YELLOW}正在清理 ${name}...${NC}"
cd "$module"
if [ -d "target" ]; then
rm -rf target
echo -e "${GREEN}${name} 清理完成${NC}"
((CLEANED++))
else
echo -e "${YELLOW} ${name} 无需清理${NC}"
fi
cd ..
fi
}
# 清理所有模块
clean_module "nac-udm" "NAC统一数据模型"
clean_module "charter-compiler" "Charter编译器"
clean_module "nvm_v2" "NAC虚拟机v2"
clean_module "nac-nvm" "NAC虚拟机"
clean_module "nac-cbpp" "CBPP共识协议"
clean_module "nac-gnacs" "GNACS资产分类"
clean_module "nac-acc" "ACC协议"
clean_module "nac-acc20c" "ACC-20C合规协议"
clean_module "nac-rpc" "NAC RPC接口"
clean_module "nac-storage" "NAC存储层"
# 清理临时文件
echo ""
echo "正在清理临时文件..."
rm -f /tmp/build_*.log
rm -f /tmp/test_*.log
echo -e "${GREEN}✓ 临时文件清理完成${NC}"
echo ""
echo "========================================="
echo "清理完成"
echo "========================================="
echo "已清理 ${CLEANED} 个模块"
echo ""

187
scripts/setup_env.sh Executable file
View File

@ -0,0 +1,187 @@
#!/bin/bash
# NAC区块链开发环境自动配置脚本
# 作者NAC公链开发小组
# 版本v1.0.0
# 日期2026-02-17
set -e
echo "========================================="
echo " NAC区块链开发环境配置脚本"
echo "========================================="
echo ""
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 检测操作系统
OS="$(uname -s)"
case "${OS}" in
Linux*) MACHINE=Linux;;
Darwin*) MACHINE=Mac;;
*) MACHINE="UNKNOWN:${OS}"
esac
echo -e "${GREEN}检测到操作系统: ${MACHINE}${NC}"
echo ""
# 1. 安装Rust工具链
echo "========================================="
echo "1. 安装Rust工具链"
echo "========================================="
if command -v rustc &> /dev/null; then
RUST_VERSION=$(rustc --version | awk '{print $2}')
echo -e "${YELLOW}已安装Rust版本: ${RUST_VERSION}${NC}"
else
echo "正在安装Rust..."
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
echo -e "${GREEN}✓ Rust安装完成${NC}"
fi
# 安装指定版本的Rust
REQUIRED_RUST_VERSION="1.75.0"
echo "正在安装Rust ${REQUIRED_RUST_VERSION}..."
rustup install ${REQUIRED_RUST_VERSION}
rustup default ${REQUIRED_RUST_VERSION}
# 安装必要组件
echo "正在安装Rust组件..."
rustup component add rustfmt clippy rust-src
# 添加WASM目标
echo "正在添加WASM编译目标..."
rustup target add wasm32-unknown-unknown
echo -e "${GREEN}✓ Rust工具链配置完成${NC}"
echo ""
# 2. 安装Go工具链可选
echo "========================================="
echo "2. 安装Go工具链可选"
echo "========================================="
if command -v go &> /dev/null; then
GO_VERSION=$(go version | awk '{print $3}')
echo -e "${YELLOW}已安装Go版本: ${GO_VERSION}${NC}"
else
echo "Go未安装正在安装..."
REQUIRED_GO_VERSION="1.21.0"
if [ "$MACHINE" == "Linux" ]; then
wget https://go.dev/dl/go${REQUIRED_GO_VERSION}.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go${REQUIRED_GO_VERSION}.linux-amd64.tar.gz
rm go${REQUIRED_GO_VERSION}.linux-amd64.tar.gz
# 添加到PATH
if ! grep -q "/usr/local/go/bin" ~/.bashrc; then
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export PATH=$PATH:$HOME/go/bin' >> ~/.bashrc
fi
export PATH=$PATH:/usr/local/go/bin
export PATH=$PATH:$HOME/go/bin
echo -e "${GREEN}✓ Go安装完成${NC}"
elif [ "$MACHINE" == "Mac" ]; then
if command -v brew &> /dev/null; then
brew install go@1.21
echo -e "${GREEN}✓ Go安装完成${NC}"
else
echo -e "${YELLOW}请手动安装Homebrew后再运行此脚本${NC}"
fi
fi
fi
echo ""
# 3. 安装系统依赖
echo "========================================="
echo "3. 安装系统依赖"
echo "========================================="
if [ "$MACHINE" == "Linux" ]; then
echo "正在安装Linux系统依赖..."
if command -v apt-get &> /dev/null; then
sudo apt-get update
sudo apt-get install -y build-essential pkg-config libssl-dev git curl wget
echo -e "${GREEN}✓ 系统依赖安装完成${NC}"
elif command -v yum &> /dev/null; then
sudo yum groupinstall -y "Development Tools"
sudo yum install -y openssl-devel git curl wget
echo -e "${GREEN}✓ 系统依赖安装完成${NC}"
fi
elif [ "$MACHINE" == "Mac" ]; then
echo "正在安装macOS系统依赖..."
if command -v brew &> /dev/null; then
brew install openssl pkg-config git curl wget
echo -e "${GREEN}✓ 系统依赖安装完成${NC}"
else
echo -e "${YELLOW}请先安装Homebrew: /bin/bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"${NC}"
fi
fi
echo ""
# 4. 编译Charter编译器
echo "========================================="
echo "4. 编译Charter编译器"
echo "========================================="
if [ -d "charter-compiler" ]; then
echo "正在编译Charter编译器..."
cd charter-compiler
cargo build --release
cd ..
echo -e "${GREEN}✓ Charter编译器编译完成${NC}"
echo "Charter编译器位置: ./charter-compiler/target/release/charter-compiler"
else
echo -e "${YELLOW}未找到charter-compiler目录跳过${NC}"
fi
echo ""
# 5. 验证安装
echo "========================================="
echo "5. 验证安装"
echo "========================================="
echo "Rust版本:"
rustc --version
echo ""
echo "Cargo版本:"
cargo --version
echo ""
if command -v go &> /dev/null; then
echo "Go版本:"
go version
echo ""
fi
echo "Git版本:"
git --version
echo ""
# 6. 环境变量提示
echo "========================================="
echo "环境配置完成!"
echo "========================================="
echo ""
echo -e "${GREEN}✓ 所有依赖已安装完成${NC}"
echo ""
echo "请运行以下命令使环境变量生效:"
echo -e "${YELLOW}source ~/.bashrc${NC}"
echo ""
echo "或者重新打开终端。"
echo ""
echo "接下来可以运行:"
echo " ./scripts/build_all.sh # 编译所有模块"
echo " ./scripts/test_all.sh # 运行所有测试"
echo " ./scripts/verify_env.sh # 验证环境配置"
echo ""

95
scripts/test_all.sh Executable file
View File

@ -0,0 +1,95 @@
#!/bin/bash
# NAC区块链统一测试脚本
# 作者NAC公链开发小组
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
echo "========================================="
echo " NAC区块链统一测试脚本"
echo "========================================="
echo ""
SUCCESS=0
FAILED=0
TOTAL_TESTS=0
TOTAL_PASSED=0
TOTAL_FAILED=0
# 测试模块函数
test_module() {
local module=$1
local name=$2
if [ -d "$module" ]; then
echo -e "${YELLOW}正在测试 ${name}...${NC}"
cd "$module"
if cargo test 2>&1 | tee /tmp/test_${name}.log; then
# 提取测试统计
TESTS=$(grep "test result:" /tmp/test_${name}.log | tail -1 || echo "")
echo -e "${GREEN}${name} 测试通过${NC}"
if [ -n "$TESTS" ]; then
echo " $TESTS"
fi
((SUCCESS++))
else
echo -e "${RED}${name} 测试失败${NC}"
echo "错误日志: /tmp/test_${name}.log"
((FAILED++))
fi
cd ..
echo ""
else
echo -e "${YELLOW}跳过 ${name}(目录不存在)${NC}"
echo ""
fi
}
# 开始测试
START_TIME=$(date +%s)
# 1. 测试nac-udm核心模块
test_module "nac-udm" "NAC统一数据模型"
# 2. 测试charter-compiler
test_module "charter-compiler" "Charter编译器"
# 3. 测试nvm_v2
test_module "nvm_v2" "NAC虚拟机v2"
# 4. 测试其他模块(如果存在)
test_module "nac-nvm" "NAC虚拟机"
test_module "nac-cbpp" "CBPP共识协议"
test_module "nac-gnacs" "GNACS资产分类"
test_module "nac-acc" "ACC协议"
test_module "nac-acc20c" "ACC-20C合规协议"
test_module "nac-rpc" "NAC RPC接口"
test_module "nac-storage" "NAC存储层"
# 计算耗时
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
# 输出统计
echo "========================================="
echo "测试完成"
echo "========================================="
echo -e "成功: ${GREEN}${SUCCESS}${NC}"
echo -e "失败: ${RED}${FAILED}${NC}"
echo "耗时: ${DURATION}"
echo ""
if [ $FAILED -eq 0 ]; then
echo -e "${GREEN}✓ 所有模块测试通过!${NC}"
exit 0
else
echo -e "${RED}✗ 部分模块测试失败,请检查错误日志${NC}"
exit 1
fi

179
scripts/verify_env.sh Executable file
View File

@ -0,0 +1,179 @@
#!/bin/bash
# NAC区块链开发环境验证脚本
# 作者NAC公链开发小组
set -e
echo "========================================="
echo " NAC开发环境验证"
echo "========================================="
echo ""
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
PASS=0
FAIL=0
# 检查函数
check_command() {
if command -v $1 &> /dev/null; then
echo -e "${GREEN}${NC} $1: $(command -v $1)"
((PASS++))
return 0
else
echo -e "${RED}${NC} $1: 未安装"
((FAIL++))
return 1
fi
}
check_version() {
echo -e "${YELLOW}检查 $1 版本...${NC}"
$2
echo ""
}
# 1. 检查必需工具
echo "1. 检查必需工具"
echo "-------------------"
check_command rustc
check_command cargo
check_command git
echo ""
# 2. 检查可选工具
echo "2. 检查可选工具"
echo "-------------------"
check_command go || echo -e "${YELLOW} (Go是可选的部分模块需要)${NC}"
echo ""
# 3. 检查Rust版本
echo "3. 检查Rust工具链"
echo "-------------------"
check_version "Rust" "rustc --version"
check_version "Cargo" "cargo --version"
# 检查Rust组件
echo "检查Rust组件:"
if rustup component list | grep -q "rustfmt.*installed"; then
echo -e "${GREEN}${NC} rustfmt: 已安装"
((PASS++))
else
echo -e "${RED}${NC} rustfmt: 未安装"
((FAIL++))
fi
if rustup component list | grep -q "clippy.*installed"; then
echo -e "${GREEN}${NC} clippy: 已安装"
((PASS++))
else
echo -e "${RED}${NC} clippy: 未安装"
((FAIL++))
fi
if rustup component list | grep -q "rust-src.*installed"; then
echo -e "${GREEN}${NC} rust-src: 已安装"
((PASS++))
else
echo -e "${RED}${NC} rust-src: 未安装"
((FAIL++))
fi
# 检查WASM目标
if rustup target list | grep -q "wasm32-unknown-unknown (installed)"; then
echo -e "${GREEN}${NC} wasm32-unknown-unknown: 已安装"
((PASS++))
else
echo -e "${RED}${NC} wasm32-unknown-unknown: 未安装"
((FAIL++))
fi
echo ""
# 4. 检查Go版本如果安装了
if command -v go &> /dev/null; then
echo "4. 检查Go工具链"
echo "-------------------"
check_version "Go" "go version"
fi
# 5. 检查系统依赖
echo "5. 检查系统依赖"
echo "-------------------"
check_command gcc || check_command clang
check_command pkg-config
echo ""
# 6. 检查NAC模块
echo "6. 检查NAC模块"
echo "-------------------"
if [ -d "nac-udm" ]; then
echo -e "${GREEN}${NC} nac-udm: 存在"
((PASS++))
else
echo -e "${RED}${NC} nac-udm: 不存在"
((FAIL++))
fi
if [ -d "charter-compiler" ]; then
echo -e "${GREEN}${NC} charter-compiler: 存在"
((PASS++))
else
echo -e "${YELLOW}${NC} charter-compiler: 不存在(可选)"
fi
if [ -d "nvm_v2" ]; then
echo -e "${GREEN}${NC} nvm_v2: 存在"
((PASS++))
else
echo -e "${YELLOW}${NC} nvm_v2: 不存在(可选)"
fi
echo ""
# 7. 测试编译
echo "7. 测试编译能力"
echo "-------------------"
echo "正在测试Rust编译..."
cat > /tmp/test_nac.rs << 'EOF'
fn main() {
println!("NAC环境测试成功");
}
EOF
if rustc /tmp/test_nac.rs -o /tmp/test_nac && /tmp/test_nac; then
echo -e "${GREEN}${NC} Rust编译测试通过"
((PASS++))
rm -f /tmp/test_nac.rs /tmp/test_nac
else
echo -e "${RED}${NC} Rust编译测试失败"
((FAIL++))
fi
echo ""
# 8. 总结
echo "========================================="
echo "验证结果"
echo "========================================="
echo -e "通过: ${GREEN}${PASS}${NC}"
echo -e "失败: ${RED}${FAIL}${NC}"
echo ""
if [ $FAIL -eq 0 ]; then
echo -e "${GREEN}✓ 环境配置完整,可以开始开发!${NC}"
echo ""
echo "接下来可以运行:"
echo " ./scripts/build_all.sh # 编译所有模块"
echo " ./scripts/test_all.sh # 运行所有测试"
exit 0
else
echo -e "${RED}✗ 环境配置不完整,请运行 ./scripts/setup_env.sh 安装缺失的依赖${NC}"
exit 1
fi