前言:
需求:从公链拉取所有交易进行原始交易解析,匹配本地钱包地址根据交易确认数进行充值的确认。
方案:
- 初始化区块信息(高度、块hash等)持久化到数据库
- 根据区块hash从主链获取交易txs
- 解析txs对比充值钱包地址,存储充值信息、Unspent交易信息
- 更新数据库里的区块信息
- 进行线程的循环调用即可
1.初始化区块信息到数据库
@Order(value = 1)
@Service
public class BtcoinChargeServiceImpl implements CommandLineRunner {
private Logger LOG = LoggerFactory.getLogger("btcoin");
private static final String RECHARSTATE = "0";
private static final String CURRENTTYPE = "BTC";
//初始化区块信息
@Override
public void run(String... arg0) throws Exception {
//从数据读取信息进行判断
CoinBlockInfo blockInfo = blockMapper.selectByCoinType("BTC");
if (null == blockInfo || blockInfo.getBlockHeight() == 0) {
int blockCount = (int) btcService.getBlockCount();
String blockHash = btcService.getBlockHash(blockCount).toString();
LOG.info("=== [BTC] init block height is : {} and block hash is :{} start !! ===", blockCount, blockHash);
CoinBlockInfo blockInfos = new CoinBlockInfo();
blockInfos.setBlockHeight(blockCount); //高度
blockInfos.setBlockHash(blockHash);//块Hash
blockInfos.setCoinType(CURRENTTYPE);
blockInfos.setCreateTime(new Date());
blockInfos.setRemark("first record");
boolean res = blockMapper.insert(blockInfos) > 0 ? true : false;
if (res)
LOG.info("=== [BTC] init block success !!");
}
}
}
2. 区块hash从主链获取交易txs并进行解析
//比特币充值交易信息
@Service
public class BtcoinChargeServiceImpl implements BtcoinChargeService{
privat