Calling a View
The following snippet shows how you can call the view function
getString of the smart contract
res, err := chain.CallView("example1", "getString")
The call returns a collection of key/value pairs
res and an error result
err in the typical Go fashion.
The basic principle of calling a view is similar to sending a request to the smart contract. The essential difference is that calling a view does not constitute an asynchronous transaction; it is just a direct synchronous call to the view entry point exposed by the smart contract.
Therefore, calling a view does not involve any token transfers. Sending a request (either on-ledger or off-ledger) to a view entry point will result in an exception, returning all attached tokens to the sender minus fees (iif any).
Views are used to retrieve information about the smart contract's state, for example, to display on a website. Certain
Solo methods such as
chain.L2Assets call views of
the core smart contracts behind the scenes to retrieve the information
about the chain or a specific smart contract.
Decoding Results Returned by PostRequestSync and CallView
The following is a specific technicality of the Go environment of Solo.
The result returned by the call to an entry point from the Solo environment is an instance of
dict.Dict type, which is essentially a
byte key/value pairs, defined as:
type Dict map[kv.Key]byte
Dict is also an implementation of
kv.KVStore interface. The
kv package and
subpackages provide many useful functions to work with the
Both view and non-view entry points can produce results. In normal operation, retrieving the result of an on-ledger request is impossible since it is an asynchronous operation.
However, in the Solo environment, the call to
PostRequestSync is synchronous, allowing the caller to inspect the
This is a convenient difference between the mocked Solo environment and the distributed ledger used by Wasp nodes.
You can use it to make assertions about the results of a call in the tests.
In the example above,
res is a dictionary where keys and values are binary slices. The
getString view returns the
value under the
"str" key, and the value is a
string encoded as a byte slice. The
codec package provides functions
to encode/decode frequently used data types, including
string. The following is a commonly used pattern to get a value
Dict and decode it:
var value string = codec.MustDecodeString(res["str"])