# delayVIP **Repository Path**: alanuu/delayVIP ## Basic Information - **Project Name**: delayVIP - **Description**: DelayVIP — 基于区块链与零知识证明的可验证延迟VIP权限管理系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-03 - **Last Updated**: 2026-07-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DelayVIP — 基于区块链与零知识证明的可验证延迟VIP权限管理系统 --- ## 📌 研究概述 本研究提出了一种基于以太坊智能合约与 Fiat-Shamir 零知识证明的 VIP 权限管理方案,核心思路如下: 1. **智能合约上链**:将 VIP 时间范围、合约发布者地址等参数经 SHA-256 哈希后构建 Merkle 树,其根哈希写入 Solidity 合约,实现链上数据完整性保障。 2. **零知识证明验证**:用户在链下基于 secp256k1 椭圆曲线生成 Fiat-Shamir 零知识证明,向验证方证明自己拥有对应私钥,而无需暴露私钥本身;验证方通过重算挑战值与椭圆曲线等式完成验证。 3. **可验证凭证(Verifiable Credential)**:合约将用户地址与 Merkle 根哈希的签名映射上链,作为可验证凭证;验证服务结合链上合约与链下 MySQL 数据库进行双重校验,并返回 AES 加密的时间戳+地址凭证。 --- ## 🏗️ 项目结构 ``` delayVIP/ ├── delayVIP02/ # 模块一:智能合约交互服务(链上) │ ├── pom.xml │ ├── src/main/ │ │ ├── resources/ │ │ │ ├── DelayVIP.sol # Solidity 智能合约源码 │ │ │ ├── delayVIP.abi # 合约 ABI │ │ │ ├── delayVIP.bin # 合约字节码 │ │ │ └── application.yaml # 服务配置 │ │ └── java/com/wcf/delayvip02/ │ │ ├── controller/ # REST API(合约信息查询/支付/提现) │ │ ├── service/impl/ # Web3j 合约调用逻辑 │ │ ├── pojo/ # 实体、DTO、合约 Wrapper │ │ └── utils/ # Merkle 树、合约部署、SHA-3 工具 │ └── logs/ # 运行日志 │ ├── delayVIP03/ # 模块二:零知识证明验证服务(链下) │ ├── pom.xml │ ├── env/sql/ │ │ └── verifiablecredentials.sql # 可验证凭证表建表语句 │ ├── src/main/ │ │ ├── resources/ │ │ │ ├── application.yml # 服务配置 │ │ │ ├── delayVIP.abi / .bin # 合约 ABI & 字节码 │ │ │ ├── mapper/ # MyBatis XML │ │ │ └── logback.xml │ │ └── java/com/wcf/delayvip03/ │ │ ├── controller/ # ZK 证明验证 & 测试证明生成 API │ │ ├── service/impl/ # 验证流程(参数校验→证明验证→地址验证→凭证验证→加密响应) │ │ ├── mapper/ # MyBatis Mapper(可验证凭证 CRUD) │ │ ├── pojo/ # 实体、DTO │ │ └── utils/ │ │ ├── faitshamirUtils/ # Fiat-Shamir ZKP 核心(Prover/Verifier/ZKProof) │ │ ├── EncryptionUtil.java # AES 加解密 │ │ ├── EthereumAddressGenerator.java # 公钥→���太坊地址 │ │ ├── HashUtils.java # 哈希工具 │ │ └── ... # 其他工具类 │ └── logs/ └── README.md # 本文件 ``` --- ## 🔧 技术栈 | 类别 | 技术 | 版本 | |------|------|------| | 语言 | Java | 1.8 | | 框架 | Spring Boot | 2.6.13 | | 智能合约 | Solidity | ^0.8.18 | | 区块链交互 | Web3j | 5.0.0 | | 零知识证明 | Bouncy Castle (secp256k1 + Keccak-256) | 1.70 | | 数据库 | MySQL + MyBatis | 5.7 / 3.5.6 | | API 文档 | SpringDoc OpenAPI (Swagger) | 1.6.15 | | 构建工具 | Maven | — | | 测试网络 | Ethereum Sepolia | — | --- ## 📦 模块说明 ### delayVIP02 — 智能合约交互服务 **端口**:`8080` 负责与链上 `DelayVIP` 合约直接交互,提供以下 REST API: | 接口 | 方法 | 说明 | |------|------|------| | `/api/contract/info` | GET | 获取合约完整信息(余额、Owner、价格、VIP 时间范围、签名) | | `/api/contract/balance` | GET | 查询合约余额 | | `/api/contract/owner` | GET | 查询合约所有者 | | `/api/contract/tip-value` | GET | 查询服务价格 | | `/api/contract/vip-time-range` | GET | 获取加密后的 VIP 时间范围 | | `/api/contract/signature` | GET | 获取用户地址对应的哈希签名 | | `/api/contract/pay-tip` | POST | 支付并登记 VIP(支持 ETH / 链下支付) | | `/api/contract/withdraw` | POST | 合约所有者提现 | | `/api/contract/is-owner` | GET | 验证是否为合约所有者 | **核心智能合约 `DelayVIP.sol`**: - 将 VIP 时间参数(`start_time`、`end_time`)以 SHA-256 哈希形式存储 - Merkle 根哈希 `rootInMerKleTreeWithSHA256` 写入合约,保证数据完整性 - 用户支付后,合约计算 `SHA256(userAddress || root)` 并存入映射 `userSignature` - 支持以太坊原生支付(`payTipWithEther`)和链下支付(`payTipWithoutEther`,仅 Owner 可调用) ### delayVIP03 — 零知识证明验证服务 **端口**:`8081` 实现 Fiat-Shamir 零知识证明的生成与验证,提供以下 REST API: | 接口 | 方法 | 说明 | |------|------|------| | `/api/zkp/verify` | POST | 验证零知识证明(完整验证流程) | | `/api/zkp/generate-test` | POST | 根据私钥生成测试证明(仅开发/测试用) | | `/api/zkp/info` | GET | 获取 API 基本信息 | | `/api/zkp/health` | GET | 健康检查 | **验证流程**(`ZKProofServiceImpl.verifyZKProof`): ``` 请求参数校验 → 解析证明数据 → 解析公钥 → 验证 Fiat-Shamir 证明 → 验证以太坊地址(公钥推导 vs 声明地址)→ 验证可验证凭证(DB → 合约) → AES 加密(时间戳+地址) → 返回加密凭证 ``` **Fiat-Shamir 零知识证明协议**(`FixedFiatShamirZKProof`): 1. **承诺(Commit)**:证明者随机选取 *r*,计算 *R = r · G* 2. **挑战(Challenge)**:*c = Keccak256(R ‖ P ‖ context)*,其中 context 包含合约发布者地址、VIP 时间范围、可验证凭证、时间戳 3. **回应(Response)**:*s = r + c · k (mod n)* 4. **验证**:验证者重算 *c'*,检查 *s · G = R + c · P* --- ## 🚀 快速开始 ### 前置条件 - JDK 1.8+ - Maven 3.6+ - MySQL 5.7+(delayVIP03 模块需要) - 以太坊 Sepolia 测试网 RPC 节点(如 Infura) ### 1. 初始化数据库(delayVIP03 模块) ```sql -- 创建数据库 CREATE DATABASE delayvip DEFAULT CHARACTER SET utf8mb4; -- 建表 SOURCE delayVIP03/env/sql/verifiablecredentials.sql; ``` ### 2. 配置区块链连接 编辑各模块的配置文件,填入实际的区块链网络参数: **delayVIP02** — `src/main/resources/application.yaml`: ```yaml web3j: contract-address: "你的合约部署地址" private-key: "你的账户私钥" network-url: "https://sepolia.infura.io/v3/你的Infura项目ID" ``` **delayVIP03** — `src/main/resources/application.yml`: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/delayvip?serverTimezone=GMT&useSSL=false username: root password: 你的数据库密码 app: encryption: secret-key: 你的32字节AES密钥 ``` ### 3. 构建与运行 ```bash # 构建模块二 cd delayVIP02 mvn clean package -DskipTests java -jar target/delayVIP02-0.0.1-SNAPSHOT.jar # 构建模块三 cd ../delayVIP03 mvn clean package -DskipTests java -jar target/delayVIP03-0.0.1-SNAPSHOT.jar ``` ### 4. 访问 API 文档 - 智能合约交互服务 Swagger UI:http://localhost:8080/swagger-ui.html - 零知识证明验证服务 Swagger UI:http://localhost:8081/swagger-ui.html --- ## 🔐 安全说明 - **私钥与密钥**:代码仓库中的私钥、Infura Project ID、AES 密钥等均为**开发测试用值**,生产环境请务必替换。 - **零知识证明**:本实现基于 Fiat-Shamir 启发式变换,安全性依赖于 Keccak-256 哈希函数的抗碰撞性和 secp256k1 椭圆曲线离散对数问题的困难性。 - **可验证凭证**:验证服务优先从 MySQL 数据库查询,未命中时回退至链上合约读取,并同步写回数据库。 --- ## 📄 许可证 本项目 Solidity 合约使用 MIT 许可证(`SPDX-License-Identifier: MIT`),其余代码仅供学术研究参考。