Icon LinkEstimating Contract Call Cost

The getTransactionCost function provided by the provider allows you to estimate the cost of a specific contract call. The return type, TransactionCost, is an object containing relevant information for the estimation:

export type TransactionCost = {
	minGasPrice: BN;
	gasPrice: BN;
	gasUsed: BN;
	fee: BN;
};

The following example demonstrate how to get the estimated transaction cost for:

Icon Link1. Single contract call transaction:

const cost = await contract.functions
	.return_context_amount()
	.callParams({
	forward: [100, BaseAssetId],
	})
	.getTransactionCost();
 
expect(cost.fee).toBeDefined();
expect(cost.gasPrice).toBeDefined();
expect(cost.gasUsed).toBeDefined();
expect(cost.minGasPrice).toBeDefined();

Icon Link2. Multiple contract calls transaction:

const scope = contract.multiCall([
	contract.functions.return_context_amount().callParams({
	forward: [100, BaseAssetId],
	}),
	contract.functions.return_context_amount().callParams({
	forward: [300, BaseAssetId],
	}),
]);
 
const cost = await scope.getTransactionCost();
 
expect(cost.fee).toBeDefined();
expect(cost.gasPrice).toBeDefined();
expect(cost.gasUsed).toBeDefined();
expect(cost.minGasPrice).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.

Was this page helpful?