# Hardhat+Spring boot+Vue股份管理转让系统 **Repository Path**: TianTiCheng/Hardhat-Spring-boot-Vue ## Basic Information - **Project Name**: Hardhat+Spring boot+Vue股份管理转让系统 - **Description**: 使用Hardhat+Spring boot+Vue的股份转让系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-22 - **Last Updated**: 2025-10-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 区块链证券交易所系统 这是一个基于区块链技术的证券交易所系统,使用 Hardhat + Spring Boot + Vue 3 技术栈构建。 > 💡 **MetaMask 连接问题?** → 查看 [快速修复指南](./METAMASK_QUICK_FIX.md) (1分钟解决) ## 项目概述 本项目实现了一个完整的区块链股票交易系统,包括: - 智能合约层(Solidity + Hardhat) - 后端服务(Spring Boot + SQLite) - 前端应用(Vue 3 + MetaMask) ## 技术架构 ``` ┌─────────────────────────────────────────────────────────┐ │ 前端 (Vue 3) │ │ - Vue Router (路由管理) │ │ - Pinia (状态管理) │ │ - Ethers.js (区块链交互) │ │ - Axios (HTTP 请求) │ └────────────┬────────────────────────┬───────────────────┘ │ │ │ HTTP │ Web3 │ │ ┌────────────▼────────────┐ ┌────────▼──────────────────┐ │ 后端 (Spring Boot) │ │ 区块链 (Hardhat) │ │ - Spring Security │ │ - 智能合约 (Solidity) │ │ - JWT 认证 │ │ - 本地测试网络 │ │ - SQLite 数据库 │ │ - MetaMask 集成 │ └─────────────────────────┘ └───────────────────────────┘ ``` ## 项目结构 ``` erlingerwukeshe/ ├── blockchain/ # 区块链层 (Hardhat) │ ├── contracts/ # 智能合约 │ │ └── Stockimprove.sol │ ├── scripts/ # 部署脚本 │ │ └── deploy.js │ ├── hardhat.config.js # Hardhat 配置 │ └── package.json │ ├── backend/ # 后端服务 (Spring Boot) │ ├── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/blockchain/stockexchange/ │ │ │ ├── controller/ # 控制器 │ │ │ ├── service/ # 业务逻辑 │ │ │ ├── repository/ # 数据访问 │ │ │ ├── entity/ # 实体类 │ │ │ ├── dto/ # 数据传输对象 │ │ │ ├── security/ # 安全配置 │ │ │ └── config/ # 配置类 │ │ └── resources/ │ │ └── application.yml # 应用配置 │ └── pom.xml │ └── frontend/ # 前端应用 (Vue 3) ├── src/ │ ├── views/ # 页面组件 │ │ ├── Login.vue │ │ ├── Register.vue │ │ ├── Home.vue │ │ ├── User.vue │ │ └── Admin.vue │ ├── stores/ # 状态管理 │ │ ├── auth.js │ │ └── contract.js │ ├── services/ # 服务层 │ ├── router/ # 路由配置 │ ├── assets/ # 静态资源 │ └── config/ # 配置文件 ├── package.json └── vite.config.js ``` ## 功能特性 ### 1. 用户认证系统 - ✅ 用户注册(用户名、邮箱、密码、EOA地址) - ✅ 用户登录(JWT Token) - ✅ MetaMask 钱包集成 - ✅ 角色权限管理(USER/ADMIN) ### 2. 股票管理 - ✅ 查看所有股票列表 - ✅ 查看股票详细信息 - ✅ 查看股东列表和持股比例 - ✅ 管理员添加股票 - ✅ 管理员编辑股票 - ✅ 管理员删除股票 ### 3. 股份交易 - ✅ 查看个人持股 - ✅ 股份转让功能 - ✅ 区块链交易确认 - ✅ 实时更新持股信息 ### 4. 区块链集成 - ✅ 智能合约交互 - ✅ MetaMask 签名 - ✅ 交易确认 - ✅ 事件监听 ## 快速开始 > ⚠️ **重要提示**: > - 如果遇到编译错误或 Java 版本问题,请查看 [FIXES.md](FIXES.md) 文档 > - 💡 **演示版本**: 注册流程已简化,详见 [SIMPLIFICATION.md](SIMPLIFICATION.md) > - 🔐 **JWT 密钥**: 已修复密钥长度问题,详见 [JWT_SECRET_FIX.md](JWT_SECRET_FIX.md) ### 前置要求 1. **Node.js** (v16+) 2. **Java** (JDK 8 或更高版本) 3. **Maven** (3.6+) 4. **MetaMask** 浏览器插件 > 注意:项目已配置为 Java 8 兼容,如果使用 Java 11+ 也可以正常运行 ### 一、启动区块链节点 ```bash # 进入区块链目录 cd blockchain # 安装依赖 npm install # 启动 Hardhat 本地节点(保持此终端窗口打开) npm run node ``` 这将启动一个本地以太坊节点在 `http://127.0.0.1:8545`,并显示 10 个测试账户及其私钥。 ### 二、部署智能合约 在新的终端窗口: ```bash # 仍在 blockchain 目录 npm run deploy ``` 部署成功后,合约地址会自动保存到 `frontend/src/config/contract.json`。 ### 三、配置 MetaMask 1. 打开 MetaMask 2. 添加网络: - 网络名称: `Localhost 8545` - RPC URL: `http://127.0.0.1:8545` - Chain ID: `1337` - 货币符号: `ETH` 3. 导入测试账户: - 使用 Hardhat 节点提供的私钥导入账户 - 建议导入第一个账户作为管理员(合约部署者) - 导入其他账户作为普通用户 ### 四、启动后端服务 在新的终端窗口: ```bash # 进入后端目录 cd backend # 使用 Maven 启动 mvn spring-boot:run ``` 后端服务将在 `http://localhost:8080/api` 上运行。 ### 五、启动前端应用 在新的终端窗口: ```bash # 进入前端目录 cd frontend # 安装依赖 npm install # 启动开发服务器 npm run dev ``` 前端应用将在 `http://localhost:5173` 上运行。 ### 六、使用系统 1. **注册账号** - 访问 `http://localhost:5173` - 点击"注册新账号" - 连接 MetaMask 钱包 - 填写用户信息并注册 2. **查看股票** - 登录后进入首页 - 查看所有股票列表 3. **交易股份** - 进入"普通用户"页面 - 查看个人持股 - 执行股份转让 4. **管理员操作** - 使用合约部署者账户登录 - 进入"管理员"页面 - 添加、编辑或删除股票 ## API 接口文档 ### 认证接口 #### 注册 ``` POST /api/auth/register Content-Type: application/json { "username": "string", "password": "string", "email": "string", "eoaAddress": "string" } ``` #### 登录 ``` POST /api/auth/login Content-Type: application/json { "username": "string", "password": "string" } ``` #### 获取当前用户 ``` GET /api/user/me Authorization: Bearer {token} ``` ## 智能合约接口 ### 主要函数 ```solidity // 添加股票(管理员持有全部股份) function addStock(string memory name, string memory description, uint256 totalShares) // 添加股票并分配给指定用户 function addStockWithAllocation( string memory name, string memory description, uint256 totalShares, address[] memory recipients, uint256[] memory shares ) // 转让股份 function transferShares(uint64 stockId, address from, address to, uint256 shares) // 查询股票信息 function getStock(uint64 stockId) returns (...) // 查询持股数量 function getShareholderShares(uint64 stockId, address shareholder) returns (uint256) // 查询所有股东 function getAllShareholders(uint64 stockId) returns (address[], uint256[]) ``` ## 开发说明 ### 修改智能合约 1. 编辑 `blockchain/contracts/Stockimprove.sol` 2. 编译: `npm run compile` 3. 重新部署: `npm run deploy` 4. 前端会自动获取新的合约地址和 ABI ### 修改后端 1. 编辑 `backend/src/main/java/` 下的文件 2. Spring Boot DevTools 会自动重启服务 ### 修改前端 1. 编辑 `frontend/src/` 下的文件 2. Vite 会自动热更新 ## 常见问题 ### 1. MetaMask 连接失败 ⚡ **快速解决**:系统现在支持自动检测并切换网络! - 访问网页时,如果网络不匹配会自动弹出提示 - 点击"确定"即可自动切换到本地网络 - 无需手动配置 MetaMask **⚠️ 重要配置**:请确保 MetaMask 使用以下配置: - **RPC URL**: `http://127.0.0.1:8545` (必须是 127.0.0.1,不能是 localhost) - **Chain ID**: `31337` **如果仍然连接失败**: - 🚨 查看 [METAMASK_CONNECTION_URGENT_FIX.md](./METAMASK_CONNECTION_URGENT_FIX.md) - 紧急修复 - 📖 查看 [METAMASK_QUICK_FIX.md](./METAMASK_QUICK_FIX.md) - 1分钟快速修复 - 📚 查看 [METAMASK_SETUP.md](./METAMASK_SETUP.md) - 详细配置步骤 - 🔧 查看 [RPC_URL_FIX_SUMMARY.md](./RPC_URL_FIX_SUMMARY.md) - RPC URL 问题说明 **常见原因**: - ✅ RPC URL 错误(使用了 localhost 而不是 127.0.0.1)→ 最常见! - ✅ Hardhat 节点未运行 → 运行 `start.bat` - ✅ 网络配置不匹配 → 系统会自动提示切换 - ✅ MetaMask 锁定 → 解锁后刷新页面 - ✅ 浏览器缓存 → 清除缓存或使用无痕模式 ### 2. 交易失败 - 确保账户有足够的 ETH(测试网络) - 确保使用正确的账户(管理员操作需要合约部署者账户) - 检查合约地址是否正确 ### 3. 后端无法启动 - 确保端口 8080 未被占用 - 检查 Java 版本 (JDK 11+) - 检查 SQLite 数据库文件权限 ### 4. 前端无法访问后端 - 确保后端服务正在运行 - 检查 CORS 配置 - 查看浏览器控制台错误信息 ## 安全建议 ⚠️ **重要提示**: 本项目仅用于学习和演示目的。 在生产环境中部署时,请注意: 1. 修改 JWT 密钥 (`backend/src/main/resources/application.yml`) 2. 使用更安全的密码加密方式 3. 配置 HTTPS 4. 限制 CORS 允许的源 5. 使用生产级区块链网络(如以太坊主网或测试网) 6. 对智能合约进行安全审计 7. 实现更完善的错误处理和日志记录 ## 许可证 MIT License ## 作者 区块链股票交易系统开发团队 ## 更新日志 ### v1.1.1 (2025-10-22) - 紧急修复 - ✅ **修复 ethers.js v6 兼容性问题** - 修复 "Cannot read from private field" 错误 - 添加 provider 初始化延迟 - 使用原生 API 获取网络信息 - 优化方法调用顺序 - ✅ **修复 RPC URL 不一致问题** - 统一使用 `http://127.0.0.1:8545`(不是 localhost) - 更新所有文档和配置 - ✅ 新增技术文档:ETHERS_V6_FIX.md, RPC_URL_FIX_SUMMARY.md ### v1.1.0 (2025-10-22) - ✅ **重大改进**: MetaMask 连接体验优化 - 新增自动网络检测和切换功能 - 新增自动添加本地网络功能 - 改进错误处理,提供详细的错误提示 - 添加实时网络状态显示 - 新增三个详细文档:快速修复、配置指南、技术细节 - ✅ 提升用户体验:首次配置时间从5分钟降至30秒 - ✅ 增强容错性:合约调用失败不再阻塞连接 ### v1.0.0 (2024-01-01) - ✅ 初始版本发布 - ✅ 实现基本的股票管理功能 - ✅ 实现用户认证系统 - ✅ 集成 MetaMask - ✅ 完成智能合约开发