use of com.hederahashgraph.api.proto.java.ContractFunctionResult in project hedera-services by hashgraph.
the class ContractFnResultAsserts method gasUsed.
public ContractFnResultAsserts gasUsed(long gasUsed) {
registerProvider((spec, o) -> {
ContractFunctionResult result = (ContractFunctionResult) o;
Assertions.assertEquals(gasUsed, result.getGasUsed(), "Wrong amount of Gas was used!");
});
return this;
}
use of com.hederahashgraph.api.proto.java.ContractFunctionResult in project hedera-services by hashgraph.
the class ContractFnResultAsserts method stateChanges.
public ContractFnResultAsserts stateChanges(StateChange... stateChanges) {
registerProvider((spec, o) -> {
ContractFunctionResult result = (ContractFunctionResult) o;
Assertions.assertEquals(UtilStateChange.stateChangesToGrpc(List.of(stateChanges), spec), result.getStateChangesList(), "Wrong state changes!");
});
return this;
}
use of com.hederahashgraph.api.proto.java.ContractFunctionResult in project hedera-services by hashgraph.
the class ContractFnResultAsserts method error.
public ContractFnResultAsserts error(String msg) {
registerProvider((spec, o) -> {
ContractFunctionResult result = (ContractFunctionResult) o;
Assertions.assertEquals(msg, Optional.ofNullable(result.getErrorMessage()).orElse(""), "Wrong contract function error!");
});
return this;
}
use of com.hederahashgraph.api.proto.java.ContractFunctionResult in project hedera-mirror-node by hashgraph.
the class EntityRecordItemListenerTokenTest method tokenTransfer.
void tokenTransfer(List<AssessedCustomFee> assessedCustomFees, List<com.hederahashgraph.api.proto.java.AssessedCustomFee> protoAssessedCustomFees, boolean hasAutoTokenAssociations, boolean isPrecompile) {
// given
createAndAssociateToken(TOKEN_ID, FUNGIBLE_COMMON, SYMBOL, CREATE_TIMESTAMP, ASSOCIATE_TIMESTAMP, PAYER2, false, false, false, INITIAL_SUPPLY);
TokenID tokenId2 = TokenID.newBuilder().setTokenNum(7).build();
String symbol2 = "MIRROR";
createTokenEntity(tokenId2, FUNGIBLE_COMMON, symbol2, 10L, false, false, false);
AccountID accountId = AccountID.newBuilder().setAccountNum(1).build();
// token transfer
Transaction transaction = tokenTransferTransaction();
TokenTransferList transferList1 = TokenTransferList.newBuilder().setToken(TOKEN_ID).addTransfers(AccountAmount.newBuilder().setAccountID(PAYER).setAmount(-1000).build()).addTransfers(AccountAmount.newBuilder().setAccountID(accountId).setAmount(1000).build()).build();
TokenTransferList transferList2 = TokenTransferList.newBuilder().setToken(tokenId2).addTransfers(AccountAmount.newBuilder().setAccountID(PAYER).setAmount(333).build()).addTransfers(AccountAmount.newBuilder().setAccountID(accountId).setAmount(-333).build()).build();
List<TokenTransferList> transferLists = List.of(transferList1, transferList2);
// token treasury associations <TOKEN_ID, PAYER> and <tokenId2, PAYER> are created in the token create
// transaction and they are not auto associations; the two token transfers' <token, recipient> pairs are
// <TOKEN_ID, accountId> and <tokenId2, PAYER>, since <tokenId2, PAYER> already exists, only
// <TOKEN_ID accountId> will be auto associated
var autoTokenAssociation = TokenAssociation.newBuilder().setAccountId(accountId).setTokenId(TOKEN_ID).build();
var autoTokenAccount = new TokenAccount(EntityId.of(TOKEN_ID), EntityId.of(accountId), TRANSFER_TIMESTAMP);
autoTokenAccount.setAssociated(true);
autoTokenAccount.setAutomaticAssociation(true);
autoTokenAccount.setCreatedTimestamp(TRANSFER_TIMESTAMP);
autoTokenAccount.setFreezeStatus(TokenFreezeStatusEnum.NOT_APPLICABLE);
autoTokenAccount.setKycStatus(TokenKycStatusEnum.NOT_APPLICABLE);
List<TokenAccount> expectedAutoAssociatedTokenAccounts = hasAutoTokenAssociations ? List.of(autoTokenAccount) : Collections.emptyList();
// when
AtomicReference<ContractFunctionResult> contractFunctionResultAtomic = new AtomicReference<>();
insertAndParseTransaction(TRANSFER_TIMESTAMP, transaction, builder -> {
builder.addAllTokenTransferLists(transferLists).addAllAssessedCustomFees(protoAssessedCustomFees);
if (hasAutoTokenAssociations) {
builder.addAutomaticTokenAssociations(autoTokenAssociation);
}
if (isPrecompile) {
buildContractFunctionResult(builder.getContractCallResultBuilder());
contractFunctionResultAtomic.set(builder.getContractCallResult());
}
});
// then
assertTokenTransferInRepository(TOKEN_ID, PAYER, TRANSFER_TIMESTAMP, -1000);
assertTokenTransferInRepository(TOKEN_ID, accountId, TRANSFER_TIMESTAMP, 1000);
assertTokenTransferInRepository(tokenId2, PAYER, TRANSFER_TIMESTAMP, 333);
assertTokenTransferInRepository(tokenId2, accountId, TRANSFER_TIMESTAMP, -333);
assertAssessedCustomFeesInDb(assessedCustomFees);
assertThat(tokenAccountRepository.findAll()).filteredOn(TokenAccount::getAutomaticAssociation).containsExactlyInAnyOrderElementsOf(expectedAutoAssociatedTokenAccounts);
if (isPrecompile) {
assertContractResult(TRANSFER_TIMESTAMP, contractFunctionResultAtomic.get());
}
}
use of com.hederahashgraph.api.proto.java.ContractFunctionResult in project hedera-mirror-node by hashgraph.
the class EntityRecordItemListenerContractTest method assertContractCallResult.
private void assertContractCallResult(ContractCallTransactionBody transactionBody, TransactionRecord record) {
long consensusTimestamp = DomainUtils.timestampInNanosMax(record.getConsensusTimestamp());
ContractFunctionResult result = record.getContractCallResult();
// get the corresponding entity id from the local cache, fall back to parseContractId if not found.
ContractID protoContractId = record.getContractCallResult().getContractID();
EntityId contractId = contractIds.getOrDefault(protoContractId, parseContractId(protoContractId));
ObjectAssert<ContractResult> contractResult = assertThat(contractResultRepository.findAll()).filteredOn(c -> c.getConsensusTimestamp().equals(consensusTimestamp)).hasSize(1).first().returns(transactionBody.getAmount(), ContractResult::getAmount).returns(contractId, ContractResult::getContractId).returns(consensusTimestamp, ContractResult::getConsensusTimestamp).returns(toBytes(transactionBody.getFunctionParameters()), ContractResult::getFunctionParameters).returns(transactionBody.getGas(), ContractResult::getGasLimit);
assertContractResult(consensusTimestamp, result, result.getLogInfoList(), contractResult, result.getStateChangesList());
}
Aggregations