From 61427d4fa770905fdba869971b49a78d91d08f3d Mon Sep 17 00:00:00 2001
From: zainali5120 <512061637@qq.com>
Date: Fri, 09 Oct 2020 22:02:01 +0800
Subject: [PATCH] ROC提币修复
---
src/main/java/com/xcong/excoin/modules/Sms106Send.java | 4
src/main/java/com/xcong/excoin/modules/member/service/EthService.java | 290 ++++++++++++++++++++++++++++++++
src/main/java/com/xcong/excoin/modules/member/service/IMemberService.java | 3
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java | 19 ++
src/main/java/com/xcong/excoin/modules/member/service/BigDecimalUtil.java | 190 +++++++++++++++++++++
src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java | 3
pom.xml | 5
7 files changed, 509 insertions(+), 5 deletions(-)
diff --git a/pom.xml b/pom.xml
index 1261d61..6c6c371 100644
--- a/pom.xml
+++ b/pom.xml
@@ -248,6 +248,11 @@
<artifactId>httpmime</artifactId>
<version>4.3.5</version>
</dependency>
+ <dependency>
+ <groupId>org.web3j</groupId>
+ <artifactId>core</artifactId>
+ <version>4.5.5</version>
+ </dependency>
<!-- submail邮件 end -->
</dependencies>
diff --git a/src/main/java/com/xcong/excoin/modules/Sms106Send.java b/src/main/java/com/xcong/excoin/modules/Sms106Send.java
index a213e6b..20f41ba 100644
--- a/src/main/java/com/xcong/excoin/modules/Sms106Send.java
+++ b/src/main/java/com/xcong/excoin/modules/Sms106Send.java
@@ -16,8 +16,8 @@
public class Sms106Send {
private static final String URL = "http://www.qf106.com/sms.aspx";
- private static final String ID = "16580";
- private static final String ACCOUNT = "Biue";
+ private static final String ID = "16606";
+ private static final String ACCOUNT = "golden";
private static final String PASSWORD = "123456";
diff --git a/src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java b/src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java
index 358a390..d0e42c6 100644
--- a/src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java
+++ b/src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java
@@ -22,6 +22,7 @@
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
+import java.util.concurrent.ExecutionException;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
@@ -217,7 +218,7 @@
*/
@GetMapping("memberWithdrawCoinConfirm/{id}")
@ControllerEndpoint(operation = "提币记录---确认", exceptionMessage = "划转失败")
- public FebsResponse memberWithdrawCoinConfirm(@NotNull(message = "{required}") @PathVariable Long id) {
+ public FebsResponse memberWithdrawCoinConfirm(@NotNull(message = "{required}") @PathVariable Long id) throws ExecutionException, InterruptedException {
return memberService.memberWithdrawCoinConfirm(id);
}
diff --git a/src/main/java/com/xcong/excoin/modules/member/service/BigDecimalUtil.java b/src/main/java/com/xcong/excoin/modules/member/service/BigDecimalUtil.java
new file mode 100644
index 0000000..d76eceb
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/member/service/BigDecimalUtil.java
@@ -0,0 +1,190 @@
+package com.xcong.excoin.modules.member.service;
+
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+
+/**
+ * 数据计算工具类
+ *
+ * @author cloud cloud
+ * @create 2017/10/11
+ **/
+public class BigDecimalUtil {
+
+
+ /**
+ * 基本单位
+ */
+ private static final BigDecimal UNIT = new BigDecimal(100000000);
+
+ /**
+ * 对double数据进行取精度.
+ * @param value double数据.
+ * @param scale 精度位数(保留的小数位数).
+ * @param roundingMode 精度取值方式.
+ * @return 精度计算后的数据.
+ */
+ public static double round(double value, int scale,
+ int roundingMode) {
+ BigDecimal bd = new BigDecimal(value);
+ bd = bd.setScale(scale, roundingMode);
+ double d = bd.doubleValue();
+ bd = null;
+ return d;
+ }
+
+ /**
+ * 获取四位小数的字符串,小数位不够补充0
+ * @param value
+ * @return X.0000
+ */
+ public static String getFourString(double value){
+ DecimalFormat df = new DecimalFormat("0.0000");
+ return df.format(value);
+ }
+
+
+ /**
+ * double 相加
+ * @param d1
+ * @param d2
+ * @return
+ */
+ public static double sum(Double d1,Double d2){
+ BigDecimal bd1 = new BigDecimal(d1.toString());
+ BigDecimal bd2 = new BigDecimal(d2.toString());
+ return bd1.add(bd2).doubleValue();
+ }
+
+ public static double sum(String a,String b){
+ BigDecimal pa = new BigDecimal(a);
+ BigDecimal pb = new BigDecimal(b);
+ return pa.add(pb).doubleValue();
+ }
+
+
+ /**
+ * double 相减
+ * @param d1
+ * @param d2
+ * @return
+ */
+ public static double sub(double d1,double d2){
+ BigDecimal bd1 = new BigDecimal(Double.toString(d1));
+ BigDecimal bd2 = new BigDecimal(Double.toString(d2));
+ return bd1.subtract(bd2).setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue();
+ }
+
+ /**
+ * double 乘法
+ * @param d1
+ * @param d2
+ * @return
+ */
+ public static double mul(double d1,double d2){
+ BigDecimal bd1 = new BigDecimal(Double.toString(d1));
+ BigDecimal bd2 = new BigDecimal(Double.toString(d2));
+ return bd1.multiply(bd2).setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue();
+ }
+
+
+ /**
+ * double 除法
+ * @param d1
+ * @param d2
+ * @param scale 四舍五入 小数点位数
+ * @return
+ */
+ public static double div(double d1,double d2,int scale){
+ // 当然在此之前,你要判断分母是否为0,
+ // 为0你可以根据实际需求做相应的处理
+
+ BigDecimal bd1 = new BigDecimal(Double.toString(d1));
+ BigDecimal bd2 = new BigDecimal(Double.toString(d2));
+ return bd1.divide
+ (bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
+ }
+
+ /**
+ * 长整数相乘
+ * @param pa
+ * @param pb
+ * @return
+ */
+ public static long longMul(long pa,long pb){
+ BigDecimal b1 = new BigDecimal(pa);
+ BigDecimal b2 = new BigDecimal(pb);
+ return b1.multiply(b2).longValue();
+ }
+
+ public static long longMul(long pa ,Double rate){
+ BigDecimal b1 = new BigDecimal(pa);
+ BigDecimal b2 = new BigDecimal(rate.toString());
+ b2 = b2.setScale(6,BigDecimal.ROUND_HALF_UP);
+ return b1.multiply(b2).longValue();
+ }
+
+ public static long longMul(long pa ,String rate){
+ BigDecimal b1 = new BigDecimal(pa);
+ BigDecimal b2 = new BigDecimal(rate);
+ return b1.multiply(b2).longValue();
+ }
+
+ /**
+ * 长整数相减
+ * @param pa
+ * @param pb
+ * @return
+ */
+ public static long longSub(long pa,long pb){
+ BigDecimal b1 = new BigDecimal(pa);
+ BigDecimal b2 = new BigDecimal(pb);
+ return b1.subtract(b2).longValue();
+ }
+
+ /**
+ * 长整数相加
+ * @param pa
+ * @param pb
+ * @return
+ */
+ public static long longAdd(long pa,long pb){
+ BigDecimal b1 = new BigDecimal(pa);
+ BigDecimal b2 = new BigDecimal(pb);
+ return b1.add(b2).longValue();
+ }
+
+ /**
+ * 入参转化
+ * @param value
+ * @return
+ */
+ public static long inputConvert(Double value){
+ BigDecimal input = new BigDecimal(value.toString());
+ return input.multiply(UNIT).longValue();
+ }
+
+ /**
+ * 输出转化
+ * @param value
+ * @return
+ */
+ public static double outputConvert(long value){
+ BigDecimal output = new BigDecimal(value);
+ return output.divide(UNIT,6, RoundingMode.DOWN).doubleValue();
+ }
+
+ public static void main(String[] args) {
+ long res = longMul(100000000,0.000009999999);
+ System.out.println(res);
+
+ }
+
+ public static long sum(Long d1,String d2){
+ BigDecimal bd1 = new BigDecimal(d1.toString());
+ BigDecimal bd2 = new BigDecimal(d2);
+ return bd1.add(bd2).longValue();
+ }
+}
diff --git a/src/main/java/com/xcong/excoin/modules/member/service/EthService.java b/src/main/java/com/xcong/excoin/modules/member/service/EthService.java
new file mode 100644
index 0000000..115a8db
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/member/service/EthService.java
@@ -0,0 +1,290 @@
+package com.xcong.excoin.modules.member.service;
+
+import org.apache.commons.lang3.StringUtils;
+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.crypto.WalletUtils;
+import org.web3j.protocol.Web3j;
+import org.web3j.protocol.core.DefaultBlockParameterName;
+import org.web3j.protocol.core.Request;
+import org.web3j.protocol.core.methods.request.Transaction;
+import org.web3j.protocol.core.methods.response.*;
+import org.web3j.protocol.http.HttpService;
+import org.web3j.utils.Convert;
+import org.web3j.utils.Convert.Unit;
+import org.web3j.utils.Numeric;
+
+import java.io.File;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.*;
+import java.util.concurrent.ExecutionException;
+
+/**
+ * ETH类,使用Web3j 下面为使用教程
+ * https://kauri.io/article/925d923e12c543da9a0a3e617be963b4/manage-an-ethereum-account-with-java-and-web3js
+ *
+ * @author Administrator
+ *
+ */
+
+public class EthService {
+
+ private static String ethWalletPath = "/home/javaweb/webresource/eth";
+
+
+ public static final String TOTAL_ADDRESS = "0x3d83A28B6C2d599d2B6D272c5DBcDC9c976d344F";
+ public static final String TOTAL_PRIVATE_KEY = "4a1ce332133d8917360c5f3b194f703a0cf5b86c4eea319b1cd01197e68dad27";
+ // private static String ethWalletPath="E://";
+ private Web3j web3j;
+ // private Admin admin;
+ // private Parity parity;
+ /**
+ * 服务器地址
+ */
+ //private static final String ETH_UTL = "https://mainnet.infura.io/v3/882c66ebcfc141abbea22b948fa44321";
+ private static final String ETH_UTL = "http://120.55.86.146:8545";
+
+ public EthService() {
+ try {
+ HttpService service = new HttpService(ETH_UTL);
+ web3j = Web3j.build(service);
+ // parity = Parity.build(service);
+ // admin = Admin.build(service);
+ } catch (Exception e) {
+ System.out.println("liangjieshibao");
+ // logger.error("==============虚拟币-以太坊链接获取失败!");
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 查询ETH余额
+ *
+ * @param address
+ * @return
+ */
+ public static BigDecimal getEthBlance(String address) {
+ Web3j web3 = Web3j.build(new HttpService(ETH_UTL));
+ EthGetBalance balanceWei;
+ try {
+ balanceWei = web3.ethGetBalance(address, DefaultBlockParameterName.LATEST).send();
+ if (balanceWei.getResult() == null) {
+ return null;
+ }
+ BigDecimal balanceInEther = Convert.fromWei(balanceWei.getBalance().toString(), Unit.ETHER);
+ return balanceInEther;
+ } catch (Exception e) {
+ System.out.println("ETH查询失败:" + address);
+ e.printStackTrace();
+ }
+ return null;
+
+ }
+
+ /**
+ * 创建ETH钱包
+ *
+ * @return
+ */
+ public static Map<String, String> createEth() {
+ Map<String, String> wallet = new HashMap<String, String>();
+ try {
+ String walletPassword = "secr3t";
+ // 文件路径
+ String walletDirectory = ethWalletPath;
+
+ String walletName = WalletUtils.generateNewWalletFile(walletPassword, new File(walletDirectory));
+ System.out.println("wallet location: " + walletDirectory + "/" + walletName);
+ Credentials credentials = WalletUtils.loadCredentials(walletPassword, walletDirectory + "/" + walletName);
+ String accountAddress = credentials.getAddress();
+ String privateKey = credentials.getEcKeyPair().getPrivateKey().toString(16);
+ // 钱包地址
+ wallet.put("address", accountAddress);
+ // 钱包私钥
+ wallet.put("privateKey", privateKey);
+ // 产生的钱包文件地址
+ wallet.put("walletLocation", walletDirectory + "/" + walletName);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return wallet;
+ }
+
+ public boolean checkTransferResult(String hash) {
+ // 0xa3e6a0ccc3aac30d866a86ca9c0477dd58b7b061787ba40b16c3844803273816 交易hash
+ Request<?, EthGetTransactionReceipt> ethGetTransactionReceiptRequest = web3j.ethGetTransactionReceipt(hash);
+ EthGetTransactionReceipt send = null;
+ try {
+ send = ethGetTransactionReceiptRequest.send();
+ if(send!=null){
+ TransactionReceipt result = send.getResult();
+ if(result!=null){
+ String status = result.getStatus();
+ System.out.println(status);//0x1
+ if("0x1".equals(status)){
+ return true;
+ }else{
+ return false;
+ }
+ }
+
+ }
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+ return false;
+ }
+
+ public static void main(String[] args) throws IOException, ExecutionException, InterruptedException {
+ HttpService service = new HttpService(ETH_UTL);
+ Web3j build = Web3j.build(service);
+ //Request<?, EthTransaction> ethTransactionRequest = build.ethGetTransactionByHash("0xa3e6a0ccc3aac30d866a86ca9c0477dd58b7b061787ba40b16c3844803273816");
+// Request<?, EthGetTransactionReceipt> ethGetTransactionReceiptRequest = build.ethGetTransactionReceipt("0xa3e6a0ccc3aac30d866a86ca9c0477dd58b7b061787ba40b16c3844803273816");
+// EthGetTransactionReceipt send = ethGetTransactionReceiptRequest.send();
+// String status = send.getResult().getStatus();
+ //System.out.println(status);//0x1
+// EthTransaction send = ethTransactionRequest.send();
+// String input = send.getResult().getInput();
+// System.out.println(input);
+ EthService ethService = new EthService();
+ String s = ethService.tokenSend("0x0cf5f120ea654f6806038daa6b021e83a9ab07c8", "1.0", null);
+ System.out.println(s);
+ }
+
+ /**
+ *
+ * 方法描述:获取代币余额
+ *
+ * @param fromAddress
+ * @param
+ * @param
+ * @return long
+ */
+ public BigDecimal tokenGetBalance(String fromAddress) {
+ try {
+ if(StringUtils.isBlank(fromAddress)){
+ fromAddress = TOTAL_ADDRESS;
+ }
+ // 合约地址
+ String contractAddress = "0xdac17f958d2ee523a2206206994597c13d831ec7";
+ int decimal = 6;
+ String methodName = "balanceOf";
+ List<Type> inputParameters = new ArrayList<>();
+ List<TypeReference<?>> outputParameters = new ArrayList<>();
+ Address address = new Address(fromAddress);
+ inputParameters.add(address);
+ TypeReference<Uint256> typeReference = new TypeReference<Uint256>() {
+ };
+ outputParameters.add(typeReference);
+ Function function = new Function(methodName, inputParameters, outputParameters);
+ String data = FunctionEncoder.encode(function);
+ Transaction transaction = Transaction.createEthCallTransaction(fromAddress, contractAddress, data);
+
+ EthCall ethCall;
+ BigInteger balanceValue = BigInteger.ZERO;
+ try {
+ ethCall = web3j.ethCall(transaction, DefaultBlockParameterName.LATEST).send();
+ List<Type> results = FunctionReturnDecoder.decode(ethCall.getValue(), function.getOutputParameters());
+ balanceValue = (BigInteger) results.get(0).getValue();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ double res = BigDecimalUtil.div(new BigDecimal(balanceValue).doubleValue(), Math.pow(10, decimal), 8);
+ if (res > 0) {
+ return new BigDecimal(res);
+ }
+ } catch (Exception e) {
+ // logger.error("==============以太坊代币链接获取失败!");
+ e.printStackTrace();
+ }
+ return BigDecimal.ZERO;
+ }
+
+ // USDT
+ public String tokenSend( String toAddress, String amount,String gas)
+ throws InterruptedException, ExecutionException {
+ // Web3j web3j = Web3j.build(new
+ // HttpService("https://mainnet.infura.io/v3/882c66ebcfc141abbea22b948fa44321"));
+ String contractAddress = "0xdac17f958d2ee523a2206206994597c13d831ec7";
+ Credentials credentials = Credentials.create(TOTAL_PRIVATE_KEY);
+
+ EthGetTransactionCount ethGetTransactionCount = web3j
+ .ethGetTransactionCount(TOTAL_ADDRESS, DefaultBlockParameterName.LATEST).sendAsync().get();
+
+ BigInteger nonce = ethGetTransactionCount.getTransactionCount();
+
+ Function function = new Function("transfer",
+ Arrays.asList(new Address(toAddress), new Uint256(new BigInteger(amount))),
+ Arrays.asList(new TypeReference<Type>() {
+ }));
+
+ String encodedFunction = FunctionEncoder.encode(function);
+ if(StringUtils.isBlank(gas)){
+ gas = "70";
+ }
+ RawTransaction rawTransaction = RawTransaction.createTransaction(nonce,
+ Convert.toWei(gas, Unit.GWEI).toBigInteger(),// 给矿工开的转账单价 单价越高越快
+ Convert.toWei("60000", Unit.WEI).toBigInteger(), contractAddress, encodedFunction);//里程上限
+ // 10*80000/1000000000=0.0008 手续费
+
+ byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
+ String hexValue = Numeric.toHexString(signedMessage);
+
+ // log.debug("transfer hexValue:" + hexValue);
+
+ EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(hexValue).sendAsync().get();
+
+
+ if (ethSendTransaction.hasError()) {
+ // log.info("transfer error:", ethSendTransaction.getError().getMessage());
+ return "";
+ } else {
+ String transactionHash = ethSendTransaction.getTransactionHash();
+ // log.info("Transfer transactionHash:" + transactionHash);
+ return transactionHash;
+ }
+ }
+
+ public String ethSend(String privateKey, String fromAddress, String toAddress, String amount)
+ throws InterruptedException, ExecutionException {
+ // Web3j web3j = Web3j.build(new
+ // HttpService("https://mainnet.infura.io/v3/882c66ebcfc141abbea22b948fa44321"));
+
+ Credentials credentials = Credentials.create(privateKey);
+
+ EthGetTransactionCount ethGetTransactionCount = web3j
+ .ethGetTransactionCount(fromAddress, DefaultBlockParameterName.LATEST).sendAsync().get();
+
+ BigInteger nonce = ethGetTransactionCount.getTransactionCount();
+ BigInteger value = Convert.toWei(amount, Unit.ETHER).toBigInteger();
+ RawTransaction rawTransaction = RawTransaction.createEtherTransaction(nonce,
+ Convert.toWei("50", Unit.GWEI).toBigInteger(),
+ Convert.toWei("60000", Unit.WEI).toBigInteger(), toAddress, value);
+ byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
+ String hexValue = Numeric.toHexString(signedMessage);
+
+ EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(hexValue).sendAsync().get();
+ if (ethSendTransaction.hasError()) {
+ // log.info("transfer error:", ethSendTransaction.getError().getMessage());
+ return "";
+ } else {
+ String transactionHash = ethSendTransaction.getTransactionHash();
+ // log.info("Transfer transactionHash:" + transactionHash);
+ return transactionHash;
+ }
+ }
+
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/member/service/IMemberService.java b/src/main/java/com/xcong/excoin/modules/member/service/IMemberService.java
index d2c33b9..4cfc73a 100644
--- a/src/main/java/com/xcong/excoin/modules/member/service/IMemberService.java
+++ b/src/main/java/com/xcong/excoin/modules/member/service/IMemberService.java
@@ -1,6 +1,7 @@
package com.xcong.excoin.modules.member.service;
import java.util.List;
+import java.util.concurrent.ExecutionException;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
@@ -46,7 +47,7 @@
IPage<MemberCoinWithdrawVo> findmemberWithdrawCoinListInPage(MemberCoinWithdrawEntity memberCoinWithdrawEntity, QueryRequest request);
- FebsResponse memberWithdrawCoinConfirm(@NotNull(message = "{required}") Long id);
+ FebsResponse memberWithdrawCoinConfirm(@NotNull(message = "{required}") Long id) throws ExecutionException, InterruptedException;
FebsResponse memberWithdrawCoinCancel(@NotNull(message = "{required}") Long id);
diff --git a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java b/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
index 940b8ca..b7c57c1 100644
--- a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
@@ -29,6 +29,7 @@
import com.xcong.excoin.modules.member.mapper.MemberMapper;
import com.xcong.excoin.modules.member.mapper.MemberQuickBuySaleMapper;
import com.xcong.excoin.modules.member.mapper.MemberWalletCoinMapper;
+import com.xcong.excoin.modules.member.service.EthService;
import com.xcong.excoin.modules.member.service.IMemberService;
import com.xcong.excoin.modules.member.service.RocService;
import com.xcong.excoin.modules.member.vo.MemberAuthenticationVo;
@@ -49,6 +50,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ExecutionException;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
@@ -452,7 +454,7 @@
@Override
@Transactional(rollbackFor = Exception.class)
- public FebsResponse memberWithdrawCoinConfirm(@NotNull(message = "{required}") Long id) {
+ public FebsResponse memberWithdrawCoinConfirm(@NotNull(message = "{required}") Long id) throws ExecutionException, InterruptedException {
MemberCoinWithdrawEntity selectById = memberCoinWithdrawMapper.selectById(id);
Long memberId = selectById.getMemberId();
@@ -531,6 +533,21 @@
if("ROC".equals(symbol)){
// 如果是ROC 则自动转
String transfer = RocService.transfer(amount, address, "ROC");
+ }else if("USDT".equals(symbol) && !"Y".equals(selectById.getIsInside())){
+ EthService ethService = new EthService();
+ // 查询余额是否足够
+ BigDecimal bigDecimal = ethService.tokenGetBalance(EthService.TOTAL_ADDRESS);
+ if(bigDecimal==null ||bigDecimal.compareTo(amount)<0 ){
+ FebsResponse fail = new FebsResponse().fail();
+ fail.message("总钱包余额不足");
+ return fail;
+ }
+ amount = amount.multiply(new BigDecimal("1000000"));
+ String usdtStr = amount.toPlainString();
+ if (usdtStr.contains(".")) {
+ usdtStr = usdtStr.substring(0, usdtStr.lastIndexOf("."));
+ }
+ String s = ethService.tokenSend(address, usdtStr, null);
}
/**
--
Gitblit v1.9.1