use of com.hederahashgraph.api.proto.java.ResponseCodeEnum.UNKNOWN in project hedera-services by hashgraph.
the class UniqueTokenStateSetup method nftFactory.
private Function<HapiApiSpec, OpProvider> nftFactory() {
final AtomicInteger uniqueTokensCreated = new AtomicInteger(0);
final AtomicInteger nftsMintedForCurrentUniqueToken = new AtomicInteger(0);
final AtomicBoolean done = new AtomicBoolean(false);
final AtomicReference<String> currentUniqueToken = new AtomicReference<>(uniqueTokenNameFn.apply(0));
return spec -> new OpProvider() {
@Override
public List<HapiSpecOperation> suggestedInitializers() {
final var numTreasuries = numTokens.get() / UNIQ_TOKENS_PER_TREASURY + Math.min(1, numTokens.get() % UNIQ_TOKENS_PER_TREASURY);
final List<HapiSpecOperation> inits = new ArrayList<>();
inits.add(inParallel(IntStream.range(0, numTreasuries).mapToObj(i -> cryptoCreate(treasuryNameFn.apply(i)).payingWith(GENESIS).balance(0L).noLogging().key(GENESIS).hasRetryPrecheckFrom(DUPLICATE_TRANSACTION).hasKnownStatusFrom(SUCCESS, UNKNOWN, TRANSACTION_EXPIRED).deferStatusResolution()).toArray(HapiSpecOperation[]::new)));
inits.add(sleepFor(5_000L));
inits.addAll(burstedUniqCreations(UNIQ_TOKENS_BURST_SIZE, numTreasuries, UNIQ_TOKENS_POST_BURST_PAUSE_MS));
return inits;
}
@Override
public Optional<HapiSpecOperation> get() {
if (done.get()) {
return Optional.empty();
}
final var currentToken = currentUniqueToken.get();
if (nftsMintedForCurrentUniqueToken.get() < numNftsPerToken.get()) {
final List<ByteString> allMeta = new ArrayList<>();
final int noMoreThan = numNftsPerToken.get() - nftsMintedForCurrentUniqueToken.get();
for (int i = 0, n = Math.min(noMoreThan, numNftsPerMintOp.get()); i < n; i++) {
final var nextSerialNo = nftsMintedForCurrentUniqueToken.incrementAndGet();
allMeta.add(metadataFor(currentToken, nextSerialNo));
}
final var op = mintToken(currentToken, allMeta).payingWith(GENESIS).rememberingNothing().deferStatusResolution().fee(ONE_HBAR).hasPrecheckFrom(OK, DUPLICATE_TRANSACTION).hasKnownStatusFrom(SUCCESS, UNKNOWN, OK, TRANSACTION_EXPIRED, INVALID_TOKEN_ID).noLogging();
return Optional.of(op);
} else {
nftsMintedForCurrentUniqueToken.set(0);
final var nextUniqTokenNo = uniqueTokensCreated.incrementAndGet();
currentUniqueToken.set(uniqueTokenNameFn.apply(nextUniqTokenNo));
if (nextUniqTokenNo >= numTokens.get()) {
System.out.println("Done creating " + nextUniqTokenNo + " unique tokens w/ approximately " + (numNftsPerToken.get() * nextUniqTokenNo) + " NFTs");
done.set(true);
}
return Optional.empty();
}
}
};
}
use of com.hederahashgraph.api.proto.java.ResponseCodeEnum.UNKNOWN in project hedera-services by hashgraph.
the class CryptoTransferLoadTest method runCryptoTransfers.
protected HapiApiSpec runCryptoTransfers() {
PerfTestLoadSettings settings = new PerfTestLoadSettings();
Supplier<HapiSpecOperation[]> transferBurst = () -> {
String sender = "sender";
String receiver = "receiver";
if (settings.getTotalAccounts() > 2) {
int s = r.nextInt(settings.getTotalAccounts());
int re = 0;
do {
re = r.nextInt(settings.getTotalAccounts());
} while (re == s);
sender = String.format("0.0.%d", TEST_ACCOUNT_STARTS_FROM + s);
receiver = String.format("0.0.%d", TEST_ACCOUNT_STARTS_FROM + re);
}
return new HapiSpecOperation[] { cryptoTransfer(tinyBarsFromTo(sender, receiver, 1L)).noLogging().payingWith(sender).signedBy(GENESIS).suppressStats(true).fee(100_000_000L).hasKnownStatusFrom(SUCCESS, OK, INSUFFICIENT_PAYER_BALANCE, UNKNOWN, TRANSACTION_EXPIRED, INSUFFICIENT_ACCOUNT_BALANCE).hasRetryPrecheckFrom(BUSY, PLATFORM_TRANSACTION_NOT_CREATED).deferStatusResolution() };
};
return defaultHapiSpec("RunCryptoTransfers").given(withOpContext((spec, ignore) -> settings.setFrom(spec.setup().ciPropertiesMap())), logIt(ignore -> settings.toString())).when(cryptoCreate("sender").balance(ignore -> settings.getInitialBalance()).payingWith(GENESIS).withRecharging().key(GENESIS).rechargeWindow(3).logging().hasRetryPrecheckFrom(BUSY, DUPLICATE_TRANSACTION, PLATFORM_TRANSACTION_NOT_CREATED), cryptoCreate("receiver").payingWith(GENESIS).hasRetryPrecheckFrom(BUSY, DUPLICATE_TRANSACTION, PLATFORM_TRANSACTION_NOT_CREATED).key(GENESIS).logging()).then(defaultLoadTest(transferBurst, settings), getAccountBalance("sender").logged());
}
Aggregations