Version: 24.0.0
Estimate Provider
Written by Edmond Lee & Roxane Letourneau
Taquito’s estimate method can be used to estimate fees, gas, and storage associated with an operation.
:::note
Our estimation of fee, gasLimit and storageLimit is based on the RPC call response to simulate_operation plus a small buffer. The context and volume at the time of simulate_operation might differ from preapply/operations and injection/operation, potentially causing errors like fees_too_low, storage_exhausted.operation and gas_exhausted.operation.
:::
The Estimate object
The Estimate object has the following properties:
[burnFeeMutez]: The number of Mutez that will be burned for the storage of the operation. Returns a number.
[gasLimit]: The limit on the amount of gas a given operation can consume. Returns a number.
[minimalFeeMutez]: Minimum fees for the operation according to baker defaults. Returns a number.
[storageLimit]: The limit on the amount of storage an operation can use. Returns a number.
[suggestedFeeMutez:]: The suggested fee for the operation includes minimal fees and a small buffer. Returns a number.
[totalCost]: The sum of minimalFeeMutez + burnFeeMutez. Returns a number.
[usingBaseFeeMutez]: Fees according to your specified base fee will ensure that at least minimum fees are used.
Estimate a transfer operation
The following example shows an estimate of the fees associated with transferring 2ꜩ to tz1h3rQ8wBxFd8L9B3d7Jhaawu6Z568XU3xY address. The configuration of the signer is to use a throw-away private key for demonstration purposes.
const amount = 2; const address = 'tz1h3rQ8wBxFd8L9B3d7Jhaawu6Z568XU3xY'; console.log(`Estimating the transfer of ${amount} ꜩ to ${address} : `); try { const est = await Tezos.estimate.transfer({ to: address, amount: amount }); console.log(`burnFeeMutez : ${est.burnFeeMutez}, gasLimit : ${est.gasLimit}, minimalFeeMutez : ${est.minimalFeeMutez}, storageLimit : ${est.storageLimit}, suggestedFeeMutez : ${est.suggestedFeeMutez}, totalCost : ${est.totalCost}, usingBaseFeeMutez : ${est.usingBaseFeeMutez}`); } catch (error) { console.table(`Error: ${JSON.stringify(error, null, 2)}`); }
const amount = 2; const address = 'tz1h3rQ8wBxFd8L9B3d7Jhaawu6Z568XU3xY'; console.log(`Estimating the transfer of ${amount} ꜩ to ${address} : `); try { const est = await Tezos.estimate.transfer({ to: address, amount: amount }); console.log(`burnFeeMutez : ${est.burnFeeMutez}, gasLimit : ${est.gasLimit}, minimalFeeMutez : ${est.minimalFeeMutez}, storageLimit : ${est.storageLimit}, suggestedFeeMutez : ${est.suggestedFeeMutez}, totalCost : ${est.totalCost}, usingBaseFeeMutez : ${est.usingBaseFeeMutez}`); } catch (error) { console.table(`Error: ${JSON.stringify(error, null, 2)}`); }
Estimate a smart contract call
This example will demonstrate how to estimate the fees related to calling a smart contract.
We have updated the estimate provider to have a contractCall() method.
The contractCall() member method can now be used to estimate contract calls as such:
try { const contract = await Tezos.contract.at('KT1BJadpDyLCACMH7Tt9xtpx4dQZVKw9cDF7'); const op = contract.methodsObject.increment(7); console.log(`Estimating the smart contract call: `); const estimate = await Tezos.estimate.contractCall(op); console.log(`burnFeeMutez : ${estimate.burnFeeMutez}, gasLimit : ${estimate.gasLimit}, minimalFeeMutez : ${estimate.minimalFeeMutez}, storageLimit : ${estimate.storageLimit}, suggestedFeeMutez : ${estimate.suggestedFeeMutez}, totalCost : ${estimate.totalCost}, usingBaseFeeMutez : ${estimate.usingBaseFeeMutez}`); } catch (error) { console.table(`Error: ${JSON.stringify(error, null, 2)}`); }
try { const contract = await Tezos.wallet.at('KT1BJadpDyLCACMH7Tt9xtpx4dQZVKw9cDF7'); const op = contract.methodsObject.increment(7); console.log(`Estimating the smart contract call: `); const estimate = await Tezos.estimate.contractCall(op); console.log(`burnFeeMutez : ${estimate.burnFeeMutez}, gasLimit : ${estimate.gasLimit}, minimalFeeMutez : ${estimate.minimalFeeMutez}, storageLimit : ${estimate.storageLimit}, suggestedFeeMutez : ${estimate.suggestedFeeMutez}, totalCost : ${estimate.totalCost}, usingBaseFeeMutez : ${estimate.usingBaseFeeMutez}`); } catch (error) { console.table(`Error: ${JSON.stringify(error, null, 2)}`); }
Estimate a contract origination
In this example, we will use the estimate method of Taquito on a contract origination. The genericMultisigJSONfile variable contains a Michelson Smart Contract.
console.log(`Estimating the contract origination : `); try { const originationOp = await Tezos.estimate.originate({ code: genericMultisigJSONfile, storage: { stored_counter: 0, threshold: 1, keys: ['edpkuLxx9PQD8fZ45eUzrK3BhfDZJHhBuK4Zi49DcEGANwd2rpX82t'], }, }); console.log(`burnFeeMutez : ${originationOp.burnFeeMutez}, gasLimit : ${originationOp.gasLimit}, minimalFeeMutez : ${originationOp.minimalFeeMutez}, storageLimit : ${originationOp.storageLimit}, suggestedFeeMutez : ${originationOp.suggestedFeeMutez}, totalCost : ${originationOp.totalCost}, usingBaseFeeMutez : ${originationOp.usingBaseFeeMutez}`); } catch (error) { console.log(`Error: ${error}`); }
console.log(`Estimating the contract origination : `); try { const originationOp = await Tezos.estimate.originate({ code: genericMultisigJSONfile, storage: { stored_counter: 0, threshold: 1, keys: ['edpkuLxx9PQD8fZ45eUzrK3BhfDZJHhBuK4Zi49DcEGANwd2rpX82t'], }, }); console.log(`burnFeeMutez : ${originationOp.burnFeeMutez}, gasLimit : ${originationOp.gasLimit}, minimalFeeMutez : ${originationOp.minimalFeeMutez}, storageLimit : ${originationOp.storageLimit}, suggestedFeeMutez : ${originationOp.suggestedFeeMutez}, totalCost : ${originationOp.totalCost}, usingBaseFeeMutez : ${originationOp.usingBaseFeeMutez}`); } catch (error) { console.log(`Error: ${JSON.stringify(error, null, 2)}`); }