Search in sources :

Example 6 with Tuple2

use of org.fisco.bcos.web3j.tuples.generated.Tuple2 in project web3sdk by FISCO-BCOS.

the class RevertResolver method tryResolveRevertMessage.

/**
 * @param status
 * @param output
 * @return
 */
public static Tuple2<Boolean, String> tryResolveRevertMessage(String status, String output) {
    if (!hasRevertMessage(status, output)) {
        return new Tuple2<>(false, null);
    }
    try {
        // 00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030497373756572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652049737375657220726f6c6500000000000000000000000000000000
        String rawOutput = Numeric.containsHexPrefix(output) ? output.substring(RevertMethodWithHexPrefix.length()) : output.substring(RevertMethod.length());
        List<Type> result = FunctionReturnDecoder.decode(rawOutput, revertFunction.getOutputParameters());
        if (result.get(0) instanceof Utf8String) {
            String message = ((Utf8String) result.get(0)).getValue();
            if (logger.isDebugEnabled()) {
                logger.debug(" ABI: {} , RevertMessage: {}", output, message);
            }
            return new Tuple2<>(true, message);
        }
    } catch (Exception e) {
        logger.warn(" ABI: {}, e: {}", output, e);
    }
    return new Tuple2<>(false, null);
}
Also used : Utf8String(org.fisco.bcos.web3j.abi.datatypes.Utf8String) Type(org.fisco.bcos.web3j.abi.datatypes.Type) Tuple2(org.fisco.bcos.web3j.tuples.generated.Tuple2) Utf8String(org.fisco.bcos.web3j.abi.datatypes.Utf8String)

Example 7 with Tuple2

use of org.fisco.bcos.web3j.tuples.generated.Tuple2 in project web3sdk by FISCO-BCOS.

the class Permission method getInsertInput.

public Tuple2<String, String> getInsertInput(TransactionReceipt transactionReceipt) {
    String data = transactionReceipt.getInput().substring(10);
    final Function function = new Function(FUNC_INSERT, Arrays.<Type>asList(), Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {
    }, new TypeReference<Utf8String>() {
    }));
    List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
    ;
    return new Tuple2<String, String>((String) results.get(0).getValue(), (String) results.get(1).getValue());
}
Also used : Function(org.fisco.bcos.web3j.abi.datatypes.Function) Type(org.fisco.bcos.web3j.abi.datatypes.Type) EncryptType(org.fisco.bcos.web3j.crypto.EncryptType) Tuple2(org.fisco.bcos.web3j.tuples.generated.Tuple2) Utf8String(org.fisco.bcos.web3j.abi.datatypes.Utf8String) TypeReference(org.fisco.bcos.web3j.abi.TypeReference)

Example 8 with Tuple2

use of org.fisco.bcos.web3j.tuples.generated.Tuple2 in project web3sdk by FISCO-BCOS.

the class Permission method getRevokeWriteInput.

public Tuple2<String, String> getRevokeWriteInput(TransactionReceipt transactionReceipt) {
    String data = transactionReceipt.getInput().substring(10);
    final Function function = new Function(FUNC_REVOKEWRITE, Arrays.<Type>asList(), Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {
    }, new TypeReference<Address>() {
    }));
    List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
    ;
    return new Tuple2<String, String>((String) results.get(0).getValue(), (String) results.get(1).getValue());
}
Also used : Function(org.fisco.bcos.web3j.abi.datatypes.Function) Type(org.fisco.bcos.web3j.abi.datatypes.Type) EncryptType(org.fisco.bcos.web3j.crypto.EncryptType) Tuple2(org.fisco.bcos.web3j.tuples.generated.Tuple2) Utf8String(org.fisco.bcos.web3j.abi.datatypes.Utf8String) TypeReference(org.fisco.bcos.web3j.abi.TypeReference)

Example 9 with Tuple2

use of org.fisco.bcos.web3j.tuples.generated.Tuple2 in project web3sdk by FISCO-BCOS.

the class PerformanceDTTest method userTransferTest.

public void userTransferTest(BigInteger count, BigInteger qps, BigInteger deci, BigInteger queryAccountQPS) {
    System.out.println("Start UserTransfer test...");
    System.out.println("===================================================================");
    String dirName = "./.signed_transactions";
    File dir = new File(dirName);
    if (dir.exists()) {
        File[] fileList = dir.listFiles();
        for (File file : fileList) {
            if (!file.delete()) {
                System.out.printf("Can't clean %s%n", dirName);
                System.exit(0);
            }
        }
    } else {
        if (!dir.mkdir()) {
            System.out.printf("Can't create directory %s%n", dirName);
            System.exit(0);
        }
    }
    try {
        System.out.println(dateFormat.format(new Date()) + " Querying account state...");
        List<DagTransferUser> allUser = dagUserMgr.getUserList();
        ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor();
        threadPool.setCorePoolSize(200);
        threadPool.setMaxPoolSize(500);
        threadPool.setQueueCapacity(Math.max(count.intValue(), allUser.size()));
        threadPool.initialize();
        final DagTransfer _dagTransfer = dagTransfer;
        AtomicInteger geted = new AtomicInteger(0);
        RateLimiter queryAccountLimiter = RateLimiter.create(queryAccountQPS.intValue());
        for (int i = 0; i < allUser.size(); ++i) {
            final Integer _i = i;
            queryAccountLimiter.acquire();
            threadPool.execute(new Runnable() {

                @Override
                public void run() {
                    try {
                        Tuple2<BigInteger, BigInteger> result = _dagTransfer.userBalance(allUser.get(_i).getUser()).send();
                        if (result.getValue1().compareTo(new BigInteger("0")) == 0) {
                            allUser.get(_i).setAmount(result.getValue2());
                        } else {
                            System.out.println(" Query failed, user is " + allUser.get(_i).getUser());
                            System.exit(0);
                        }
                        int all = geted.incrementAndGet();
                        if (all >= allUser.size()) {
                            System.out.println(dateFormat.format(new Date()) + " Query account finished");
                        }
                    } catch (Exception e) {
                        System.out.println(" Query failed, user is " + allUser.get(_i).getUser());
                        System.exit(0);
                    }
                }
            });
        }
        while (geted.get() < allUser.size()) {
            Thread.sleep(50);
        }
        System.out.println("");
        AtomicLong signed = new AtomicLong(0);
        int segmentSize = 200000;
        int segmentCount = count.intValue() / segmentSize;
        if (count.intValue() % segmentSize != 0) {
            segmentCount++;
        }
        AtomicLong totalWrited = new AtomicLong(0);
        for (int i = 0; i < segmentCount; ++i) {
            int start = i * segmentSize;
            int end = start + segmentSize;
            if (end > count.intValue()) {
                end = count.intValue();
            }
            String fileName = dirName + "/signed_transactions_" + i;
            Lock fileLock = new ReentrantLock();
            BufferedWriter writer = null;
            AtomicLong writed = new AtomicLong(0);
            final int totalWrite = end - start;
            try {
                writer = new BufferedWriter(new FileWriter(fileName));
                for (int j = start; j < end; ++j) {
                    final int index = j;
                    final BufferedWriter finalWriter = writer;
                    threadPool.execute(new Runnable() {

                        @Override
                        public void run() {
                            while (true) {
                                DagTransferUser from = dagUserMgr.getFrom(index);
                                DagTransferUser to = dagUserMgr.getTo(index);
                                if ((deci.intValue() > 0) && (deci.intValue() >= (index % 10 + 1))) {
                                    to = dagUserMgr.getNext(index);
                                }
                                Random random = new Random();
                                int r = random.nextInt(100) + 1;
                                BigInteger amount = BigInteger.valueOf(r);
                                try {
                                    String signedTransaction = dagTransfer.userTransferSeq(from.getUser(), to.getUser(), amount);
                                    String content = String.format("%s %d %d%n", signedTransaction, index, r);
                                    fileLock.lock();
                                    finalWriter.write(content);
                                    long totalSigned = signed.incrementAndGet();
                                    if (totalSigned % (count.longValue() / 10) == 0) {
                                        System.out.println("Signed transaction: " + String.valueOf(totalSigned * 100 / count.longValue()) + "%");
                                    }
                                    long writedCount = writed.incrementAndGet();
                                    totalWrited.incrementAndGet();
                                    if (writedCount >= totalWrite) {
                                        finalWriter.close();
                                    }
                                    break;
                                } catch (Exception e) {
                                    e.printStackTrace();
                                    continue;
                                } finally {
                                    fileLock.unlock();
                                }
                            }
                        }
                    });
                }
            } catch (Exception e) {
                if (writer != null) {
                    writer.close();
                }
                e.printStackTrace();
                System.exit(0);
            } finally {
                if ((writed.get() >= totalWrite) && (writer != null)) {
                    writer.close();
                    writer = null;
                }
            }
        }
        while (totalWrited.get() < count.intValue()) {
            Thread.sleep(50);
        }
        System.out.print(dateFormat.format(new Date()) + " Prepare transactions finished");
        System.out.println("");
        long sent = 0;
        File[] fileList = dir.listFiles();
        System.out.println(dateFormat.format(new Date()) + " Sending signed transactions...");
        long startTime = System.currentTimeMillis();
        collector.setStartTimestamp(startTime);
        for (int i = 0; i < fileList.length; ++i) {
            BufferedReader reader = null;
            try {
                reader = new BufferedReader(new FileReader(fileList[i]));
                List<String> signedTransactions = new ArrayList<String>();
                List<PerformanceDTCallback> callbacks = new ArrayList<PerformanceDTCallback>();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    String[] fields = line.split(" ");
                    signedTransactions.add(fields[0]);
                    int index = Integer.parseInt(fields[1]);
                    BigInteger amount = new BigInteger(fields[2]);
                    DagTransferUser from = dagUserMgr.getFrom(index);
                    DagTransferUser to = dagUserMgr.getTo(index);
                    if ((deci.intValue() > 0) && (deci.intValue() >= (index % 10 + 1))) {
                        to = dagUserMgr.getNext(index);
                    }
                    PerformanceDTCallback callback = new PerformanceDTCallback();
                    callback.setCallBackType("transfer");
                    callback.setCollector(collector);
                    callback.setDagUserMgr(getDagUserMgr());
                    callback.setFromUser(from);
                    callback.setToUser(to);
                    callback.setAmount(amount);
                    callbacks.add(callback);
                }
                latch = new CountDownLatch(signedTransactions.size());
                RateLimiter limiter = RateLimiter.create(qps.intValue());
                for (int j = 0; j < signedTransactions.size(); ++j) {
                    limiter.acquire();
                    final int index = j;
                    threadPool.execute(new Runnable() {

                        @Override
                        public void run() {
                            while (true) {
                                try {
                                    callbacks.get(index).recordStartTime();
                                    transactionManager.sendTransaction(signedTransactions.get(index), callbacks.get(index));
                                    break;
                                } catch (Exception e) {
                                    logger.error("Send transaction error: ", e);
                                    continue;
                                }
                            }
                            latch.countDown();
                        }
                    });
                }
                latch.await();
                long elapsed = System.currentTimeMillis() - startTime;
                sent += signedTransactions.size();
                double sendSpeed = sent / ((double) elapsed / 1000);
                System.out.println("Already sent: " + sent + "/" + count + " transactions" + ",QPS=" + sendSpeed);
            } catch (Exception e) {
                e.printStackTrace();
                System.exit(0);
            } finally {
                if (reader != null) {
                    reader.close();
                }
            }
        }
        while (!collector.isEnd()) {
            Thread.sleep(2000);
            logger.info(" received: {}, total: {}", collector.getReceived().intValue(), collector.getTotal());
        }
        logger.info("End to send");
        System.out.println(dateFormat.format(new Date()) + " Verifying result...");
        veryTransferData(threadPool, queryAccountQPS);
        System.exit(0);
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(0);
    }
}
Also used : FileWriter(java.io.FileWriter) ArrayList(java.util.ArrayList) BufferedWriter(java.io.BufferedWriter) Random(java.util.Random) FileReader(java.io.FileReader) ReentrantLock(java.util.concurrent.locks.ReentrantLock) CountDownLatch(java.util.concurrent.CountDownLatch) Date(java.util.Date) RateLimiter(com.google.common.util.concurrent.RateLimiter) ReentrantLock(java.util.concurrent.locks.ReentrantLock) Lock(java.util.concurrent.locks.Lock) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) BigInteger(java.math.BigInteger) AtomicLong(java.util.concurrent.atomic.AtomicLong) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Tuple2(org.fisco.bcos.web3j.tuples.generated.Tuple2) BufferedReader(java.io.BufferedReader) BigInteger(java.math.BigInteger) ThreadPoolTaskExecutor(org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor) File(java.io.File)

Example 10 with Tuple2

use of org.fisco.bcos.web3j.tuples.generated.Tuple2 in project web3sdk by FISCO-BCOS.

the class PerformanceDTTest method veryTransferData.

public void veryTransferData(ThreadPoolTaskExecutor threadPool, BigInteger qps) {
    List<DagTransferUser> allUser = dagUserMgr.getUserList();
    Integer total_user = allUser.size();
    AtomicInteger verify_success = new AtomicInteger(0);
    AtomicInteger verify_failed = new AtomicInteger(0);
    allUser = dagUserMgr.getUserList();
    RateLimiter limiter = RateLimiter.create(qps.intValue());
    try {
        final DagTransfer _dagTransfer = dagTransfer;
        final List<DagTransferUser> _allUser = allUser;
        for (int i = 0; i < allUser.size(); ++i) {
            final Integer _i = i;
            threadPool.execute(new Runnable() {

                @Override
                public void run() {
                    try {
                        limiter.acquire();
                        Tuple2<BigInteger, BigInteger> result = _dagTransfer.userBalance(_allUser.get(_i).getUser()).send();
                        String user = _allUser.get(_i).getUser();
                        BigInteger local = _allUser.get(_i).getAmount();
                        BigInteger remote = result.getValue2();
                        if (result.getValue1().compareTo(new BigInteger("0")) != 0) {
                            logger.error(" query failed, user " + user + " ret code " + result.getValue1());
                            verify_failed.incrementAndGet();
                            return;
                        }
                        logger.debug(" user  " + user + " local amount  " + local + " remote amount " + remote);
                        if (local.compareTo(remote) != 0) {
                            verify_failed.incrementAndGet();
                            logger.error(" local amount is not same as remote, user " + user + " local " + local + " remote " + remote);
                        } else {
                            verify_success.incrementAndGet();
                        }
                    } catch (Exception e) {
                        logger.error("getAmount error: ", e);
                    }
                }
            });
        }
        while (verify_success.get() + verify_failed.get() < total_user) {
            Thread.sleep(40);
        }
        System.out.println("validation:");
        System.out.println(" \tuser count is " + total_user);
        System.out.println(" \tverify_success count is " + verify_success);
        System.out.println(" \tverify_failed count is " + verify_failed);
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(0);
    }
}
Also used : RateLimiter(com.google.common.util.concurrent.RateLimiter) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) BigInteger(java.math.BigInteger) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Tuple2(org.fisco.bcos.web3j.tuples.generated.Tuple2) BigInteger(java.math.BigInteger)

Aggregations

Tuple2 (org.fisco.bcos.web3j.tuples.generated.Tuple2)11 Type (org.fisco.bcos.web3j.abi.datatypes.Type)8 TypeReference (org.fisco.bcos.web3j.abi.TypeReference)7 Function (org.fisco.bcos.web3j.abi.datatypes.Function)7 Utf8String (org.fisco.bcos.web3j.abi.datatypes.Utf8String)7 EncryptType (org.fisco.bcos.web3j.crypto.EncryptType)4 ArrayList (java.util.ArrayList)3 RateLimiter (com.google.common.util.concurrent.RateLimiter)2 BigInteger (java.math.BigInteger)2 Map (java.util.Map)2 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)2 JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)1 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 CollectionType (com.fasterxml.jackson.databind.type.CollectionType)1 ChannelHandlerContext (io.netty.channel.ChannelHandlerContext)1 BufferedReader (java.io.BufferedReader)1 BufferedWriter (java.io.BufferedWriter)1 File (java.io.File)1 FileReader (java.io.FileReader)1 FileWriter (java.io.FileWriter)1