ligo/gitlab-pages/docs/advanced/timestamps-addresses.md
2020-03-17 16:05:03 +01:00

5.7 KiB

id title
timestamps-addresses Timestamps, Addresses

import Syntax from '@theme/Syntax';

Timestamps

LIGO features timestamps, as Michelson does, while bakers baking the block (including the transaction in a block) are responsible for providing the given current timestamp for the contract.

Starting time of the current block

You can obtain the starting time of the current block using the built-in Tezos.now. This timestamp does not change during the execution of the contract. Please be aware that it is up to the baker to set the current timestamp value.

const today : timestamp = Tezos.now

Note that now is deprecated.

let today : timestamp = Tezos.now

Note that Current.time is deprecated.

let today : timestamp = Tezos.now;

Note that Current.time is deprecated.

When running code, the LIGO CLI option --predecessor-timestamp allows you to control what Tezos.now returns.

Timestamp Arithmetics

In LIGO, timestamps can be added to integers, allowing you to set time constraints on your smart contracts. Consider the following scenarios.

In 24 hours

const today : timestamp = Tezos.now
const one_day : int = 86_400
const in_24_hrs : timestamp = today + one_day
const some_date : timestamp = ("2000-01-01T10:10:10Z" : timestamp)
const one_day_later : timestamp = some_date + one_day

Note that now is deprecated. Please use Tezos.now.

let today : timestamp = Tezos.now
let one_day : int = 86_400
let in_24_hrs : timestamp = today + one_day
let some_date : timestamp = ("2000-01-01t10:10:10Z" : timestamp)
let one_day_later : timestamp = some_date + one_day

Note that Current.time is deprecated.

let today : timestamp = Tezos.now;
let one_day : int = 86_400;
let in_24_hrs : timestamp = today + one_day;
let some_date : timestamp = ("2000-01-01t10:10:10Z" : timestamp);
let one_day_later : timestamp = some_date + one_day;

Note that Current.time is deprecated.

24 hours Ago

const today : timestamp = Tezos.now
const one_day : int = 86400
const in_24_hrs : timestamp = today - one_day

Note that now is deprecated. Please use Tezos.now.

let today : timestamp = Tezos.now
let one_day : int = 86400
let in_24_hrs : timestamp = today - one_day

Note that Current.time is deprecated.

let today : timestamp = Tezos.now;
let one_day : int = 86400;
let in_24_hrs : timestamp = today - one_day;

Note that Current.time is deprecated.

Comparing Timestamps

You can compare timestamps using the same comparison operators applying to numbers.

const not_tommorow : bool = (Tezos.now = in_24_hrs)

Note that now is deprecated. Please use Tezos.now.

let not_tomorrow : bool = (Tezos.now = in_24_hrs)

Note that Current.time is deprecated.

let not_tomorrow : bool = (Tezos.now == in_24_hrs);

Note that Current.time is deprecated.

Addresses

The address type in LIGO denotes Tezos addresses (tz1, tz2, tz3, KT1, ...). Currently, addresses are created by casting a string to the address type. Beware of failures if the address is invalid. Consider the following examples.

const my_account : address =
  ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" : address)
let my_account : address =
  ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" : address)
let my_account : address =
  ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" : address);

Signatures

The signature type in LIGO datatype is used for Tezos signatures (edsig, spsig). Signatures are created by casting a string. Beware of failure if the signature is invalid.

Here is how you can define a signature:

const my_sig : signature =
  ("edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" :
  signature)
let my_sig : signature =
   ("edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" :
   signature)
let my_sig : signature =
("edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7" :
signature);

Keys

The key type in LIGO is used for Tezos public keys. Do not confuse them with map keys. Keys are made by casting strings. Beware of failure if the key is invalid.

Here is how you can define a key.

const my_key : key =
("edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" : key)
let my_key : key =
  ("edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" : key)
let my_key : key =
  ("edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" : key);