From 424ad35dcd1fafb51a0ba77523b11e6871f2858c Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Thu, 06 Jun 2024 11:36:25 +0800 Subject: [PATCH] 购买节点 --- src/main/java/cc/mrbird/febs/dapp/chain/EthService.java | 93 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 93 insertions(+), 0 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 1b043f1..609cdfd 100644 --- a/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java +++ b/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java @@ -332,4 +332,97 @@ } } + @Override + public BigInteger totalSupply() { + 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.divide(BigInteger.TEN.pow(decimals())); + } catch (IOException e) { + e.printStackTrace(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return BigInteger.ZERO; + } + + @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(); + + try { + Credentials credentials = Credentials.create(privateKey); + EthGetTransactionCount ethGetTransactionCount = web3j + .ethGetTransactionCount(ownerAddress, DefaultBlockParameterName.LATEST).sendAsync().get(); + BigInteger nonce = ethGetTransactionCount.getTransactionCount(); + Function function = new Function("safeMint", + Arrays.asList(new Address(toAddress)), + Arrays.asList(new TypeReference<Type>() { + })); + + 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); + + 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()) { + return ""; + } else { + return ethSendTransaction.getTransactionHash(); + } + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } } -- Gitblit v1.9.1