Estimating Contract Call Cost
The getTransactionCost
function provided by the Account allows you to estimate the cost of a specific contract call. The return type, TransactionCost
, is an object containing relevant information for the estimation:
ts
See code in contextexport type TransactionCost = {
gasPrice: BN;
gasUsed: BN;
minGas: BN;
minFee: BN;
maxFee: BN;
maxGas: BN;
receipts: TransactionResultReceipt[];
outputVariables: number;
missingContractIds: string[];
estimatedPredicates: TransactionRequestInput[];
requiredQuantities: CoinQuantity[];
addedSignatures: number;
dryRunStatus?: DryRunStatus;
updateMaxFee?: boolean;
};
The following example demonstrates how to get the estimated transaction cost for:
1. Single contract call transaction:
ts
See code in contextconst cost = await contract.functions
.return_context_amount()
.callParams({
forward: [100, provider.getBaseAssetId()],
})
.getTransactionCost();
expect(cost.minFee).toBeDefined();
expect(cost.maxFee).toBeDefined();
expect(cost.gasPrice).toBeDefined();
expect(cost.gasUsed).toBeDefined();
expect(cost.gasPrice).toBeDefined();
2. Multiple contract calls transaction:
ts
See code in contextconst scope = contract.multiCall([
contract.functions.return_context_amount().callParams({
forward: [100, provider.getBaseAssetId()],
}),
contract.functions.return_context_amount().callParams({
forward: [300, provider.getBaseAssetId()],
}),
]);
const cost = await scope.getTransactionCost();
expect(cost.minFee).toBeDefined();
expect(cost.maxFee).toBeDefined();
expect(cost.gasPrice).toBeDefined();
expect(cost.gasUsed).toBeDefined();
expect(cost.gasPrice).toBeDefined();
You can use the transaction cost estimation to set the gas limit for an actual call or display the estimated cost to the user.