# 电子钱包 **Repository Path**: sun_zhengxun/block-chain ## Basic Information - **Project Name**: 电子钱包 - **Description**: 电子钱包 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-02 - **Last Updated**: 2026-08-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: 区块链 ## README # KMTDZ 区块链后端服务 ## 项目简介 本项目是一个基于 **Java (Spring Boot)** 和 **Web3j** 的区块链应用后端服务,主要用于管理 **ERC20 代币** 和 **以太坊 (ETH)** 交易。项目的核心亮点是实现了一套完善的**授权转账(Delegate Transfer)**机制,允许账户间进行委托代付和自动化转账操作。 ## 主要功能 1. **多类型钱包管理**: * 支持创建普通用户钱包。 * 支持创建系统管理钱包(如:分销商、工作室、提现池等)。 2. **标准交易**: * ETH 转账。 * ERC20 代币转账。 3. **授权转账(核心机制)**: * 实现了 `Approve`(授权)和 `TransferFrom`(委托转账)功能。 * 支持 A 账户授权 B 账户支配其资产并转账给 C 账户,适用于 Gas 费代付和自动化财务场景。 4. **交易记录追踪**: * 利用 **MongoDB** 持久化存储所有交易记录(Approve 记录、转账记录、提现记录等),确保数据可追溯。 5. **异步消息处理**: * 集成 **RabbitMQ**,支持交易任务的异步处理及死信队列机制,保证交易请求的高可用和最终一致性。 ## 技术栈 * **核心框架**:Spring Boot, Dubbo * **区块链交互**:Web3j * **数据库**:MongoDB (使用 Spring Data MongoDB) * **消息队列**:RabbitMQ * **构建工具**:Maven ## 核心机制:授权转账原理 为了满足自动化交易和特定业务场景(如 Gas 费由第三方支付),本项目实现了标准的 ERC20 授权转账流程。 **场景假设**: * A 账户(资产持有者):拥有 10000 代币。 * B 账户(委托操作者):无代币,负责发送交易。 * C 账户(接收者):无代币。 **实现步骤**: 1. **建立授权关联**: 登录 A 账户,调用 `approve(B账户地址, 100)` 方法。 * 结果:系统记录 `_allowed[A][B] = 100`,表示 B 账户获得了操作 A 账户 100 代币的权限。 2. **执行委托转账**: 登录 B 账户(实际支付 Gas 费的账户),调用 `transferFrom(A地址, C地址, 100)` 方法。 * 系统校验:检查 B 账户的操作权限 `_allowed[A][B]` 是否大于等于转账金额。 * 资产转移:从 A 账户扣除 100 代币,划转至 C 账户。 * 权限更新:扣除 B 账户本次使用的额度。 **总结**:实际上资产是从 A 转入 C,但交易必须由 B 账户发起并承担 Gas 费用。 ## 项目结构 ```text src/main/java/com/kmtdz/blockChain/ ├── controller/ # REST API 控制器,提供对外接口 ├── service/ # 业务逻辑实现层 │ ├── impl/ # 具体服务实现 │ └── DirectReceiver.java # RabbitMQ 消息消费者 ├── entity/ # 实体类与配置类 (如 Erc20Properties) ├── repository/ # MongoDB 数据访问接口 ├── dao/ # 数据访问对象 ├── config/ # RabbitMQ 等中间件配置 └── util/ # 工具类 ``` ## 使用指南 ### 1. 环境准备 确保本地环境已安装并配置好以下服务: * JDK 1.8+ * MongoDB * RabbitMQ * 以太坊节点 (可通过 Web3j 连接) ### 2. 项目配置 在 `src/main/resources/application.properties` 和 `src/main/resources/block-chain-dubbo.xml` 中配置相关参数: * MongoDB 连接信息。 * RabbitMQ 队列名称与交换规则。 * ERC20 合约地址 (`erc.contractAddress`)。 * 系统账户地址与密钥路径 (`erc.masterAccount`, `erc.keystorePath` 等)。 ### 3. 构建与运行 本项目使用 Maven 进行构建。 ```bash # 编译打包 mvn clean package -DskipTests # 运行应用 java -jar target/kmtdz-block-chain-xxx.jar ``` ### 4. API 接口示例 项目启动后,可通过 REST API 进行操作(默认端口取决于配置): * **创建钱包**:`POST /blockChain/createETHWallet` * **查询余额**:`POST /blockChain/getBalanceOfETH` * **ETH 转账**:`POST /blockChain/transferETHWallet` * **代币授权**:`POST /blockChain/approveBalance` * **授权转账(核心)**:`POST /blockChain/transferFromAllowance` > 注意:在调用 `transferFromAllowance` 之前,必须先调用 `approveBalance` 建立授权关系。