hailin
7549b2b9a9
fix(mining-admin): 解包mining-service响应信封,取response.data.data
...
mining-service返回 { success, data: { ... } } 格式,
mining-admin-service需要取 .data.data 而非 .data,
否则前端读到的是信封对象而非实际数据,导致 TypeError。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 07:44:17 -08:00
hailin
48720d1846
feat(blockchain): 1.0 blockchain-service 同步添加 RPC 端点自动故障转移
...
与 mining-blockchain-service (2.0) 保持一致的故障转移方案:
当 RPC 端点连续失败超过 3 分钟后自动轮转到下一个备选端点。
新增文件:
- rpc-provider-manager.service.ts: RPC 故障转移管理器(与 2.0 相同逻辑)
修改文件:
- blockchain.config.ts: 新增 rpcUrls 配置字段
- chain-config.service.ts: 新增 rpcUrls 属性和 parseRpcUrls 解析方法
- domain.module.ts: 注册并导出 RpcProviderManager
- index.ts: 导出 RpcProviderManager
- evm-provider.adapter.ts: 委托 RpcProviderManager 获取 provider,
所有方法通过 executeWithFailover 包裹
- erc20-transfer.service.ts: 移除本地 providers Map,改用 RpcProviderManager,
新增 isRpcConnectionError 区分 RPC 网络错误与合约执行错误
- docker-compose.yml: blockchain-service 添加 KAVA_RPC_URLS 默认 4 个端点
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 07:36:02 -08:00
hailin
b9e9bb6e4e
fix(mining-admin): 修正调用mining-service的URL路径,补全/api/v2/mining前缀
...
mining-service有全局前缀api/v2和控制器前缀mining/admin,
但mining-admin-service的HTTP调用缺少这两个前缀导致404,
错误被catch静默吞掉,前端显示空数据。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 07:34:21 -08:00
hailin
3635369a8a
feat(mining-blockchain): RPC端点自动故障转移,连续失败3分钟后切换备选节点
...
问题:Kava主网RPC (evm.kava.io) 偶发503,导致mining-blockchain-service
所有链上操作失败(转账、余额查询、区块扫描等)。
方案:新增RpcProviderManager单例服务,统一管理各链的JsonRpcProvider实例,
当某个RPC端点连续失败超过3分钟后自动轮转到下一个备选端点。
新增文件:
- rpc-provider-manager.service.ts: 核心故障转移管理器
· 每条链维护 provider/urls/currentIndex/failureState
· reportSuccess() 重置失败状态
· reportFailure() 记录失败,>=3分钟触发 switchToNextUrl()
· 轮转创建新 JsonRpcProvider,替换旧实例
· 每30秒记录一次失败日志,避免日志刷屏
修改文件:
- blockchain.config.ts: 新增 rpcUrls 配置字段(KAVA_RPC_URLS/BSC_RPC_URLS)
- chain-config.service.ts: 解析逗号分隔的URL列表,回退到单个rpcUrl
- domain.module.ts: 注册并导出 RpcProviderManager
- index.ts: 导出 RpcProviderManager
- evm-provider.adapter.ts: 委托RpcProviderManager获取provider,
所有公开方法通过executeWithFailover包裹,自动上报成功/失败
- erc20-transfer.service.ts: 移除本地providers Map,改用RpcProviderManager,
新增isRpcConnectionError()区分RPC网络错误与合约执行错误
- docker-compose.2.0.yml: 添加KAVA_RPC_URLS默认4个端点
- .env.example: 添加KAVA_RPC_URLS配置说明
默认端点仍为 evm.kava.io,备选: evm.kava-rpc.com,
kava-evm-rpc.publicnode.com, rpc.ankr.com/kava_evm
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 07:06:31 -08:00
hailin
ef663c0c08
fix(deploy): replace envsubst with eval heredoc for ${VAR:-default} support
...
GNU envsubst does not handle ${VAR:-default} bash syntax - it leaves
the entire expression unsubstituted. This caused CDC connector
registration to fail with "password authentication failed for user
${POSTGRES_USER:-rwa_user}".
Replace all envsubst calls with a substitute_env_vars() helper that
uses eval+heredoc, which natively supports bash default value syntax.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 06:22:01 -08:00
hailin
ea3d256647
fix(deploy): 恢复connector JSON原样,仅在load_env中export变量修复envsubst
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 06:09:53 -08:00
hailin
5728953b41
fix(deploy): connector JSON改为硬编码凭据,与outbox connector保持一致
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 06:06:47 -08:00
hailin
a4f3a8d3ab
fix(deploy): 修复envsubst无法解析${VAR:-default}语法导致CDC connector注册失败
...
问题:
commit 5b1f4c82 在 full-reset Step 9 中用 envsubst 替换 connector JSON 中的
数据库凭据,但 envsubst(GNU gettext)不支持 bash 的 ${VAR:-default} 语法,
导致 "${POSTGRES_USER:-rwa_user}" 被原样发送给 Debezium,认证失败。
修复:
1. deploy-mining.sh load_env(): 默认值赋值改为 export,确保 envsubst 能访问
2. connector JSON 文件: ${VAR:-default} 改为 ${VAR},默认值由脚本 export 提供
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 06:03:38 -08:00
hailin
b9f803c5c8
fix(blockchain): 修复health check路径不匹配并配置C2C Bot热钱包
...
- app.config.ts: 添加apiPrefix读取API_PREFIX环境变量
- docker-compose: health check从api/v2改为api/v1(与trading-service一致)
- docker-compose: 配置HOT_WALLET默认值,解决"区块链服务不可用"和钱包地址不显示
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 05:46:58 -08:00
hailin
c802519ec2
fix(c2c-bot): 调整purchaseOrder操作顺序,先扣余额再链上转账
...
问题:原流程先执行不可逆的链上dUSDT转账,再扣减卖家DB余额。
若转账成功但扣减失败(余额不足、DB异常),会导致:
- dUSDT已转出(链上不可回退)
- 订单仍为PENDING(可能被重复处理)
- 卖家余额未扣减
修复:
1. 将deductSellerBalance移至transferDusdt之前(可逆操作先行)
2. 链上转账失败时调用restoreSellerBalance回补余额
3. 新增restoreSellerBalance方法,失败时记录CRITICAL级别日志
修改后流程:扣余额(可逆) → 链上转账(不可逆) → 更新订单状态(DB)
任何步骤失败都不会导致资金损失。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 05:02:19 -08:00
hailin
251e37f772
feat(c2c-bot): 添加C2C Bot管理页面,支持运行时开关和热钱包查看
...
- 新增C2C Bot管理页面(mining-admin-web):Bot开关、热钱包余额/地址/QR码、统计、订单历史
- 新增admin API端点(trading-service):status/enable/disable/orders
- 重构Bot调度器enabled为Redis驱动,支持运行时开关(多实例安全)
- C2cOrderRepository新增findBotPurchasedOrders和getBotStats查询方法
- 侧边栏添加C2C Bot导航入口
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 04:47:28 -08:00
hailin
bf772967f5
feat(mining): 批量补发30%分配到运营和总部账户,并添加交易筛选器
...
- 批量补发时将剩余30%分配到运营(12%)和总部(18%)系统账户
- SystemMiningAccountRepository.mine()支持referenceId/referenceType参数
- BatchMiningExecution新增operationAmount/headquartersAmount字段(含DB迁移)
- 三层架构(mining-service→admin-service→admin-web)全链路支持referenceType筛选
- 系统账户交易记录页面增加"全部/批量补发"筛选按钮
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 04:25:20 -08:00
hailin
338321b3a2
fix(c2c): 用updateMany+status条件防止合并时的竞态条件
...
findFirst找到PENDING订单后,如果被takeOrder接走(状态变MATCHED),
updateMany因status!=PENDING返回count=0,自动回退到创建新订单。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 03:29:27 -08:00
hailin
60d99add2c
fix(c2c): 过期恢复时合并到已有PENDING订单,避免同maker产生重复挂单
...
原来每个过期的MATCHED子订单都创建独立PENDING,导致一个卖单被多人
部分接单后过期会产生多个重复挂单。现在恢复时先查找同maker/type/price
的PENDING订单,有则合并数量,无则创建新订单。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 03:25:57 -08:00
hailin
49ba2fcb19
feat(c2c): 添加expireOrder事务流程的详细调试日志
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 03:09:50 -08:00
hailin
627c3c943c
refactor(c2c): expireOrder使用Prisma事务确保原子性
...
将 expireOrder 中的 解冻/状态更新/恢复创建 包在 prisma.$transaction 中:
- 事务失败全部回滚,不会出现半完成的不一致状态
- SELL MATCHED/PAID 过期恢复:保持冻结 + 标记EXPIRED + 创建PENDING 原子执行
- BUY MATCHED/PAID 过期恢复:解冻taker + 标记EXPIRED + 创建PENDING 原子执行
- PENDING 过期:解冻 + 标记EXPIRED 原子执行
- 删除 restoreExpiredOrder 方法,逻辑合并到事务内
- 遵循现有模式(executeTransfer 等),在事务回调中直接使用 tx 操作
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 02:43:48 -08:00
hailin
bcfa5143e3
fix(mining-app): C2C订单详情页自动刷新,列表刷新间隔缩短
...
- 订单详情 Provider 活跃状态(PENDING/MATCHED/PAID)每10秒自动刷新
过期/完成/取消后停止刷新,节省资源
- 市场订单和我的订单列表刷新间隔从1分钟缩短到30秒
- 离开订单详情页时立即刷新市场和我的订单列表
确保过期恢复的新PENDING订单及时在列表中显示
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 02:23:21 -08:00
hailin
33dda98e81
fix(c2c): 修复过期恢复的竞态条件,SELL订单保持冻结避免资金窗口
...
- SELL MATCHED/PAID 订单过期恢复时,不再先解冻再重新冻结
- 保持 maker 的冻结不变,直接转给新 PENDING 订单
- 消除了解冻→重新冻结之间的竞态窗口(余额可能被其他操作消耗)
- 恢复失败时补充解冻,防止 maker 资金被永久冻结
- BUY 订单恢复时不复制上一个 taker 的 sellerKavaAddress
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 02:11:47 -08:00
hailin
7f2479d995
fix(mining-app): 更新弹窗不可点击外部关闭,订单详情按买卖角色显示不同倒计时文案
...
- 更新提示弹窗 barrierDismissible 始终为 false,防止用户误触关闭
- 订单详情页根据买家/卖家角色显示不同的倒计时提示文案
- 买方:你需要在xx:xx内完成付款 / 等待卖方确认收款
- 卖方:对方将在xx:xx内完成付款 / 请在xx:xx内确认收款
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 01:58:53 -08:00
hailin
4e4a876341
fix(c2c): MATCHED/PAID订单过期后自动恢复为新PENDING订单
...
当部分成交的订单过期时,将过期数量恢复到市场:
- BUY单过期:直接为maker创建新PENDING BUY单
- SELL单过期:检查maker余额,重新冻结后创建新PENDING SELL单
- 恢复失败不影响过期流程(仅记录日志)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 01:37:00 -08:00
hailin
73a617b88c
fix(c2c): 单价和总金额单位改为绿积分,待付款提示改为对方
...
- C2C市场列表/接单弹窗中单价和总金额单位从"积分值"改为"绿积分"
- 订单详情待付款倒计时提示改为"对方将在xx:xx内完成付款"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 00:57:30 -08:00
hailin
64d998c7b3
fix(trading): 卖出金额超过可用积分股时提示并禁用确认按钮
...
- 新增 _getSellValidationError 校验方法
- 输入金额反算的积分股数量 > 可用余额时显示红色提示
- 校验失败时禁用"确认交易"按钮(灰色)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 22:29:33 -08:00
hailin
b8f8831516
feat: PENDING订单自动过期、接单显示余额、积分股金额输入
...
1. C2C PENDING订单24小时自动过期并解冻冻结资产
- 新增 DEFAULT_PENDING_TIMEOUT_HOURS 常量
- findExpiredOrders 支持 PENDING 状态查询
- expireOrder 处理 PENDING 卖单解冻
2. C2C接单对话框显示卖方可用余额
- 确认出售时显示用户账户可用积分值(非订单数量)
- 新增订单数量行,方便对比
3. 积分股兑换页面新增金额输入
- 卖出时显示金额输入框(积分值),与数量双向联动
- 输入数量自动计算金额,输入金额自动反算数量
- 全部按钮同步更新两个字段
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 22:15:47 -08:00
hailin
83c29f8540
fix(c2c): 订单详情单价和总金额标签改为绿积分
...
- 单价: "积分值" → "绿积分/积分值"
- 总金额: "积分值" → "绿积分"(买方实际支付的绿积分数量)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:46:26 -08:00
hailin
6ec829a804
fix(c2c): 隐藏订单详情页的买入/卖出标签
...
订单信息卡片中移除"买入"/"卖出"类型标签,
仅保留"我发布的"标记(当用户是maker时显示)。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:43:50 -08:00
hailin
6ccc192bc6
fix(c2c): 用户无交易账户时自动创建零余额账户
...
createOrder 和 takeOrder 中,如果用户没有交易账户,
自动创建零余额账户而非报错"交易账户不存在"。
买单不需要余额,不应因缺少账户而无法下单。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:29:42 -08:00
hailin
a1c3657390
fix(c2c): 修复付款水单图片无法显示的问题
...
1. 后端: proofs 图片端点添加 @Public() 装饰器,
Image.network 无法携带 JWT token
2. 前端: paymentProofUrl 是相对路径,拼接 baseUrl
构建完整 URL 供 Image.network 加载
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:16:53 -08:00
hailin
f9835c388e
fix(c2c): 我的订单显示用户角色视角,修复详情页缓存
...
1. "我的"列表根据用户是maker/taker判断实际角色,
接买单(taker)时显示"卖出"而非"买入"
2. 订单详情 provider 改为 autoDispose,每次进入详情页
都从API获取最新数据,避免显示旧的数量和状态
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:02:04 -08:00
hailin
f1c99949ad
fix(c2c): 发布页绿积分输入框和预估卡片单位标签修正
...
- 第二个输入框后缀 "积分值" → "绿积分"
- 预估卡片第二行标签 "积分值数量" → "绿积分数量",单位 → "绿积分"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 20:50:32 -08:00
hailin
5b1f4c82e6
fix(deploy): full-reset 时重建 1.0 source CDC connectors 以确保完整数据同步
...
问题:
执行 deploy-mining.sh full-reset 后,identity-postgres-connector 等 1.0 source
CDC connectors 保留了旧的 Debezium offset 和 replication slot,导致 Debezium
认为 initial snapshot 已完成而跳过重新快照。如果 connector 的 JSON 配置文件中
新增了表(如 identity-connector.json 中的 wallet_addresses),这些表的存量数据
永远不会被捕获到 Kafka topic,2.0 服务无法通过 CDC 同步到这些数据。
具体表现:Kafka topic cdc.identity.public.wallet_addresses 始终为空(0条消息),
2.0 auth-service 的 synced_wallet_addresses 表为空,用户 KAVA 地址未同步。
修复:
在 full_reset() 的 Step 4 中,除了处理 outbox connectors,还新增了对 1.0 source
CDC connectors (identity/referral/planting) 的处理:
1. 删除 connector(释放 replication slot)
2. 发送 tombstone 清除 debezium_offsets topic 中的偏移量
3. 调用 pg_drop_replication_slot() 删除 PostgreSQL replication slot
新增 Step 9:从 scripts/debezium/*.json 配置文件重新注册 source connectors,
因为 offset 和 slot 都已清除,snapshot.mode=initial 会触发全新的 initial snapshot,
确保所有配置表(包括新增的 wallet_addresses)的存量数据都被灌入 Kafka topic。
总步骤数从 18 调整为 19。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 20:26:06 -08:00
hailin
6bcc571453
revert(c2c): 还原C2C市场页资产概览为原始状态
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 09:25:03 -08:00
hailin
0ad1136e48
fix(c2c): 修正资产概览显示,C2C只涉及积分值不涉及积分股
...
左栏改回"可用积分值",右栏改为"冻结积分值",消除重复显示。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 09:23:59 -08:00
hailin
f60e3751b8
fix(c2c): 修复水单上传权限、手机号、卖方ID、资产显示
...
- Dockerfile: 用 su-exec 模式解决 Docker volume 权限问题
- JWT guard: 从 token 提取 phone 字段
- 订单详情: 新增卖方ID显示
- C2C市场页: 修复资产概览两列重复显示 availableCash,
改为左列显示可用积分股、右列显示可用积分值
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 09:19:38 -08:00
hailin
e783661002
fix(c2c): 修复水单上传权限、手机号显示、卖方ID显示
...
- Dockerfile 预创建 /app/uploads/c2c-proofs 并设置正确权限
- JWT guard 从 token payload 提取 phone 字段(之前仅提取 accountSequence)
- 订单详情页订单信息组新增卖方ID显示
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 09:13:46 -08:00
hailin
25ea0bf64e
fix(trading-service): 修复 Multer 类型缺失导致构建失败
...
使用内联类型替代 Express.Multer.File,避免 @types/multer 依赖
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 08:58:55 -08:00
hailin
ce173451f5
feat(c2c): 订单详情增强、付款水单上传、买单逻辑修复及schema对齐
...
- 订单详情页显示完整手机号和收款账号信息
- 新增付款水单上传功能(前后端全链路)
- 修复时间显示为本地时区格式
- 移除买单发布时的积分值余额验证(买方通过外部绿积分支付)
- 前端买单发布页隐藏余额卡片和"全部"按钮
- 补齐 Prisma migration 与 schema 差异(payment_proof_url、
bot_purchased索引、market_maker_deposits/withdraws表)
- docker-compose 新增 trading-uploads 卷用于水单持久化
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 08:54:05 -08:00
hailin
4df23b02b8
fix(trading-service): 添加做市商钱包环境变量,修复地址未配置问题
...
FUSDT/EUSDT_MARKET_MAKER_ADDRESS 和 USERNAME 只传给了
mining-blockchain-service,但 trading-service 初始化时也需要
读取这些变量写入数据库,导致前端显示"做市商钱包地址未配置"。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 07:56:16 -08:00
hailin
c5126187d2
feat(mining-app): 二维码扫描支持从相册选择图片识别
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 07:21:56 -08:00
hailin
286b82c63b
fix(c2c): 修复 RangeError 崩溃及订单详情灰色页面问题
...
根因:多处 [0] 访问空列表/空字符串导致 RangeError 崩溃
- api_client.dart: 后端错误 message 为空数组时 ?[0] 崩溃,改为安全检查
- c2c_order_detail_page.dart: nickname 和 phone 均为 null 时 name[0] 崩溃,
添加 isNotEmpty 检查和 '未知用户' 回退
- c2c_market_page.dart: makerNickname 为空字符串时 [0] 崩溃,添加 isNotEmpty 检查
这是 C2C 买方"待付款灰色页面"的根本原因:页面在渲染交易双方信息时
因空用户名 RangeError 崩溃,导致整个页面无法显示
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 07:10:05 -08:00
hailin
8e63547a3e
fix(transfer): 修复积分股划转到分配账户失败问题
...
后端:
- transfer.service.ts: Error → BadRequestException,业务错误返回HTTP 400而非500
- transfer.controller.ts: Error → UnauthorizedException,正确返回HTTP 401
- 错误信息改为中文:余额不足、账户不存在等提示更明确
前端:
- asset_display.dart: 新增 tradingAvailableShares 计算属性(总可用 - 挖矿可用)
- trading_page.dart: 划转弹窗显示可用余额(扣除冻结)而非总余额
- trading_page.dart: 划转失败时显示后端具体错误信息而非通用提示
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 06:24:35 -08:00
hailin
3cbb874503
fix(auth-service): 返回完整手机号,修复QR码扫码失败
...
- login/profile 接口返回 user.phone.value 替代 user.phone.masked
- 根因:QR码编码脱敏号 199****9327,正则要求纯数字匹配失败
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 06:00:47 -08:00
hailin
0ffa875a85
fix(mining-app): 移除 debug applicationIdSuffix 修复升级后双图标
...
debug buildType 设置了 applicationIdSuffix = ".debug",导致
debug 包名为 com.rwadurian.mining_app.debug,release 包名为
com.rwadurian.mining_app。Android 将它们视为两个不同应用,
升级安装 release 包时不覆盖 debug 包,出现两个相同图标。
移除 applicationIdSuffix 后 debug/release 使用同一包名,
升级安装时会正确覆盖旧版本。versionNameSuffix 保留用于区分版本号。
注:用户手机上需手动卸载旧的 debug 包才能清除已存在的重复图标。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:57:34 -08:00
hailin
03cc5bc324
fix(mining-app): QR码解析加固 + debugPrint排查
...
- 清除不可见字符(BOM/零宽空格)
- 三级宽松解析:正则→Uri.parse→兜底phone=提取
- 添加 [QR_SCAN] 调试日志定位实际扫码值
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:54:34 -08:00
hailin
8c31dee000
fix(c2c): 修复买方待付款页面灰色无法操作问题
...
根因: c2c_order_model.dart 的 _parsePaymentMethod 不识别 GREEN_POINTS,
导致 paymentMethod=null → hasPaymentInfo=false → 收款信息卡片隐藏 → 页面不可操作
前端修复:
- C2cPaymentMethod 枚举增加 greenPoints,解析器支持 GREEN_POINTS
- 支持逗号分隔的多支付方式字符串(取第一个作为主要方式)
- 订单详情页增加绿积分图标和卖方 Kava 地址显示(买方可复制)
后端修复:
- takeOrder() 接买单时自动获取卖方 Kava 地址写入 sellerKavaAddress
- 买方在订单详情页可看到卖方 Kava 地址用于转绿积分
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:41:14 -08:00
hailin
f167f1227c
Revert "fix(trading-service): C2C卖单不再强制要求Kava钱包地址"
...
This reverts commit 9b8f720915 .
2026-01-30 21:04:27 -08:00
hailin
9b8f720915
fix(trading-service): C2C卖单不再强制要求Kava钱包地址
...
executeTransfer不使用sellerKavaAddress,C2C交易是积分值划转+外部绿积分支付,
不涉及Kava链上操作。改为可选获取,失败不阻断订单创建。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 21:03:59 -08:00
hailin
9e83127113
fix(mining-app): C2C"我的"列表待接单订单增加取消按钮
...
在我的订单卡片上直接显示取消按钮(PENDING状态),
弹出确认对话框后调用 cancelOrder API
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 20:46:50 -08:00
hailin
7c416adecd
feat(mining-app): P2P转出记录显示手续费及合计扣除
...
- P2pTransferModel 新增 fee 字段解析
- 转出卡片聚合显示:转账金额 + 手续费 + 合计扣除
- 转入卡片保持只显示转账金额
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 20:45:37 -08:00
hailin
7180e2ac27
fix(contribution): 算力记录按层级升序排列 L1→L2→...→L15
...
用户期望 L1 在前 L15 在后,将 levelDepth/bonusTier 排序从 DESC 改为 ASC
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 20:14:31 -08:00
hailin
7d548dac4e
fix(mining-app): C2C接单验证收款信息 + 数字显示优化
...
- 接BUY单时验证收款账号和姓名必填,仅绿积分时自动使用账户ID
- 所有C2C价格/数量/金额显示改用formatCompact,去掉多余小数位
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:31:08 -08:00