Aptos 红包后端架构设计

前言

Coming Chat 开发了基于 aptos 链的红包合约,并实现了 app 内的 aptos 红包功能。本文将介绍后端红包服务的整体架构设计。

架构图

流程图

创建红包:调用合约create方法,参数:operator(创建人), count(红包数量), total_balance(红包金额),得到extrinsic hash,将红包数据存入数据库,缓存红包数量,红包数据,预先分配的红包金额,另起协程调用aptos api 查询交易状态到 redis

红包创建状态:取redis红包创建状态

抢红包:取redis红包数据,判断是否还有红包剩余,有返回可抢状态,没有返回

拆红包:取redis红包数据,判断是否红包还有剩余,有红包数量减一,更新红包剩余数量,剩余金额等到数据中和redis中,该用户抢到红包,将数据放入kafka,没有返回失败状态

job

1.同步aptos浏览器红包数据

创建红包交易成功之后,合约里会生成一条红包数据,浏览器调用https://fullnode.devnet.aptoslabs.com/v1/spec#/operations/get_events_by_event_handle,拿到合约中新创建的红包数据入库。

该job从Aptos浏览器数据库中同步新增的红包数据,根据extrinsic hash查询对应的red_packet_id,更新到服务端数据库中,标记该红包数据为可结算状态

2.kafka consumer 用户抢到的红包数据入库

该job是消费records数据的消费者,将用户抢到的红包数据消费存到数据库中

3.调用aptos 红包合约,结算红包

获取当前所有可结算的红包,查询当前红包的领取数据,

1)红包被领取完或者红包已经超时,调用aptos 红包合约的open方法,进行结算。

open(operator, id, luck_accounts, balances)

operator: comingChat admin

id:红包id,red_packet_id

luck_accounts:当前需要结算的所有账户地址

balances:地址所对应的金额

2)红包结算完成:调用aptos 红包合约的close方法,关闭红包

close(operator, id)

operator:comingChat admin

id:红包id,red_packet_id