Duration is a delta of time. You can add it to a BlockInfo or Expiration to move that further in the future. Note that an height-based Duration and a time-based Expiration cannot be combined
Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)
Similar to must_pay, but it any payment is optional. Returns an error if a different
denom was sent. Otherwise, returns the amount of
Requires exactly one denom sent, which matches the requested denom. Returns the amount if only one denom and non-zero amount. Errors otherwise.
returns an error if any coins were sent