Skip to content
On this page

Records โ€‹

Records in SmartPy are of type sp.TRecord(**kargs) where kargs is a Python dict of SmartPy types indexed by strings.

They generalize the Michelson type

Michelson pair.

Literals โ€‹

Introduce a record of type sp.TRecord(field1 = sp.TNat, field2 = sp.TString)

Example โ€‹

aRecord = sp.record(field1 = 1, field2 = "A string")

Layouts โ€‹

The default layout can be changed by specifying default_record_layoutflag.

A record type, i.e. something of the form sp.TRecord(...), can be used to define a record type with a layout by doing:

t = sp.TRecord(owner = sp.TAddress, operator = sp.TAddress, token_id = sp.TString)
t_with_layout = t.layout(("owner", ("operator", "token_id")))

Like .layout(...) but the geometry used is (f1,ย (f2, ..ย (f_{k-1}, f_k))))), the list of fields is determined automatically and sorted alphabetically.

Adds some fields to the TRecord(...) where fields is a Python (string, type)-dictionary of fields.

Removes some fields from the TRecord(...) where fields is a Python list of fields.

Accessing fields โ€‹

If record is a record and field one of its fields, we can obtain the field's value by writing <record>.<field>.

Example โ€‹

record = sp.record(x = 1, y = 2)
value  = record.x # 1

Furthermore, records can be matched using the following command:

  • sp.match_record(x,ย *fields)
    If x is a SmartPy record (i.e. a value of type sp.TRecord(...)), this returns a Python tuple of selected record fields. The list of fields can be all the record's fields or just some of them. This is typically used as follows:

    fld1, fld2, fld3 = sp.match_record(x, "fld1", "fld2", "fld3" )
  • sp.modify_record(x,ย nameย =ย None)
    A variant of this command allows modifying a record that is held in the contract storage or in a local variable:

    with sp.modify_record(, "data") as data:
        data.x = 12
        data.y += 1

This command tells the SmartPy compiler to open the record, handle its fields independently and recreate the record afterwards in a linear way.
This command is mostly useful when dealing with tickets.

See reference Modify and Tickets templates for examples.