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);
}
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());
}
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());
}
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);
}
}
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);
}
}
Aggregations