Icon HelpCircleForumIcon Link

⌘K

Icon HelpCircleForumIcon Link
Cost Estimation

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 = {
	requiredQuantities: CoinQuantity[];
	receipts: TransactionResultReceipt[];
	minGasPrice: BN;
	gasPrice: BN;
	minGas: BN;
	maxGas: BN;
	gasUsed: BN;
	minFee: BN;
	maxFee: BN;
	usedFee: BN;
	outputVariables: number;
	missingContractIds: string[];
	estimatedInputs: TransactionRequest['inputs'];
};

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.minFee).toBeDefined();
expect(cost.maxFee).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.minFee).toBeDefined();
expect(cost.maxFee).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.