Skip to content

Commit

Permalink
Resolve RedirectPrecompileSuite (#9934)
Browse files Browse the repository at this point in the history
Signed-off-by: Mustafa Uzun <mustafa.uzun@limechain.tech>
  • Loading branch information
mustafauzunn committed Nov 16, 2023
1 parent 087078d commit 172c669
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
*/
public abstract class AbstractRevertibleTokenViewCall extends AbstractHtsCall {
@Nullable
private final Token token;
protected final Token token;

protected AbstractRevertibleTokenViewCall(
@NonNull final SystemContractGasCalculator gasCalculator,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,26 @@
package com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.balanceof;

import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_ACCOUNT_ID;
import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_TOKEN_ID;
import static com.hedera.hapi.node.base.ResponseCodeEnum.SUCCESS;
import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.HederaSystemContract.FullResult.revertResult;
import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.HederaSystemContract.FullResult.successResult;
import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.HtsSystemContract.HTS_PRECOMPILE_ADDRESS;
import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.HtsCall.PricedResult.gasOnly;
import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.accountNumberForEvmReference;
import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.asEvmContractId;
import static com.hedera.node.app.service.contract.impl.utils.SystemContractUtils.contractFunctionResultFailedFor;
import static com.hedera.node.app.service.contract.impl.utils.SystemContractUtils.contractFunctionResultSuccessFor;
import static java.util.Objects.requireNonNull;

import com.esaulpaugh.headlong.abi.Address;
import com.hedera.hapi.node.base.ContractID;
import com.hedera.hapi.node.state.token.Token;
import com.hedera.node.app.service.contract.impl.exec.gas.SystemContractGasCalculator;
import com.hedera.node.app.service.contract.impl.exec.systemcontracts.HederaSystemContract;
import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.AbstractRevertibleTokenViewCall;
import com.hedera.node.app.service.contract.impl.hevm.HederaWorldUpdater;
import com.hedera.node.app.service.contract.impl.utils.SystemContractUtils;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
import java.math.BigInteger;
Expand All @@ -47,6 +56,38 @@ public BalanceOfCall(
this.owner = requireNonNull(owner);
}

@Override
public @NonNull PricedResult execute() {
PricedResult result;
long gasRequirement;
ContractID contractID =
asEvmContractId(org.hyperledger.besu.datatypes.Address.fromHexString(HTS_PRECOMPILE_ADDRESS));

if (token == null) {
result = gasOnly(revertResult(INVALID_TOKEN_ID, gasCalculator.viewGasRequirement()));

gasRequirement = result.fullResult().gasRequirement();
enhancement
.systemOperations()
.externalizeResult(
contractFunctionResultFailedFor(gasRequirement, INVALID_TOKEN_ID.toString(), contractID),
SystemContractUtils.ResultStatus.IS_ERROR,
INVALID_TOKEN_ID);
} else {
result = gasOnly(resultOfViewingToken(token));

gasRequirement = result.fullResult().gasRequirement();
final var output = result.fullResult().result().getOutput();
enhancement
.systemOperations()
.externalizeResult(
contractFunctionResultSuccessFor(gasRequirement, output, contractID),
SystemContractUtils.ResultStatus.IS_SUCCESS,
SUCCESS);
}
return result;
}

/**
* {@inheritDoc}
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ private HapiSpec balanceOf() {
.gasUsed(100L))));
}

@HapiTest
private HapiSpec redirectToInvalidToken() {
return defaultHapiSpec("redirectToInvalidToken")
.given(
Expand Down

0 comments on commit 172c669

Please sign in to comment.