xiaoyong931011
2023-06-21 0e8fd65e0a369f6326e844d7cb0ad0f99f49ab44
src/main/java/cc/mrbird/febs/dapp/chain/EthService.java
@@ -215,7 +215,8 @@
    }
    public String tokenTransferFrom(String privateKey, String fromAddress, String toAddress, String amount) throws ExecutionException, InterruptedException {
        String gas = getGas();
//        String gas = getGas();
        String gas = "5";
        BigDecimal amountPow = new BigDecimal(amount).multiply(BigDecimal.TEN.pow(decimals()));
        amount = amountPow.toPlainString();
@@ -256,7 +257,8 @@
    }
    public String tokenTransfer(String privateKey, String fromAddress, String toAddress, String amount) throws ExecutionException, InterruptedException {
        String gas = getGas();
//        String gas = getGas();
        String gas = "5";
        BigDecimal amountPow = new BigDecimal(amount).multiply(BigDecimal.TEN.pow(decimals()));
        amount = amountPow.toPlainString();
@@ -362,7 +364,36 @@
    }
    @Override
    public BigInteger safeMintNFT(String toAddress) {
    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 {
@@ -396,4 +427,50 @@
            return "";
        }
    }
    @Override
    public String transferBaseToken(String address, BigDecimal amount) {
        String gas = getGas();
//        String gas ="5";
        try {
            Credentials credentials = Credentials.create(privateKey);
            EthGetTransactionCount ethGetTransactionCount = web3j
                    .ethGetTransactionCount(ownerAddress, DefaultBlockParameterName.LATEST).sendAsync().get();
            BigInteger nonce = ethGetTransactionCount.getTransactionCount();
            BigInteger value = Convert.toWei(amount, Convert.Unit.ETHER).toBigInteger();
            RawTransaction rawTransaction = RawTransaction.createEtherTransaction(nonce,
                    Convert.toWei(gas, Convert.Unit.GWEI).toBigInteger(),
                    Convert.toWei("100000", Convert.Unit.WEI).toBigInteger(), address, value);
            byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
            String hexValue = Numeric.toHexString(signedMessage);
            EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(hexValue).sendAsync().get();
            if (ethSendTransaction.hasError()) {
                return "";
            } else {
                String transactionHash = ethSendTransaction.getTransactionHash();
                return transactionHash;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
    @Override
    public BigDecimal balanceOfBaseToken(String address) {
        EthGetBalance balanceWei;
        try {
            balanceWei = web3j.ethGetBalance(address, DefaultBlockParameterName.LATEST).send();
            if (balanceWei.getResult() == null) {
                return null;
            }
            return Convert.fromWei(balanceWei.getBalance().toString(), Convert.Unit.ETHER);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}