use of com.hedera.services.bdd.spec.infrastructure.meta.ActionableContractCall in project hedera-services by hashgraph.
the class RandomContract method get.
@Override
public Optional<HapiSpecOperation> get() {
if (contracts.numPresent() >= ceilingNum) {
return Optional.empty();
}
Optional<String> key = keys.getQualifying();
if (key.isEmpty()) {
return Optional.empty();
}
int n = opNo.getAndIncrement();
final String tentativeContract = my("contract" + n);
final SupportedContract choice = choices[n % choices.length];
HapiContractCreate op = contractCreate(tentativeContract).adminKey(key.get()).bytecode(fileFor(choice)).skipAccountRegistration().hasPrecheckFrom(STANDARD_PERMISSIBLE_PRECHECKS).hasKnownStatusFrom(permissibleOutcomes).uponSuccess(registry -> {
registry.saveContractChoice(tentativeContract, choice);
AtomicInteger tag = new AtomicInteger();
choice.getCallDetails().forEach(detail -> {
ActionableContractCall call = new ActionableContractCall(tentativeContract, detail);
registry.saveActionableCall(tentativeContract + "-" + tag.getAndIncrement(), call);
});
choice.getLocalCallDetails().forEach(detail -> {
ActionableContractCallLocal call = new ActionableContractCallLocal(tentativeContract, detail);
registry.saveActionableLocalCall(tentativeContract + "-" + tag.getAndIncrement(), call);
});
});
return Optional.of(op);
}
use of com.hedera.services.bdd.spec.infrastructure.meta.ActionableContractCall in project hedera-services by hashgraph.
the class HapiContractCall method opBodyDef.
@Override
protected Consumer<TransactionBody.Builder> opBodyDef(HapiApiSpec spec) throws Throwable {
if (details.isPresent()) {
ActionableContractCall actionable = spec.registry().getActionableCall(details.get());
contract = actionable.getContract();
abi = actionable.getDetails().getAbi();
params = actionable.getDetails().getExampleArgs();
} else if (paramsFn.isPresent()) {
params = paramsFn.get().apply(spec);
}
byte[] callData;
if (explicitHexedParams.isPresent()) {
callData = explicitHexedParams.map(Supplier::get).map(CommonUtils::unhex).get();
} else {
final var paramsList = Arrays.asList(params);
final var tupleExist = paramsList.stream().anyMatch(p -> p instanceof Tuple || p instanceof Tuple[]);
if (tupleExist) {
callData = encodeParametersWithTuple(params);
} else {
callData = (!abi.equals(FALLBACK_ABI)) ? CallTransaction.Function.fromJsonInterface(abi).encode(params) : new byte[] {};
}
}
ContractCallTransactionBody opBody = spec.txns().<ContractCallTransactionBody, ContractCallTransactionBody.Builder>body(ContractCallTransactionBody.class, builder -> {
if (!tryAsHexedAddressIfLenMatches) {
builder.setContractID(spec.registry().getContractId(contract));
} else {
builder.setContractID(TxnUtils.asContractId(contract, spec));
}
builder.setFunctionParameters(ByteString.copyFrom(callData));
sentTinyHbars.ifPresent(builder::setAmount);
gas.ifPresent(builder::setGas);
});
return b -> b.setContractCall(opBody);
}
Aggregations