Skip to main content
Version: Next

Lambda View

note

Lambda View implementation have recently changed due to a recent protocol update. Lambda Views now utilize the run_view endpoint. For more information refer to this document

Lambda View is a way to retrieve data from a smart contract's storage without incurring fees via a contract's view method.

Recap: Views & Callbacks

As you develop applications on the blockchain, you'll soon realize you not only want to interact with Smart Contracts by updating information but also by reading back pieces of data.

Many Smart Contracts have what's known as view methods, which allow you to specify parameters around what data you'd like to retrieve. They also require you to supply a callback contract whose storage will update as a result of executing the view method.

Limitations to Views & Callbacks

One issue with using views and callbacks is that, just like any operation executed on Tezos, each read has a small fee attached to it. The amount is trivial for occasional reads, but it becomes a burden at higher volumes.

Another drawback is speed: since we're invoking a contract method, we have to wait for confirmation to retrieve the requested data. You may not find this acceptable if the application you're working on requires consistent, faster response times.

run_view endpoint

Fortunately with the recently implemented run_view endpoint, users can now run views without needing to inject operations into the blockchain. This means that no fees will be incurred when running views using this endpoint.

Usage

We have integrated the lambda view feature into the ContractAbstraction class. This integration allows retrieving data from a very similar view to call other entry points of a smart contract with Taquito.

Here's an example of using the Lambda View on a FA1.2 contract.

Taquito dynamically creates a getAllowance, getBalance and getTotalSupply view method that the developer can call as follows:

  • myContract.views.getAllowance(parameters)
  • myContract.views.getBalance(parameters)
  • myContract.view.getTotalSupply(parameters)
note

Parameters must not include the callback parameter

Then we call the read() method. (Note that we have no longer need a lambda contract)

Live Editor
Result

More examples:

Live Editor
Result

Provide detailed feedback