package cc.mrbird.febs.dapp.service.impl; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.dapp.chain.ChainEnum; import cc.mrbird.febs.dapp.chain.ChainService; import cc.mrbird.febs.dapp.chain.ContractEventService; import cc.mrbird.febs.dapp.chain.EthUsdtContract; import cc.mrbird.febs.dapp.entity.DappFundFlowEntity; import cc.mrbird.febs.dapp.entity.DappMemberEntity; import cc.mrbird.febs.dapp.mapper.DappFundFlowDao; import cc.mrbird.febs.dapp.service.DappMemberService; import cc.mrbird.febs.dapp.service.DappWalletService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.web3j.utils.Numeric; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.BigInteger; import java.math.RoundingMode; @Slf4j @Service public class BscCoinContractEvent implements ContractEventService { @Resource private DappMemberService dappMemberService; @Resource private DappFundFlowDao dappFundFlowDao; @Resource private RedisUtils redisUtils; @Resource private DappWalletService dappWalletService; public static void main(String[] args) { System.out.println(Numeric.toBigInt("0x12e4e85")); } @Transactional(rollbackFor = Exception.class) @Override public void compile(EthUsdtContract.TransferEventResponse e) { if (e.to == null) { return; } if ("0x0Ba249b2FAC0061dd9c388Bd607418E16490A3fd".toLowerCase().equals(e.to)) { log.info("触发GE手续费监听"); int decimals = ChainService.getInstance(ChainEnum.BSC_TFC.name()).decimals(); // 账户是否已经注册 DappMemberEntity fromMember = dappMemberService.findByAddress(e.from, null); if (fromMember == null) { return; } BigInteger tokens = e.tokens; BigDecimal amount = new BigDecimal(tokens.toString()).divide(BigDecimal.TEN.pow(decimals), decimals, RoundingMode.HALF_DOWN); // 充值手续费 DappFundFlowEntity fundFlow = dappFundFlowDao.selectByFromHash(e.log.getTransactionHash(), null); if (fundFlow != null && fundFlow.getStatus() != 1) { return; } // 更改状态为已同步 fundFlow.setStatus(2); dappFundFlowDao.updateById(fundFlow); dappWalletService.updateWalletMineWithLock(amount, fromMember.getId(), 1); } } @Override public void sdmUSDT(EthUsdtContract.TransferEventResponse e) { return; } }