From a0a74747c9e486b700cf866250fbb64cbc73bc14 Mon Sep 17 00:00:00 2001
From: wzy <wzy19931122ai@163.com>
Date: Sat, 27 Aug 2022 16:07:35 +0800
Subject: [PATCH] fix

---
 src/main/java/cc/mrbird/febs/dapp/chain/EthService.java |   68 +++++++++++++++++++++++++++++++++-
 1 files changed, 66 insertions(+), 2 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java b/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java
index d6e8e84..204202e 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java
@@ -4,6 +4,7 @@
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
 import org.bouncycastle.jcajce.provider.digest.SHA3;
 import org.web3j.abi.FunctionEncoder;
 import org.web3j.abi.FunctionReturnDecoder;
@@ -35,6 +36,7 @@
  * @author wzy
  * @date 2022-04-15
  **/
+@Slf4j
 public class EthService implements ContractChainService {
 
     private Web3j web3j;
@@ -362,6 +364,35 @@
     }
 
     @Override
+    public BigInteger totalSupplyNFT() {
+        try {
+            String methodName = "totalSupply";
+            List<Type> inputParameters = new ArrayList<>();
+            List<TypeReference<?>> outputParameters = new ArrayList<>();
+            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(null, contractAddress, data);
+
+            EthCall ethCall;
+            BigInteger totalSupply = BigInteger.ZERO;
+            try {
+                ethCall = web3j.ethCall(transaction, DefaultBlockParameterName.LATEST).send();
+                List<Type> results = FunctionReturnDecoder.decode(ethCall.getValue(), function.getOutputParameters());
+                totalSupply = (BigInteger) results.get(0).getValue();
+                return totalSupply;
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return BigInteger.ZERO;
+    }
+
+    @Override
     public String safeMintNFT(String toAddress) {
         String gas = getGas();
 
@@ -378,15 +409,15 @@
             String encodedFunction = FunctionEncoder.encode(function);
             RawTransaction rawTransaction = RawTransaction.createTransaction(nonce,
                     Convert.toWei(gas, Convert.Unit.GWEI).toBigInteger(),
-                    Convert.toWei("1000000", Convert.Unit.WEI).toBigInteger(), contractAddress, encodedFunction);
+                    Convert.toWei("500000", Convert.Unit.WEI).toBigInteger(), contractAddress, encodedFunction);
 
             byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
             String hexValue = Numeric.toHexString(signedMessage);
 
             CompletableFuture<EthSendTransaction> ethSendTransactionCompletableFuture = web3j.ethSendRawTransaction(hexValue).sendAsync();
             EthSendTransaction ethSendTransaction = ethSendTransactionCompletableFuture.get();
-
             if (ethSendTransaction.hasError()) {
+                log.info("card:{}", JSONObject.toJSONString(ethSendTransaction));
                 return "";
             } else {
                 return ethSendTransaction.getTransactionHash();
@@ -396,4 +427,37 @@
             return "";
         }
     }
+
+    @Override
+    public String ownerOfNft(Integer index) {
+        try {
+            String methodName = "ownerOf";
+            List<Type> inputParameters = new ArrayList<>();
+            List<TypeReference<?>> outputParameters = new ArrayList<>();
+            Uint256 uint256 = new Uint256(index);
+            inputParameters.add(uint256);
+            TypeReference<Address> typeReference = new TypeReference<Address>() {
+            };
+            outputParameters.add(typeReference);
+            Function function = new Function(methodName, inputParameters, outputParameters);
+            String data = FunctionEncoder.encode(function);
+            Transaction transaction = Transaction.createEthCallTransaction(null, contractAddress, data);
+
+            EthCall ethCall;
+            String address = "";
+            try {
+                ethCall = web3j.ethCall(transaction, DefaultBlockParameterName.LATEST).send();
+                List<Type> results = FunctionReturnDecoder.decode(ethCall.getValue(), function.getOutputParameters());
+                address = (String) results.get(0).getValue();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+            return address;
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
 }

--
Gitblit v1.9.1