# Zoe API

Zoe v0.24.0. Last updated August 25, 2022.

The Zoe framework provides a way to write smart contracts without having to worry about offer safety. To use Zoe, we put things in terms of "offers". An offer proposal is a statement about what you want and what you're willing to offer. It turns out, many smart contracts (apart from gifts and one-way payments) involve an exchange of digital assets that can be put in terms of offer proposals.

Start creating your own contract or build on any of our existing contracts. Explore our pre-built contracts.

The Zoe API supports the following objects:

Object Description
Zoe Service Deploys and works with smart contracts.
UserSeat Used outside contracts to access or manipulate offers.
Zoe Contract Facet Accesses a running contract instance.
ZCFSeat Used within contracts to access or manipulate offers.
ZCFMint Used by a contract to issue digital assets.
Price Authority Gives quotes for prices.

The Zoe API provides the following libraries:

Library Description
ZoeHelpers Functions that extract common contract code and patterns into reusable helpers.
Ratio Math Functions that let you create and manipulate Ratios.

The Zoe API introduces and uses the following data types:

Data Type Description
Allocation The Amounts to be paid out to each seat upon exiting an Offer.
AmountKeywordRecord A record in which the property names are Keywords and the values are Amounts.
Handle A Far object without any methods whose only useful property is its unique identity.
Instance A handle to an opaque object that represents a contract instance.
Invitation A non-fungible eright that can be held in Payments or Purses, just like any other eright.
InvitationIssuer An Issuer for Invitations, which grant the right to participate in a contract.
Keyword An ASCII identifier string that must begin with an upper case letter.
MutableQuote Statement from a PriceAuthority as to the current price level at a particular time when multiple calls, replacing the trigger value, are expected.
ParsableNumber Defined as a bigint, number, or string.
PriceQuote Statement from a PriceAuthority as to the current price level at a particular time when only a single calls is expected.
Ratio Pass-by-value record that consists of a numerator Amount and a denominator Amount.
TransferPart Allocation changes for one or two existing ZCFSeats. TransferParts are the individual elements of the transfer array passed into the atomicRearrange() function.