项目背景:Claimask 项目致力于为NFT社区用户提供一个安全、高效的白名单领取和空投资格发放平台。通过根据用户持有的NFT数量和稀有度,进行dogecoin的空投,旨在增强社区活跃度和资产价值。
Claimask 采用前后端分离架构,后端基于 Go 语言微服务设计,前端使用 React 构建交互界面。
claimask
├── README.md
├── SECURITY.md
├── claimask_app
├── comm
│ ├── constant
│ │ ├── blockchain.go
│ │ └── constant.go
│ ├── errno
│ │ ├── erron.go
│ │ ├── error.go
│ │ └── error_code.go
│ ├── initialize
│ │ ├── init.go
│ │ ├── mysql.go
│ │ ├── redis.go
│ │ └── rpc.go
│ ├── middleware
│ │ └── middleware.go
│ ├── response
│ │ └── response.go
│ └── utils
│ ├── convert.go
│ ├── logger.go
│ └── nft_decoder.go
├── conf
│ ├── config.go
│ └── config.yaml
├── go.mod
├── go.sum
├── go.work
├── go.work.sum
├── internal
│ ├── claimask
│ │ ├── api
│ │ │ ├── handler.go
│ │ │ └── router.go
│ │ ├── dao
│ │ │ └── order_dao.go
│ │ ├── model
│ │ │ ├── dto
│ │ │ └── po
│ │ └── service
│ │ └── claim_service.go
│ └── monitor
│ ├── api
│ │ ├── handler.go
│ │ └── router.go
│ ├── dao
│ │ ├── nft_dao.go
│ │ └── utxo_dao.go
│ ├── model
│ │ ├── dto
│ │ └── po
│ └── service
│ ├── monitor_service.go
│ ├── nft_service.go
│ ├── queue_mgr.go
│ └── tx_monitor.go
├── main.go
├── orderx-README.md
├── pkg
│ ├── claimask-ui
│ │ ├── README.md
│ │ ├── components
│ │ │ └── wallet
│ │ ├── doc
│ │ │ └── img
│ │ ├── next.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── pages
│ │ │ ├── _app.js
│ │ │ ├── api
│ │ │ └── index.js
│ │ ├── postcss.config.js
│ │ ├── public
│ │ │ ├── favicon.ico
│ │ │ └── vercel.svg
│ │ ├── styles
│ │ │ ├── Home.module.css
│ │ │ └── globals.css
│ │ ├── tailwind.config.js
│ │ └── yarn.lock
│ ├── dogechain
│ │ ├── rpc_client.go
│ │ └── tx_builder.go
│ ├── origin
│ │ └── main.go
│ └── queues
│ ├── priority_queue.go
│ ├── slowSpeedQueue.go
│ └── speed_controller.go
├── scripts
│ ├── dev.sh
│ ├── go_collect.py
│ ├── go_project_code.txt
│ ├── golangci-lint.sh
│ ├── js_code.sh
│ ├── js_project_code.txt
│ └── lint_results.txt
├── slowSpeed_js
│ ├── slowSpeedBox.js
│ └── slowSpeedQueue.js
├── sql
│ └── init.sql
└── test
┌───────────────┐ ┌─────────────────────────────────┐ ┌────────────────┐
│ │ │ Backend Services │ │ │
│ Web Frontend │────▶│ │◀───▶│ External APIs │
│ (React/Web3) │ │ ┌─────────┐ ┌─────────┐ │ │ (Blockchain) │
│ │ │ │ClaimMask│ │ Monitor │ │ │ │
└───────────────┘ │ │ Service │ │ Service │ │ └────────────────┘
│ └─────────┘ └─────────┘ │ ▲
│ │ │ │ │
└────────┼────────────────┼───────┘ │
│ │ │
┌────────▼────────────────▼───────┐ │
│ Data Storage Layer │ │
│ │ │
│ ┌─────────┐ ┌─────────┐ │ │
│ │ MySQL │ │ Redis │───┼───────────┘
│ └─────────┘ └─────────┘ │
│ │
└─────────────────────────────────┘
- Golang: 核心开发语言
- Gin: Web框架
- Gorm: ORM数据库映射
- Redis: 缓存和分布式锁
- MySQL: 持久化存储
- Bwmarrin/snowflake: 分布式ID生成
- Dogecoin RPC: 区块链交互
- React
- Web3-react
- Javascript
-
ClaimMask 服务
- 负责奖品领取逻辑
- 支持并发安全的领取机制
- 实现分布式锁防止超发
- 基于 Redis 的原子操作实现高性能处理
-
Monitor 服务
- 区块链交易监控
- NFT 交易跟踪与验证
- 支持 WebSocket 和轮询双通道监控
- 税收状态验证
-
异步任务处理
- 基于优先级队列的任务处理系统
- 支持速率限制与重试策略
- 事务一致性保证
-
数据访问层
- 订单 DAO
- NFT DAO
- UTXO DAO
- 支持事务与批量操作
- 用户连接钱包
- 系统验证NFT持有状态
- 用户点击Claim按钮
- 后端执行原子化扣减奖品库存
- 生成唯一订单ID
- 记录领取信息并异步发放奖励
- 系统通过WebSocket和定时轮询监听区块链交易
- 解析交易数据,识别NFT相关操作
- 验证交易有效性及税收状态
- 更新NFT所有权信息
- 触发相关业务流程
- 克隆本项目或在发行版中下载源代码
- 安装 node 和 golang 环境
- 前端工程依赖:参考 claimask/web3-claimask/README.md 完成前端依赖和运行
- 后端工程依赖:进入 claimask/claim 运行 go mod tidy 完成依赖下载,再运行 go run claim.go 跑起后端服务
- Fork 本仓库
- 新建 Feat_xxx 分支
- 提交代码
- 新建 Pull Request
- 后端 Redis 事务监听
- 前端 web3 钱包 Metamask 链接
- 前端 claim 接口的交互
- claim 测试接口的编写
- 奖品数量的重置接口
- 收益异步发放
- 收益领取状态更新加锁
- 空投、或者白名单的分发
- 发放手续费签名
详细API文档请参考项目中的 docs/api.md 文件。





