9.5 KiB
id | title |
---|---|
current-reference | Tezos - Things relating to the current execution context |
import Syntax from '@theme/Syntax';
Tezos.balance
Get the balance for the contract.
function main (const p : unit; const s: tez) : list (operation) * tez is
((nil : list (operation)), Tezos.balance)
Note that
balance
andCurrent.balance
are deprecated.
let main (p,s : unit * tez) = ([] : operation list), Tezos.balance
Note that
balance
andCurrent.balance
are deprecated.
let main = ((p,s) : (unit, tez)) =>
([]: list (operation), Tezos.balance);
Note that
balance
andCurrent.balance
are deprecated.
Tezos.now
Returns the current time as a unix timestamp.
In LIGO, timestamps are type compatible in operations with integers. This lets you set for instance time constraints for your smart contracts like this:
Examples
24 hours from now
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.
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 = 86_400;
const in_24_hrs: timestamp = today - one_day;
Note that
now
is deprecated.
let today: timestamp = Tezos.now
let one_day: int = 86_400
let in_24_hrs: timestamp = today - 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;
Note that
Current.time
is deprecated.
Comparing Timestamps
You can also compare timestamps using the same comparison operators as for numbers
const not_tommorow: bool = (Tezos.now = in_24_hrs)
Note that
now
is deprecated.
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.
Amount
Get the amount of tez provided by the sender to complete this transaction.
function threshold (const p : unit) : int is
if Tezos.amount = 100tz then 42 else 0
Note that
amount
is deprecated.
let threshold (p : unit) : int = if Tezos.amount = 100tz then 42 else 0
Note that
Current.amount
is deprecated.
let threshold = (p : unit) : int =>
if (Tezos.amount == 100tz) { 42; } else { 0; };
Note that
Current.amount
is deprecated.
Sender
Get the address that initiated the current transaction.
function main (const p : unit) : address is Tezos.sender
Note that
sender
is deprecated.
let main (p: unit) : address = Tezos.sender
Note that
Current.sender
is deprecated.
let main = (p : unit) : address => Tezos.sender;
Note that
Current.sender
is deprecated.
Address
Get the address associated with a value of type contract
.
function main (const p : key_hash) : address is block {
const c : contract (unit) = Tezos.implicit_account (p)
} with Tezos.address(c)
Note that
implicit_account
andaddress
are deprecated.
let main (p : key_hash) =
let c : unit contract = Tezos.implicit_account p
in Tezos.address c
Note that
Current.implicit_account
andCurrent.address
are deprecated.
let main = (p : key_hash) : address => {
let c : contract (unit) = Tezos.implicit_account (p);
Tezos.address (c);
};
Note that
Current.implicit_account
andCurrent.address
are deprecated.
Self Address
Get the address of the currently running contract.
function main (const p : unit) : address is Tezos.self_address
Note that
self_address
is deprecated.
let main (p : unit) : address = Tezos.self_address
Note that
Current.self_address
is deprecated.
let main = (p : unit) : address => Tezos.self_address;
Note that
Current.self_address
is deprecated.
Self
Typecast the currently running contract with an entrypoint annotation. If your are using entrypoints: use "%bar" for constructor Bar If you are not using entrypoints: use "%default"
function main (const p : unit) : contract(unit) is block {
const c : contract(unit) = Tezos.self("%Default") ;
} with c
let main (p : unit) : unit contract =
(Tezos.self("%Default") : unit contract)
let main = (p: unit) : contract(unit) =>
(Tezos.self("%Default") : contract(unit));
Implicit Account
Get the default contract associated with an on-chain key-pair. This contract does not execute code, instead it exists to receive tokens on behalf of a key's owner.
function main (const kh: key_hash) : contract (unit) is
Tezos.implicit_account (kh)
Note that
implicit_account
is deprecated.
let main (kh : key_hash) : unit contract = Tezos.implicit_account kh
Note that
Current.implicit_account
is deprecated.
let main = (kh : key_hash): contract (unit) =>
Tezos.implicit_account (kh);
Note that
Current.implicit_account
is deprecated.
Source
Get the originator (address) of the current transaction. That is, if
a chain of transactions led to the current execution get the address
that began the chain. Not to be confused with Tezos.sender
, which
gives the address of the contract or user which directly caused the
current transaction.
⚠️ There are a few caveats you should keep in mind before using
Tezos.source
overTezos.sender
:
Tezos.source
will never be a contract, so if you want to allow contracts (multisigs etc) to operate your contract, you need to useTezos.sender
- https://vessenes.com/tx-origin-and-ethereum-oh-my/ -- in general it is somewhat unsafe to assume that
Tezos.source
understands everything that is going to happen in a transaction. IfTezos.source
transfers to a malicious (or sufficiently attackable) contract, that contract might potentially transfer to yours, withoutTezos.source
's consent. So if you are usingTezos.source
for authentication, you risk being confused. A good historical example of this is bakers paying out delegation rewards. Naive bakers did (and probably still do) just use tezos-client to transfer to whatever KT1 delegates they had, even if those KT1 were malicious scripts.
function main (const p: unit) : address is Tezos.source
Note that
source
is deprecated.
let main (p : unit) : address = Tezos.source
Note that
Current.source
is deprecated.
let main = (p : unit) : address => Tezos.source;
Note that
Current.source
is deprecated.
Failwith
Cause the contract to fail with an error message.
⚠ Using this currently requires in general a type annotation on the
failwith
call.
function main (const p : int; const s : unit) : list (operation) * unit is
block {
if p > 10 then failwith ("Failure.") else skip
}
with ((nil : list (operation)), s)
let main (p,s : int * unit) = if p > 10 then failwith "Failure."
let main = ((p,s) : (int, unit)) =>
if (p > 10) { failwith ("Failure."); };