From cbc6726bb3a9b68881987e47f966237503973234 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Wed, 25 May 2022 18:39:21 +0800 Subject: [PATCH] bsc tfc --- src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java | 32 ++++++++++ src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java | 7 ++ src/main/java/cc/mrbird/febs/job/ChainListenerJob.java | 4 src/main/resources/mapper/dapp/DappMemberDao.xml | 5 + src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java | 75 +++++++++++++++++++++++++ 5 files changed, 119 insertions(+), 4 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java b/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java index 661d7f2..135f689 100644 --- a/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java +++ b/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java @@ -52,6 +52,7 @@ private final static ContractChainService ETH = new EthService(ETH_URL, ETH_ADDRESS, ETH_PRIVATE, ETH_CONTRACT_ADDRESS); private final static ContractChainService BSC = new EthService(BSC_URL, BSC_ADDRESS, BSC_PRIVATE, BSC_CONTRACT_ADDRESS); private final static ContractChainService TRX = new TrxService(TRX_ADDRESS, TRX_PRIVATE, TRX_CONTRACT_ADDRESS, API_KEY); + private final static ContractChainService BSC_TFC = new EthService(ChainEnum.BSC_TFC.getUrl(), ChainEnum.BSC_TFC.getAddress(), ChainEnum.BSC_TFC.getPrivateKey(), ChainEnum.BSC_TFC.getContractAddress()); private final String ETH_PREFIX = "0x"; @@ -68,6 +69,8 @@ return BSC; case "TRX" : return TRX; + case "BSC_TFC": + return BSC_TFC; default: break; } @@ -98,6 +101,7 @@ return EthUsdtContract.load(contractAddress, Web3j.build(new HttpService(url)), credentials, new StaticGasProvider(BigInteger.valueOf(4500000L), BigInteger.valueOf(200000L))); } + // 18097238 18098663 private static EthFilter getFilter(BigInteger startBlock, String contractAddress) { DefaultBlockParameter parameterName = null; if (startBlock != null) { @@ -106,7 +110,33 @@ parameterName = DefaultBlockParameterName.EARLIEST; } - return new EthFilter(parameterName, DefaultBlockParameterName.LATEST, contractAddress); +// return new EthFilter(parameterName, DefaultBlockParameterName.LATEST, contractAddress); + return new EthFilter(parameterName, new DefaultBlockParameterNumber(new BigInteger("18098663")), contractAddress); + } + + public static void main(String[] args) { + ChainEnum chain = ChainEnum.getValueByName(ChainEnum.BSC_TFC.name()); + assert chain != null; + + EthUsdtContract contract = contract(chain.getPrivateKey(), chain.getContractAddress(), chain.getUrl()); + EthFilter filter = getFilter(new BigInteger("18097238"), new BigInteger("18098663"), chain.getContractAddress()); + + contract.transferEventFlowable(filter).subscribe(e -> { + System.out.println(1); + }, error -> { + log.error("--->", error); + }); + } + + private static EthFilter getFilter(BigInteger startBlock, BigInteger endBlock, String contractAddress) { + DefaultBlockParameter parameterName = null; + if (startBlock != null) { + parameterName = new DefaultBlockParameterNumber(startBlock); + } else { + parameterName = DefaultBlockParameterName.EARLIEST; + } + + return new EthFilter(parameterName, new DefaultBlockParameterNumber(endBlock), contractAddress); } } diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java index 0056af6..c8ba7de 100644 --- a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java +++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java @@ -1,15 +1,90 @@ package cc.mrbird.febs.dapp.service.impl; +import cc.mrbird.febs.common.utils.ShareCodeUtil; +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.DappMemberEntity; +import cc.mrbird.febs.dapp.mapper.DappMemberDao; +import cn.hutool.core.util.StrUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + +import java.math.BigInteger; @Service public class BscCoinContractEvent implements ContractEventService { + @Autowired + private DappMemberDao dappMemberDao; + + private final String ADDRESS = "0x977a9ddfb965a9a3416fa72ca7f91c4949c18f25"; + int decimals = ChainService.getInstance(ChainEnum.BSC_TFC.name()).decimals(); @Override public void compile(EthUsdtContract.TransferEventResponse e) { + if (e.to != null) { + if ("0x0000000000000000000000000000000000000000".equals(e.from)) { + return; + } + DappMemberEntity fromMember = dappMemberDao.selectByAddress(e.from, null); + if (fromMember == null) { + fromMember = insertMember(e.from, null); + } + + if (!e.to.equals(ADDRESS)) { + DappMemberEntity toMember = dappMemberDao.selectByAddress(e.to, null); + if (toMember == null) { + toMember = insertMember(e.to, fromMember.getInviteId()); + } + } + + // 卖币 + if (e.to.equals(ADDRESS)) { + BigInteger tokens = e.tokens; + } + + } + } + + private DappMemberEntity insertMember(String address, String refererId) { + DappMemberEntity member = new DappMemberEntity(); + member.setAddress(address); + + dappMemberDao.insert(member); + + member.setInviteId(ShareCodeUtil.toSerialCode(member.getId())); + member.setRefererId(refererId); + if (StrUtil.isNotBlank(refererId)){ + boolean flag = false; + String parentId = refererId; + String ids = ""; + while (!flag && StringUtils.isNotBlank(parentId)) { + if (StrUtil.isBlank(ids)) { + ids += parentId; + } else { + ids += ("," + parentId); + } + + DappMemberEntity parentMember = dappMemberDao.selectMemberInfoByInviteId(parentId); + if (parentMember == null) { + break; + } + parentId = parentMember.getRefererId(); + if(StringUtils.isBlank(parentId)){ + break; + } + if (parentMember.getRefererId().equals(parentMember.getInviteId())) { + flag = true; + } + } + member.setRefererIds(ids); + } + dappMemberDao.updateById(member); + + return member; } } diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java index c27d0ac..79f1205 100644 --- a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java +++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java @@ -1,8 +1,14 @@ package cc.mrbird.febs.dapp.service.impl; +import cc.mrbird.febs.common.utils.ShareCodeUtil; import cc.mrbird.febs.dapp.chain.ContractEventService; import cc.mrbird.febs.dapp.chain.EthUsdtContract; +import cc.mrbird.febs.dapp.entity.DappMemberEntity; +import cc.mrbird.febs.dapp.mapper.DappMemberDao; +import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Slf4j @@ -11,5 +17,6 @@ @Override public void compile(EthUsdtContract.TransferEventResponse e) { + } } diff --git a/src/main/java/cc/mrbird/febs/job/ChainListenerJob.java b/src/main/java/cc/mrbird/febs/job/ChainListenerJob.java index 5e0a671..dd75c34 100644 --- a/src/main/java/cc/mrbird/febs/job/ChainListenerJob.java +++ b/src/main/java/cc/mrbird/febs/job/ChainListenerJob.java @@ -23,7 +23,7 @@ @PostConstruct public void chainListenerJob() { log.info("监听打开"); - ChainService.contractEventListener(new BigInteger("18103010"), bscUsdtContractEvent, ChainEnum.BSC_USDT.name()); -// ChainService.contractEventListener(new BigInteger("18097238"), bscCoinContractEvent, ChainEnum.BSC_TFC.name()); +// ChainService.contractEventListener(new BigInteger("18097238"), bscUsdtContractEvent, ChainEnum.BSC_USDT.name()); + ChainService.contractEventListener(new BigInteger("18097238"), bscCoinContractEvent, ChainEnum.BSC_TFC.name()); } } diff --git a/src/main/resources/mapper/dapp/DappMemberDao.xml b/src/main/resources/mapper/dapp/DappMemberDao.xml index 2a187dc..5f8a6ad 100644 --- a/src/main/resources/mapper/dapp/DappMemberDao.xml +++ b/src/main/resources/mapper/dapp/DappMemberDao.xml @@ -3,7 +3,10 @@ <mapper namespace="cc.mrbird.febs.dapp.mapper.DappMemberDao"> <select id="selectByAddress" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity"> - select * from dapp_member where address=#{address} and chain_type=#{chain} + select * from dapp_member where address=#{address} + <if test="chain != null and chain != ''"> + and chain_type=#{chain} + </if> </select> <select id="selectMemberInfoByInviteId" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity"> -- Gitblit v1.9.1